一、MCP Streamable HTTP Transport 与 SSE:技术选型辨析
在构建需要实时数据流的AI应用时,MCP 的 Streamable HTTP Transport 和传统的 Server-Sent Events 是两种常见的备选方案。虽然它们都旨在实现服务器到客户端的单向数据推送,但其设计目标、协议层级和应用场景有着本质区别。
核心定义
- SSE:一种 Web 标准协议SSE 是一个基于 HTTP 的轻量级标准。它允许服务器通过一个持久的 HTTP 连接,主动向客户端(通常是浏览器)推送格式化的文本数据流。其核心特点是简单、易用,是 Web 生态的原生组成部分。
- MCP Streamable HTTP Transport:一个应用层传输机制这是 Model Context Protocol 规范中定义的一种传输方式,用于在 MCP 客户端与服务器之间交换结构化的消息(如工具调用、结果、资源列表等)。它不是一个像 SSE 那样的独立协议,而是 MCP 这个特定应用协议之上的一个实现约定。
主要区别总结
特性 | MCP Streamable HTTP Transport | Server-Sent Events |
协议层级 | 应用层协议(MCP)的传输实现 | 网络通信标准协议 |
数据格式 | 承载的是结构化的 MCP 消息(JSON-RPC-like)。 | 传输的是纯文本流,格式遵循 data:、event: 等字段的规范。 |
设计目标 | 专门为 MCP 客户端-服务器间双向通信的“单向流”部分 而设计。例如,流式传输一个工具调用的执行日志或进度更新。 | 为 通用的服务器到客户端(尤其是浏览器)事件推送 而设计。 |
连接方向 | 在 MCP 中,它通常用于服务器向客户端推送流数据,但其底层连接本身可能由客户端发起的一个请求(如带 Accept: text/plain 的 GET 请求)来建立。 | 严格的单向通信 :服务器 -> 客户端。客户端通过一个普通的 HTTP GET 请求发起连接,然后服务器持续推送。 |
生态与兼容性 | 与 MCP 生态系统强绑定,主要用于 AI 应用与外部服务(如数据库、文件系统)的桥接。 | 广泛支持 ,是所有现代浏览器的内置功能,也可用于任何 HTTP 客户端。通用性极强。 |
结论与选型建议
简单来说,可以将两者的关系理解为 “专用车”与“通用零部件”。
- SSE 是一个“通用零部件”:它是一种解决“如何从服务器向客户端持续发送数据”这个通用问题的标准化方案。你可以在任何需要此功能的 Web 应用或服务中使用它。
- MCP Streamable HTTP Transport 是一辆“专用车”:它是在 MCP 这个特定框架下,为了解决“如何将服务器端的结构化数据(如日志、进度)流式传输给 MCP 客户端”这个具体问题而设计的。它很可能在内部使用了类似 SSE 的机制(例如,通过一个持久的 HTTP 响应流),但其之上承载的数据是 MCP 协议专属的。
因此,你的选择取决于你的目标:
- 如果你正在 开发或使用 MCP 服务器,并需要实现流式输出(如实时日志),那么你需要遵循 MCP Streamable HTTP Transport 的规范。
- 如果你需要在 一个普通的 Web 应用或后端服务 中实现简单的服务器推送功能(如新闻推送、状态更新),那么 SSE 是一个成熟、简单且标准的选择。
二、MCP Streamable HTTP Transport 示例代码
创建虚拟环境及安装mcp依赖包
复制运行服务端代码
server_demo.py
https://github.com/modelcontextprotocol/python-sdk/blob/main/examples/snippets/servers/streamable_config.py
复制启动成功!
运行客户端获取工具列表:
client_demo.py
https://github.com/modelcontextprotocol/python-sdk/blob/main/examples/snippets/clients/streamable_basic.py
复制获取到了服务端的工具列表:
图片
参考文档:https://github.com/modelcontextprotocol/python-sdk.git