【AI入门】CherryStudio入门3:结合FastMCP创建自己的MCP服务,实现哔哩视频查询
前言
来吧,继续CherryStudio的实践,驾驭这个AI时代的利器😄😄😄
本节终端,创建我们自己的MCP服务,在CherryStudio上配置调用。
MCP测试示例逻辑
建立自己的MCP服务逻辑,按关键字搜索哔哩哔哩的相关视频,在CherryStudio上,运行服务,供使用。
准备
CherryStudio安装配置
请参考前期文档:
【AI入门】Cherry入门1:Cherry Studio的安装及配置-CSDN博客
选看:【AI入门】CherryStudio入门2:配置及使用 MCP-CSDN博客
特别建议了解uv,因为配置的很多地方用到uv,虽然按照教程不了解,也能运行出来,但我们的目地不是模仿,扎实的基础功,才能让我们走的更远更久。。。:
【基础】Python包管理工具uv使用全教程-CSDN博客
开始
理论基础
了解MCP
MCP(Model Context Protocol,模型上下文协议)是由Anthropic公司于2024年11月开源的一项技术协议,旨在为AI大模型提供标准化的外部工具交互框架。MCP 服务器专为LLM交互而设计,具有自然语言理解、LLM 上下文管理和特定功能的功能。其核心架构由三个组件构成:
- MCP主机:运行AI应用程序的环境,整合工具和数据以执行任务;
- MCP客户端:作为中介管理通信,向服务器发起请求并获取功能描述;
- MCP服务器:提供工具(调用API)、资源(结构化数据)和提示(预定义模板)三类核心功能,支持浏览器、文件系统、数据库等外部工具的操作。
技术特点:
- 支持标准输入输出(stdio)、Server-Sent Events(SSE)和Streamable HTTP三种通信机制,适应本地到云端的不同场景;
- 采用JSON格式数据交换,通过NodeJS或Python程序实现轻量级接口;
- 提供开放协议生态。
了解FastMCP
FastMCP 是一个高级 Python 框架,可显著简化构建 MCP 服务器的过程。虽然原始 MCP 协议需要实现服务器设置、协议处理程序、内容类型和错误管理,但 FastMCP 会为您处理所有这些复杂的细节。
FastMCP 的核心是一个基于装饰器的 API,可将常规 Python 函数转换为与 MCP 兼容的工具、资源和提示。
安装
pip方式
可以直接使用 pip安装:
pip install fastmcp
uv方式
官方推荐uv方式,对虚拟环境及包依赖管理好一些。
uv相关技术,如果需要可以参考:【基础】Python包管理工具uv使用全教程-CSDN博客
构建一个虚拟环境(可选)
你可以从完全构建一个新环境开始,创建一个新的文件夹,我这里是E:\00ven\fastmcphome,作为工作目录,在地址栏,输入dos,在打开的dos窗口,输入创建环境命令,环境名称自己取,我这里名为fastmcpv:
uv venv fastmcpv
uv自己会创建环境相关文件,你可以查看到:
执行激活命令(如果你的环境名和我的不一样,用你自己的地址哦),这步可选,因为uv自己会找当前环境,
.\fastmcpv\Scripts\activate
命令界面:
执行后,进入如下界面:
执行安装命令,如果没激活环境,也是一样执行:
uv pip install fastmcp
执行界面如下:
直接安装
如果直接使用下面uv安装命令,也是可以的,uv自己会找安装环境
uv pip install fastmcp
在项目中安装
如果您计划在项目中使用 FastMCP,您可以通过以下方式将其添加为依赖项:
uv add fastmcp
验证成功
要验证 FastMCP 是否已正确安装,您可以运行以下命令:
fastmcp version
执行界面:
编写MCP服务程序
环境准备
运行vsCode(Trae操作类似),打开虚拟环境目录,然后ctr+shit+P,选择当前环境中的Python为编译器,
服务器代码
新建一个文件:myMCPSvr.py,代码如下:
# 导入必要的模块# 用于类型提示(Any 表示任意类型)
from typing import Any# 从 bilibili_api 模块导入 search 和 sync 方法
# search:用于执行搜索操作
# sync:用于将异步函数同步化
from bilibili_api import search, sync# 从 mcp.server.fastmcp 模块导入 FastMCP 类
# FastMCP 是一个 MCP 协议的服务端实现
from mcp.server.fastmcp import FastMCP# 创建 FastMCP 实例,服务名称为 "Bilibili mcp server"
mcp = FastMCP("Bilibili mcp server")# 使用 @mcp.tool() 装饰器注册一个工具函数
# 该工具将在 MCP 客户端请求时被调用
@mcp.tool()
def general_search(keyword: str) -> dict[Any, Any]:"""执行 Bilibili 的搜索并返回结果。参数:keyword (str): 要搜索的关键词返回:dict[Any, Any]: 包含搜索结果的字典数据"""# 使用 sync 函数包装异步的 search.search 方法,使其可以在同步环境中调用data = sync(search.search(keyword))# 返回搜索结果数据return data# 程序入口点
if __name__ == "__main__":# 启动 MCP 服务,使用标准输入输出进行通信(transport='stdio')mcp.run(transport='stdio')
不要害怕,其实,没几行,都是注释😄,重要的部分要看一下。
实例化服务器
实例化服务器,就是上面的FastMCP("Bilibili mcp server") ,示例只用了名字参数,FastMCP
构造函数接受几个参数:
name
:(可选)服务器的可读名称。默认为 “FastMCP”。instructions
:(可选)有关如何与此服务器交互的说明。这些说明可帮助客户端了解服务器的用途和可用功能。lifespan
:(可选)用于服务器启动和关闭逻辑的异步上下文管理器函数。tags
:(可选)用于标记服务器本身的一组字符串。settings
:与其他ServerSettings
配置对应的关键字参数
工具
FastMCP 中的工具将常规 Python 函数转换为LLMs可在对话期间调用的功能。
创建工具就是使用 @mcp.tool()
装饰 Python 函数,示例代码中,函数general_search()就成为,能被调用的工具。
函数经注册后,FastMCP 会自动:
- 使用函数名称 (
add
) 作为工具名称。 - 使用函数的文档字符串 (
添加两个整数...
) 作为工具描述。 - 根据函数的参数和类型注释生成输入架构。
- 处理参数验证和错误报告。
定义 Python 函数的方式决定了工具在LLM客户端中的显示方式和行为方式。
其他
示例用了哔哩哔哩的API库:bilibili_api,使用了其search和异步sync的功能,用于根据keyword参数,查找相关视频,general_search函数的功能,就是返回查找到的视频信息。
安装运行包
使用vs终端安装包:
uv pip install bilibili-api-python
执行界面:
通用,安装requests包:
uv pip install requests
FastMCP run运行服务
fastmcp run
是 FastMCP 提供的核心命令,用于启动一个 MCP 服务器。在dos或powershell中,激活虚拟环境,运行服务:
fastmcp run myMCPSvr.py
执行界面如下:
根据我的测试,如果用CherryStudio链接,fastmacp dev,不需要这个步骤,目前还没发现更具有实际意义的用处,难道只是为了验证是否是正确的mcp服务器,没找到更多资料😭。
fastmacp dev测试代码
FastMCP 提供了内置的调试工具 fastmcp dev
,可实时测试服务器功能,在dos窗口,激活运行环境中,运行测试命令
fastmcp dev myMCPSvr.py
首次运行,会安装包,运行起来会显示运行端口:
在浏览器汇总,根据端口访问服务: http://127.0.0.1:6274
点击“链接”,选择工具,输入参数关键字,进行执行
根据提示信息,可以调整参数,改为“ --directory E:\\00ven\\fastmcphome\\fastmcpv run myMCPSvr.py”,能调用工具,并成功,其实,还是要看整个命令是不是对的,也可以在vsCode终端执行,没有错误返回就差不多了:
uv --directory E:\\00ven\\fastmcphome\\fastmcpv run myMCPSvr.py
在CherryStudio上配置MCP服务
运行CherryStudio,点击“设置”—“MCP服务器”,然后“添加服务器”,
名称:取个好识别的名字
类型:标准输入输出(stdio)
命令:uv
参数:
--directory
E:\00ven\fastmcphome\fastmcpv
run
myMCPSvr.py
命令和参数合起来,就是咱们之前测试的命令,前面测试通过了,才能保证这里正常运行:
uv --directory E:\\00ven\\fastmcphome\\fastmcpv run myMCPSvr.py
配置完服务器,不要忘了点击右上方的启动按钮,绿了才能用。
运行测试
进入助手,设置MCP服务器,选择刚才设置的mybilibili,问个问题,我这里是:搜索MCP服务器构建的相关视频,并生成一个网页。
然后,大模型根据需求,调用mcp,可见,general_search调用成功,大模型根据返回结果,构建了页面:
点击,可以查看mcp执行的具体结果信息:
生成的页面展示:
非常丑,希望你比我幸运,我看了一下页面代码,果然有错误:
这不是我们的重点,就略过了,这也说明,大模型再强,人还是最后一道屏障啊。
结尾
我就想说CherryStudio,真好啊,真好用,哇哈哈,这几天没白学😄😄😄
参考
API 文档获取途径
-
pypi上的文档
-
fastmcp · PyPI
-
-
GitHub 开源仓库
-
FastMCP 的参考实现可能与 MCP 协议官方仓库关联,建议访问 Model Context Protocol 官方 GitHub 查找相关文档。
-
直接搜索
fastmcp
的 GitHub 项目(如yjacquin/fast-mcp
,但部分链接可能失效)。
-
-
代码示例与教程
-
腾讯云开发者社区 提供了 FastMCP 的实战教程,包含服务器搭建、工具注册及客户端交互的完整代码示例。
-
FastAPI-MCP 文档:虽然主要针对 FastAPI 集成,但其实现原理与 FastMCP 类似,可参考 FastAPI-MCP GitHub 中的设计思路。
-
-
MCP 协议官方文档
-
MCP 协议的通用规范(如工具定义、通信协议等)适用于 FastMCP,可查阅 MCP 协议说明文档(需确认链接有效性)。
-