AICENT.COM
← 返回中文博客

MCP 删掉了会话:状态从此住哪

2026-10-18 · RTTP · IQA
本文引证源 · 模型上下文协议(MCP)规范 2026-07-28 版本关键变更(逐字引用)· 前版本 2025-11-25 · 生态二手报道,已标注

七月末,模型上下文协议(Model Context Protocol,MCP)发布了迄今最大的一次结构修订:2026-07-28 版本。变更清单的头条读起来像一份协议给自己拆骨架的手术记录:initialize/notifications/initialized 握手——删除;Mcp-Session-Id 头——删除;随连接变化的列表端点——删除。而总结句把全部论点写在一行里:「Make MCP stateless。」

一个协议删除自己的会话时,真正的问题从来不是删掉了什么,而是被删掉的东西搬去了哪。状态不会蒸发,只会搬家。所以本文的深潜问题是:2026-07-28 之后,状态住在哪——这张表里还缺哪几行?

一、删了什么,逐字看

两条条目扛起了主要变更。传输层:「从 Streamable HTTP 传输中移除协议级会话与 Mcp-Session-Id 头。列表端点(tools/list、resources/list、prompts/list)不再随连接而变化。需要跨调用状态的服务端应使用显式的、服务端铸发的句柄,作为普通工具参数传递」(SEP-2567)。握手层:「让 MCP 无状态化:移除 initialize/notifications/initialized 握手。每个请求现在在 _meta 中携带自己的协议版本与客户端能力」(SEP-2575)。另有两笔收尾:实验性 Tasks 移出核心、转为官方扩展(SEP-2663);Roots、Sampling、Logging 弃用,给足十二个月窗口(SEP-2577、SEP-2596)。

二、状态搬去了哪:三个载体,一次删除

这次修订没有废除状态,它给状态重新分了家。载体一:请求本身。每个请求现在在 _meta 里携带协议版本与客户端能力,客户端「SHOULD 在每个请求中标识自己」(io.modelcontextprotocol/clientInfo),服务端在每个结果里标识自己(io.modelcontextprotocol/serverInfo)。版本不匹配返回 UnsupportedProtocolVersionError。身份变成了逐请求字段。

载体二:一份强制的自我描述。新增 RPC:「新增 server/discover:服务端 MUST 实现此 RPC,以公告自己支持的协议版本、能力与身份」(SEP-2575)。服务端也从「握手时自我介绍一次」变成了「随每个请求随时自我介绍」。

载体三:应用层。跨调用状态不再是协议的业务——「显式的、服务端铸发的句柄,作为普通工具参数传递」。会话从传输头搬进了函数参数。授权一侧同样在搬家:OAuth 动态客户端注册(RFC 7591)被弃用,改用客户端 ID 元数据文档(PR #2858)——客户端身份也变成了一份公示文档,而不是一次注册握手。

2026-07-28 之后状态住哪连接态 · 会话 + 握手已删除SEP-2567/2575请求身份 · _meta clientInfo自我声明SHOULD 非 MUST服务端身份 · server/discover自我描述MUST 公告跨调用状态 · 句柄应用层工具参数信任新鲜度 · 现在仍为真?缺失无租约离线验证缺失OAuth 需联网MCP 把状态推出了连接:身份变成逐请求自我声明,状态变成应用数据;新鲜度与离线验证仍是未指派的空行。

三、协议为什么这样选

动因是规模,变更清单用暗示写明了它:随连接变化的列表端点,逼着路径上的每一跳都知道自己在为哪条连接服务;一次握手把整段对话绑死在一个传输生命周期上。无状态的请求扛得住负载均衡、重启、重试与多租户网关——塑造 HTTP 本身的也是这几股力。生态二手报道诚实地记录了过渡的代价:客户端没有全部跟上,你得到哪一版协议取决于你用哪个智能体,版本回退协商也有自己的失败方式。这些阵痛是清理的代价,不是反对清理的证据。

我们的兴趣更窄,也更架构:这次修订是一个更大论题上的一个安静数据点。以连接为载体的状态扛不住规模;状态必须搬进消息,或者搬进应用。MCP 两者都选了,而且刻意把两者分开:身份进逐请求的 _meta,语义进工具参数。它还没有选的——暂时——是让其中任何一个变得可验证。

四、空着的两行

再看一眼上面的表。身份那一行,是客户端替自己填的字段:SHOULD 标识,从不 MUST 验证——请求里没有任何东西把 clientInfo 绑到一把密钥上,也没有任何东西问一句「这个声称一小时后还是真的吗」。新鲜度那一行是空的,因为一个每次调用都从头开始的无状态协议,没有「standing」的载体:信任要么住进长期有效的 OAuth 授权——退回这次修订刚离开的连接世界——要么就不住在任何地方。

这正是我们两根支柱与这套设计的交点,边界说清楚。一条陈述住在哪,是寻址问题——共鸣时间传输协议(Resonant Time Transfer Protocol,RTTP)从规范权威派生地址,把意图、身份与standing装进包内,消息不需要会话也知道说话的人是谁。一条陈述是否站得住,是证明问题——身份质量保证(Identity Quality Assurance,IQA)把答案封进定长信封,带 120 秒租约,验证离线可完成。MCP 的 _meta 字段明天就可以携带这样一封信封;线上格式没有禁止任何一条。我们不是在提分叉——我们是在指认这套无状态设计里仍未指派的那几行。

五、收尾的视角

删掉会话是正确的一手,而且「敢于删」在标准工作里比「敢于加」稀有得多;带十二个月窗口的新弃用政策(SEP-2596)是干净的好习惯。把这次修订读成一份方向声明:业界最大的工具协议刚刚押注——智能体计算的持久单元是自我描述的请求,而不是长连接。我们同意这个押注。我们的整个架构就是把这个注押到底——直到自我描述被签名、被租约约束、断网仍可验证之前,「无状态」标出的是验证缺口从哪开始,而不是问题在哪结束。


引证源 [1] 模型上下文协议规范 2026-07-28 版关键变更(modelcontextprotocol.io)——SEP-2567、SEP-2575、SEP-2663、SEP-2577、SEP-2596 与 PR #2858 逐字引用,2026-10-18 访问 [2] 前版本 2025-11-25(modelcontextprotocol.io),用于范围对照 [3] 生态二手报道(9io.ai 迁移指南;gravity.fast 标准综述,更新于 2026-10-09)——已标注为二手,仅引用「客户端采纳不均衡」的一般性陈述 [4] 编辑说明:个人一律只以所属机构指称;「迄今最大结构修订」的表述依据变更清单本身的范围(会话删除、握手删除、特性弃用、授权重构)。

一句话:无状态协议让每个请求自我介绍——下一步是让这份自我介绍可核查、有租约、断网仍然为真。