MCP v2 正式定稿!协议史上最大更新:无状态化、扩展框架、企业级安全全面升级

MCP v2 正式定稿!协议史上最大更新:无状态化、扩展框架、企业级安全全面升级

协议版本: 2026-07-28 (Final)
月度 SDK 下载量: 4 亿+ | 服务器总数: 13,870+


2026 年 7 月 28 日,MCP(Model Context Protocol)v2 规范正式定稿。这是自 2024 年 11 月发布以来规模最大的一次修订——核心架构从有状态、会话绑定全面转向无状态、请求自包含的分布式友好模型

这意味着什么?简单说:你可以像部署普通微服务一样部署 MCP 服务器了。


一、先看个全景

MCP v2 的关键变化可以概括为 "一删、三弃、两扩、一升"

变化 内容
🔥 一删 删掉 initialize 握手和 Mcp-Session-Id,协议变无状态
🗑️ 三弃 Sampling、Roots、Logging 功能标记弃用(12 个月宽限期)
🧩 两扩 MCP Apps(交互式 UI)+ Tasks(异步任务)作为正式扩展
🔐 一升 OAuth 2.1 + OIDC 强制,企业托管授权(EMA)稳定版发布

二、最核心的变革:无状态化

以前的问题

v1 中每个 MCP 连接都要走一个 initialize 握手,拿回一个 Mcp-Session-Id,后续请求都要带着这个 ID。这就意味着:

  • 客户端被钉死在某一个服务器实例上
  • 想水平扩展?得用粘性会话或共享 Redis 存会话
  • Kubernetes 部署?Ingress 规则要写解析 session ID 的 hack
  • Lambda/Cloudflare Workers?基本没法好好跑

v2 怎么改的

删掉握手,每请求自包含。每个 JSON-RPC 请求通过 _meta 字段携带协议版本、客户端身份和能力信息。任何服务器实例都可以处理任何请求。

v1:有状态

POST /mcp          → 返回 Mcp-Session-Id xxx
GET  /mcp?id=xxx   → SSE 流(长连接)
POST /mcp?id=xxx   → 发请求

v2:无状态

POST /mcp
  Headers: MCP-Protocol-Version: 2026-07-28
           Mcp-Method: tools/call
  Body: { _meta: { clientInfo, capabilities }, params: {} }

运维上带来什么好处

  • 负载均衡:简单的轮询即可,粘性会话拜拜
  • K8s ServicesessionAffinity: ClientIPsessionAffinity: None
  • 部署策略:标准滚动更新,无需优雅排空会话
  • 网关路由:直接基于 Mcp-Method 头部路由
  • 无服务器架构:AWS Lambda、Vercel、Cloudflare Workers 天然支持

💡 如果还需要跨调用保存状态怎么办?
用"显式句柄"模式——工具调用返回一个 basket_id,后续调用把它当参数传回来。状态以数据形式存在,比藏在连接里更清爽。


三、新增协议特性

多轮次请求(MRTR)

工具可以在执行过程中返回 InputRequiredResult 来询问用户,客户端拿到回答后重试请求。解决了之前需要持久通道才能做用户确认的问题。

可路由传输头

新增两个标准 HTTP 头:

  • Mcp-Method:标识调用的是哪个 RPC 方法(tools/calltools/list 等)
  • Mcp-Name:调用命名资源时携带名称

网关和限流器无需解析 JSON 请求体就能做路由、计费和限流。

响应缓存

tools/listresources/list 等列表响应现在返回 ttlMs(多久算"新鲜")和 cacheScope(共享范围)。工具清单变化不频繁的服务器,设置一个较大的 ttlMs 可以省掉每次 agent 轮次的重复查询。

标准错误码

MCP 自定义错误码 -32002(资源不存在)迁移为 JSON-RPC 标准 -32602


四、哪些功能被弃用了

v2 引入正式弃用政策(SEP-2596):标记弃用后至少保持可用 12 个月,最早移除日期是 2027-07-28

功能 弃用原因 替代方案
Sampling 服务器回调客户端 LLM,依赖持久连接 服务器直接调用 LLM API(Anthropic、OpenAI 等)
Roots 会话级文件系统范围声明 工具参数传递或服务器配置
Logging 协议级日志绑定活动连接不适用无状态 stderr / OpenTelemetry
HTTP+SSE 传输 双端点持久流设计 Streamable HTTP
动态客户端注册 安全性不足 显式 OAuth 注册 / CIMD

⚠️ Sampling 是迁移工作量最大的——它改变了模型调用发生的位置(从客户端移到服务器端)。如果你的服务器用到了 Sampling,建议尽早规划。


五、扩展框架:MCP 的"插槽"

v2 正式把扩展提升为一等公民,使用反向 DNS 标识符和独立版本号。两个官方扩展随 v2 发布:

MCP Apps

服务器可以返回交互式 HTML 界面,在客户端的沙箱化 iframe 中渲染,通过 postMessage 双向通信。支持 Cluade、Goose、VS Code Insiders、ChatGPT。

想象一下:一个数据库查询工具,返回的不是纯文本结果,而是可以直接在聊天界面里操作的交互式表格。

Tasks(任务)

处理耗时操作的标准异步模式。服务器返回 taskId,客户端轮询状态,支持暂停等待输入和取消操作。taskId 可跨连接存活——断线重连后还能继续查询。

适用场景:CI/CD 流水线触发、大数据分析、长时间策略扫描等。


六、授权体系全面升级

OAuth 2.1 + OIDC 强制

v2 要求支持最新的 OAuth 2.1 和 OpenID Connect 标准,包括:

  • 强制 RFC 9207 发行者验证
  • 动态客户端注册废弃,转向更安全的显式注册
  • 阶梯式权限提升中的作用域累积

企业托管授权(EMA)

2026-06-18 发布稳定版。解决了企业部署 MCP 最大的痛点——每个员工都要手动授权每个服务器。

工作原理:管理员在 Okta 等身份提供商处配置一次,用户在 SSO 登录时自动完成授权,无需逐个点击同意

早期采用者

  • 身份提供商:Okta
  • 客户端:Anthropic Cluade、VS Code
  • 服务端:Asana、Atlassian、Canva、Figma、Linear、Supabase

七、四大 SDK 变更一览

SDK v2 版本 最大变化
Python mcp==2.0.0b1 FastMCPMCPServer;默认兼容新旧协议
TypeScript @modelcontextprotocol/server / client 包拆分,废弃 @modelcontextprotocol/sdk;ESM 强制
Go v1.7.0-pre.1 温和升级,同模块路径,API 基本不变
C# 2.0.0-preview.1 HTTP 传输默认无状态模式

🔧 TypeScript 用户特别注意:v2 不是改版本号就能升级的——它换包名了!@modelcontextprotocol/sdk@modelcontextprotocol/server@modelcontextprotocol/client。官方提供了 codemod 工具:

npx @modelcontextprotocol/codemod@beta v1-to-v2 .

八、不慌,现有服务不会停

官方明确承诺:

场景 兼容性
v1 服务器 + v1 客户端 ✅ 完全正常
v1 服务器 + v2 客户端 ✅ v2 客户端自动回退到 initialize 握手
v2 服务器 + v1 客户端 ✅ v2 服务器同时响应新旧协议
v2 服务器 + v2 客户端 ✅ 无状态模式

弃用功能也有 12 个月宽限期,不会突然不能用。

但建议现在就做三件事:

  1. 审计——你的服务器依赖会话状态吗?用了 Sampling/Roots/Logging 吗?
  2. 原型——拉一个分支,用 Beta SDK 试一试
  3. 规划——先在非关键服务器上升级,逐步推进

九、关键时间线回顾

时间 事件
2024-11-25 MCP v1 初始规范发布
2025-12-09 MCP 捐赠给 Linux Foundation(AAIF)
2026-01-26 MCP Apps 扩展正式发布
2026-05-21 v2 版本候选(RC)锁定
2026-06-18 企业托管授权(EMA)稳定版
2026-06-29 四个 Tier 1 SDK Beta 齐发
2026-07-28 v2 规范正式定稿
2027-07-28 弃用特性最早移除日期

十、资源与参考


MCP 正在从一个面向单应用的本地协议,进化为支撑大规模分布式 AI Agent 基础设施的开放标准。v2 定稿不是终点,而是起点。
这个生态,值得每一个做 AI 基建的人持续关注。

posted @ 2026-07-30 13:51  小白跃升坊  阅读(130)  评论(0)    收藏  举报