MCP 协议将发布史上最大更新:不再有会话,不再有握手
Model Context Protocol(MCP)将推出自诞生以来最激进的一次更新。RC 从 5 月 21 日锁定,经历 10 周的 SDK 验证和社区反馈,最终版规范在 7 月 28 日正式定稿。
一句话总结变化:MCP 变Serverless了。
1. ModelContextProtocol(MCP)最新更新将协议变为无状态,移除Mcp-Session-Id头,无需stickysession和共享sessionstore,请求可落到任何实例,与HTTP设计对齐。
2. 初始化握手流程被删,协议版本等信息通过每个请求的_meta字段传递,服务器需每次请求验证权限。跨调用状态通过显式handle管理,新增Mcp-Method和Mcp-Name请求头,扩展成为一等公民,新增MCPApps和Tasks扩展。
3. 认证采用OAuth2.1安全实践,移除旧式授权方式,支持JSONSchema2020-12。原语Roots、Sampling、Logging进入倒计时,引入特性淘汰策略。
4. 硬断裂生效,包括移除Mcp-Session-Id头、初始化握手和错误码变更。无状态化消除了协议层session劫持等风险,但出现新的攻击面,如跨agent工作流劫持和_meta对象注入。此次更新简化部署,将复杂度转移至推理层,但迁移需重写状态管理逻辑。
5. 两个具体的扩展值得关注。一个是 MCP Apps(SEP-1865):服务器可以在沙箱化 iframe 中提供 HTML UI,工具预先声明 UI 模板以支持预加载和缓存。UI 与宿主之间的通信走的是同一套 JSON-RPC 协议,审计和授权路径与直接工具调用一致。
6. 另一个是 Tasks 从实验性核心功能毕业到扩展(SEP-2663)。改为轮询模式——tasks/get、tasks/update、tasks/cancel。任务创建变为服务端决策(客户端声明支持,服务端决定是否走异步),tasks/list 被直接移除,因为缺乏 session 后无法安全限定范围。
MCP 这次更新的方向是对的。session 的引入原本就是工程上的捷径——让一个天生无状态的 JSON-RPC 协议背上有状态包袱,部署复杂度直接翻倍。切掉之后,水平扩展回到纯 HTTP 的玩法,这对企业级部署是及格线而不是加分项。
显式 handle 模式也是个聪明的选择。让模型自己管理状态,不是增加了复杂度,而是让复杂度发生在它本来就该发生的地方——推理层。对调试和审计也更友好:所有的状态传递都在参数里可见。
