Skip to main content

SSE 和 STDIO 区别?

· 5 min read

SSE 和 STDIO 是 MCP 的两种传输方式,区别不在通信模式,在进程边界——STDIO 面向本地进程,SSE 面向远程服务。

  • STDIO:客户端 fork 子进程,通过 stdin/stdout 收发 JSON-RPC,零网络开销
  • SSE:客户端连远程 HTTP 端点,服务端推送事件,需处理鉴权和网络延迟
  • 选择逻辑:本地工具用 STDIO,远程共享服务用 SSE,场景决定选型
  • 核心差异:STDIO 进程由客户端管理生命周期,SSE 服务端独立部署
  • MCP 演进:原始 HTTP+SSE 已被 Streamable HTTP 替代,不再需要双通道拆分
  • 关键提醒:本地工具用 SSE 是自找麻烦,多了端口、CORS、鉴权,收益为零

一句话说清区别​

STDIO 是"启动一个进程,跟它说话";SSE 是"连上一个 URL,等它推送"。

两者在 MCP 协议里不互斥。STDIO 负责本地工具,SSE 负责远程服务。区分标准就一个:工具进程跑在哪。

进了 .mcp.json,看一眼就明白:

{
"mcpServers": {
"local-filesystem": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-filesystem", "/data"]
},
"remote-api": {
"url": "https://mcp.internal.company.com/sse"
}
}
}

command + args → STDIO,url → 远程传输。不需要纠结哪种更好,部署位置已经帮你决定了。

STDIO 怎么工作的​

MCP 客户端启动时,按配置 fork 一个子进程,然后通过 stdin/stdout 跟它对话。

Client → stdin → MCP Server 进程 → 干活
Client ← stdout ← MCP Server 进程 ← 结果

消息格式是 JSON-RPC,跟 HTTP API 一样,只是传输载体从网络换成了管道。

STDIO 最大的优势是零运维成本。没有端口号、不用配 CORS、不用管 TLS 证书、不用考虑鉴权——进程是客户端自己启动的,信任是天然的。进程挂了,客户端检测到管道断开,重启就行。

反过来说,STDIO 的限制也很明确:工具必须跑在同一台机器上。你想让团队成员共享一个 MCP 网关,或者调用公司内部部署的集中式 API 服务,STDIO 做不到——进程边界就是机器边界。

SSE 在 MCP 里的定位​

SSE 的本职工作是服务端到客户端的单向推送。但 MCP 里客户端和服务端需要双向交互——客户端发请求调工具,服务端返回结果。

所以 MCP 最早的设计是 SSE + HTTP POST 组合:服务端通过 SSE 推送事件给客户端,客户端通过 HTTP POST 发请求给服务端。两条连接,各管一个方向。

后来社区发现这太绕了。MCP 规范在 2025 年引入了 Streamable HTTP 传输,把双向通信统一到一个 HTTP 端点上,不再需要 SSE + POST 拆分。现在远程 MCP 的标准方案是 Streamable HTTP,纯 SSE 模式已是历史。

所以严格来说,"MCP 里的 SSE vs STDIO"这个问法本身就过时了——准确的说法是"远程传输 vs 本地传输"。社区习惯上还叫 SSE,大家都知道指的是远程这一路。

选型:看一眼部署位置就够了​

你的工具跑在哪传输方式原因
本机STDIO进程在本机,管道最快
远程服务器Streamable HTTP需要网络通信
团队共享服务Streamable HTTP集中部署,统一鉴权

STDIO 是默认选择,远程是例外。

大部分 MCP 工具就是本地进程——操作文件系统、查询本地数据库、读写 Git 仓库。这些事用 STDIO 零配置启动,没有网络延迟,安全模型最简单。

远程传输的需求通常来自组织层面——企业内部 API 的鉴权密钥不能下发到每个开发者的机器上,或者 API 网关本身需要统一限流和监控。这时候才值得引入网络传输的复杂度。

两个容易搞混的点​

第一,别把本地工具部署成远程服务。 见过有人把 filesystem MCP 服务器跑在远端,然后本地 Claude Desktop 通过 HTTP 连过去。能跑吗?能。有必要吗?完全没有。多了网络延迟、端口占用、鉴权配置、TLS 证书管理——全是无意义的复杂度。本地工具就该用 STDIO,别折腾。

第二,"流式"和"传输层"是两层概念。 有人问"AI 流式输出用 SSE 还是 STDIO",这个问题本身就不成立。AI 模型的 token-by-token 输出是应用层的流式响应,MCP 的 STDIO/HTTP 是传输层的通信方式——它们不互斥。你在 STDIO 传输上照样可以流式解析 JSON-RPC 响应,在 HTTP 传输上也照样可以一次拿完整结果。别把不同层的东西放在一起比。

References​

  1. MCP Transport Specification —— MCP 官方传输层规范
  2. Streamable HTTP Transport —— MCP 文档