在当今 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, sync
from mcp.server.fastmcp import FastMCP
mcp = 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, sync
from mcp.server.fastmcp import FastMCP
mcp = 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-server
uv 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