AI在线 AI在线

MCP Streamable HTTP Transport 与 SSE:专用通道与通用协议的辨析,内附mcp的示例代码

一、MCP Streamable HTTP Transport 与 SSE:技术选型辨析在构建需要实时数据流的AI应用时,MCP 的 Streamable HTTP Transport 和传统的 Server-Sent Events 是两种常见的备选方案。 虽然它们都旨在实现服务器到客户端的单向数据推送,但其设计目标、协议层级和应用场景有着本质区别。 核心定义SSE:一种 Web 标准协议SSE 是一个基于 HTTP 的轻量级标准。

一、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

相关资讯

Spring AI + MCP + DeepSeek-R1-7B + SSE 全流程实战指南

本教程将带你从 0 到 1 实现一个完整的 AI 流式问答应用,整合以下组件:Spring Boot Spring AI 构建服务框架MCP(Model Connector Plugin) 用于统一管理本地/云端大模型DeepSeek-R1-7B 国产高性能大模型(OpenAI API 兼容)SSE(Server-Sent Events) 实现前后端实时流式响应Ollama(可选) 更便捷地部署 DeepSeek-R1-7B 模型并提供 OpenAI 接口支持模型部署方式推荐:Ollama 运行 DeepSeek-R1-7B安装 Ollama访问:(以 DeepSeek 为例)复制也可以加载其它模型,如 llama3, qwen:chat, yi:34b, phi3, mistral 等。 启动 Ollama复制Ollama 会自动监听 OpenAI 风格接口(http://localhost:11434/v1/chat/completions),兼容 stream: true。 Spring Boot 接入 SSE 流式输出服务添加依赖(pom.xml)复制WebClient 配置类复制请求体结构封装复制DeepSeek-R1-7B 接口封装(支持 stream: true)复制控制器对外暴露 SSE 接口复制前端 JS 接入 SSE 实现流式展示复制总结通过以上步骤,我们成功实现了:Ollama 部署并运行 DeepSeek-R1-7B 本地大模型Spring Boot 封装 OpenAI 接口 stream: true实现后端 SSE 推流 前端实时 Token 渲染支持国产开源模型的类 ChatGPT 对话功能
5/16/2025 7:50:58 AM
编程疏影

告别传统 SSE!fetch-event-source 让 AI 流式处理更高效

在 AI 大模型飞速发展的时代,前端开发者面临着如何高效处理实时数据流的挑战。 服务器发送事件(SSE)作为一种单向通信协议,能够让服务器主动向客户端推送实时更新,广泛应用于实时聊天、新闻推送等场景。 然而,标准的 EventSource API 存在诸多限制,例如只能使用 GET 请求、无法传递请求体等。
3/4/2025 3:00:00 AM
PIG AI

Manus平替方案:用DeepSeek+MCP Server构建AI自主工作流

前言在AI技术日新月异的今天,我们正见证着LLM(大语言模型)从"能说会道"向"能工巧匠"的进化。 当Anthropic推出Model Context Protocol(MCP)时,它像一道闪电划破夜空——这个被称作AI界的USB-C的协议,正在重新定义人机协作的边界。 作为一个沉迷于技术探索的开发者,我始终在寻找让AI真正"落地"的方法。
4/16/2025 3:22:51 PM
后端小肥肠
  • 1