这篇适合谁,读完能做到什么
这篇适合会写 Python、想把自己的工具或数据交给大模型应用调用的读者。读完你应该能装好官方 SDK,写出一个带一个工具和一个资源的 MCP 服务器,用 MCP Inspector 试跑,把它作为 HTTP 服务运行,并用一小段客户端代码调用它。
MCP Python SDK 是什么
MCP(Model Context Protocol,模型上下文协议)是把数据和功能暴露给大模型应用的一套标准协议。MCP Python SDK 是它的 Python 实现[1]。用这个 SDK 可以写两类程序:服务器把工具(tools)、资源(resources)和提示(prompts)暴露给任何 MCP 宿主;客户端则连接任何 MCP 服务器[1]。SDK 支持三种标准传输方式:stdio、Streamable HTTP 和 SSE[1]。
和自己实现协议层相比,SDK 替你处理请求解析、参数校验和协议细节,你主要写的是带类型标注的普通 Python 函数[1]。README 中的第一个示例服务器大约十几行代码。
准备工作
- Python 3.11 或更高版本[1]。
- SDK 以 MIT 许可证发布[1]。
- 安装命令可以用
uv add "mcp[cli]",也可以用pip install "mcp[cli]"[1]。cli扩展会加上mcp命令行工具,其中包括mcp dev、mcp run和mcp install。如果不需要命令行工具,装普通的mcp即可[1]。 - 只想临时执行一条命令、不想建项目,可以用
uv run --with "mcp[cli]" mcp ...,不需要先建项目[1]。
上手步骤
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}!"MCPServer("Demo") 创建服务器对象,名字是 Demo[1]。@mcp.tool() 把 add 函数注册为工具;SDK 直接用参数的类型标注(a: int, b: int)作为输入结构,不需要手写 JSON Schema[1]。@mcp.resource("greeting://{name}") 把 greeting 函数注册为资源,地址是一个 URI 模板,其中的 {name} 由调用方填入[1]。这个例子里开发者不需要写请求解析、校验代码或协议处理[1]。
- 用 MCP Inspector 调试:
uv run mcp dev server.py[1]。在 Inspector 里调用add,把a设为 1、b设为 2,返回值是 3[1]。 - 作为 HTTP 服务运行:
uv run mcp run server.py --transport streamable-http[1]。这是 SDK 为部署准备的传输方式[1]。 - 用客户端调用它。服务器运行时,另写一个文件,内容如下[1]:
import asyncio
from mcp import Client
async def main() -> None:
async with Client("http://localhost:8000/mcp") as client:
result = await client.call_tool("add", {"a": 1, "b": 2})
print(result.structured_content) # {'result': 3}
asyncio.run(main())这里 Client 收到的是一个 URL,所以按 Streamable HTTP 连接[1]。代码中注释所示,打印出的 result.structured_content 是 {'result': 3}[1]。
客户端还能怎么连
Client 的参数决定连接方式:传入 URL 时使用 Streamable HTTP;它也可以启动一个本地服务器作为 stdio 子进程,或者接入自定义的传输方式[1]。客户端的完整用法可以查看官方文档[2]。
常见问题
**mcp dev 和 mcp run 有什么区别?** mcp dev 用来在 MCP Inspector 中打开服务器,方便调试;mcp run 用来按指定的传输方式运行服务器,例子里是 --transport streamable-http[1]。
一定要装 cli 扩展吗? 不一定。cli 扩展只提供 mcp 命令行工具;只写代码、不用这些命令的话,装普通的 mcp 就够了[1]。
示例里的地址是什么? 客户端示例连接的是 http://localhost:8000/mcp[1]。换成你的服务器实际监听的地址即可。
限制
- 本文的代码只取自 SDK 的官方 README,编辑部没有实际运行过这些示例。动手前请以官方文档为准[2]。
- 示例只有一个工具和一个资源。真实的服务需要根据业务设计参数、返回值和错误处理,示例不能直接当作成品。
- SDK 要求 Python 3.11 或更高版本,更低的版本装不上[1]。
下一步
官方文档提供 Get started 指南、「What's new in v2」页面、API 参考和迁移指南[2]。建议先读 Get started 走通第一个服务器,再用 API 参考查具体的装饰器和类的用法[2]。
来源
- 1MCP Python SDK (README)MCP Python SDK (MIT)
- 2MCP Python SDK documentationMCP Python SDK (MIT)
引用本页: 用官方 Python SDK 写一个 MCP 服务器. TellWorld, https://www.tellworld.net/zh/practice/practice-mcp-python-sdk. 更新于 2026-11-14