状态传导图
任何一层都不能替下一层作担保;模型输出在执行前始终只是 proposal。
观察点 01
模型表达、协议交换、执行授权不是同一层
模型 API 产出 tool name 与 arguments;MCP Client/Server 交换 JSON-RPC 消息;Host 与资源侧 Server 再按主体、资源和风险决定能不能执行。
- 消息结构化格式可校验
- 副作用已发生仍在门前
结构化正确只解决“长得对”,协议兼容只解决“传得通”。
Function Calling 负责让模型表达候选调用,MCP 负责 Host/Client 与 Server 交换能力;主体、资源、确认、幂等和终态仍由确定性控制面强制执行。
状态传导图
任何一层都不能替下一层作担保;模型输出在执行前始终只是 proposal。
观察点 01
模型 API 产出 tool name 与 arguments;MCP Client/Server 交换 JSON-RPC 消息;Host 与资源侧 Server 再按主体、资源和风险决定能不能执行。
结构化正确只解决“长得对”,协议兼容只解决“传得通”。
状态传导图
Host 决定是否把能力交给模型,也决定怎样响应 Server 的采样或用户输入请求。
观察点 02
Server 向 Client 暴露 Tools、Resources、Prompts;Client 向 Server 暴露 Sampling、Elicitation、Roots。双方可发送 request 并回复 result/error,notification 才是不期待响应的单向消息。
“Client 调 Server”只是最常见路径,不是完整协议方向。
状态传导图
结果未知时先用幂等键和外部收据对账,不能把网络超时直接当失败重试。
观察点 03
Host 校验 Schema、主体、租户、资源、确认与预算;Server 不盲信模型或 Host 描述,按最新权限复核。执行结果经过大小、敏感字段和提示注入过滤,再与外部收据写入状态。
允许调用和完成任务是两次不同判定。
状态传导图
生产固定正式版;RC 用独立 SDK 与 conformance 矩阵隔离测试,最终规范发布后再决定迁移。
观察点 04
正式版是 stateful lifecycle,initialize 必须先发并协商能力;截至 2026-07-14,目标日期为 2026-07-28 的版本仍是 RC,它删除 initialize 与协议 session,把 Client 信息和能力放进每次请求。
这不是兼容字段升级,而是协议生命周期断裂。
你现在应该能解释:这不是兼容字段升级,而是协议生命周期断裂。
Function Calling(函数调用)让 Large Language Model(大型语言模型,LLM)提出结构化工具调用;Model Context Protocol(模型上下文协议,MCP)让 Host、Client 与 Server 用共同协议交换工具、资源和提示。真正的身份、权限、审批、副作用与验收仍属于程序控制面。
把三层混成一个“AI 会用工具”,就会把格式正确误判成安全、把协议兼容误判成业务可用。MCP 解决的是中间的互操作层,不包办上下两层。
模型根据工具的名字、描述和参数 Schema,输出“调用哪个工具、参数是什么”。这是候选动作,不是函数已在模型内部运行。
产物:tool name + arguments
Host 内的 MCP Client 与 Server 协商版本和能力,再用 JSON-RPC 消息发现、读取或调用 primitives(协议原语)。
产物:协议消息 + 结果 / 错误
Host 和 Server 校验主体、资源、作用域、风险确认、预算与幂等状态;执行后保存收据并验证环境终态。
产物:authorized action + receipt
下面的天气例子只演示控制流:温度是假设值,不是实时天气。关键不在“模型选中了工具”,而在每个确定性门保存了什么证据。
name 与 description帮助模型做工具选择。inputSchema约束参数结构;正式版工具输入根节点要求是对象。最小执行记录 = actor + tenant + tool + arguments hash + resource scope + approval proof + idempotency key + result / error + external receipt。需要恢复与重试时,再接 Agent 可靠执行的操作账本。
MCP 是客户端—服务器架构。Host 为每个 Server 创建一个专用 Client 连接;本地 Standard Input / Output(标准输入输出,stdio)Server 通常服务一个 Client,远程 Streamable Hypertext Transfer Protocol(可流式超文本传输协议,Streamable HTTP)Server 通常服务多个 Client。模型只是 Host 可能使用的组件,并不直接“跑 MCP”。
AI 应用或工作流运行时:管理 Client、选择暴露给模型的能力、组合上下文、执行策略、审批和审计。
Host 内的协议组件:维护与一个 Server 的专用连接,保存正式版会话中的协议版本与协商能力。
本地或远程程序:向 Client 提供上下文与动作,可包装文件系统、数据库、Application Programming Interface(应用程序编程接口,API)或进程。
数据层使用 JSON Remote Procedure Call(基于 JSON 的远程过程调用,JSON-RPC 2.0);传输层负责 stdio 或 Streamable HTTP 的消息通道与传输级授权。
| 方向 | 2025-11-25 正式版能力 | 控制权边界 |
|---|---|---|
| Server → Client 提供 | Tools(可调用动作)、Resources(以 Uniform Resource Identifier,统一资源标识符,URI 标识的数据)、Prompts(可复用消息模板) | Client 用 */list 发现;Host 决定是否展示、读取、调用和注入模型上下文 |
| Client → Server 提供 | Sampling(请求 Host 模型生成)、Elicitation(请求用户补充信息)、Roots(协调文件系统工作范围) | Server 发起请求;Host 仍控制模型、用户交互和允许范围。Roots 是协调提示,不是 Operating System(操作系统,OS)沙箱 |
| 跨切面 | Logging、进度、取消、列表变化通知;实验性的 Tasks 包装长任务 | 只有已协商能力才能使用;通知没有响应,request 必须收到 result 或 error |
Origin。生产系统应显式记录 protocol version、SDK 版本、协商能力与兼容测试结果。下表按 2026-07-14 的状态写:左列可作为当前正式基线,右列只能隔离试验。
| 合同 | 2025-11-25 正式版 | 2026-07-28 RC(尚未 final) |
|---|---|---|
| 状态 | 官方文档标记 latest;当前生产基线 | 2026-05-21 锁定 RC,官方计划 2026-07-28 发布最终规范;含 breaking changes |
| 核心状态 | 协议是 stateful;连接先协商版本与能力。HTTP Server 可以分配 Mcp-Session-Id | stateless core;删除协议级 session,应用状态改用显式 handle 等业务参数传递 |
| 启动 | initialize 必须是首次交互,随后发 notifications/initialized | 删除握手;版本、Client 信息与能力随请求放入 _meta,新增 server/discover |
| Server → Client | 可经现有连接 / SSE 发 Sampling、Elicitation 等请求和通知 | 只允许在处理 Client 请求期间发起;用 InputRequiredResult + 重新提交的多轮请求承载 |
| Tasks | 实验性 core feature | 迁为官方 extension,生命周期重做;删除 tasks/list |
| 能力演进 | Roots、Sampling、Logging 是正式版能力 | 三者标记 deprecated,但只是弃用标注:本版仍工作,移除需另一个 Specification Enhancement Proposal(规范增强提案,SEP),且有至少 12 个月窗口 |
MCP Registry 能帮助发现 Server,但不会替应用证明代码安全、描述诚实或权限合理。Server 的工具元数据、资源内容和返回结果都可能夹带提示注入;本地 Server 还等同于在用户机器上运行第三方代码。
| 门 | 必须绑定的事实 | 典型拒绝条件 |
|---|---|---|
| 主体 | 用户、服务身份、租户、会话 / 请求关联 | 身份缺失、跨租户或授权上下文已过期 |
| 工具 | Server 身份、工具名、版本、schema hash | 工具列表悄然变化、描述或 Schema 未审批 |
| 资源 | 具体仓库、目录、表、记录和动作 scope | 只获 read 却请求 write;Roots 内外未做真实路径校验 |
| 同意 | call ID、关键参数摘要、风险、时效 | 用旧确认批准新参数;高影响动作没有明确确认 |
| 预算 | 次数、token、金额、墙钟时间、并发 | 循环调用、结果过大或成本超过上限 |
| 副作用 | 幂等键、操作账本、外部收据、重试分类 | 结果未知时重复付款 / 发布 / 删除 |
| 结果 | 来源、大小、敏感字段、内容类型、环境终态 | 把工具返回当系统指令;Server 说成功但外部状态不符 |
显示将要启动的命令和参数,要求用户明确同意;固定来源与版本,最小化文件和网络权限,把密钥放在受控凭据代理中,并用容器 / OS 沙箱隔离。Roots 只帮助 Server 理解工作范围,不会阻止恶意进程访问别处。
授权在 MCP 中是可选能力;若保护 HTTP Server,2025-11-25 规范要求其作为 OAuth 2.1 resource server(资源服务器)验证 token 的 resource / audience。Client 用 Proof Key for Code Exchange(代码交换证明密钥,PKCE),Server 禁止 token passthrough(令牌透传)。
OAuth 元数据发现要防 Server-Side Request Forgery(服务端请求伪造,SSRF),限制重定向与私网地址;工具名、描述、Schema、图标和结果都做大小 / 类型 / 内容校验,不把其中的指令提升为系统优先级。
官方 Registry 仍是 preview,可能有 breaking changes 或数据重置;它保存中心化元数据与命名信息,并把安全扫描交给包仓库或下游聚合器。被收录不等于经过代码审计、质量评测或权限批准。
| 研究 | 作者报告 | 证据边界 |
|---|---|---|
| Remote MCP auth measurement2026-05 预印本 | 作者发现 7,973 个 live remote Server,其中 40.55% 无认证暴露工具;对 119 个可测试 OAuth Server 共报告 325 个缺陷、9 个 Common Vulnerabilities and Exposures(通用漏洞披露,CVE)编号,96.6% 涉及动态客户端注册问题 | 是作者的发现与可测试子集,不代表全部 MCP 部署;预印本结果仍待更广复现 |
| MCPTox2025-08 预印本 | 基于 45 个 live Server、353 个真实工具,构造 1,312 个恶意测试用例并测试 20 种 Agent 设置 | 这是人为构造的 tool-metadata poisoning benchmark,不是“公开 Server 已被投毒比例”调查 |
更完整的提示注入、最小权限、凭据与供应链治理见 AI 安全工程;协议间职责与身份边界见 Agent 协议地图。
MCP 并不要求 Host 把所有工具 Schema 塞进每一次模型请求;这是 Host 的上下文组装策略。按需发现、分层披露和代码执行可以降 token,但必须同时测工具召回、任务成功率、延迟和权限隔离。
Anthropic 2025-11-04 的工程文章把 MCP 工具映射成代码 API / 文件树,让模型按需读取接口,在代码环境完成循环、过滤和聚合,只把必要结果送回模型。文章的 Google Drive → Salesforce 示例从 150,000 token 降到 2,000,即 1−2,000/150,000=98.67%。
| 证据 | 作者报告 | 上线时怎么复测 |
|---|---|---|
| 手算示例 | 80 个工具 × 平均 350 token = 28,000;只给 top-5 是 1,750,目录 token 减少 93.75% | 同时报告 Recall@5、正确工具排序、端到端成功率与额外路由延迟 |
| MCP-Zero2025 预印本 | 从 308 个 Server 收集 2,797 个工具,全量 Schema 为 248.1k token;作者在 APIBank 上报告最多约 98% token reduction | 这是该框架与 benchmark 的结果;换成自己的名称、描述、权限和长尾任务重跑 |
| Semantic Tool Discovery2026 预印本 | 5 个 Server、121 个工具、140 条 query;K=3 报告 97.1% hit rate、99.6% tool-token reduction、Mean Reciprocal Rank(平均倒数排名,MRR)0.91、检索 <100ms | 样本较小;测多轮依赖、同名工具、描述漂移、冷启动与未授权工具过滤 |
协议握手成功只证明消息能交换。生产验收还要覆盖能力发现、选择、真实执行、安全、恢复和成本,并保存可回放的版本与收据。
版本协商成功率、必需 capability 覆盖、未知方法 / 字段、超时取消、错误码与 SDK 组合矩阵;正式版和 RC 分开跑。
目录新鲜度、权限过滤泄漏为 0、Recall@k、MRR、合法 tool-call rate、参数 Schema 通过率与“该不调用时不调用”。
环境终态成功率、部分成功、结构化错误、延迟 p50 / p95(中位数 / 95 分位)、超时后对账、幂等重复副作用率和补偿成功率。
越权调用容忍度必须为 0;测试跨租户、token audience、确认参数绑定、提示注入、SSRF、恶意 Schema 与本地沙箱逃逸。
工具 Schema token、结果 token、路由开销、代码执行的处理器 / 内存 / 网络、每成功任务成本;节省必须与成功率共同报告。
request / trace ID、主体、Server 与工具版本、Schema hash、参数摘要、审批、外部收据、结果过滤和最终验收都能串成同一条证据链。
本页核查日为 2026-07-14。生产语义以 2025-11-25 正式规范为准;2026-07-28 只按官方 RC 描述,不提前当作 final。论文数字保留作者口径,并显式标注预印本与样本边界。
| 主题 | 一手来源 | 本页采用口径 |
|---|---|---|
| 范围与架构 | MCP Architecture overview | 一 Server 一专用 Client;数据 / 传输两层;双方均可发送请求;MCP 不规定 Host 如何使用 LLM |
| 正式生命周期 | 2025-11-25 Lifecycle | initialize 必须先发;协商版本 / 能力;运行与底层关闭 |
| RC 断裂 | 2026-07-28 Release Candidate | RC 非 final;无状态 core、无 initialize / session、server/discover、Extensions、Tasks 迁移与弃用策略 |
| 传输与授权 | Transports;Authorization;Security best practices | stdio / Streamable HTTP、Origin 校验、授权可选;启用时按 resource / audience 验证并禁止 token passthrough |
| Registry | The MCP Registry | Preview 元数据目录;不把收录当作安全扫描、质量背书或运行许可 |
| Function Calling | OpenAI Function Calling guide | 模型返回结构化调用,应用执行并回传结果;Schema 约束不等于业务授权 |
| 代码执行 | Code execution with MCP | 150k → 2k 只作为特定演示;同时记录新增沙箱与资源治理成本 |
| 工具发现 | MCP-Zero;Semantic Tool Discovery | 作者报告数字不外推;生产上联测 Recall@k、任务成功率、延迟与权限过滤 |
| 安全测量 | Remote MCP authentication study;MCPTox | 区分真实部署的认证测量与人工构造的投毒 benchmark;两篇均按预印本口径 |