链载Ai

标题: MCP协议或迎来重大更新:引入Streamable HTTP传输 [打印本页]

作者: 链载Ai    时间: 2 小时前
标题: MCP协议或迎来重大更新:引入Streamable HTTP传输
图片

大家通过上面这张图简单了解一下什么是MCP

MCP协议迎来重大更新,引入了全新的Streamable HTTP传输机制。这一更新解决了当前HTTP+SSE传输方式的关键限制,同时保留了其优势。这项改进得益于来自Shopify、Pydantic、Cloudflare、LangChain、Vercel、Anthropic团队及MCP社区众多成员的宝贵反馈。


主要变更

与当前HTTP+SSE传输相比,新版本有以下变化:

-移除了`/sse`端点

-所有客户端→服务器消息通过`/message`(或类似)端点传输

-所有客户端→服务器请求都可由服务器升级为SSE,用于发送通知/请求

-客户端在请求头中提供会话ID;服务器可根据需要关注此ID

-客户端可通过空GET请求到`/message`端点来初始化SSE流

这种方法可以向后兼容实现,并允许服务器根据需要完全无状态运行。


更新动机

当前的远程MCP通过HTTP+SSE传输工作,存在以下问题:

-不支持恢复性

-要求服务器维护高可用性的长连接

-服务器消息只能通过SSE传递


主要优势

1.无状态服务器可行性:不再需要高可用性的长连接

2.纯HTTP实现:MCP可在纯HTTP服务器中实现,无需SSE支持

3.基础设施兼容性:仅是"普通HTTP",确保与中间件和基础设施兼容

4.向后兼容:现有传输机制的增量演进

5.灵活升级路径:服务器可根据需要使用SSE进行流式响应


应用场景


无状态服务器

一个完全无状态的服务器可以不支持长连接:

-始终确认初始化(无需保存状态)

-通过单个JSON-RPC响应处理工具列表请求

-执行工具调用请求,完成后将响应作为HTTP响应体返回


带流式处理的无状态服务器

无状态服务器仍可利用流式处理:

-接收工具调用请求时,服务器指示响应将使用SSE

-执行工具时发送进度通知

-工具执行完成后发送响应并关闭SSE流


有状态服务器

类似当前实现,但需要处理会话ID头,以便在水平扩展部署中正确路由消息。


为何不选择WebSocket

团队详细讨论了将WebSocket作为主要远程传输的可能性,但决定暂不采用,原因如下:

-在"RPC式"使用场景下会产生不必要的运营和网络开销

-浏览器无法附加授权等头信息

-只有GET请求可透明升级到WebSocket,需要复杂的两步升级过程


总结

此次更新为MCP协议带来更高的灵活性和稳健性,使其能够适应更广泛的应用场景。虽然当前选择了基于HTTP的方案,但未来仍可能探索WebSocket等其他传输方式。

通过这次技术升级,MCP协议将更好地满足现代应用架构的需求,为开发者提供更强大、更可靠的消息通信能力。








欢迎光临 链载Ai (https://www.lianzai.com/) Powered by Discuz! X3.5