MCP Python SDK
本文档对应 v2,即当前的稳定发布线
第一次接触 v2,或者从 v1 过来?v2 有哪些新变化 是一份五分钟速览,迁移指南 则覆盖了全部破坏性变更。 还在用 v1.x?它的文档在 v1.x 文档。 有哪里不顺手或者看不明白?告诉我们。
Model Context Protocol (MCP) 让应用以标准化的方式为 LLM 提供上下文,把提供上下文这件事和 LLM 交互本身分离开来。
这是它的官方 Python SDK。用它可以:
- 构建 MCP 服务器,向任意 MCP 宿主暴露工具、资源和提示词。
- 构建 MCP 客户端,连接到任意 MCP 服务器。
- 支持所有标准传输方式:stdio、Streamable HTTP 和 SSE。
环境要求
Python 3.10+。
安装
uv add "mcp[cli]"
pip install "mcp[cli]"
[cli] 这个 extra 会带来 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。✨
Inspector 根据你的类型标注生成了那个表单(一个必填的整数字段 a,另一个是 b)。Claude 以及其他所有 MCP 宿主也会这么做。
现在切到 Resources,读取 greeting://World:
Hello, World!
回顾
再看看你没有写的东西:
- 没有 JSON Schema。
a: int, b: int就是模式。 - 没有请求解析,没有序列化,没有校验代码。
- 完全没有协议处理。
你写的是两个带类型标注和文档字符串的 Python 函数。其余的交给 SDK。