Jixue AI学习库
返回面试题库
MCP初级

MCP 有哪几种传输方式?stdio 和 Streamable HTTP 分别适合什么场景?

MCPTransportstdioHTTP
30 秒回答

MCP 定义两种标准传输方式:stdio 和 Streamable HTTP。stdio 是 Host 把 Server 拉成本地子进程,协议消息走子进程的标准输入输出,进程即会话、不需要网络鉴权,适合桌面宿主接本地工具;Streamable HTTP 把 Server 当远程服务,Client 用 HTTP POST 发消息、服务端可用 SSE 回推,鉴权、TLS 和多客户端会话要自己解决,适合团队共享的远程部署。两种方式下 JSON-RPC 数据层完全一致,选型按部署形态选,不按功能选。

完整回答

Transport(传输层)只负责搬运消息,方法、参数、结果在两种传输下相同,所以同一套 Server 逻辑可以两种都支持。stdio 模式下 Host 用命令行拉起 Server 子进程,写入 stdin、读出 stdout 就是收发消息;工程上要管进程生命周期:启动参数、退出重启,日志必须走 stderr——写进 stdout 会污染协议消息流。Claude Desktop 配置里的 command 加 args 就是 stdio。Streamable HTTP 模式下 Server 是一个 HTTP 端点:Client POST 发 JSON-RPC,响应可以直接返回,也可以是 SSE(Server-Sent Events,服务器向客户端的单向推送流)长连接;鉴权通常用 OAuth 或 Bearer Token,还要处理 TLS、会话头和水平扩展。判定口诀:要用本地文件、本地命令、跟随用户机器权限,选 stdio;要做统一鉴权、多客户端接入的共享服务,选 Streamable HTTP。

加分信息

  • 指出 stdio 的日志必须走 stderr,否则会污染 JSON-RPC 消息流
  • 知道 Streamable HTTP 允许无状态单请求子集:只 POST、不开 SSE 也是合规实现,适合先跑通再补推送

常见问题

  • 以为换传输方式消息格式也要换,其实数据层不变
  • 给远程共享服务套 stdio,导致每台客户端机器都得安装并拉起一份 Server

面试官可能追问

项目连接

站内 POST /api/mcp 就是 Streamable HTTP 的真实实现(单请求无状态子集,curl 即可复现),/labs/mcp-tools 可逐帧观察协议消息;stdio 形态暂无站内可运行示例,可对照 Claude Desktop 的 command 配置理解。