本文档列出了自上一个修订版 2025-11-25 以来对模型上下文协议 (MCP) 规范所做的更改。Documentation Index
Fetch the complete documentation index at: https://mcp.zhcndoc.com/llms.txt
Use this file to discover all available pages before exploring further.
重大变更
-
移除流式 HTTP 传输中的协议级会话以及
Mcp-Session-Id标头。列表端点(tools/list、resources/list、prompts/list)不再按连接变化。需要跨调用状态的服务器应使用显式的、由服务器签发的句柄,并将其作为普通工具参数传递 (SEP-2567)。 -
使 MCP 无状态:移除
initialize/notifications/initialized握手。现在每个请求都在_meta中携带其协议版本、客户端标识和客户端能力(io.modelcontextprotocol/protocolVersion、io.modelcontextprotocol/clientInfo、io.modelcontextprotocol/clientCapabilities)。版本不匹配时返回UnsupportedProtocolVersionError(SEP-2575)。 -
添加
server/discover:服务器必须实现此 RPC,以公布其支持的协议版本、能力和标识。客户端可以在任何其他请求之前调用它,以便提前选择版本;或者在 STDIO 上将其用作向后兼容探测 (SEP-2575)。 -
将 HTTP GET 端点以及
resources/subscribe/resources/unsubscribe替换为subscriptions/listen:为已选择接收的服务器到客户端变更通知提供单个长生命周期的 POST-响应流。客户端可针对特定类型选择订阅(toolsListChanged、promptsListChanged、resourcesListChanged、resourceSubscriptions);服务器会确认并使用io.modelcontextprotocol/subscriptionId为通知打标签。诸如notifications/progress和notifications/message这类与请求作用域相关的通知,继续沿它们所关联请求的响应流传递,而不是subscriptions/listen流 (SEP-2575)。 -
移除
ping、logging/setLevel和notifications/roots/list_changed。日志级别现在通过_meta中的io.modelcontextprotocol/logLevel按请求设置;对于未包含此字段的请求,服务器不得发送notifications/message(SEP-2575)。 -
将实验性任务移出核心协议,纳入官方扩展(
io.modelcontextprotocol/tasks)。重新设计后的扩展以通过tasks/get轮询和新的tasks/update接收客户端到服务器的输入,取代了阻塞式tasks/result方法,移除了tasks/list,并允许服务器无需按请求显式选择即可返回任务句柄 (SEP-2663)。 -
引入多轮往返请求(MRTR)模式,用以替代此前发送服务器发起请求的方式,例如
roots/list、sampling/createMessage或elicitation/create。服务器返回inputRequests,这是一种新的 resultType,包含处理该请求所需的附加信息。客户端随后在下一次请求中通过inputResponses响应并提供所请求的信息。(SEP-2322)。 - 弃用 Roots、Sampling 和 Logging 功能 (SEP-2577)。 这些功能在弃用窗口期间仍然完全可用,但新的 实现不应再为其添加支持。
次要变更
- 为
ClientCapabilities和ServerCapabilities添加extensions字段,以支持核心协议之外的可选 扩展。 - 为
_meta键(traceparent、tracestate、baggage)记录 OpenTelemetry 追踪上下文传播约定 (SEP-414)。 - 服务器应当以确定性的顺序从
tools/list返回工具,以便支持客户端缓存并提高 LLM 提示缓存命中率。 - 对 Streamable HTTP POST 请求要求使用标准 MCP 请求标头(
Mcp-Method、Mcp-Name),并通过x-mcp-header支持将工具参数中的自定义标头传递出去 (SEP-2243)。 - 通过新的
CacheableResult接口,为tools/list、prompts/list、resources/list、resources/read和resources/templates/list返回的结果添加ttlMs和cacheScope字段。ttlMs是新鲜度提示(以毫秒为单位),允许客户端缓存响应并减少轮询;cacheScope("public"或"private")控制共享中间代理是否可以缓存该响应。这两个字段是对现有listChanged通知的补充 (SEP-2549)。 - 将资源未找到错误码从
-32002更改为-32602(无效参数),以与 JSON-RPC 规范保持一致。
其他架构变更
无治理和流程更新
无流程变更
- 正式化基于 PR 的 SEP 工作流,包括
seps/目录中的 markdown 文件、源自 PR 的编号、赞助者职责以及通过 PR 标签进行状态管理 (SEP-1850)。