夜雨聆风学习资料网

ARTICLE · 1165285

AI 连接工具的标准正在变成熟:MCP 2026 大改版解读

AI 连接工具的标准正在变成熟:MCP 2026 大改版解读
上一篇聊 MCP 基础概念时,结尾留了个预告:7 月底 MCP 出了一次大改版,协议从有状态改成无状态。现在官方规范和配套 SDK 都已落地(7 月 28 日正式发布),信息够全了,这篇把这次改版讲清楚。

先交代官方给的定调。MCP 的两位核心维护者在发布公告里说,这是"remote MCP 上线一年多以来最重要的版本"。改动清单包括:无状态协议核心、MRTR 多轮请求、基于 HTTP 头的路由、可缓存的列表结果、授权收紧、正式的弃用政策。清单不短,主线却只有一条:把 MCP 从一个"有状态"的协议,改成了"无状态"。

这两个词听着抽象,说的其实是同一件事:服务器要不要记住"是谁在跟我说话"。

一、什么叫"有状态",为什么它是问题

先补一个上一篇埋下的伏笔。那篇文章展示的报文里,找不到"登录"或"会话"的字样——不是笔误,因为旧版 MCP 的会话信息不在报文里,藏在 HTTP 请求头里。旧版的完整流程是这样:

1. 客户端连上服务器,先来一次 initialize 握手,互报协议版本、各自支持什么能力,像进门先换名片;

2. 服务器发回一个会话号(Mcp-Session-Id),之后客户端的每个请求都必须带着这个号;

3. 还有条隐含规则:这个号只有发它的那台服务器认识。会话一旦建立,后续请求都得落回原来那个实例。

我把这个模式想象成包间服务:进门先领号入座,之后每次点菜都要报号,而且必须还是原来那个服务员来接。中途换人,对不起,从头再来。

一个人吃饭没问题,问题出在规模上。MCP 服务器一旦要对外服务、要扛并发,这套模式就得付三种代价:

  • 实例一挂,会话全断
    。服务器升级重启、机器故障,所有连在上面的 AI 会话跟着断,正在跑的任务中途夭折。
  • 扩容变难
    。加机器分担流量,得先保证"同一个客人永远被引到同一张桌子"(行话叫粘性路由),要么再养一套共享存储,专门记每桌客人点过什么(Redis 这类会话存储)。钱和复杂度都花在了"记住客人"上。
  • Serverless 平台别扭
    。函数实例活不过一个请求的生命周期,却要求它维持一个常开的会话——Cloudflare 的博客提过,上一版要在无服务器平台上跑 MCP,得在协议之外再垫一层协调逻辑,而多数交互根本用不上这个会话。

官方在发布说明里说,无状态化是"开发者呼声最高的需求之一"。呼声高,说明这三种代价踩过的人不少。

二、新版的解法:每个请求自带全部信息

新版把包间服务换成了大堂取号点单:每张单子信息自足——点什么菜、几号桌、谁点的,全写在单子上。单子递进哪个档口都能做,不需要认识哪个服务员,也不用先领号入座。

对应到协议上,官方做了三个动作:

1. 握手退役。initialize/initialized 这组交互从规范里正式移除。协议版本、客户端身份、支持的能力,全部改放进每个请求自带的 _meta 字段里,等于把名片钉在每张单子上。

2. 会话号取消。Mcp-Session-Id 请求头连同整个协议级会话一起移除。任何请求可以落在负载均衡器后面的任何一台服务器上——共享存储、粘性路由都不再是必需品,一台普通的轮询负载均衡器就够了。

3. 补了一个可选的"看菜单"动作。有些客户端想在正式调用前摸一遍服务器的能力,官方提供了 server/discover 这个接口。注意是可选的——不做这步,直接发请求也完全合法。

官方博客给了一组新旧对比,新版的单次调用长这样(了解即可,不影响下面的阅读):

POST /mcp HTTP/1.1MCP-Protocol-Version: 2026-07-28Mcp-Method: tools/callMcp-Name: search{"jsonrpc":"2.0","id":1,"method":"tools/call", "params":{"name":"search","arguments":{"q":"otters"}, "_meta":{"io.modelcontextprotocol/clientInfo":{"name":"my-app","version":"1.0"}}}}

方法名和工具名直接写在 HTTP 头里,身份信息写在 _meta 里,报文自己就是完整的。没有握手,没有会话号,没有"必须是原来那台服务器"。

这里有个容易混淆的点要说清:协议无状态,不等于应用没状态。购物车、多轮表单、需要分步执行的流程,这些业务状态总得有人记。官方推荐的做法是:需要记状态的工具,自己发一个明确的标识,行话叫句柄(handle),比如一张订单号,让 AI 在下一次调用时把它当普通参数传回来。

官方博客对这套打法的评价是,他们发现这比藏在传输层的会话状态更好用——模型看得见这个句柄,能在多个工具之间传递和推理。取餐小票攥在顾客手里,比后厨暗记哪桌点过什么靠谱。

三、没有长连接,工具怎么中途问人

协议改成无状态之后,马上冒出一个新问题。有些工具干到一半需要回头问人:AI 要删一批数据,得先让用户确认;缺一个必填参数,得让用户补。这类交互官方叫 elicitation。

旧版的做法是服务器主动发起请求,靠一条保持打开的双向数据流来回传话。我理解这就像打电话对暗号:电话必须一直占线,谁也不能挂。这条常开的流,恰恰是无状态部署最负担不起的东西。

新版给的方案叫 MRTR(Multi Round-Trip Requests,多轮请求)。流程变成了三步:

1. 工具需要输入时,直接把"我还缺什么"打包在结果里返回,标记为 input_required——单子被退回来了,缺的项目列得清清楚楚;

2. 客户端拿到这份清单,收集好答案;

3. 客户端带着答案重试原来的调用,服务器接着往下办。

两边自始至终不需要保持任何连接,所有上下文都跟着请求走。

这个改动的实际价值,Supabase 的反馈最有说服力。他们在官方发布公告里说,自家的 MCP 服务一直是无状态部署,"动手前先确认"这类功能以前根本做不了;MRTR 出来之后,这类交互第一次变得可行——比如创建新项目前让用户确认一下费用,或者执行删除类查询前再问一嘴。

四、三处配套升级:MCP 融进普通 Web 世界

这次改版还有三处配套动作,单拎出来每处都不小,放在一起看是同一个方向:让 MCP 的流量变成普通 Web 世界的一等公民。

请求头路由。新版规定,每次请求必须在 HTTP 头里带上方法名(Mcp-Method)和工具名(Mcp-Name)。好处是网关、限流器、防火墙看一眼请求头就知道这是什么请求、该放行还是拦截,不用再解析 JSON 报文体。企业里接 MCP 时,现有的 Web 基础设施——负载均衡、审计、监控——直接就能用上。

工具目录可缓存。tools/list 这类列目录的响应,现在带保鲜期字段(ttlMs)和缓存范围(cacheScope)。客户端拉一次工具清单,在保鲜期内不用反复重新拉取。别小看这个改动:AI 应用动辄挂几十个 MCP 服务器,每次会话都全量拉一遍目录,慢,也浪费。

授权收紧。动态客户端注册(DCR)正式弃用,转向客户端元数据文档(CIMD)——接入凭证从"现连现领"变成"提前挂好正规执照",配合签发方校验的强化,企业接入的安全门槛更标准了。顺带修掉一个老毛病:CLI 类应用做 OAuth 登录时总报 redirect_uri 错误,元凶是注册时缺了 application_type 字段,这次一并补上。

五、弃用清单和一年缓冲期

改版这么大,老东西怎么办,官方这次给了一份明确的账单:

  • Roots、Sampling、Logging 弃用
    。还能用,至少保活 12 个月,但新项目别再采用了。
  • 旧的 HTTP+SSE 传输弃用
    ,同样给了一年下线通道。
  • Tasks 移入扩展
    。长运行任务这套机制从核心协议里挪出来,变成按需开启的扩展包,核心协议保持精简。

比清单本身更值得说的是另一件事:这次规范把弃用做成了正式政策——任何功能被弃用,至少保留 12 个月窗口。协议的改动从"发布即切换,开发者跟着踩坑",变成了"提前一年打招呼,按自己的节奏升级"。

对正在维护 MCP 服务器的人来说,这 12 个月就是迁移窗口。官方同步发布了四大语言的 SDK 迁移指南,依赖会话号比较深的项目,越早动手越从容。至于只在 Claude Desktop、Cursor 里添加现成 MCP 服务的人,这轮改版不用做任何事,客户端软件升级后自动适配。

结尾

回头看这版规范,很多改动都不新鲜:无状态是 HTTP 沿用几十年的设计,缓存头、标准授权流程也都是 Web 世界的成熟作业。MCP 做的事情,是把这套作业认认真真抄了一遍,再补上 AI 场景特有的部分。

这正是把它放进标题里的原因:连接工具的标准,正在从"AI 圈自己的协议"长成正经的互联网基础设施。四大 SDK 当天跟进新规范,Cloudflare、AWS、微软的生态公告紧随其后——名单本身就说明了方向。

上一篇结尾说,MCP 拆开看是转接线加对话规则。这版改版改的是对话规则的底座——底座稳了,上面才盖得起更多东西。

相关学习资料