MCP Python SDK
本文档对应 v2,即当前的稳定版本系列
刚接触 v2,或者从 v1 过来?v2 新特性 用五分钟带你了解有哪些变化,迁移指南 则涵盖每一项破坏性变更。还在用 v1.x?它的文档在 v1.x 文档。哪里不顺手或看不明白?告诉我们。
Model Context Protocol (MCP) 让应用程序以标准化的方式为 LLM 提供上下文,把 提供 上下文这一关注点与 LLM 交互本身分离开来。
这是 MCP 的官方 Python SDK。用它可以:
- 构建 MCP 服务器,向任意 MCP 宿主暴露工具、资源和提示词。
- 构建 MCP 客户端,连接到任意 MCP 服务器。
- 支持所有标准传输方式:stdio、Streamable HTTP 和 SSE。
环境要求
需要 Python 3.10+。
安装
uv add "mcp[cli]"
pip install "mcp[cli]"
[cli] 附加项提供 mcp 命令,开发时会用到它。各个依赖的用途见 安装。
示例
创建
创建文件 server.py:
server.py
from mcp.server import MCPServer
mcp = MCPServer("Demo")
@mcp.tool()
def add(a: int, b: int) -> int:
"""Add two numbers."""
return a + b
@mcp.resource("greeting://{name}")
def greeting(name: str) -> str:
"""Greet someone by name."""
return f"Hello, {name}!"
这就是一个完整的 MCP 服务器。
它暴露了一个 工具 add,以及一个模板化的 资源 greeting://{name}。
运行
uv run mcp dev server.py
这会启动你的服务器并打开 MCP Inspector,一个用来摆弄服务器的交互式界面。打开它打印出的 URL。
Note
Inspector 是一个 Node.js 应用,所以 mcp dev 需要 PATH 里有 npx。
试一试
在 Inspector 里进入 Tools,用 a=1、b=2 调用 add。
返回值是 3。✨
那个表单(一个给 a 的必填整数字段,另一个给 b)是 Inspector 根据你的类型提示生成的。Claude 也会这样做,其他所有 MCP 宿主也一样。
现在进入 Resources,读取 greeting://World:
Hello, World!
回顾
回头再看看你 没有 写的东西:
- 没有 JSON Schema。
a: int, b: int就是 模式。 - 没有请求解析,没有序列化,也没有校验代码。
- 完全没有协议处理。
你写了两个带类型提示和文档字符串的 Python 函数。剩下的由 SDK 完成。