模型上下文协议 MCP 是一种开放协议,旨在标准化 AI 应用程序与外部数据源和工具的连接方式。其核心目标在于简化大型语言模型 LLM 与各种上下文和工具的集成,从而解决将多种 LLM 与多种工具相集成的复杂性问题。
之前的文章介绍了一个挺不错的 MCP 应用案例,
用 MCP 让大模型自动批量下载文献,太香了!
但你有没有想过,自己动手打造一个 MCP 服务呢?想象一下,亲手设计一个智能工具,无论是处理数据、调用外部 API,还是生成自定义报告。这种创造力和掌控力的体验,会不会更香呢?MCP 本身是一个通用的协议,设计上是为了跨语言和跨平台的,因此可以使用各种语言来编写服务,比如常用的 Node.js
。但如果不熟悉 Web 开发,也想自己写一写呢?Python 自然是不二之选。只是 MCP 具体的协议挺复杂的,很难快速上手。
不过,现在好了,因为有了 FastMCP,它是一个 Python 软件开发工具包 (SDK),专门设计用于简化构建 MCP 服务的过程。它提供了一个高级且符合 Python 语言习惯的接口,用于定义工具、资源和提示。FastMCP 的核心优势在于其能够帮助开发者更轻松地创建符合 MCP 规范的服务,而无需深入了解底层的协议细节。
但值得注意的是,你看网上代码会涉及两个 FastMCP 包,其中一个是,
https://github.com/jlowin/fastmcp
另一个则是官方的,
https://github.com/modelcontextprotocol/python-sdk
这两个什么关系呢?其实是官方收编了上面第一个包,但官方集成的是 fastmcp 的 v1.0 版本。然而,jlowin 继续开发 fastmcp,还发布了 v2.0 版本,其中包含代理和客户端采样等新功能。
使用的话这两个都可以,先看第一个的安装和导入,
pip install fastmcp
from fastmcp import FastMCP
官方的安装和导入如下所示,
pip install mcp
from mcp.server.fastmcp import FastMCP
本文使用官方 Python SDK 里的 FastMCP 来构建自己的 MCP 服务。
我们先来看一个最简单的例子。
./demo/server.py
from mcp.server.fastmcp import FastMCP
mcp = FastMCP("Demo 🚀")
@mcp.tool()
def add_2_numbers(a: int, b: int) -> int:
"""两个数字相加"""
return a + b
if __name__ ==
"__main__":
mcp.run(transport='stdio')
这个例子展示了如何使用 FastMCP 库来创建一个简单的 MCP 服务器,它提供一个基本的工具(工具名:add_2_numbers
),用于两个数字相加。这是一个非常简单的入门示例,适合理解 MCP 服务器的工作原理和 FastMCP 的基本用法。
- 首先,从
mcp.server.fastmcp
模块中导入了 FastMCP 类。接着,创建了一个 FastMCP 类的实例,命名为 mcp。FastMCP 是服务器的核心类,它负责管理工具、资源和通信。参数「Demo 🚀」是服务器的名称,用于标识这个 MCP 服务器。 - 然后,
@mcp.tool()
是一个装饰器(decorator
),它告诉 FastMCP 将 add_2_numbers
函数注册为一个可供客户端调用的工具。文档字符串("""两个数字相加"""):这是函数的描述,客户端(如 MCP Inspector
)会显示这个描述,帮助用户理解工具的功能。 - 这个工具可以被外部客户端调用,例如通过 MCP 协议发送请求,传入两个整数 a 和 b,服务器会返回它们的和。例如,如果客户端调用
add_2_numbers(3, 5)
,服务器会返回 8。 -
mcp.run(transport='stdio')
启动 MCP 服务器,进入监听状态,等待客户端的连接和请求。transport='stdio'
指定了通信方式为标准输入输出(Standard I/O
)。这意味着服务器通过命令行的标准输入(stdin)和标准输出(stdout)与客户端通信,适合本地开发和测试。如果需要远程通信,可以更改为其他传输方式(如 'sse'
,Server-Sent Events
)。
运行效果:
运行 python ./demo/server.py
,服务器会启动并监听 stdio。任何支持 MCP 协议的客户端(例如 MCP Inspector
或 Claude Desktop
)都可以连接到它,调用 add_2_numbers
工具。
比如,可以通过 MCP Inspector
测试一下这个工具。
% mcp dev ./demo/server.py
Need to install the following packages:
@modelcontextprotocol/inspector@0.8.2
Ok to proceed? (y) y

浏览器中打开 http://127.0.0.1:6274
,可以测试一下上面这个 mcp 服务里提供的 tool。

这个 mcp 过于简单,咱们就不安装来用了。下面我们手撸一个稍微复杂一点的 mcp 服务,并安装上真正使用起来。