AI

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 是该版本正式引入的新传输方式。