2026 年 MCP 协议彻底火了:用 Python 从零搭建你的第一个 AI Agent 工具链
2026 年 MCP 协议彻底火了用 Python 从零搭建你的第一个 AI Agent 工具链如果 2024 年是 RAG 的元年2025 年是 Function Calling 的普及年那 2026 年毫无疑问属于MCPModel Context Protocol模型上下文协议。它正在用一种USB-C 式的统一接口终结大模型接工具时N 个模型 × M 个工具 N×M 套适配代码的混乱局面。这篇文章带你 30 分钟从零跑通一个可用的 MCP 工具链。一、为什么 2026 年所有人都在聊 MCP先说一个让所有接过大模型工具链的开发者都头秃的痛点。假设你的业务里要用到查询数据库、调用企业内部 OA、读取 Confluence 文档、操作 Jira 工单。你为 OpenAI 写了一套 Function Calling 的 JSON Schema为 Claude 又写了一套换成国产的 DeepSeek / Qwen 又得改一遍。每加一个工具每换一个模型适配代码都要重写。这就是经典的N×M 问题。MCP 的出现相当于在大模型和工具之间插了一个中间层协议┌──────────┐ MCP 协议 ┌──────────────┐ │ LLM │ ←──────────────→ │ MCP Server │ ← 数据库 / API / 文件 │ (Client) │ JSON-RPC over │ (工具提供方) │ └──────────┘ stdio 或 HTTP └──────────────┘从此模型侧只需实现一次 MCP Client工具侧只需实现一次 MCP ServerN×M 退化成了 NM。一个写好的 MCP Server可以被 Claude、Cursor、Cline、Continue 等任何支持 MCP 的客户端复用——这便是它被称作AI 界的 USB-C的原因。二、MCP 的三大核心原语MCP Server 能向模型暴露三种能力务必先建立这个心智模型原语作用典型场景Tools工具让模型执行有副作用的操作写数据库、发消息、创建工单Resources资源让模型读取数据读文件、查配置、获取文档Prompts提示词模板预置的可复用提示词标准化的代码审查、总结模板90% 的实战场景你只用Tools就够了。下面我们直接上手。三、30 分钟实战写一个天气查询 待办管理MCP Server3.1 环境准备pipinstallmcp[cli]httpx官方 Python SDK 已经把 JSON-RPC 的通信细节全部封装好了你只需要关心业务逻辑。3.2 编写 Server新建my_mcp_server.pyfrommcp.server.fastmcpimportFastMCPimporthttpximportjsonfrompathlibimportPath mcpFastMCP(my-first-mcp-server)TODO_FILEPath(todos.json)def_load_todos()-list:ifTODO_FILE.exists():returnjson.loads(TODO_FILE.read_text(encodingutf-8))return[]def_save_todos(todos:list):TODO_FILE.write_text(json.dumps(todos,ensure_asciiFalse,indent2),encodingutf-8)# —— Tool 1: 天气查询 ——mcp.tool()defget_weather(city:str)-str:查询指定城市的实时天气。 Args: city: 城市名称如 北京、上海 # 这里用公开接口演示生产环境请换成可靠的天气 APIresphttpx.get(fhttps://wttr.in/{city},params{format:j1},timeout10)dataresp.json()currentdata[current_condition][0]returnf{city}当前天气{current[weatherDesc][0][value]}\f气温{current[temp_C]}°C湿度{current[humidity]}%\f风速{current[windspeedKmph]}km/h# —— Tool 2: 添加待办 ——mcp.tool()defadd_todo(title:str,priority:strnormal)-str:添加一条待办事项。 Args: title: 待办内容 priority: 优先级可选 low / normal / high todos_load_todos()todo{id:len(todos)1,title:title,priority:priority,done:False}todos.append(todo)_save_todos(todos)returnf已添加待办[{priority}]{title}ID:{todo[id]}# —— Tool 3: 查看待办列表 ——mcp.tool()deflist_todos()-str:列出所有未完成的待办事项。todos_load_todos()pending[tfortintodosifnott[done]]ifnotpending:return当前没有未完成的待办摸鱼愉快 lines[f- [{t[priority]}] #{t[id]}{t[title]}fortinpending]return待办列表\n\n.join(lines)if__name____main__:mcp.run()# 默认走 stdio 传输注意三个关键点mcp.tool()装饰器把普通函数变成 MCP 工具函数的 docstring 就是给模型看的工具说明——写清楚参数含义模型才能正确调用。类型注解city: str会自动转成 JSON Schema模型据此决定传什么参数。mcp.run()默认用 stdio 传输适合本地客户端如 Claude Desktop、Cursor通过子进程拉起。3.3 接入客户端方式 AClaude Desktop编辑配置文件macOS:~/Library/Application Support/Claude/claude_desktop_config.json{mcpServers:{my-tools:{command:python,args:[D:/path/to/my_mcp_server.py]}}}重启 Claude Desktop对话框右下角会出现一个 工具图标说明你的 Server 已被识别。方式 BCursorSettings → MCP → Add New MCP Server填入Type: stdio Command: python D:/path/to/my_mcp_server.py Name: my-tools之后在对话里说帮我查一下北京天气再把’写周报’加到待办里优先级 high模型就会自动编排这两个工具的调用。3.4 效果演示用户今天上海天气怎么样顺便把准备下周的晋升答辩加进待办标 high 模型内部自动执行 → 调用 get_weather(city上海) → 调用 add_todo(title准备下周的晋升答辩, priorityhigh) 模型回复 上海现在多云气温 29°C湿度 65%。 已帮你添加待办[high] 准备下周的晋升答辩ID: 3注意——你没有写任何调用编排逻辑。模型读了工具的描述和参数 Schema自己决定了先查天气、再加待办、按什么顺序、传什么参数。这就是 MCP 原生工具调用带来的开发体验跃迁。四、从 Demo 到生产三个容易踩的坑坑 1docstring 是给模型看的不是给人看的很多新手写的 docstring 是# get weather这种。模型理解不了调用就乱套。正确写法是用人话描述这个工具干什么、什么时候该用、参数什么含义。可以用中文模型完全能理解。坑 2工具粒度太粗或太细太粗一个do_everything(action, params)工具模型不知道什么时候该调。太细get_user_id、get_user_name、get_user_email拆成三个模型要连调三次。合理粒度一个工具完成一个用户心智里的完整动作。坑 3stdio 传输的性能瓶颈stdio 是同步的、单连接的。如果你的工具要高频调用或长耗时比如跑一个大模型推理应该切到SSE / Streamable HTTP传输mcp.run(transportsse)# 或 http五、2026 年 MCP 生态现状与选型建议截至 2026 年中MCP 生态已经相当成熟官方生态Smithery、MCP Hub 上已有上千个现成 Server覆盖 GitHub、Slack、Postgres、K8s 等主流场景。客户端支持Claude Desktop、Cursor、Cline、Continue、Zed、VS CodeCopilot Chat均已原生支持。国产模型跟进DeepSeek、Qwen、GLM 等主流国产模型均已在工具调用层面兼容 MCP 接入。选型建议个人开发者 / 小团队 → stdio 本地 Server5 分钟接入 Claude Desktop 或 Cursor。企业级 → 部署 HTTP 传输的 MCP 网关统一鉴权、限流、审计。工具厂商 → 把你的 SaaS 包装成 MCP Server 发布到 Smithery等于一次性接入了所有主流 AI 客户端。六、写在最后MCP 的意义不在于它引入了多复杂的技术——它的通信层就是 JSON-RPC核心就是三个原语。它的真正价值在于统一了标准让工具开发者写一次、到处用让模型厂商接一次、拥有全部工具。如果说 Function Calling 让大模型长出了手那 MCP 就是给这些手定了一套统一的握持协议。在 Agent 时代谁能掌握这套协议的工程化落地谁就能在 AI 应用的下半场拿到门票。下一篇我会写如何用 MCP Claude Code 搭建一个全自动的代码审查 Agent敬请关注。作者夏文强 OpenHarmony 贡献者专注 AI Agent 工程化落地专栏AI Agent 实战笔记觉得有用就点个赞 有疑问欢迎评论区交流

相关新闻

嵌入式CAN通信学习记录(万字解析):从STM32到Linux双机联调实战

嵌入式CAN通信学习记录(万字解析):从STM32到Linux双机联调实战

1. 引言 CAN(Controller Area Network)总线是嵌入式系统中广泛使用的一种高可靠性、多主机的串行通信协议,尤其在汽车电子、工业控制等领域应用广泛。本文旨在记录我学习嵌入式CAN通信的完整过程,涵盖从STM32开发板的环回/静默模…

2026/10/31 17:49:31 阅读更多 →
当“问小白怎么复制表格”成为日常:从格式崩塌到一键归档的技术突围

当“问小白怎么复制表格”成为日常:从格式崩塌到一键归档的技术突围

当“问小白怎么复制表格”成为日常:从格式崩塌到一键归档的技术突围 问小白用户想必都经历过同一个噩梦:让AI生成了一份逻辑清晰的对比表格,对话框内完美渲染,复制到Word或Excel后,却变成了一堆挤在单元格里的竖线符号…

2026/10/23 12:49:41 阅读更多 →
【RAG实战】LlamaIndex 深度集成:常用 Reader 全解析与自定义 Reader

【RAG实战】LlamaIndex 深度集成:常用 Reader 全解析与自定义 Reader

LlamaIndex 深度集成:常用 Reader 全解析与自定义 Reader 实战 文章目录LlamaIndex 深度集成:常用 Reader 全解析与自定义 Reader 实战LlamaIndex 深度集成:常用 Reader 全解析与自定义 Reader 实战一、LlamaIndex Reader 体系架构1.1 BaseRe…

2026/10/25 4:00:48 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/11/14 5:13:29 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/11/14 5:13:29 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/11/14 5:13:29 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/11/13 22:08:41 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/11/14 2:41:37 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/11/14 5:13:29 阅读更多 →

日新闻

周新闻

月新闻