MCP 与客户端有哪些通信方式,如何配置?

考查重点:传输形式与客户端配置。stdio 配服务命令、参数和环境,Streamable HTTP 配端点及服务所需认证;核对协议版本后查询工具并试调,旧 HTTP+SSE 按兼容需求保留

本题目录

参考答案

核心回答

按 MCP 2026-07-28 revision,标准传输主要是两种:

  • stdio:Client 启动 Server 子进程,通过标准输入、标准输出交换 JSON-RPC,适合本地文件、CLI 等能力。配置启动命令、参数、运行环境和访问范围。
  • Streamable HTTP:Server 独立提供 MCP 端点,Client 用 HTTP POST 发送请求,响应可以是 JSON 或该请求的 SSE 流,适合远程和团队共享服务。配置服务 URL、鉴权及网络超时。

旧的 HTTP+SSE 传输用于历史兼容,新接入通常选择 Streamable HTTP。注意“SSE 传输旧方案”与“HTTP 响应使用 SSE 流”不是一回事。配置前还要确认 Host、Client SDK、Server 支持的协议 revision,不能把旧版初始化和会话规则套进当前版本。

展开说明

1. stdio 如何通信和配置?

Host 内的 Client 按配置启动服务进程,把请求写入它的 stdin,从 stdout 读取返回;JSON-RPC 消息按行分隔,通过请求 ID 关联结果。stdout 只能输出协议消息,调试日志写 stderr 或单独日志通道,否则容易出现“进程启动了但协议解析失败”。

配置重点是可执行文件、脚本和参数是否正确,依赖是否安装,工作目录和必要环境变量是否符合预期。子进程有自己的生命周期,通常随 Client 管理;它能访问哪些文件和凭证,仍要由实际运行权限限制。

2. 给出一个具体客户端配置例子

以 Claude Code 当前配置方式为例,假设已有一个天气 MCP 服务脚本,可以登记本地命令:

claude mcp add weather -- python /srv/mcp/weather_server.py

这里 -- 后面是 Host 启动 Server 的命令;脚本路径和 Python 环境按实际部署替换。若服务已经部署到远程,配置形状是:

claude mcp add --transport http weather-remote https://mcp.example.com/mcp
claude mcp list

示例 URL 需换成实际 MCP 端点,不能填普通 REST 查询接口就期待它支持 MCP。需要登录的服务按宿主完成认证,凭证通过受控配置注入。不同 Host 的字段、存储位置和配置作用域并不统一,不应直接互拷整份配置。

登记成功只表示配置保存了。还需检查连接、权限、工具列表,再用无副作用的调用确认名称、参数和返回符合预期。

3. 当前 Streamable HTTP 与旧教程有什么差别?

当前绑定使用单一 POST 端点,Client 要支持 JSON 和请求级 SSE 两种响应。请求携带协议元数据,并按规范提供协议版本、方法以及适用调用的名称请求头;通常交给兼容 SDK 处理。

2026-07-28 已移除旧的 initialize 握手和传输层会话,不再使用旧的 GET 流端点或 Mcp-Session-Id。使用 2025-11-25 等旧版的 SDK 和服务仍可能采用旧行为,需按双方支持的版本和传输探测规则兼容,而不是只改一个版本字符串。

远程连接还要检查 TLS、身份、授权范围和代理设置;本地 HTTP 服务通常只监听 localhost,并按规范校验 Origin。若响应使用 SSE,代理缓冲与空闲超时也可能影响事件到达。

4. 连接成功却看不到工具,怎么排查?

先看服务进程是否正常、URL 和传输类型是否匹配,再查协议兼容和认证;随后检查 tools/list 是否成功、当前身份是否能看到对应工具,以及 Host 是否启用了它。

工具发现结果由 Host 适配成模型可用的工具定义,模型提出调用意图后才由 Client 请求 Server 执行。连通 MCP 并不等于工具已经自动进入所有模型调用。

超时后能否重试,取决于工具是否可能已经产生副作用。请求 ID 用来关联协议结果,不能替代业务幂等键。

常见追问

SSE 能否用 Last-Event-ID 断点续传?

一般 SSE 应用可以设计事件 ID 和重放,但不能由此推断所有 MCP 版本都支持。当前 2026-07-28 Streamable HTTP 规范明确不支持通过 Last-Event-ID 恢复 SSE 流。旧版实现需按当时规范和服务能力判断;重新连接、重新订阅与重新执行业务操作也要分开。

断开流是否代表任务取消了?

当前 HTTP 绑定将关闭请求的 SSE 响应流作为该请求的取消信号;stdio 则通过带请求 ID 的取消通知表达。服务端应尽快停止工作,但已经发生的外部操作不会自动撤销,业务侧仍需确认状态。

WebSocket 也是 MCP 标准传输吗?

当前标准绑定是 stdio 和 Streamable HTTP,可以自定义其他传输,但必须保持协议消息、元数据和取消等语义,并确认双方都实现了相同绑定。不能把某宿主的私有 WebSocket 通道直接当成通用 MCP 支持。

对应教程

  • MCP 模型上下文协议:介绍统一接入、Host/Client/Server 和 SDK 适配路线。固定版依赖使用 MCP Python SDK 1.x 范围,复用代码时应核对其实际支持的协议版本,再选择配置和兼容方式。

参考资料

  • 国内:JavaGuide:MCP:依据本地与远程传输、stdout 日志和 HTTP 元数据规则,说明正文中通信方式的选择与配置边界。
  • 国内:zero2Agent:工具管理:依据发现、调用与结果回传机制,解释正文中的调用链;2025-11-25 握手、GET 和会话语境用于说明旧客户端兼容。
  • 国内:WeThinkIn:MCP 与 A2A 协议:采用部署位置、资源范围与身份控制的比较,说明正文中 stdio、Streamable HTTP 与旧 SSE 路线的选择。
  • 国外:MCP:stdio 绑定:依据标准流消息、日志、取消和新旧版本探测规则,说明正文中 stdio 配置及兼容处理。
  • 国外:MCP:Streamable HTTP 绑定:依据 POST、JSON/SSE 响应、请求头与断流语义,说明正文中当前 HTTP 绑定的工作方式,以及不支持 Last-Event-ID 续流的边界。

相关面经

4 篇

蚂蚁集团

面经合集
查看原面经 →
MCP 有哪些通讯协议

蚂蚁集团

Agent 开发工程师
实习一面
查看原面经 →
MCP和客户端通信有几种方式?你怎么配置MCP?

蚂蚁国际

AI 应用 / Agent 开发
暑期实习一面
查看原面经 →
MCP和客户端通信有几种方式?你怎么配置MCP?

快手

后端开发
日常实习二面
查看原面经 →
Agent 如何与 MCP Server 连接通信?

收录题集

4 个来源,共5 份题集

MCP 与工具调用

沉默王二 · 王二讲 Agent · 1 条原题

查看题集 →

LLM 工具调用面试题

小林 Coding · 个人整理 · 1 条原题

查看题集 →

工具管理:参数校验、工具路由与百级工具库

Onefly · zero2Agent · 1 条原题

查看题集 →

AIGC时代AI Agent基础

Rocky Ding · AIGC-Interview-Book · 1 条原题

查看题集 →

MCP与A2A协议

Rocky Ding · AIGC-Interview-Book · 1 条原题

查看题集 →

相关题目

4 题