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 文档