30分钟用Python写一个MCP Server,Agent工具接入效率提升5倍
上个月我给自己的 Agent 接了5个外部工具——GitHub、Notion、日历、邮件、还有一个内部的运维 API。每个工具一套 REST API,一套鉴权方式,一套数据格式。有的要 OAuth,有的要 API Key,有的返回 JSON,有的返回 XML。我写了五套胶水代码,调了三天,终于跑通了。然后第四天,Notion 改了个 API 版本,其中一套挂了。更让我纠结的是,Twitter 上 YC CEO Garry Tan 公开说了句"MCP sucks",Perplexity 的 CTO 也说"MCP 带来的复杂度远大于它解决的问题"。但另一边,Uber 每周跑着数万次 MCP Agent 调用,Microsoft 把 MCP 塞进了 Win11,阿里云腾讯云百度全都接了。我花了两周认真研究了一圈,今天用一篇文章帮你理清楚。假设市面上有 M 个 AI 应用(Claude、Cursor、你自己的 Agent……),N 个外部工具(GitHub、Slack、数据库、日历……)。没有统一协议之前,每个 AI 应用想接入每个工具,都得写一套定制连接器。总共需要 M × N 套。10 个应用接 10 个工具,就是 100 套胶水代码。这在工程上是灾难。MCP 做的事情,就是在中间加了一层标准协议。AI 应用只需要实现一次 MCP Client,工具那边只需要包装一次 MCP Server。M + N 套实现,搞定全部组合。这跟 USB 的故事一模一样。USB 出现之前,打印机用并口、键盘用 PS/2、鼠标用串口、扫描仪用 SCSI,每个外设都有自己的接口。USB 统一之后?一个口搞定一切。MCP 不是替代 API,而是标准化了 AI 发现和使用 API 的方式。你的工具还是你的工具,API 还是那些 API。MCP 只是规定了一种统一的方式,让 AI 能自动发现"有哪些工具可用"、"每个工具能干什么"、"怎么调用它"、"结果长什么样"。就像 USB 没有替代打印技术本身,只是统一了连接方式。- Host(宿主) ——就是你用的 AI 应用。Claude Desktop、Cursor、你自己写的 Agent,都是 Host。它是用户直接交互的那一层。
- Client(客户端) ——由 Host 内部创建,负责管理跟各个 Server 的连接。一个 Host 可以同时连多个 Client,每个 Client 对接一个 Server。你可以理解为"连接管理器"。
- Server(服务端) ——暴露具体能力的工具端。每个 Server 可以提供三类能力:
- Tools(工具) :可执行的操作,比如"发送邮件""查询数据库"
- Resources(资源) :只读数据,比如"当前用户信息""项目文件列表"
- Prompts(提示模板) :预设的提示词模板,比如"代码审查模板"
- stdio ——本地子进程模式。Host 直接拉起一个 Server 进程,通过标准输入输出通信。适合桌面应用,延迟低,配置简单。Cursor、Claude Desktop 用的就是这种。
- Streamable HTTP ——远端部署模式。2026年3月正式取代了之前的 SSE 方案。Server 部署在远端,通过 HTTP 通信,支持流式响应。兼容现有的负载均衡器、代理和 CDN,适合生产环境。
消息格式统一用 JSON-RPC 2.0 。如果你之前用过 Language Server Protocol(LSP,VS Code 的语言服务协议),会发现 MCP 的设计思路跟它非常像——都是用标准化的 JSON 消息在"能力提供方"和"能力消费方"之间搭桥。分钟动手:用 Python 写你的第一个 MCP Server我们来做个最实用的例子:给 Agent 接一个"查询天气"的工具。用 Python,10 分钟搞定核心代码。frommcp.server.fastmcpimportFastMCPimporthttpx# 创建 MCP Server 实例mcp = FastMCP("weather-server")@mcp.tool()asyncdefget_weather(city: str) ->str:"""查询指定城市的当前天气信息"""asyncwithhttpx.AsyncClient() asclient:# 这里用免费的 wttr.in APIresp = awaitclient.get(f"https://wttr.in/{city}?format=j1" )data = resp.json()current = data["current_condition"][0]return (f"{city} 当前天气:{current['weatherDesc'][0]['value']},"f"温度 {current['temp_C']}°C,"f"体感 {current['FeelsLikeC']}°C,"f"湿度 {current['humidity']}%" )if__name__ == "__main__":mcp.run(transport="stdio")装饰器,一个带类型注解和 docstring 的函数,MCP SDK 自动帮你处理协议层的所有事情——工具注册、参数校验、结果序列化。然后在 Claude Desktop 的配置文件里加上:{"mcpServers": {"weather": {"command": "python","args": ["/path/to/weather_server.py"] } }}重启 Claude Desktop,跟它说"北京今天天气怎么样",它会自动发现这个工具、调用、返回结果。全程你不需要写任何提示词告诉它"你有一个天气工具"——MCP 协议会自动处理工具发现。- 工具描述决定调用质量 。那个 docstring 不是写给人看的,是写给 AI 看的。描述越清晰,AI 越知道什么时候该调用这个工具。写"查询天气"比写"获取数据"好十倍。
- 错误处理必须显式返回 。工具执行失败时,别让异常直接抛出。用 try-catch 包住,返回一条清晰的错误信息。AI 需要理解"失败了"和"为什么失败"才能做出正确的下一步决策。
@mcp.tool()asyncdefget_weather(city: str) ->str:"""查询指定城市的当前天气信息"""try:# ... 正常逻辑excepthttpx.HTTPErrorase:returnf"查询失败:无法连接天气服务({e})"exceptKeyError:returnf"查询失败:未找到城市 {city} 的天气数据" - Server 不要贪多 。一个 Server 挂 3-5 个工具就够了。工具太多会导致上下文膨胀——Claude Code 团队实测发现,工具描述超过上下文窗口的 10% 时,AI 的调用准确率明显下降。他们的解法是渐进式工具发现,token 用量直降 85%。
掌握这个模式之后,你可以快速包装任何 API。一个掘金上的实测数据:工具集成时间从传统方式的 2-3 天/个,降到了 MCP 方式的 2-3 小时/个, 效率提升 5-7 倍 。MCP 从 2024 年底 Anthropic 发布至今,经历了三个阶段:- 2024年末-2025年初:诞生期。 Anthropic 主导,Claude 率先支持,开发者社区开始尝鲜。
- 2025年3月-年底:爆发期。 OpenAI 3月跟进、Google 4月跟进、Microsoft 将 MCP 集成进 Win11。国内阿里云百炼、腾讯云、百度、高德全面接入。GitHub 上 MCP Server 一个月新增三千个。中文互联网的热度到了"顶流"级别。
- 2026年至今:成熟期。 表面上热度降了,但大厂在安静地做实事。几个标志性事件:
Linux Foundation 接管了 MCP 规范的治理,成立了 Agentic AI Foundation(AAIF),100+ 成员单位。这意味着 MCP 不再是 Anthropic 的"私有协议",而是真正的行业标准。2026年3月协议大更新: Auth 认证正式版 落地,企业级权限控制终于有标准可循; Streamable HTTP 正式取代 SSE,MCP 可以在浏览器环境原生运行。生产级实践也在加速。 Uber 搭建了 MCP Gateway + Registry 控制平面,自动暴露数千个内部 Thrift/Protobuf/HTTP 端点,GenAI Gateway 执行 PII 脱敏,每周数万次 Agent 执行全走 MCP。 Amazon 内部建了 MCP 发现基础设施,开源了 agent-sop 项目。 Docker 发布了 MCP Toolkit。 Meta 在 Connect 大会官宣支持。2026年4月的 MCP 开发者峰会上,一个核心共识浮出水面: 规模化部署 MCP,必须要有集中式网关。 包括 AWS、Uber、Docker、Kong 在内的多家企业不约而同走向了同一个架构模式——这通常是一个协议走向成熟的标志。吹完生态,必须正视争议。MCP 远不是银弹,目前的问题很真实。- 性能还不够稳。 ScaleKit 在2026年2月的基准测试显示,MCP 方式的任务完成率是 72%,而直接用 CLI 是 100%。平均耗时是 CLI 的 1.3 倍。28% 的任务因超时和连接不稳定而失败。在对可靠性要求极高的场景里,这个数字不够看。
- 上下文膨胀是真实痛点。 Simon Willison 发现,某主流 AI IDE 的 MCP Server 捆绑了 43 个工具,光工具定义就往上下文里塞了 55000 个 token。这不是 MCP 协议本身的问题,而是使用方式的问题——但它确实是实践中最常遇到的坑。
- 顶级技术人的质疑不能忽视。 YC CEO 说"MCP sucks",Perplexity CTO 说"复杂度远大于它解决的问题,转回 API 和 CLI"。甚至 Anthropic 自家的 Claude Code,核心架构也是 CLI 而非 MCP——CLAUDE.md 自定义指令系统占了大量篇幅,MCP 只是"可选扩展"。
MCP 的方向是对的,但当前阶段不适合所有人、所有场景。具体建议:- 企业多数据源集成 → 先观望,等 Auth 认证和网关模式更成熟。目前认证机制各家实现不一,安全审计难以标准化。
- 个人 AI 助手 / 编程工具 → 可以尝鲜,但 MCP Server 别超过5个。保持工具集精简,避免上下文膨胀。
- 已有成熟 CLI 方案的场景 → 别为了追新而换。CLI 能跑得好好的,没必要套一层 MCP 增加复杂度。"真正在用 AI 编程的人,最后都选了最简单的路径。"
- 想做 MCP 生态的开发者 → 现在入场正是好时机。协议规范稳定了,大厂基础设施在完善,缺的是高质量的垂直领域 Server。做一个好用的 MCP Server,比做第 101 个 Agent 框架有价值得多。
我花了一个下午,把其中3个工具改造成了 MCP Server。代码量从五个文件几百行,缩减到三个文件加起来不到 100 行。更重要的是,当我把这3个 Server 接到 Claude Desktop 之后,我再也不用写任何"你有以下工具可用"的提示词了——MCP 协议自动处理了工具发现和参数传递。剩下2个工具我没改。一个是内部运维 API,调用频率低但可靠性要求极高,CLI 脚本跑得稳稳的,没必要折腾。另一个是 Notion,官方已经有现成的 MCP Server,直接装上就行。这大概就是 MCP 在 2026 年的正确打开方式: 能标准化的标准化,该简单的保持简单,不为追新而追新。2025年的爆发有泡沫,2026年的平静有误解。泡沫散去之后留下的,是一个正在被大厂安静验证的行业标准。就像 USB 刚出来那几年也被吐槽"速度不够快""兼容性有问题",但最终它统一了整个外设生态。MCP 会不会成为 AI 工具生态的 USB?还不能下定论。但如果你是一个认真做 Agent 的开发者,它至少值得你花一个下午去了解和试用。2025年的爆发有泡沫,2026年的平静有误解。真正在用 Agent 的人,正在安静地把 MCP 跑起来。你的 Agent 接了哪些工具?用的 MCP 还是自己写的连接器?踩过什么坑?评论区聊聊,我每条都看。全文约 3500 字。如果觉得有收获,点个「在看」转发给你身边正在折腾 Agent 工具链的朋友,可能帮他们省下不少弯路。