我花了一周时间,把一套同时支持新旧两版 MCP 协议的平台完完整整地迁到了 2026-07-28 规范上。这篇文章,就是我动手之前最想要的那种指南——不是规范摘要,而是一份差异清单、一个构建顺序,外加两个你在更新日志里绝对看不到的坑。
这背后有一个关键思路切换:旧版 MCP 在握手时靠版本字符串协商,而新的 SDK 不再把版本看成一串线性点。它划分了两个“协议纪元”——2025-11-25 纪元与 2026-07-28 纪元。这俩不是同一条线上的两个点,而是两套碰巧共用了 JSON-RPC 的独立线上协议。一旦你内化这个认知,迁移就不再是“加个功能”,而是“支持第二套协议”。
![]()
忘掉 SDK 的 API,直接看你的网关、负载均衡器和安全扫描器实际能看到的东西。
旧版纪元至少需要两次往返,并且必须携带一个你永远要维护的会话头:先发一次 initialize 请求,服务器返回 Mcp-Session-Id,此后所有请求都要黏在这个会话 ID 上。新版纪元只走一次往返,不握手,方法名和路由信息直接塞进 HTTP 头(Mcp-Method 与 Mcp-Name),_meta 里的键也都变成了全限定名,比如 io.modelcontextprotocol/protocolVersion,不再是短版 protocolVersion。写错这个键不会报错,只会静默不生效——务必当心。会话 ID 则彻底消失,集群里任意一个实例都能处理同一个请求。
这带来的直接回报就是:以前需要粘性会话和共享会话存储的远程服务器,现在可以直接躲在一个平平无奇的轮询负载均衡器后头。这才是这次变化的真正推手。
还有一件让我意外但值得庆幸的事:v2 没有替换掉旧 SDK,而是与之并发出厂。包名分开了——@modelcontextprotocol/sdk 仍是 1.x 长期维护线,@modelcontextprotocol/clien 则为新版准备了独立命名空间。所以迁移完全可以是渐进的,不必一刀切。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.