本文收录于专栏AI Agent智能体系列—— 20 课从协议原理到生产部署的 MCP 中文实战课程点击订阅可跟踪后续更新。【摘要】你给公司写 AI 助手时同一个查快递工具在 LangChain、Dify、自研框架里要写 N 遍这课用 USB-C 类比讲透 MCP 三角色Host/Client/Server与 JSON-RPC 2.0 协议分层带你逐字段解析 2026-07-28 无状态新规范无握手、无会话 ID、请求自包含给你 6 个报文断言全过的结构拆解你能直接判断自己的项目该不该上 MCP。阶段 1 认识 MCP概念与协议 | 来源【原·00-Introduction 01-CoreConcepts】 | 知识更新至 2026-10当日检索关键字MCP协议、Model Context Protocol、MCP架构、JSON-RPC、MCP Host、MCP Server、AI Agent工具调用、MCP无状态规范概念讲解1.1 MCP 要解决什么问题工具接口的碎片化设想你给公司写一个查快递的 AI 助手。这个助手至少要做一件事调用快递公司的查询接口把单号传进去把物流状态拿回来。在没有 MCP 的世界里这件事的写法取决于你用什么 Agent 框架LangChain 里要写一个tool装饰器函数Dify 里要走它的自定义工具配置页某个自研框架里又得按它自己的 JSON 约定注册。同一个查快递能力在 5 个框架里要写 5 遍。更麻烦的是反过来快递公司那边升级了接口5 个框架里的 5 份代码都得跟着改。这就是 MCPModel Context Protocol模型上下文协议要解决的问题把工具怎么暴露能力和模型怎么调用能力统一成一个开放标准让工具写一遍、处处可用。官方对自己的定位有一个诚实的备注值得记住2026-10 检索自原课 00-IntroductionMCP 自称是开放标准但并没有计划通过 IEEE、IETF、W3C、ISO 这些传统标准组织来标准化。它的标准地位来自生态采用度而非官方机构背书。1.2 USB-C 比喻统一接口的价值理解 MCP 最常用的比喻是 USB-C模型LLM是电脑它提供智能但本身不认识你的快递系统、订单库、文档库。工具和数据源是外设快递接口、数据库、文件系统各有各的插头。MCP 是 USB-C 接口一个统一的插口标准。外设按标准做一个 USB-C 插头MCP Server电脑按标准提供 USB-C 插槽MCP Host/Client插上就能用。USB-C 之前手机充电线有 Micro-USB、Lightning、各种圆口MCP 之前工具接入有 LangChain Tool、OpenAI Function Schema、各家自定义格式。统一之后做一个 MCP Server所有支持 MCP 的宿主Claude Desktop、VS Code、Hermes Desktop、Cherry Studio……都能直接用。1.3 与 function calling / Agent Skills / RAG 的关系初学者最容易混淆的就是 MCP 和这几个概念的关系概念层次与 MCP 的关系Function calling工具调用模型 API 层模型决定要调用什么的机制MCP 是工具从哪里来、怎么执行的协议。两者配合模型出 tool_call宿主把它翻译成 MCP 的tools/callRAG检索增强生成应用模式RAG 检索可以包装成一个 MCP Server提供search_docs工具或docs://资源。MCP 是 RAG 的一种实现通道不是替代品Agent Skills技能包提示工程层Skills 是教模型怎么做某类事的文档与脚本集合MCP 是给模型提供做事的工具。一个教方法一个给武器一句话区分function calling 是模型嘴里的我要调工具MCP 是工具和宿主之间的通用插座Skills 是模型脑子里的操作手册。1.4 架构三角色Host / Client / ServerMCP 采用客户端-服务器模型但比普通 C/S 多一个角色。三个角色的分工依据原课 01-CoreConceptsHost宿主用户直接面对的 AI 应用。它协调模型、管理多个 Client、控制权限和用户确认。比如 Hermes Desktop、VS Code、Claude Desktop。Client客户端宿主为每个 Server 创建一个专属 Client维持与该 Server 的逻辑连接。注意 2026-07-28 规范后这个连接是逻辑关系不再要求持久的网络连接或会话——每个请求自包含详见第 3 课。Server服务端轻量程序暴露具体能力工具、资源、提示模板。可以跑在本地同一台机器的子进程也可以是远程服务。一个完整的调用链路是用户在宿主里提问我的订单 E20261001001 到哪了宿主把问题给模型模型判断需要调search_orders工具宿主通过对应 Client 向订单 Server 发tools/callServer 执行查询返回结构化结果宿主把结果喂回模型模型生成最终回答1.5 协议分层与版本MCP 协议分两层数据层JSON-RPC 2.0 消息 协议原语Tools/Resources/Prompts 等下节展开传输层stdio本地子进程和 Streamable HTTP远程服务。旧的 HTTPSSE 传输已废弃MCP 用日期做版本号YYYY-MM-DD。当前协议版本是2026-07-282026-07-28 发布。这是 MCP 发布以来最大的一次修订核心变化是协议层无状态化——移除了initialize握手和协议级会话 ID。这点在第 3 课详细展开。案例实战目标不写任何 Server 代码先用 Python 标准库手工构造 MCP 报文亲眼看看协议长什么样。理解报文结构后后面用 SDK 写代码时你就知道框架替你做了什么。步骤构造一个tools/call请求2026-07-28 规范无握手请求自包含客户端信息放在_meta里构造server/discover请求/响应取代旧initialize握手的能力发现构造tools/list响应含新增的缓存元数据ttlMs/cacheScope构造tools/call成功响应和错误响应用断言验证所有报文符合 JSON-RPC 2.0 结构完整代码【已实测 2026-10Python 3.10纯标准库】importjson# A. tools/call 请求2026-07-28 起无握手每个请求自包含tools_call_req{jsonrpc:2.0,id:1,method:tools/call,params:{name:search_orders,arguments:{keyword:蓝牙耳机,max_results:10},_meta:{io.modelcontextprotocol/protocolVersion:2026-07-28,io.modelcontextprotocol/clientInfo:{name:my-shop-assistant,version:1.0},io.modelcontextprotocol/clientCapabilities:{},},},}# B. server/discover 请求取代旧 initialize 的能力发现discover_req{jsonrpc:2.0,id:2,method:server/discover,params:{_meta:tools_call_req[params][_meta]},}# C. server/discover 响应discover_resp{jsonrpc:2.0,id:2,result:{protocolVersion:2026-07-28,serverInfo:{name:order-mcp-server,version:0.3.1},capabilities:{tools:{listChanged:False},resources:{},prompts:{}},extensions:{},},}# D. tools/list 响应2026-07-28 新增 ttlMs / cacheScope 缓存元数据tools_list_resp{jsonrpc:2.0,id:3,result:{tools:[{name:search_orders,description:按关键词搜索订单,inputSchema:{type:object,properties:{keyword:{type:string,description:搜索关键词},max_results:{type:number,default:10},},required:[keyword],},annotations:{readOnlyHint:True,destructiveHint:False},}],ttlMs:60000,cacheScope:shared,},}# E. tools/call 成功响应content structuredContent 双格式call_resp{jsonrpc:2.0,id:1,result:{content:[{type:text,text:找到 2 个订单}],structuredContent:{orders:[{id:E20261001001,item:蓝牙耳机,status:已发货},{id:E20260928007,item:蓝牙耳放,status:已签收},]},isError:False,},}# F. 错误响应2026-07-28 起参数/资源未找到错误码用标准 -32602err_resp{jsonrpc:2.0,id:4,error:{code:-32602,message:Invalid params: unknown tool search_order},}forlabel,objin[(A,tools_call_req),(B,discover_req),(C,discover_resp),(D,tools_list_resp),(E,call_resp),(F,err_resp)]:print(f{label})print(json.dumps(obj,ensure_asciiFalse,indent2))# 验证所有报文都是合法 JSON-RPC 2.0forobjin[tools_call_req,discover_req,discover_resp,tools_list_resp,call_resp,err_resp]:assertobj[jsonrpc]2.0andidinobjprint([OK] 6 个报文全部通过 JSON-RPC 2.0 结构断言)预期输出实测节选 A { jsonrpc: 2.0, id: 1, method: tools/call, params: { name: search_orders, arguments: { keyword: 蓝牙耳机, max_results: 10 }, _meta: { io.modelcontextprotocol/protocolVersion: 2026-07-28, ... } } } ... [OK] 6 个报文全部通过 JSON-RPC 2.0 结构断言从报文里能看到的三件事_meta取代了握手。2025-11-25 旧规范里客户端要先发initialize握手、拿到Mcp-Session-Id再干活2026-07-28 起协议版本、客户端信息、能力声明都装进每个请求的_meta任何服务器实例都能独立处理任何请求——这是为水平扩展负载均衡后面挂多个 Server 实例设计的。tools/list响应可以带缓存元数据ttlMs: 60000表示工具列表 60 秒内新鲜cacheScope: shared表示可以跨用户共享。Client 不用再靠长连接等工具变更通知按 HTTP 缓存的思路处理即可。错误码收敛到 JSON-RPC 标准。旧规范用自定义的-32002表示资源未找到2026-07-28 起改用标准-32602Invalid Params。如果你的代码里硬编码了-32002升级时要改。小结MCP 是模型与工具/数据源之间的开放协议标准解决同一能力在 N 个框架写 N 遍的碎片化问题三角色Host宿主面向用户/ Client宿主为每个 Server 创建的逻辑连接/ Server能力提供方协议 JSON-RPC 2.0 数据层 stdio / Streamable HTTP 传输层版本按日期编号当前为 2026-07-282026-07-28 的最大变化是协议层无状态化无握手、无会话 ID、请求自包含——这为大规模部署铺路MCP 与 function calling 是配合关系模型决策 vs 协议执行与 RAG/Skills 是不同层次的概念下一课展开 Server 能提供的三种核心原语Tools / Resources / Prompts以及已被弃用的 Sampling 和 Roots——参见第 2 课《核心原语Tools / Resources / Prompts / Sampling》。扩展阅读MCP for Beginners 原课 00-Introductionhttps://github.com/microsoft/mcp-for-beginners/tree/main/00-IntroductionMCP for Beginners 原课 01-CoreConceptshttps://github.com/microsoft/mcp-for-beginners/tree/main/01-CoreConceptsMCP 官方规范 2026-07-28https://modelcontextprotocol.io/specification/2026-07-28/2026-07-28 规范变化详解原课文档https://github.com/microsoft/mcp-for-beginners/blob/main/01-CoreConcepts/mcp-2026-07-28.mdMCP 官方 Python SDKhttps://github.com/modelcontextprotocol/python-sdk系列导航本课程全集见专栏AI Agent智能体系列上一课无本课是第 1 课下一课·第 2 课 核心原语我的专栏蛋白 / 抗体 / 多肽 / 核酸分子模拟 / 动力学 / 对接药物 / 设计 / 案例AI / Agent / 大模型开源蛋白结构预测分子模拟基础小分子药物设计案例AI Agent系列开源蛋白生成方法实践分子动力学模拟-Amber蛋白药物设计案例化学大模型开源多肽设计模型分子动力学模拟-Gromacs多肽药物设计案例《AI Agent原理与实战》开源多肽性质预测分子动力学模拟-OpenMM开源小分子生成设计CADD中的机器学习模型DNA/RNA药物设计結合自由能开源药代动力学软件高效计算配置siRNA药物设计模型UCSF DOCK系列我胡师兄说药ASO药物设计模型rDock系列 LeDock系列 gnina系列
企业数字化 ERP 产品动态
相关推荐
OpenCode 非交互式模式完整指南:-p 参数、JSON 输出与工作流集成 OpenCode 非交互式模式完整指南:-p 参数、JSON 输出与工作流集成 【免费下载链接】termai A powerful AI coding agent. Built for the terminal. 项目地址: https://gitcode.com/gh_mirrors/te/termai
把 AI 助手写进脚本,第一件事就会被卡住&am… · 2026/11/3 19:04:07
hydra不用敲命令行:xhydra图形界面上手全记录 hydra不用敲命令行:xhydra图形界面上手全记录 【免费下载链接】thc-hydra hydra 项目地址: https://gitcode.com/gh_mirrors/th/thc-hydra
hydra的命令行以长著称,一条 hydra -L users.txt -P pass.txt ssh://target 就能让新手卡半天。不想背 -l… · 2026/11/3 19:03:07
中国模型反向收费美国巨头:技术授权与按量分成实战 1. 从“免费换量”到“按量收费”的转折点 “这一次,中国模型开始收美国巨头的钱”——这句话第一次看到的时候,我正蹲在工位上啃三明治,差点没噎着。做了七八年AI应用层开发,我太清楚过去几年国内大模型厂商在海外的处境了&#… · 2026/11/4 17:32:31
Claude Code 报错排查:ECONNRESET 与 API ERROR 某天下午,我在终端里敲下claude,回车,光标闪了两下,正准备把一段两百行的重构需求贴进去,屏幕上先甩出来一行红字:Unable to connect to API (ECONNRESET)。再试一次,变成API ERROR,… · 2026/11/4 17:32:31
Oracle 11gR2 Linux单机安装全流程与翻车点排查 简介:面向Linux平台Oracle数据库部署学习者的11gR2单机安装图解文档,针对单机环境安装流程复杂、依赖配置易出错的问题,提供从前期准备到建库收尾的系统参考,适合具备一定Linux与数据库基础的运维和开发人员。资源包共1个doc文档&… · 2026/11/4 17:32:31
移动端WebView虚拟按键适配方案:原生与H5混合实践 1. 问题背景与现状分析 在移动端混合开发中,WebView与原生组件的交互一直是个棘手问题。特别是当设备底部存在虚拟导航栏时,H5页面底部的Tabbar经常会被遮挡,导致用户无法正常操作。这个问题在全面屏设备上尤为突出,因为不同厂商的… · 2026/11/4 17:32:31
codex接入中转站API无法生成图片:本地适配层排查与归一化方案 最近碰到一个挺典型的事:有朋友把 codex 的接口地址换成了第三方中转服务,聊天、补全、改代码都正常,唯独让他画张图,不是回一句"当前模型不支持图像生成",就是终端里吐半行链接然后卡死。他那套 key 拿去别… · 2026/11/4 17:32:31
编码助手上下文管理:分层预算、检索压缩与注入实践 1. 上下文管理到底在管什么:一次答非所问暴露的四个层次codebuddy 这类编码助手的上下文管理机制,说白了就是解决一个很朴素的问题:模型在某一刻“眼前”到底能看到哪些信息,以及这些信息以什么顺序、什么密度摆到它面前。很多人第… · 2026/11/4 17:31:30
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 3:16:49
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 6:59:29
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 7:02:38
AI辅助技术栈评估:提升研发决策效率60% 1. 项目背景与核心价值技术决策一直是研发团队面临的重大挑战。随着技术生态的快速演进,技术栈的选择、维护和迭代变得愈发复杂。我们团队在过去两年里,先后经历了三次重大技术栈迁移,每次都需要投入大量人力进行技术评估和风险分析。直到去年… · 2026/11/4 0:00:17
从生成Token到直接决策:Jev如何重塑AI Agent工程实践 1. 从"生成文字"到"拍板决策":Jev 到底在解决什么问题大多数人第一次接触大模型,脑子里建立的模型是"输入问题、输出文字"。你问它今天天气怎么样,它给你一段描述;你让它写个周报,它给你… · 2026/11/4 0:00:17
32G统一内存跑大模型:内存账、TPS实测与端云分流 想在一台 32G 统一内存的小主机上把大模型跑成"日常可用",这件事我前后折腾了小半年。标题里说的这台 Mac mini M6,是我们这次讨论的目标平台,具体到手规格以实物为准;但下面这套推算方法和实测思路,对任何统… · 2026/11/4 0:00:17
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 3:16:49
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 6:59:29
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 7:02:38