9.2 传输层:stdio、HTTP与Streamable HTTP

MCP是协议层的规范,但消息需要通过某种传输方式在Client和Server间流通。传输层的选择影响性能、可靠性和部署方式。

9.2.1 stdio - 本地进程间通信

工作原理

  • Client启动Server进程作为子进程

  • 通过stdin向Server发送JSON-RPC消息(每行一个)

  • 通过stdout从Server读取JSON-RPC消息(每行一个)

  • 通过stderr接收Server的日志和错误

图 9-1:stdio 传输架构 —— 通过标准 I/O 进行本地进程间通信

特点

特性
说明

架构

本地进程间通信

延迟

最低(<1ms)

实现

最简单

部署

仅支持本地

扩展性

单Client单Server

容错

Server崩溃需要重启Client

实现示例

何时使用

  • 本地开发和测试

  • 单机应用

  • 工具的快速原型

  • 性能最优的场景(<100ms延迟要求)

限制

  • 只能本地部署

  • Server崩溃需要重启Client

  • 不支持多Client访问同一Server

  • 网络分区完全不适用

9.2.2 Streamable HTTP - 双向HTTP流传输

工作原理

  • Server是一个HTTP服务器,暴露单一端点:

    • POST/GET /mcp - 双向HTTP流传输

  • 支持请求/响应流式交互,取代了旧的HTTP+SSE方案

  • Server-Sent Events (SSE) 仅作为向后兼容的可选方案

  • MCP 规范 2025-11-25 起将单独的 SSE 通道并入 Streamable HTTP(Content-Type: text/event-stream),保留向后兼容路径

图 9-2:Streamable HTTP 传输架构 —— 统一的双向HTTP流传输

特点

特性
说明

架构

双向HTTP流

延迟

低(<100ms)

实现

中等复杂度

部署

网络部署

扩展性

单Server多Client

容错

Server重启Client可重连

实现示例

何时使用

  • 网络部署(Client和Server在不同机器)

  • 多Client访问同一Server

  • Server需要高可用(可以前置负载均衡器)

  • 支持跨机房部署

  • 大文件和流式数据传输

优点

  • 灵活的部署架构

  • 双向流支持,比HTTP+SSE更高效

  • 统一的端点,简化配置

  • 支持大型文件流式传输

  • 内置流量控制和背压机制

  • 标准HTTP,易于代理和监控

缺点

  • 实现复杂度中等

  • 需要HTTP server维护连接

向后兼容性: Server-Sent Events (SSE) 仍被保留作为可选的向后兼容方案,但不再是推荐的主流传输方式。新的MCP实现应优先采用Streamable HTTP。

不同的传输方式各有其优缺点,选择合适的传输协议对系统的整体性能和部署成本有重大影响。本节介绍了如何根据具体的网络部署场景做出传输层决策,以及连接管理的最佳实践。

9.2.3 传输层选择决策与连接管理

传输方式的选择决策

传输方式的选择决策过程如下:

图 9-3:传输方式选择决策树 —— 根据部署需求选择合适的传输方式

连接管理与池化

无论采用哪种传输方式,都需要考虑连接的管理和复用。

stdio情况下的连接管理:

stdio传输方式的连接管理实现如下:

HTTP情况下的连接管理: HTTP传输方式的连接管理实现如下:

OAuth认证流程: 在HTTP传输中,通常需要认证来验证Client和Server的身份。

9.2.4 本小节小结

传输层的选择是设计MCP集成架构的关键决策。stdio提供最高性能但不支持网络部署,Streamable HTTP是网络部署的推荐方案,支持双向流传输和大文件处理。

关键要点:

  • 本地/单机 → stdio

  • 网络/多Client → Streamable HTTP

  • Streamable HTTP提供双向流、流量控制、高效的资源利用

  • Server-Sent Events (SSE) 仅作为向后兼容的可选方案

  • 总是考虑连接池复用

  • HTTP环境中实现OAuth认证

下一节将深入MCP Server的实现。

最后更新于