公司真题库

【小米三面】MCP 用什么通信方式?为什么不用 WebSocket?Streamable HTTP 对 Serverless 友好在哪?

91学AI·2026/7/27·8 阅读

考察点

这道题出自小米大模型岗三面,已经不考「MCP 是什么」,直接钻传输层。面试官想确认你读过协议规范或真部署过远程 MCP server:三种传输方式的差异、JSON-RPC 消息格式、为什么协议组选了 HTTP 系而不是 WebSocket、新旧 HTTP 方案对 Serverless 的兼容性。答得出 trade-off 才算过,背名词不够。追问常往鉴权、断线恢复、stdio 安全走。

参考答案

三种传输方式与消息格式

MCP 的消息层统一是 JSON-RPC 2.0:请求带 jsonrpcmethodparamsid,通知(notifications)没有 id,连接建立时走 initialize 握手协商协议版本和双方 capabilities。消息格式不变,变的是底下的传输层,目前三种:

  • stdio:客户端把 server 作为子进程拉起,stdin 发请求、stdout 收响应。零网络配置,Claude Desktop、Cursor 这类桌面 Agent 的主流方式。局限是只能本机,server 进程生命周期和客户端绑定,做不了团队级共享服务。
  • 旧 HTTP+SSE:两个端点,客户端 POST 发请求,另外挂一条 /sse 长连接收服务端推送。问题出在架构上:请求和响应走两条通道,部署时要保证同一个客户端的两条通道路由到同一实例;SSE 是长连接,对 Serverless(函数有执行时长上限)、对需要滚动重启的服务都不友好。
  • Streamable HTTP(2025 年规范引入,替代旧方案):单一端点,客户端 POST 后,服务端可以按场景选择——简单请求直接返回普通 JSON 响应;需要流式或多条消息时,把这次响应升级成 SSE 流。它同时支持完全无状态模式(每次请求独立,天然适配 Serverless 和水平扩展)和有状态模式(带 session id),断线时可以用 Last-Event-ID 机制恢复事件流。

为什么不用 WebSocket

这是最容易被追问的点,我的理解是四层原因:

第一,通信模式不匹配。MCP 的核心交互是请求-响应(调工具、读资源)加少量服务端通知,这是 HTTP 的主场;WebSocket 的全双工优势在双方高频互推的场景,MCP 用不上。

第二,生态红利。选 HTTP 就白拿了整个 HTTP 基础设施:网关、负载均衡、CDN、标准鉴权头、TLS、企业的 API 管理工具。选 WebSocket 这些大半要重做。

第三,穿透性。企业网络里的代理、防火墙对普通 HTTPS 请求放行,对 WebSocket 的 Upgrade 握手经常有额外限制,跨组织部署远程 server 时这是真实的落地障碍。

第四,与无状态目标冲突。MCP 的远程化方向要求 server 能水平扩展、能跑在 Serverless 上,WebSocket 长连接天然绑定实例,和这个目标对着干。Streamable HTTP 的无状态模式正是为此设计的。

公平地说,如果哪天出现需要毫秒级双向实时推送的 Agent 场景,WebSocket 或 WebTransport 会回归视野,但那不是 MCP 当前要解决的问题。

部署上的实践经验

本地开发用 stdio 最省事;团队共享的远程 server 直接上 Streamable HTTP,跳过旧 HTTP+SSE(已被规范标记为 legacy)。有状态模式下要处理 session 亲和,无状态模式注意每次请求都得自包含鉴权信息。鉴权方面,远程 server 按规范走 OAuth 2.1,别自己发明 token 方案。

可能的追问

  • stdio 模式有什么安全风险? 答:server 是本地子进程,权限和宿主一样大,恶意 server 配置等于在你机器上执行任意命令;对策是只装可信来源的 server、配置变更要用户确认、敏感环境用容器隔离。
  • 断线恢复具体怎么做的? 答:SSE 流里每个事件带 id,客户端断开后用 Last-Event-ID 重新发起,服务端重放缺失事件;前提是服务端愿意缓存事件窗口,无状态模式下这个能力受限。
  • 远程 MCP 的鉴权方案? 答:规范采用 OAuth 2.1,client 走标准授权码流程拿 token,server 校验;企业内网可以简化成网关统一鉴权,但协议字段保持标准。

评论 (0)

暂无评论,快来抢沙发吧!

91学AI

© 2026 91学AI · 按岗位学 AI 与大数据. All rights reserved.