当前位置: 首页 > backend >正文

【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 上下文管理和特定功能的功能。其核心架构由三个组件构成:

  1. MCP主机:运行AI应用程序的环境,整合工具和数据以执行任务;
  2. MCP客户端:作为中介管理通信,向服务器发起请求并获取功能描述;
  3. 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 文档获取途径

    1. pypi上的文档

      • fastmcp · PyPI

    2. GitHub 开源仓库

      1. FastMCP 的参考实现可能与 MCP 协议官方仓库关联,建议访问 Model Context Protocol 官方 GitHub 查找相关文档。

      2. 直接搜索 fastmcp 的 GitHub 项目(如 yjacquin/fast-mcp,但部分链接可能失效)。

    3. 代码示例与教程

      1. 腾讯云开发者社区 提供了 FastMCP 的实战教程,包含服务器搭建、工具注册及客户端交互的完整代码示例。

      2. FastAPI-MCP 文档:虽然主要针对 FastAPI 集成,但其实现原理与 FastMCP 类似,可参考 FastAPI-MCP GitHub 中的设计思路。

    4. MCP 协议官方文档

      1. MCP 协议的通用规范(如工具定义、通信协议等)适用于 FastMCP,可查阅 MCP 协议说明文档(需确认链接有效性)。

    http://www.xdnf.cn/news/4526.html

    相关文章:

  • 梅特卡夫法则——AI与思维模型【97】
  • 单片机-STM32部分:7、GPIO输入 按键
  • ()初始化 和 { }初始化
  • PostgreSQL中“参数默认值实现伪重载“详解
  • Unable to ping server at localhost:1099解决
  • 【Linux庖丁解牛】—程序地址空间【进程地址空间 | 虚拟地址空间】
  • 每日一题洛谷P1025 [NOIP 2001 提高组] 数的划分c++
  • Python打卡 DAY 18
  • MySQL核心机制:日志系统、锁机制与事务管理的深度剖析
  • 六个仓库合并为一个仓库,保留master和develop分支的bat脚本
  • llama-Factory不宜直接挂接Ollama的大模型
  • 互联网大厂Java求职面试:分布式系统中向量数据库与AI应用的融合探索
  • FastDFS,分布式文件存储系统,介绍+配置+工具类
  • upload-labs靶场通关详解:第一关
  • 远程访问代理+内网穿透:火山引擎边缘网关助力自部署模型公网调用与全链路管控
  • 阿维塔汽车CAN总线数据适配技术解析与免破线数据采集实践
  • 模型中台建设全流程指南
  • [逆向工程]什么是 Process Explorer
  • 智慧系统搭建平台有哪些?2025智慧系统搭建平台推荐?智慧系统搭建平台TOP10全面解析
  • ERP源码?ERP系统是什么?能够解决什么问题?
  • 使用 Python 与 Java 实现接入 AI 大模型的 MCP 协议:原理与实战
  • 「动态规划」线性DP:股票问题合集 / LeetCode 121|122|123|188 (C++)
  • 密码学基石:哈希、对称/非对称加密与HTTPS实践详解
  • Charles 如何高效监控特定域名
  • BGP路由反射器
  • Linux 内核对 ARM 大小核架构的支持
  • B树如何用于磁盘 ,B+树为如何用于数据库
  • 源雀SCRM开源·AI企微客服|RAG知识中枢+自训练闭环
  • 汽车生产DV与PV验证
  • MongoDB培训文档大纲(超详细)