你好,我是 shengjk1,多年大厂经验,努力构建 通俗易懂的、好玩的编程语言教程。 欢迎关注!你会有如下收益:
- 了解大厂经验
- 拥有和大厂相匹配的技术等
希望看什么,评论或者私信告诉我!
一、背景
前面我们已经再为更进一步的 MCP 打下了基础 一文搞定 Python 装饰器 Web架构全解析:8种类型优缺点及场景 解锁 MCP 中的 JSON-RPC 为什么MCP可以适配不同LLM
今天我们来聊一下 MCP 协议的 三种传输机制
二、三种传输机制
MCP(Model Context Protocol)协议定义了三种主要传输机制(Transports),用于客户端与服务器之间的通信,每种机制针对不同场景设计,具体如下:
🔧 1. Stdio(标准输入/输出
- 通信方式 :通过进程的标准输入(stdin)和输出(stdout)进行双向通信,消息以换行符
\n
分隔的 JSON-RPC 2.0 格式传输。 - 适用场景 :
- 本地进程间通信(如命令行工具、IDE插件)。
- 调试环境或资源受限的本地部署。
- 优势 :
- 简单易实现,无需网络配置。
- 平台兼容性高(支持所有操作系统)。
- 局限 :
- 仅支持本地通信,无法跨网络。
- 低并发能力,不适合高负载场景。
🌐 2. SSE(Server-Sent Events)
- 通信方式 :
- 客户端 → 服务器:通过 HTTP POST 发送请求。
- 服务器 → 客户端:通过 SSE 长连接单向推送流式响应(事件流)。
- 适用场景 :
- 需要服务器主动推送数据的场景(如实时监控、新闻更新)。
- 跨网络通信,但客户端无需频繁发送请求。
- 优势 :
- 基于 HTTP 协议,易于在浏览器或受限网络中使用。
- 支持实时流式数据传输。
- 局限 :
- 即将废弃:MCP 协议从 2025-03-26 版本开始标记 SSE 为"即将废弃",由 Streamable HTTP 替代。
- 仅支持单向通信(服务器→客户端)。
🚀 3. Streamable HTTP
- 通信方式 :
- 基于 HTTP/2 协议实现双向流式传输。
- 客户端通过 HTTP POST 发送请求,服务器在同一长连接中实时推送响应(支持批处理和分片传输)。
- 适用场景 :
- 高并发分布式系统(如金融交易、实时流媒体)。
- 需要低延迟双向交互的跨网络应用。
- 优势 :
- 支持高并发和双向实时交互。
- 可扩展性强,适用于复杂业务逻辑。
- 局限 :
- 实现复杂,需处理长连接管理(如超时、重连)。
- MCP 仅提供协议规范,无官方 SDK 支持,需开发者自行实现(如使用 Python
httpx
库)。
⚖️ 四、三种传输机制对比
特性 | Stdio | SSE | Streamable HTTP |
---|---|---|---|
通信方向 | 双向(本地) | 单向(服务器→客户端) | 双向(跨网络) |
协议基础 | 操作系统管道 | HTTP/1.1 + SSE | HTTP/2 + 流式传输 |
实时性 | 低(顺序处理) | 中(单向推送) | 高(双向实时) |
部署复杂度 | 简单(无需网络) | 中等(需 HTTP 服务) | 高(需处理长连接) |
典型场景 | 命令行工具、本地调试 | 实时通知、监控数据推送 | 高并发分布式系统、实时交互 |
并发能力 | 低(<100连接) | 中(受限于 HTTP 连接数) | 高(支持大规模并发) |
实现难度 | ★☆☆☆☆ | ★★☆☆☆ | ★★★★☆ |
💡 五、选择建议
- 本地开发/调试 :优先使用 Stdio,简单高效。
- 单向数据推送 :短期项目可考虑 SSE(注意即将废弃),长期建议迁移至 Streamable HTTP。
- 高并发分布式系统 :必须使用 Streamable HTTP,尤其需双向交互时。
注:MCP 支持自定义传输扩展(如 WebSocket、gRPC),但需兼容 JSON-RPC 2.0 消息格式。开发者应根据实际场景权衡实现成本与性能需求。
三、三种传输方式是如何实现的
MCP(Model Context Protocol)协议中的传输机制(Transports)并非全新开发 ,而是基于现有成熟协议或技术实现的适配与优化。以下是具体分析:
🔧 一、协议的技术来源
-
Stdio(标准输入/输出)
- 技术基础:基于操作系统的标准进程间通信(IPC)管道(stdin/stdout),这是所有操作系统的原生功能。
- MCP 的适配:仅规范了 JSON-RPC 消息格式(以换行符分隔),未改变底层通信原理。
-
SSE(Server-Sent Events)
- 技术基础 :SSE 是 HTML5 标准协议(W3C 规范),2010 年后被主流浏览器支持。
- MCP 的适配 :
- 复用 SSE 的
text/event-stream
格式和自动重连机制; - 增加 JSON-RPC 封装,统一消息格式。
- 复用 SSE 的
-
Streamable HTTP
- 技术基础 :
- 基于 HTTP/2 流式传输 (RFC 7540)和 分块编码(Chunked Encoding);
- 融合 SSE 的事件流机制,但移除专用
/sse
端点。
- MCP 的创新 :
- 提出 "动态流式升级" 机制(普通 HTTP 请求可升级为 SSE 流);
- 引入会话 ID 支持状态恢复。
- 技术基础 :
⚙️ 二、MCP 的贡献:协议整合与问题解决
虽然未发明新协议,但 MCP 通过标准化整合解决了原有技术的局限性:
-
SSE 的缺陷改进
- 原生 SSE 仅支持单向通信,MCP 通过 双端点设计 (
/sse
+ POST 端点)实现双向交互; - 增加安全规范(如 Origin 验证、本地绑定)防止攻击。
- 原生 SSE 仅支持单向通信,MCP 通过 双端点设计 (
-
Streamable HTTP 的革新
- 解决 SSE 的长连接压力 和断线不可恢复问题;
- 兼容无服务器架构(如 AWS Lambda),支持按需流式响应。
-
协议统一性
- 所有传输层均强制使用 JSON-RPC 2.0 消息格式,与通信方式解耦。
🌐 三、协议演进与行业关系
传输机制 | 技术来源 | MCP 改进重点 | 行业应用 |
---|---|---|---|
Stdio | 操作系统 IPC | 消息格式标准化 | 本地开发、CLI 工具 |
SSE | HTML5 标准 | 双向通信扩展、安全增强 | 实时推送场景(逐步淘汰) |
Streamable HTTP | HTTP/2 + SSE | 动态流式升级、无状态支持 | 云原生、分布式系统 |
💡 设计哲学 :MCP 遵循 "复用优于重构" 原则,通过协议层封装降低开发门槛,而非重复造轮子。
✅ 四、总结
- 非全新开发 :Stdio、SSE、HTTP 均为已有技术,MCP 负责协议适配与规范统一。
- 核心创新 :
- 提出 Streamable HTTP 解决 SSE 的工程化缺陷;
- 建立 JSON-RPC 消息层,实现传输机制无关性。
- 行业意义:为 LLM 工具集成提供标准化通信框架,推动生态兼容性。
四、总结
MCP协议定义了三种传输机制,以满足不同场景下的客户端与服务器通信需求。 Stdio适合本地开发和调试, SSE适用于短期的单向数据推送项目( 后面会下线 ), 而Streamable HTTP则适用于需要高并发和双向实时交互的分布式系统。
MCP并非发明新协议,而是基于现有技术进行适配和优化,通过标准化整合解决了原有技术的局限性,为LLM工具集成提供了标准化通信框架。