Anthropic今日宣布对Model Context Protocol (MCP)进行重大更新,推出全新的"Streamable HTTP"传输方式,替代现有的HTTP+SSE方案。这一创新彻底解决了MCP远程传输的关键限制,同时保留了其原有优势。

这次更新本质上是对MCP数据传输机制的重构,使协议变得更灵活、更易用且更具兼容性。打个比方,原来的MCP传输方式就像与客服通话时必须保持持续在线(SSE需要长连接),而新方案则类似于随时可以发送消息并等待回复(普通HTTP请求,但可选流式传输)。

此次更新主要包括五大核心变更:首先,移除了专用的/sse端点,服务器不再单独维护SSE(Server-Sent Events)端点;其次,所有客户端到服务器的消息均通过统一的/message端点传输,不再依赖/sse;第三,服务器可根据需要动态将HTTP请求升级为SSE流,用于发送通知或请求;第四,客户端通过Header提供Mcp-Session-Id,服务器可自行决定是否存储会话信息;最后,支持完全无状态的服务器运行,不再需要维持长期连接。

推动此次变更的主要原因在于当前HTTP+SSE传输存在多项缺陷:不支持连接断开后的恢复功能,迫使客户端必须重新开始整个会话;服务器需要保持高可用性以支持持续的SSE连接;且SSE仅支持单向通信(服务器到客户端),无法实现灵活的双向通信。新的"Streamable HTTP"传输方式成功解决了这些问题,同时显著提升了系统的可扩展性和灵活性。

对开发者而言,这一更新带来诸多便利:实现MCP服务器变得更加简单,只需普通HTTP服务器即可支持MCP,无需再搭建专门的SSE服务器;部署到Vercel、Cloudflare、AWS Lambda等不支持长连接的云平台变得更加容易;兼容性大幅提升,新方案作为标准HTTP可与CDN、API网关、负载均衡无缝集成;扩展性显著增强,支持无状态模式运行,且可在需要时动态升级到SSE。

在基础设施和服务器架构方面,新方案同样带来了革命性变化:无状态服务器成为可能,服务器不再需要持续存储客户端会话信息;更适合微服务架构,可轻松与REST API、GraphQL、负载均衡、CDN等系统集成;服务器资源利用率更高,处理完请求后即可释放资源,适合高并发场景。

有趣的是,尽管SSE存在问题,Anthropic并未选择WebSocket作为替代方案。原因在于:WebSocket需要维持长连接,而MCP主要采用类似RPC的模式,每个请求独立执行;WebSocket无法传输HTTP头部信息,导致身份验证过程变得复杂;WebSocket仅支持GET升级而非POST,与MCP主要使用的POST请求不兼容。因此,最终决定继续使用HTTP,但赋予服务器根据需要升级到SSE的能力,而非强制使用SSE或WebSocket。

总体而言,此次更新使MCP变得更加轻量级且灵活,服务器可自主决定是否支持流式传输;部署流程显著简化,适用于Serverless架构;兼容性大幅提升,可与各种网络基础设施无缝协作;服务器资源利用率更高,支持更大规模的并发请求。

这一创新性变更使MCP服务器变得更简单、更高效、更灵活,能够支持更大规模的分布式部署,彻底摆脱了SSE的限制,为AI模型与应用间的通信开辟了新篇章。

项目地址:https://github.com/modelcontextprotocol/specification/pull/206