在当今 AI 飞速发展的时代,大型语言模型 (LLM) 如 Claude
、ChatGPT
等已经在代码生成、内容创作等方面展现出惊人的能力。然而,这些强大的模型存在一个明显的局限性——它们通常与外部系统和工具隔离,无法直接访问或操作用户环境中的资源和工具。
而 Model Context Protocol
(MCP) 的出现,正是为了解决这一问题。
首先你要了解什么是MCP?
Model Context Protocol
(MCP) 是由 Anthropic
公司推出的一个开放协议,它标准化了应用程序如何向大型语言模型 (LLM) 提供上下文和工具的方式。我们可以将 MCP 理解为 AI 应用的"USB-C 接口"——就像 USB-C 为各种设备提供了标准化的连接方式,MCP 为 AI 模型提供了与不同数据源和工具连接的标准化方式。
简单来说,MCP可以做到以下事情:
- 读取和写入本地文件查询数据库执行命令行操作控制浏览器与第三方 API 交互
这极大地扩展了 AI 助手的能力边界,使其不再仅限于对话框内的文本交互。
MCP架构
以上图片来源于 MCP 官方文档
MCP 的架构相对简单,主要包含两个核心组件:
- MCP 服务器 (Server) :提供工具和资源的服务端,可以使用任何编程语言实现,只要能够通过
stdout
/stdin
或 HTTP 通信。MCP 客户端 (Client) :使用 MCP 服务器提供的工具和资源的 AI 应用,如 Claude Desktop
、Cursor
编辑器等。MCP 服务器向客户端提供两种主要能力:
- 工具 (Tools) :可执行的函数,允许 AI 执行特定操作资源 (Resources) :提供给 AI 的上下文信息,如文件内容、数据库结构等
使用Python的FastMCP搭建MCP Server
这里为什么是选择搭建MCP Server而不是MCP Client,一个是MCP Server的适用面更广,可以提供给许许多多的Client调用,还有一个就是MCP Client相比MCP Server的搭建稍微更复杂一点,读者老爷们可以点个赞,下期出MCP Client搭建的教学🫡🫡🫡
首先我们会用到一个py的包管理器,叫做UV,可以通过以下安装
# 这是一个全局安装pip install uv
然后再使用以下命令初始化一个项目目录
uv init mcp-server
得到这样一个项目目录
接着我们需要添加一些依赖
uv add bilibili-api-python "mcp[cli]"
这里的bilibili-api-python
是一个便于我们使用bilibili的api的第三方包,而mcp[cli]
则是mcp
包以及依赖cli
安装完依赖后,这里我们需要在main.py中输入以下这段
from bilibili_api import search, syncfrom mcp.server.fastmcp import FastMCPmcp = FastMCP("Bilibili MCP Server")@mcp.tool()def general_tool(keyword: str) ->dict: """ Search Bilibili API with the given keyword. Args: keyword : Search term to look for on Bilibili. Returns: Dictionary containing the search results from Bilibili. """ return sync(search.search(keyword))if __name__ == '__main__': mcp.run(transport='stdio')
现在我们来逐步解析这段代码
首先是
首先是引入对应的api,以及定义一个FastMCP
,因为是MCP Server嘛,定义这个MCP的名字为Bilibili MCP Server
from bilibili_api import search, syncfrom mcp.server.fastmcp import FastMCPmcp = FastMCP("Bilibili MCP Server")
然后是接下来的核心片段
@mcp.tool()def general_tool(keyword: str) ->dict: """ Search Bilibili API with the given keyword. Args: keyword : Search term to look for on Bilibili. Returns: Dictionary containing the search results from Bilibili. """ return sync(search.search(keyword))
@mcp.tool()
是一个装饰器,表示这是一个mcp
的tool
,其中的注解非常的关键,它类似于一个prompt,告诉大模型这个是tool是用来干什么的,以便大模型能够更高效地检索应该使用的工具
最后就是启动这个MCP Server
if __name__ == '__main__': mcp.run(transport='stdio')
transpost
表示连接的方式,因为我们这里是使用本机,所以是stdio
配置Client
这里我使用的是Vscode的插件Cline,配置MCP Client,这里我是之前配置过了一次
配置参数解析
✅ disabled
:
- 类型:布尔值含义:是否禁用该配置项当前值为
false
,表示该配置是启用状态✅ timeout
:
- 类型:整数(单位通常是秒)含义:等待此命令启动或响应的最大时间,超时后可能会触发错误或重试机制当前值为
60
秒✅ command
:
- 类型:字符串含义:要执行的主命令当前值为
"uv"
,即使用 UV —— Rust 编写的 Python 包管理工具和虚拟环境运行器✅ args
:
- 类型:字符串数组含义:传递给
uv
命令的参数列表这里等价于在终端中运行以下命令:# 这里的路径就是你项目的绝对路径cd D:\workspace\interview\xzc\recording\mcp-serveruv run main.py
具体含义:
--directory <path>
:切换到指定目录后再执行命令run main.py
:使用 UV 来运行 main.py
文件(会自动处理依赖)✅ transportType
:
- 类型:字符串含义:进程间通信方式
"stdio"
表示通过标准输入输出(stdin/stdout)与该子进程通信接着我们Ctrl + s 保存配置文件,左边就会出现一个服务了,这里为绿色表示开启状态,然后点击蓝色的Done,我们就可以开始使用啦
使用之前需要配置一下大模型的厂商和key
比如我询问一下大模型,你能帮我找一些哔哩哔哩上的人气up主吗,出现了以下的内容,这边是因为我把之前的mcp server给暂停掉了,所以出现了无法完成MineCraft UP主搜索任务
现在你可以尽情搭建你想要的MCP Server,都看到这里了,不妨点个赞和关注😋😋😋,下期介绍MCP Server