MCP无状态化背后的真正逻辑配套资源包

用途:配合"参考资料和命令放在简介和置顶评论"。以下三块内容可直接复制到视频简介和置顶评论。

MCP无状态化背后的真正逻辑配套资源包
用途:配合参考资料和命令放在简介和置顶评论。以下三块内容可直接复制到视频简介和置顶评论。

一、grep 自查清单(十分钟定位你的迁移分位)

在你的 MCP server 代码仓库根目录执行:

# 1. session 依赖:找 Redis 会话存储、sticky cookie、K8s 会话亲和
rg -n "Mcp-Session-Id|sessionId|StreamableHTTPServerTransport"

# 2. 握手残留:initialize 握手与 initialized 通知
rg -n "initialize|notifications/initialized"

# 3. 旧传输类:HTTP+SSE 已正式废弃,优先迁移
rg -n "SSEServerTransport|sse"

# 4. 实验性 Tasks 拦截层:v2 已整体移除
rg -n "tasks/list|experimental.*tasks"

# 5. 旧错误码字面量:-32002 已无法发出,资源不存在统一返回 -32602
rg -n "\-32002"

# 6. SDK 错误面与上下文(TS):McpError 改名 ProtocolError,extra.* 改 ctx.*
rg -n "McpError|ErrorCode|extra\."

# 7. TS 项目跑完 codemod 后,找它无法安全改写、需要人工处理的位置
rg -n "@mcp-codemod-error"

判读标准(对照官方千服调研的分位):

  • 以上全部零命中 → 约等于升一次 SDK(官方调研中 90% 的服务器在这一档)
  • 命中第 1 条且把 session id 当存储键 → 迁移成本最高的一档,需要显式句柄改造
  • 命中第 3 条 → 旧 HTTP+SSE 传输,宽限期最短,优先处理
  • 命中第 5、6 条 → 属于 SDK 升级的正确性修复,跟着迁移指南走即可

二、新旧兼容矩阵(客户端 × 服务器协议时代)

来源:MCP 2026-07-28 规范生命周期章节(Modern = 2026-07-28 起;Legacy = 2025-11-25 及以前;Dual-era = 同时支持两者)。

客户端 服务器 结果
Modern Modern 工作。server/discover 可选;版本不匹配时报 -32022 并附支持版本列表,客户端换版本重试
Modern Legacy 失败。客户端应先探测 server/discover 以确定性失败,再回退旧握手
Dual-era Modern 工作。探测返回现代结果,保持 modern
Dual-era Legacy 工作。探测失败或超时后回退 initialize
Legacy Modern 失败。缺 _meta 必需字段或必需头,旧客户端没有前向回退机制
Legacy Dual-era 工作。服务器应答 initialize,按协商的旧版本服务
Legacy Legacy 按旧版本工作

三条容易踩的行为规则:

  1. 时代判定是服务器的属性,不是单个请求的属性。客户端可以缓存判定结果,失败时重新探测。
  2. 双时代服务器按客户端的开场方式选择行为:带现代 _meta 的请求走无状态,initialize 请求走旧语义,同一个端点可以并发服务两个时代。
  3. HTTP 上现代服务器也用 400 表达版本不支持、缺能力、头校验失败。客户端收到 400 要先看响应体里有没有现代 JSON-RPC 错误,再决定要不要回退 legacy。

三、原始链接

官方一手来源

引用的社区一手材料