#AI Agent#MCP#DevOps

MCP 初始化能力冻结:版本协商、握手收据与会话内不变式

initialize 成功不代表双方可以在会话中随意增减功能。本文把协议版本、双方 capability、实现身份与 initialized 边界冻结成可审计收据,阻止旧连接误用新能力。

本文要点

  • 主题聚焦:AI Agent、MCP、DevOps
  • 适合人群:独立开发者、全栈工程师、AI 应用开发者
  • 核心价值:快速理解背景、实践路径、常见误区和工程建议
作者 @admin·发布于 2026年3月29日·更新于 2026年7月20日

Client 声明支持 Sampling,Server 在滚动发布后也能处理它,于是网关直接给一条旧连接开放 sampling/createMessage。但该连接初始化时并未交换这项能力,审计日志也只保存了当前配置。调用偶尔成功,却无法证明双方曾同意这份合同;一旦实例回滚,行为马上分裂。

MCP 协议深度解析介绍消息骨架,MCP 工具 Schema 设计约束单个工具。本篇处理更早的控制面:连接何时从“能传 JSON-RPC”变为“可以执行某项 MCP 能力”,以及协商结果怎样在整个会话内保持不变。

把 initialize 结果密封成版本合同

按 2025-11-25 生命周期,initialize 必须是 Client 与 Server 的第一次交互。Client 提交支持的协议版本、capabilities 与实现信息;Server 若支持该版本必须原样返回,否则返回自己支持的另一版本。Client 不支持响应版本时应断开,不能挑几个字段继续跑。响应成功后 Client 还必须发送 notifications/initialized,Server 在收到前除 ping 与 logging 外不应主动发其他请求。

控制面保存 mcpHandshakeReceipt.v1:连接或 session ID、Client/Server 主体、请求与响应摘要、最终协议版本、双方 capability 的规范化 JSON、实现名与版本、transport、策略版本、初始化时间、initialized 到达时间及 deployment generation。capability 应按“双方方向”解释,不能求并集。例如 Sampling 是 Client 能力,Resources 是 Server 能力;子能力 resources.subscribe、sampling.tools 也必须逐级存在。Agent 工具能力目录可消费这份冻结快照,但不能用最新目录反写旧会话。

text
NEW -> INITIALIZE_SENT -> VERSION_ACCEPTED -> RECEIPT_SEALED
RECEIPT_SEALED -> INITIALIZED_ACKED -> OPERATIONAL
任一协商失败 -> REJECTED -> CLOSED
OPERATIONAL -> DRAINING -> CLOSED

唯一开放点是 activateSession(receiptDigest):事务校验版本受支持、必需能力齐全、响应 JSON-RPC ID 匹配、收据已密封且 initialized notification 属于同一 transport generation,再以 CAS 写 OPERATIONAL 和一条 ready outbox。在此之前到达的普通请求进入有界缓冲或明确拒绝;不能先执行再补收据。HTTP 后续请求还要携带协商出的 MCP-Protocol-Version,缺失时的兼容推断不能覆盖已存在的握手事实。

能力变化必须创建新会话

部署期间配置、工具列表或授权范围会变化,但初始化 capability 不是热更新通道。新增可选能力只对新握手生效;撤销高风险能力时,把旧 receipt generation 标为 DRAINING,拒绝新建相关操作并等在途请求终结,然后关闭连接。工具列表变化可走已协商的 listChanged 通知,却不能借此凭空增加 listChanged 本身。REST API 版本控制中的兼容窗口同样适用,但 MCP 还需绑定双向能力和会话时序。

重复 initialize、同一 JSON-RPC ID 的不同 payload、收到 response 前先到 initialized、Server 返回未知版本、代理篡改版本 header、旧实例复用新 session、capability 大小写或空对象归一化差异,都要进入故障注入。断言任何非 ping 操作都能反查唯一 handshake receipt,重复握手不会覆盖原收据,旧 generation 无法获得后来新增能力。MCP 审计日志设计负责保存这些因果字段。

发布门要求协议矩阵测试 100% 通过;一万组握手乱序中提前开放次数为 0;运行请求缺 receipt 比例为 0;capability 判定与冻结快照分歧为 0;拒绝原因可归类率 100%;初始化 p99 在预算内且缓冲不超过 32 条。上线先只记录 shadow receipt 并比较现有路由决策,再让 5% 新会话受控,逐步升到全量。回滚时停止签发新 generation,保留旧收据验证器与 drain 路径,绝不能把既有连接重新解释成上一版能力集合。

Related

相关推荐