MCP 协议团队在 2026 年 7 月 28 日发布了一个新版本,该版本取消了协议层面的会话(session),并强制要求每个请求都是无状态的。如果你运行 MCP 客户端、服务器或代理,你必须重写那些假设存在持久会话 ID 的代码——否则你将面临路由失效、缓存未命中以及后台任务失控的问题。

为什么这次转变至关重要

MCP 过去需要通过握手来生成会话标识符。下游服务依赖该 ID 来假设一系列请求会命中同一个进程,从而允许负载均衡器使用粘性路由,并在内存中存储每个会话的数据。7 月份的发布将该模型替换为纯粹的请求-响应流。现在,可以随意添加或移除服务器,而无需担心会话丢失。协议不再保留上下文;上下文必须由应用程序来维护。

保留旧有“以会话为中心”代码的团队将面临请求被路由到错误实例、缓存未命中以及后台作业堆积的问题。而采用无状态模式的团队则可以在非粘性负载均衡器后运行 MCP,并在整个请求链中获得更紧密的观测能力。

真正的变化在哪里

  • 协议生命周期 – 握手和会话 ID 消失了。每个请求必须携带服务器所需的所有信息;无法保证后续请求会落在同一个进程上。
  • HTTP 路由 – 网关现在通过读取两个新请求头 Mcp-MethodMcp-Name 来决定请求的转发位置。基于 Session-cookie 的路由不再有效。
  • 缓存 – 规范为读取操作增加了 ttlMs(毫秒级生存时间)和 cacheScope 字段。你可以决定是否接受过期数据,并据此配置缓存。
  • 可观测性_meta 块现在要求包含 W3C Trace Context 负载,这使得追踪系统能够将边缘网关、工具和后端工作缝合进一个完整的端到端追踪中。
  • 组合性 – 扩展机制被正式化了;可以在不改动核心规范的情况下添加新功能,从而鼓励插件式的架构。
  • 长时间运行的工作 – 对于运行数分钟或数小时的任务,简单的请求/响应模式已不再适用。协议现在定义了一个用于异步工作的 Task 对象,并配备了完整的生命周期控制。

遗留代码中隐藏的风险

快速审计通常会发现那些假设具有状态性的模式:

  • 以会话 ID 为键的内存映射(In-memory maps)。
  • 配置为粘性会话(sticky sessions)的负载均衡器。
  • 在启动阶段将每个会话的数据预加载到本地内存的例程。
  • 在会话结束时删除业务数据的清理逻辑。

如果这些逻辑在迁移后依然存在,系统在高负载下将会丢失数据或导致资源泄漏。

具体的迁移清单

1. 盘点当前的假设

梳理代码中所有涉及会话 ID、粘性路由规则或进程本地缓存的地方。记录哪些组件依赖于每一项。

2. 使身份标识显式化

在每个请求负载或请求头中添加租户 ID(tenant IDs)、运行 ID(run IDs)和用户 ID(user IDs)。将这些标识符视为授权和数据分区的唯一事实来源。

3. 更新路由配置

将基于会话的路由替换为读取 Mcp-MethodMcp-Name 的规则。在非粘性负载均衡器后使用最简化的两个实例部署,测试新的网关逻辑。

4. 重构缓存逻辑

切换到新的 ttlMscacheScope 字段。进行性能测试,观察不同的 TTL 值如何影响命中率和数据新鲜度要求。

启用端到端追踪:在 _meta 块中填充 W3C Trace Context 请求头。验证追踪信息现在能否从边缘网关无缝流经后端服务。

采用 Task 模型处理异步工作:定义谁可以创建任务,设置最大运行时间,并强制执行队列限制。添加明确的取消和重试策略,并限制代理在任务挂起期间的操作权限。

在 7 月 28 日之前查看 SDK 和客户端库的发布说明。

运行针对失败路径的回归测试套件:除了测试正常路径(happy-path)外,还要注入缺失的请求头、过期的任务和格式错误的缓存指令。确认系统能够优雅地降级。

下一步需要关注什么

能够安全迁移的团队会测试边界情况,而不仅仅是正常路径。任何在 7 月 28 日之后仍期望会话 ID 的生产环境部署,都可能无法与新的 MCP 服务器协同工作。