MCP 三种传输方式详解:stdio、SSE 与 Streamable HTTP
深入解析 MCP 协议的三种传输方式,重点介绍 2025 年新标准 Streamable HTTP——专为公网部署设计的传输方式,以及各方式的适用场景对比。
MCP 传输方式概述
Model Context Protocol (MCP) 定义了三种传输方式,用于客户端与 MCP Server 之间的通信:
| 传输方式 | 适用场景 | 连接特点 |
|---|---|---|
| stdio | 本地进程 | 标准输入/输出管道 |
| SSE | 内网/旧系统 | 双端点长连接 |
| Streamable HTTP | 公网标准 ✅ | 单端点 HTTP |
这些传输方式的定义来自 MCP 官方规范 (specification),Streamable HTTP 在 2025-03-26 版本中正式引入。
1. stdio:本地进程通信
最基础的传输方式,客户端启动 MCP Server 作为子进程,通过标准输入/输出管道通信。
┌─────────────┐ ┌─────────────────┐
│ Claude │ stdin/stdout │ MCP Server │
│ Desktop │ ═════════════▶ │ (子进程) │
│ │ │ npx @anthropic/│
│ │ │ mcp-server-xxx │
└─────────────┘ └─────────────────┘
特点:
- 客户端直接启动子进程,无需网络
- 适合本地工具(如文件系统访问、本地数据库)
- Claude Desktop 默认使用此方式
配置示例(Claude Desktop):
{
"mcpServers": {
"filesystem": {
"command": "npx",
"args": ["-y", "@anthropic/mcp-server-filesystem", "/path/to/dir"]
}
}
}
2. SSE:Server-Sent Events
早期远程传输方式,使用 HTTP 长连接实现双向通信。
┌─────────────┐ ┌─────────────────┐
│ Client │ GET /sse │ MCP Server │
│ │ ───────────────▶ │ │
│ │ (长连接,接收消息) │ │
│ │ │ │
│ │ POST /messages │ │
│ │ ───────────────▶ │ │
│ │ (发送消息) │ │
└─────────────┘ └─────────────────┘
特点:
- 需要两个端点:
/sse(接收)和/messages(发送) - 使用 session_id 关联两个连接
- 长连接在反向代理/防火墙环境下容易断开
局限:
- Nginx 需要特殊配置(禁用缓冲、延长超时)
- CDN 可能不支持长连接
- 认证实现较复杂
3. Streamable HTTP:公网标准(2025 新规范)
Streamable HTTP 是 MCP 2025 年规范的重大改进,专为公网部署设计。
┌─────────────┐ ┌─────────────────┐
│ Claude │ POST /mcp │ MCP Server │
│ Code │ ───────────────▶ │ │
│ │ 单端点,标准HTTP │ │
│ │ │ │
│ │ Headers: │ │
│ │ Authorization: │ │
│ │ Bearer xxx │ │
└─────────────┘ └─────────────────┘
核心优势
单端点设计
SSE (旧): Streamable HTTP (新):
GET /sse ← 接收 POST /mcp ← 所有操作
POST /messages ← 发送 请求 + 响应都在这里
一个 /mcp 端点处理所有操作,像调用普通 REST API 一样简单。
天然兼容 Nginx/CDN
客户端 → Nginx → MCP Server
SSE: 需配置 proxy_buffering off; proxy_read_timeout 3600;
Streamable HTTP: 无需特殊配置,和普通 API 一样代理
标准 HTTP 认证
POST /mcp HTTP/1.1
Host: your-server.com
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json
使用标准的 HTTP Authorization 头,认证实现简单规范。
按需流式
普通请求返回 JSON,需要流式时自动升级为 SSE 流——一个端点兼顾两种模式。
配置示例(Claude Code)
claude mcp add-json my-server '{"type":"http","url":"https://api.example.com/mcp","headers":{"Authorization":"Bearer sk-xxx"}}'
注意:type: "http" 对应的就是 Streamable HTTP 模式。
三种方式对比总结
| 特性 | stdio | SSE | Streamable HTTP |
|---|---|---|---|
| 适用场景 | 本地工具 | 内网/旧系统 | 公网部署 ✅ |
| 端点数量 | 无(管道) | 2个 | 1个 ✅ |
| 网络依赖 | 无 | 需要 | 需要 |
| 防火墙友好 | ❌ | ⚠️ | ✅ |
| 反向代理 | ❌ | ⚠️ 需特殊配置 | ✅ 无需配置 |
| 认证 | 不需要 | 困难 | ✅ HTTP标准 |
| 流式响应 | ❌ | ✅ | ✅ |
| 主要客户端 | Claude Desktop | 旧版客户端 | Claude Code |
实战建议
本地开发:使用 stdio,最简单直接
公网 MCP 服务:使用 Streamable HTTP
- 单端点简化部署
- 标准 HTTP 认证易于实现
- 兼容各类反向代理和 CDN
迁移建议:如果你的 MCP Server 还在用 SSE,建议升级到 Streamable HTTP。主流客户端(如 Claude Code)已优先支持新规范。
参考资源
本文基于 MCP 2025-03-26 版本规范编写,Streamable HTTP 是该版本正式引入的新传输方式。