真实面经题目 · 原创解析
MCP 的传输层有哪些方式,stdio 和 Streamable HTTP 分别适合什么场景?
这题考 MCP 的通信协议和传输层取舍,回答重点是 MCP 定义的是客户端、服务器和工具的上下文协议,传输上要区分本地 stdio、当前远程 Streamable HTTP,以及旧 HTTP+SSE 的历史或兼容语境。
真实面经题目 · 原创解析
这题考 MCP 的通信协议和传输层取舍,回答重点是 MCP 定义的是客户端、服务器和工具的上下文协议,传输上要区分本地 stdio、当前远程 Streamable HTTP,以及旧 HTTP+SSE 的历史或兼容语境。
MCP 可以理解为让模型应用连接外部工具、资源和提示的一套协议,它把 Host、Client、Server 之间的能力发现、工具调用、资源读取和通知机制标准化。问通信协议时要谨慎区分协议语义和传输层:MCP 的消息使用 JSON-RPC,请求、响应和通知有统一结构;传输层可以有不同实现。本地插件或命令行工具常用 stdio,优点是简单、低部署成本、适合单机进程;远程服务可用 HTTP 类传输,旧规范中有 HTTP+SSE 传输;当前远程回答应以 Streamable HTTP 为主,同时说明 SSE 仍可能作为 Streamable HTTP 中服务端流式消息的一种承载方式。选型时看部署位置、连接生命周期、双向流式需求、鉴权、安全隔离、代理兼容和运维成本。不要把某一种旧的 SSE 说成唯一标准,面试里更稳妥的回答是 MCP 抽象协议稳定,传输层按本地和远程场景取舍。
MCP 的核心是让模型应用以统一方式发现和调用外部能力。Host 承载用户和模型交互,Client 负责和某个 MCP Server 连接,Server 暴露工具、资源和提示。它解决的是上下文和工具接入标准化,而不是单纯发 HTTP 请求。
面试官问通信协议时,容易把消息格式和传输方式混在一起。更准确的说法是:MCP 有统一的请求、响应、通知和能力协商语义,消息使用 JSON-RPC;这些消息可以跑在不同传输上。
stdio 传输适合本地工具、桌面应用和开发环境。Client 启动 Server 子进程,通过标准输入输出交换消息,部署简单、权限边界相对清楚,但不适合多用户远程服务,也不天然解决网络鉴权和水平扩展。
远程 MCP Server 更适合 HTTP 类传输,因为它能接入网关、鉴权、负载均衡、日志和云服务运维。历史上会看到 HTTP+SSE 传输;当前回答应把 Streamable HTTP 作为远程传输中心,同时说明 SSE 仍可能承载服务端流式消息,而不是把旧 SSE 表述固定成唯一答案。
如果工具只在本机运行,stdio 成本低;如果要服务多个客户端、跨网络访问、做 OAuth 或企业鉴权、记录审计日志,就更适合 HTTP 类方案。还要考虑连接保活、断线重连、流式消息、代理兼容、超时、限流和敏感工具隔离。
Agent 框架可以使用 MCP,但 MCP 本身不是完整 Agent 框架。它不替你决定规划、记忆、反思或任务拆解,而是规范模型应用如何连接工具和上下文。传输层只是其中一部分,不能只背一个协议名。
REST API 通常是业务接口集合,MCP 更关注模型应用如何发现工具、读取资源、发送结构化调用并处理上下文能力,语义更贴近模型工具接入。
因为本地场景可以由客户端直接启动子进程,标准输入输出足够交换消息,部署简单,也避免为每个本地工具开网络端口。
远程服务需要鉴权、网关、负载均衡、审计、限流和跨网络访问,HTTP 生态更成熟,也更容易和企业基础设施结合。
最容易把某个历史实现当成唯一标准。更稳妥的回答是说明 MCP 的协议语义,再按本地 stdio、当前远程 Streamable HTTP 和旧 HTTP+SSE 历史语境做传输取舍。