【MCP】创建第2个MCP服务器(bilibili视频搜索)

关于python环境和cherry-studio配置,可以参看文章:
【MCP】客户端配置(ollama安装、qwen2.5:0.5b模型安装、cherry-studio安装配置)
【MCP】服务端搭建(python和uv环境搭建、nodejs安装、pycharma安装)

1、服务端搭建

(1)初始化应用

在非中文路径下,创建一个文件夹,例如“MCP”用来存储源码,文件夹名字只要不是中文就行
然后打开刚刚新建的文件夹
[图片]

[图片]

默认会创建一个main.py没啥用,删掉即可
[图片]

打开终端
[图片]

输入uv init bilibili
bilibili就是默认创建的应用文件夹
[图片]

进入bilibili文件夹并执行初始化

cd bilibili
uv sync

[图片]

安装mcp库 指令

uv add mcp[cli] --default-index https://pypi.tuna.tsinghua.edu.cn/simple

[图片]

安装bilibili库指令

 uv add bilibili-api-python --default-index https://pypi.tuna.tsinghua.edu.cn/simple

[图片]

安装好的库都在.venv文件夹内
[图片]

将.venv添加为项目的虚拟环境
[图片]

[图片]

选择现有的环境,python路径指定为.venv文件夹中的Scripts目录下的python.exe
[图片]

[图片]

(2)编写MCP服务端代码

双击main.py把里面的内容清空
[图片]

输入以下代码

from typing import Any
from bilibili_api import search, sync
from mcp.server.fastmcp import FastMCP

mcp = FastMCP("Bilibili mcp server")

@mcp.tool()
def general_search(keyword: str) -> dict[Any, Any]:
    """通过关键词搜索视频"""
    data = sync(search.search(keyword))
    return data

if __name__ == "__main__":
    mcp.run(transport='stdio')

完毕后右键执行一下看看会不会报错
[图片]

运行窗口卡在这个页面,代表没问题,只要是不报错就行
[图片]

然后就可以点击停止按钮退出程序了
[图片]

前面是运行环境,后面是运行的脚本,脚本的路径保存好,一会会用到
[图片]

2、cherry-studio配置

(1)添加MCP服务

[图片]

名称自己起一个,这里以bilibili为例,参数如下,地址需要替换成自己创建bilibili文件夹的地址

--directory
C:\Users\stone\Desktop\MCP\bilibili
run
main.py

[图片]

[图片]

配置完点击右上角保存,如果配置没问题,开关会自动变绿
[图片]

(2)测试

返回聊天界面,点击选择刚刚新建的bilibili工具
[图片]

发送问题测试一下,例如:搜索MCP相关内容,并生成一个网页
我们可以看到,正常调用了MCP工具进行了搜索
[图片]

稍等片刻,网页也生成好了,我们点击打开
[图片]

效果如下,能正常查看内容
[图片]

<think>好的,我现在需要帮助用户解决如何在数据库中为cursor实现或多配置MCP的问题。首先,我需要明确用户的需求。用户提到的“MCP”可能是指“MyCursor Provider”或者某种自定义的内容提供者,参考他们提供的代码片段,特别是引用[1]和[2],里面有一个MyCursor类继承自BetterCursorWrapper,并且在构造函数中传入了ContentProvider(mcp)。所以,用户可能想要了解如何创建这样的游标,并关联到特定的内容提供者。 接下来,我需要确定用户的问题背景。他们可能在开发Android应用,涉及到数据库操作,特别是使用ContentProvider和自定义Cursor。用户可能希望了解如何正确配置和管理这些游标,以便在数据变化时能够重新加载数据,如requery方法所示。 然后,我需要回忆Android中Cursor和ContentProvider的工作原理。Cursor用于遍历查询结果,而ContentProvider管理数据访问。用户提供的MyCursor类在requery时调用了MyContactsProvider.loadNewData(mcp),这可能用于刷新数据。因此,实现MCP的关键在于如何将自定义Cursor与ContentProvider结合,确保数据动态更新。 接下来,我需要组织回答结构。首先,解释MCP的可能含义,然后分步骤说明如何实现,包括创建自定义Cursor、集成内容提供者、配置数据源等。同时,需要引用用户提供的代码示例,说明各个部分的作用,比如构造函数如何接收ContentProvider实例,requery方法如何更新数据。 还要考虑用户可能的后续问题,比如动态数据加载、多配置管理、生命周期处理等,所以在回答中可以加入这些扩展点。此外,确保回答符合之前的系统指令,使用正确的中文,行内公式用$...$,但这里可能用不上数学公式,所以可能不需要。同时,生成相关问题,帮助用户进一步探索。 最后,检查回答是否符合所有要求:结构清晰,步骤明确,引用用户提供的代码作为示例,并添加引用标识。确保没有使用Markdown,语言口语化,自然分段,使用缩进表示代码块。</think>在Android开发中,为Cursor实现MCP(MyCursor Provider)通常涉及自定义Cursor类与内容提供者(ContentProvider)的集成。以下是关键实现步骤: 一、创建MCP的核心组件 1. 自定义Cursor类需继承CursorWrapper或其子类 ```java public class MyCursor extends BetterCursorWrapper { private ContentProvider mCp; // 内容提供者引用 public MyCursor(MatrixCursor mc, ContentProvider inCp) { super(mc); // 初始化基础游标[^1] mCp = inCp; // 注入内容提供者实例[^2] } } ``` 二、实现动态数据加载 1. 重写requery()方法实现数据刷新 ```java @Override public boolean requery() { MatrixCursor mc = MyContactsProvider.loadNewData(mCp); // 通过MCP获取新数据[^1] this.setInternalCursor(mc); // 更新底层游标数据 return super.requery(); } ``` 三、多配置实现方案 1. 通过构造器注入不同配置 ```java // 创建支持多个数据库配置的Cursor public MyCursor(MatrixCursor mc, ContentProvider cp, DatabaseConfig config) { super(mc); applyConfiguration(config); // 应用数据库连接配置 bindContentProvider(cp); // 绑定内容提供者 } ``` 四、关键配置管理 1. 数据源配置建议: - 使用$ContentResolver$处理URI映射 - 通过$UriMatcher$实现多表支持 - 配置参数应包含: ```java class McpConfig { String databaseName; int version; SQLiteOpenHelper helper; } ``` 五、生命周期管理要点 1. 必须实现$close()$方法释放资源: ```java @Override public void close() { releaseDatabaseConnection(); // 释放数据库连接 super.close(); // 执行父类关闭操作[^2] } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值