近日,Anthropic 工程师在 MCP 的 GitHub 仓库提交了一个希望采用 "Streamable HTTP" 传输代替「HTTP+SSE」的 PR,以解决当前远程 Model Context Protocol (MCP) 传输方式的关键限制,同时保留其优势。
根据该 PR 目前的状态,MCP 现已合并"Streamable HTTP" 提案。
https://github.com/modelcontextprotocol/specification/pull/206
Streamable HTTP 改变了 MCP 的数据传输方式,让协议变得:
-
更灵活(支持流式传输,但不强制)
-
更易用(支持无状态服务器)
-
更兼容(适用于标准 HTTP 基础设施)
💡 简单比喻: 原来的 MCP 传输方式就像是你和客服通话时必须一直保持在线(SSE 需要长连接),而新的方式更像是你随时可以发消息,然后等回复(普通 HTTP 请求,但可以流式传输)。
主要变更
-
移除 /sse 端点
- 服务器不再单独维护 SSE(Server-Sent Events)端点。
-
所有客户端 → 服务器的消息都通过 /message 端点
- 任何数据传输都通过 /message 进行,不再依赖 /sse。
-
服务器可以选择升级请求为 SSE
- 服务器可以根据需要动态升级 HTTP 请求为 SSE 流,用于发送通知或请求。
-
客户端通过 Header 提供 Mcp-Session-Id
- 服务器可选是否需要存储 Session 信息,但客户端始终发送 Mcp-Session-Id 头部信息。
-
支持无状态(Stateless)服务器
- 服务器可选择完全无状态运行,不再需要维持长期连接。
变更的动机
当前的 HTTP+SSE 传输 存在以下问题:
-
不支持可恢复性(Resumability):连接断开后,客户端必须重新开始整个会话。
-
服务器需要维持长期连接(High Availability Requirement):服务器必须保持高可用性,以支持持续的 SSE 连接。
-
SSE 仅支持服务器 → 客户端消息,无法灵活进行双向通信。
新的 “Streamable HTTP” 传输方式解决了这些问题,并增强了系统的可扩展性和灵活性。