重点解析:MCP协议通过引入“流式HTTP”传输方案,实现完全无状态化,简化通信方式,为更广泛的应用打下坚实基础。
(adsbygoogle=window.adsbygoogle||[]).push({});
近期,MCP(消息通道协议)的关键技术改进建议获批准,预示着这一新兴协议将拓展更广泛的应用领域。本次改进的核心在于革新MCP的数据传输方式,实现无状态化,简化为使用HTTP协议进行通信。
背景:HTTP+SSE的局限性
此前,MCP协议使用HTTP+SSE(服务器发送事件)传输数据,但存在以下局限性:
- 不支持断线重连
- 服务器需保持长连接以保证稳定
- 服务器消息仅能通过SSE发送
革新方案:流式HTTP
为解决上述问题,社区提出“流式HTTP”传输方案,包含以下关键调整:
- 取消/sse接口:所有客户端到服务器的消息通过/message(或类似)接口传输。
- 请求升级为SSE:服务器可将客户端请求升级为SSE连接,用于实时推送通知或数据。
- 会话ID管理:客户端在HTTP请求头中提供会话ID,服务器可选择性地利用该ID识别会话。
- 启动SSE流:客户端可向/message接口发送空GET请求,建立SSE数据流。
这些改进使MCP服务器能够实现完全无状态化,无需长期保持连接,降低服务器复杂性和资源消耗。同时,纯HTTP协议的应用提升了MCP的兼容性,使其更好地融入现有网络设施和中间件。
社区积极响应
这项改进提议受到MCP社区的广泛欢迎和积极反馈。Shopify、Pydantic、Cloudflare、LangChain、Vercel以及Anthropic团队等众多机构和个人都为此贡献了宝贵意见。
无状态化的多重优势
无状态化是本次MCP协议更新的核心亮点,它为MCP带来多重优势:
- 简化部署与维护:无需处理会话数据的持久化和同步,服务器部署和扩展更简便。
- 提升系统稳定性:单个服务器故障不影响系统整体运行,更易实现高可用性。
- 降低资源消耗:无需维护长连接和会话状态,服务器资源占用和成本均降低。
应用场景展望
无状态MCP的实现为众多应用场景开启新的可能性:
- 无状态工具服务器:可构建完全无状态的MCP服务器,仅提供语言模型工具功能,无需状态管理,简化工具调用流程。
- 支持流式响应的无状态服务器:即使无状态服务器,亦可利用SSE提供流式响应,例如在工具执行期间实时推送进度信息。
为何选择流式HTTP而非WebSocket?
在传输方案选择上,WebSocket也曾被考虑,但最终社区选择了“流式HTTP”,主要基于以下考量:
- RPC场景的开销:对于简单的RPC(远程过程调用)场景,强制使用WebSocket会引入不必要的运维和网络负担。
- 浏览器兼容性:浏览器环境下,WebSocket在HTTP请求头设置和第三方库实现方面不如SSE灵活。
- 协议升级复杂性:WebSocket仅支持GET请求升级,POST请求升级过程复杂,增加延迟。
- 协议规范精简:MCP协议规范倾向于限制官方传输协议种类,以避免兼容性问题。
安全性的探讨
无状态化虽带来诸多优势,但也引发关于安全性的讨论,特别是会话ID管理和授权方面。
部分开发者指出,若服务器使用Mcp-Session-Id请求头管理会话,应将会话ID与授权环境绑定,防止其在不同授权环境中被滥用。这意味着会话ID应与特定用户或客户端会话关联,而非全局通用。
对于追求极简服务器的开发者,复杂的身份验证机制可能并不适用。在有状态模式下,HTTP请求本身可视为会话边界。但在无状态模式下,如何在无HTTP-only Cookie情况下安全管理会话,仍需关注。
有开发者建议引入HTTP-only Cookie管理客户端会话,并为每个客户端会话分配唯一ID,再在其下管理多个MCP会话ID,实现分层会话管理,兼顾安全性和灵活性。
总结与展望
MCP协议向无状态化的演进是迈向实用化和易用性的重要一步。“流式HTTP”方案的采用,有望降低MCP部署门槛,吸引更多开发者和应用场景。尽管安全性方面仍有讨论空间,但相信随着社区不断完善,MCP协议的未来值得期待。
相关提案
[RFC] Replace HTTP+SSE with new "Streamable HTTP" transport #206 提案链接: [RFC] Replace HTTP+SSE with new "Streamable HTTP" transport #206
暂无评论