Skip to content
MCP 文档版本 2026-07-28 更新于 2026-10-14

关键变更

本文档列出了自上一修订版 2025-11-25 以来对 Model Context Protocol (MCP) 规范所做的变更。

主要变更

  1. 从 Streamable HTTP 传输中移除协议级会话和 Mcp-Session-Id 头。列表端点(tools/list、resources/list、prompts/list)不再因连接而异。需要跨调用状态的服务端使用显式的、由服务端生成的句柄,并将其作为普通工具参数传递(SEP-2567)。

  2. 使 MCP 无状态:移除 initialize/notifications/initialized 握手。现在每个请求都在 _meta 中携带其协议版本和客户端能力(io.modelcontextprotocol/protocolVersion、io.modelcontextprotocol/clientCapabilities)。客户端 SHOULD(应该)在每个请求中标识自身(io.modelcontextprotocol/clientInfo),服务端 SHOULD(应该)在每个结果的 _meta 中标识自身(io.modelcontextprotocol/serverInfo)。版本不匹配时返回 UnsupportedProtocolVersionError(SEP-2575)。

  3. 新增 server/discover:服务端 MUST(必须)实现此 RPC,以通告其支持的协议版本、能力和身份。客户端 MAY(可以)在任何其他请求之前调用它,以进行预先版本选择,或在 STDIO 上将其用作向后兼容性探测(SEP-2575)。

  4. 用 subscriptions/listen 替换 HTTP GET 端点和 resources/subscribe/resources/unsubscribe:这是一个单一的长生命周期 POST 响应流,用于选择加入的服务端到客户端变更通知。客户端选择加入特定类型(toolsListChanged、promptsListChanged、resourcesListChanged、resourceSubscriptions);服务端进行确认,并使用 io.modelcontextprotocol/subscriptionId 标记通知。请求作用域的通知(如 notifications/progress 和 notifications/message)继续在其相关请求的响应流上流动,而不是在 subscriptions/listen 流上(SEP-2575)。

  5. 移除 ping、logging/setLevel 和 notifications/roots/list_changed。日志级别现在通过 _meta 中的 io.modelcontextprotocol/logLevel 按请求设置;对于未包含此字段的请求,服务端 MUST NOT(不得)发出 notifications/message(SEP-2575)。

  6. 将实验性任务从核心协议移出,放入官方扩展(io.modelcontextprotocol/tasks)。重新设计的扩展用通过 tasks/get 轮询以及用于客户端到服务端输入的新 tasks/update 取代了阻塞式 tasks/result 方法,移除了 tasks/list,并允许服务端在无需逐请求选择加入的情况下主动返回任务句柄(SEP-2663)。

  7. 引入多轮往返请求(MRTR)模式,取代此前发送服务端发起请求(如 roots/list、sampling/createMessage 或 elicitation/create)的方式。服务端返回 InputRequiredResult(resultType: "input_required"),其 inputRequests 字段携带处理该请求所需的额外信息请求。客户端在重试原始请求时通过 inputResponses 提供所请求的信息作为响应。(SEP-2322)。

  8. 所有结果现在都携带必需的 resultType 字段:普通结果为 "complete",多轮往返请求中间结果为 "input_required"。对于省略该字段的早期协议服务端返回的结果,客户端 MUST(必须)将其视为 "complete"(SEP-2322)。

  9. 从 Streamable HTTP 传输中移除 SSE 流断流恢复和消息重投递(Last-Event-ID 头和 SSE 事件 ID)。响应流中断会丢失进行中的请求;客户端 MUST(必须)以新的请求 ID 将其作为新请求重新发出(SEP-2575)。

次要变更

  1. 在 ClientCapabilities 和 ServerCapabilities 中新增 extensions 字段,以支持核心协议之外的可选扩展。
  2. 记录 _meta 键(traceparent、tracestate、baggage)的 OpenTelemetry 跟踪上下文传播约定(SEP-414)。
  3. 服务端 SHOULD(应该)以确定性排序从 tools/list 返回工具,以支持客户端缓存并提高 LLM 提示模板缓存命中率。
  4. 要求 Streamable HTTP POST 请求携带标准 MCP 请求头(Mcp-Method、Mcp-Name),并新增通过 x-mcp-header 支持来自工具参数的自定义头(SEP-2243)。
  5. 通过新的 CacheableResult 接口,要求 tools/list、prompts/list、resources/list、resources/read 和 resources/templates/list 返回的结果携带 ttlMs 和 cacheScope 字段。ttlMs 是新鲜度提示(以毫秒为单位),允许客户端缓存响应并减少轮询;cacheScope("public" 或 "private")控制共享中间方是否可以缓存响应。这两个字段与现有的 listChanged 通知互补(SEP-2549)。
  6. 将资源未找到错误码从 -32002 改为 -32602(Invalid Params),以与 JSON-RPC 规范保持一致。
  7. 授权服务器 SHOULD(应该)根据 RFC 9207 在授权响应中包含 iss 参数,并且 MCP 客户端在兑换授权码之前 MUST(必须)根据记录的签发者验证存在的 iss(SEP-2468)。
  8. 要求 MCP 客户端在动态客户端注册期间指定适当的 application_type,以避免 OpenID Connect 重定向 URI 冲突(SEP-837)。
  9. 澄清客户端凭据绑定到签发它们的授权服务器:客户端 MUST(必须)按签发者标识符为持久化凭据建立键,MUST NOT(不得)将其与不同的授权服务器复用,并且 MUST(必须)在授权服务器变更时重新注册(SEP-2352)。
  10. 放宽 inputSchema 和 outputSchema,允许任何 JSON Schema 2020-12 关键字,并放宽 structuredContent,允许任何 JSON 值。新增 $ref 解析要求以及组合关键字的资源边界(SEP-2106)。
  11. 移除 notifications/elicitation/complete 通知以及 URL 模式征询请求的 elicitationId 字段,二者均于 2025-11-25 引入。在多轮往返请求模式下,客户端通过重试原始请求来获知带外交互的结果,因此服务端发起的完成信号——以及用于关联它的标识符——不再适合该协议。需要在重试之间关联征询的服务端在 requestState 中编码自己的标识符。
  12. 定义错误码分配策略,划分 JSON-RPC 服务端错误范围:-32000 至 -32019 仍为实现自定义(现有 SDK 用法予以保留),-32020 至 -32099 保留给 MCP 规范。相应地重新编号本草案中引入的错误码——HeaderMismatch -32001 → -32020、MissingRequiredClientCapability -32003 → -32021、UnsupportedProtocolVersion -32004 → -32022——并将 HeaderMismatchError 添加到 schema 中,此前它仅存在于传输层描述中。

已弃用

此处列出的功能仍属于规范的一部分,但已计划根据功能生命周期与弃用策略予以移除。新的实现不应采用这些功能。已弃用功能注册表跟踪当前处于已弃用状态的所有功能。

  1. 弃用 Roots、Sampling 和 Logging 功能 (SEP-2577)。 这些功能在弃用窗口期内仍完全可用,但新的实现不应为其添加支持。建议的迁移方式: 通过工具参数、资源 URI 或服务端配置传递目录或文件,以替代 Roots;直接集成 LLM 提供方 API,以替代 Sampling;将日志写入 stderr(stdio)或使用 OpenTelemetry,以替代 Logging。

  2. 根据功能生命周期策略,将 HTTP+SSE 传输(自协议版本 2025-03-26 起已弃用)重新归类为已弃用 (SEP-2596)。 请迁移至 Streamable HTTP。

  3. 将 includeContext 的取值 "thisServer" 和 "allServers" (自协议版本 2025-11-25 起软弃用)重新归类为已弃用 (SEP-2596)。 请省略该字段或使用 "none";这些取值将不晚于 Sampling 功能本身被移除。

  4. 弃用 OAuth 2.0 动态客户端注册协议 (RFC7591)作为客户端注册 机制,转而采用 客户端 ID 元数据文档 (PR #2858)。 对于不支持客户端 ID 元数据文档的授权服务器,该机制仍可用于向后兼容。

其他 schema 变更

  1. schema.json 现在正确反映了 minimum/maximum/default 的 Typescript 定义是 number 而不只是 integers。这是由于使用 --defaultNumberType integer 运行生成器所导致的 (PR#2710)。

治理与流程更新

  1. 采纳规范 功能生命周期与弃用策略, 其中定义了 Active、Deprecated 和 Removed 功能状态、最短十二个月的弃用窗口,以及 已弃用功能注册表 (SEP-2596)。

流程变更

  1. 正式确立基于 PR 的 SEP 工作流,包括 seps/ 目录中的 markdown 文件、源自 PR 的编号、发起人职责,以及通过 PR 标签进行状态管理 (SEP-1850)。

完整变更日志

有关自上一协议修订版以来所有变更的完整列表, 请参见 GitHub。

BytesRouter 是社区翻译站点,所有译文仅供参考,一切以官方英文原文为准。