什么是 MCP 客户端(MCP Client)?

MCP 客户端(MCP Client)是由 MCP Host 创建、面向一个 MCP Server 直接通信的协议组件,负责承载这段关系中的请求、Metadata、响应、通知以及 Transport 或 Authorization 状态。

快速了解

全称Model Context Protocol 客户端
规范文档官方规范

工作原理

MCP 客户端是 MCP Host 内部或由 Host 管理的协议适配器。Host 负责 User Experience、Model Interaction、Approval Policy、Credential Boundary 与多 Server 协调;Client 实现一段直接协议关系;Server 暴露 Capability。一个 Host 通常为每个 Server 创建一个 Client,而远程 Server 可以服务来自不同 Host 的多个 Client。Client 不是面向用户的应用、语言模型、MCP Server,也不是决定操作能否执行的 Policy Authority。

Protocol Revision 属于协议契约。MCP 2026-07-28 的 Core 是 Stateless:不再执行连接级 initialize / notifications/initialized 握手。每个 Request 都在 _meta 中携带 io.modelcontextprotocol/protocolVersion 与相关 io.modelcontextprotocol/clientCapabilities,并应携带 clientInfo。Client 可以先调用 server/discover 获取支持版本、Server Capability、Identity、Cache Hint 与 Instructions,也可以直接发送操作并处理 UnsupportedProtocolVersionError-32022)。Server Identity 与 Instructions 均由 Server 自述,不能用于安全决策。

MCP 2025-11-25 及更早版本属于 Legacy:Client 发送 initialize,Server 返回所选版本与 Capability,Client 再发送 notifications/initialized。Dual-era Client 必须识别 Server Era,不能混用两套语义。当前 stdio 兼容路径先用 server/discover Probe;当前 Streamable HTTP 则检查失败的 Modern Request 后再决定回退。遇到不支持的当前版本时,应选择共同支持版本重试或向用户报告明确错误,不能静默按另一版本解释。

Modern Message Flow 是 Client Request 对应 Server Response,并支持 Notification。Server 在处理允许的操作时若需要用户输入、Model Sampling 或处于弃用窗口内的 Root List,会返回 resultType: "input_required"inputRequests;Client 只收集自己声明支持的输入,执行 User/Policy Control,再用新的 JSON-RPC ID 重试原始操作。requestState 必须原样回传,不能解析、修改或复用于其他请求。该 Multi Round-Trip Request 模式取代 Legacy Server-initiated JSON-RPC Request。Roots 与 Sampling 尚处在弃用窗口,但新集成不应继续采用。

在普通操作中,Client 可以发现 Tool、Resource 与 Prompt,遍历 Pagination Cursor,遵守 ttlMscacheScope,并在订阅变更通知后刷新缓存。它必须用唯一且非 Null 的 Request ID 关联响应,区分 resultType: "complete"input_required,处理协议错误与业务错误,并按协商版本验证数据。Tool Description 与 Annotation 都是不可信 Metadata;Client 应验证 Input/Output Schema,拒绝不安全 Header Mapping,默认不解析网络 $ref,并在向模型暴露前处理不同 Server 的 Tool Name Collision。

当前标准 Transport Binding 是 stdio 与 Streamable HTTP。stdio 由 Client 启动子进程,通过换行分隔的 UTF-8 JSON-RPC 通信,日志只能写 stderr;Streamable HTTP 把每条消息 POST 到单一 MCP Endpoint,响应可以是 JSON 或 Request-scoped SSE Stream。旧的独立 HTTP+SSE Transport 已弃用,不能与当前标准并列。Modern HTTP 不再使用 Protocol-level Session ID 或 Stream Resume;Response Stream 中断后需要新 Request ID 重试,并处理重复 Side Effect。HTTP 通过关闭 Response Stream 取消,stdio 使用 notifications/cancelled,两者都需要有上限的 Timeout。

MCP Authorization 是可选能力,但采用当前 HTTP Profile 的 Client 同时扮演 OAuth Client。它需要发现 Protected Resource 与 Authorization Server Metadata,获取 Client ID,按要求使用 PKCE,验证 Authorization Issuer,在 Authorization 与 Token Request 中携带 RFC 8707 resource,请求 Least-privilege Scope,并在每个 HTTP Request 中发送绑定目标受众的 Bearer Token。Credential 应按 Issuer 隔离,Token 应按 Intended Resource 隔离;不得转发任意上游 Token 或把 Token 放进 URL。Dynamic Client Registration 已弃用,优先迁移到 Client ID Metadata Document,Pre-registration 仍然有效。该 HTTP Profile 不适用于 stdio,后者从执行环境获取 Credential。

动态 Metadata Discovery 使 Client 成为 SSRF 与 Credential Exposure 边界。生产实现应校验 HTTPS URL 与 Redirect,默认阻止 Private、Loopback、Link-local 和 Cloud Metadata Destination,除非明确的本地策略允许;还要防御 DNS Rebinding、隔离 Token Storage、从 Trace 中移除 Secret,并在打开 Authorization 或 Elicitation URL 前取得用户同意。Host 仍需执行确定性 Authorization、Least Privilege、Tool Confirmation、Output Validation 与 Data-use Policy;协议合规不代表 Server 或其内容可信。

生产 Trace 应绑定 Server Configuration 或 Origin、Transport、Protocol Era 与 Revision、Client/Server Identity、Request ID、Method、Trace Context、Advertised Capability、Authorization Issuer 与 Effective Scope、Cache Decision、Retry、MRTR Step、Cancellation、Latency、Result Type、Error Code 与最终 Effect Status。测试应覆盖 Current-to-Current、Dual-era-to-Legacy、Unsupported Version、Pagination、Cache Invalidation、Malformed Schema、Timeout、Cancellation Race、Broken Stream、MRTR Accept/Decline、401/403 Step-up、SSRF 与 Duplicate Effect;不得记录 Access Token、Secret、不受限 Tool Payload 或敏感 Elicitation Value。

主要特点

  • Host 管理的协议关系:一个 Client 表示一个直接 Server 关系,但不承担面向用户 Host 或 Policy Engine 的职责
  • 协议时代感知:当前请求逐次携带 Version 与 Capability,Legacy Server 则需要初始化 Session
  • 类型化消息处理:关联 JSON-RPC ID、验证 Result 与 Schema、遍历分页、安全缓存并处理 Notification
  • Transport-specific Lifecycle:实现 stdio 或 Streamable HTTP 的 Framing、Cancellation、Timeout、Termination 与兼容行为
  • 受控多轮交互:处理 InputRequiredResult、User Consent、新 Request ID 与不透明 requestState,不产生隐式信任
  • 安全隔离边界:按 Server 隔离故障、OAuth Credential、Metadata Discovery、Tool Exposure、Trace 与用户批准的 Side Effect

常见用途

  1. Host Adapter:把 IDE、Assistant 或 Agent Runtime 连接到一个本地或远程 MCP Server
  2. Dual-era Interoperability:探测当前 Server 并执行显式 Legacy 回退,而不混用协议语义
  3. 受保护远程访问:完成 OAuth Discovery、用户授权、Token Refresh、Scope Step-up 与 Audience-bound Request
  4. Capability Registry:在向模型暴露前发现、验证、命名隔离、缓存和刷新 Tool、Resource 与 Prompt
  5. 可靠性与审计:按 Server 关系隔离 Timeout、Cancellation、Malformed Message、Retry、Side Effect 与 Trace

示例

loading...
Loading code...

常见问题

每个 MCP Server 都需要自己的 MCP Client 吗?

MCP Host 通常为每段直接 Server 关系创建一个 Client,以隔离协议兼容性、Transport 故障、Credential、Capability 与命名。远程 Server 仍可以同时服务来自不同 Host 的多个 Client。Gateway 与 Router 会增加一层协议和 Policy Boundary,而不是消除这种关系。

MCP Client 现在还需要发送 initialize 吗?

当双方使用 2026-07-28 时不需要。当前 Request 在 _meta 中携带 Protocol Version 与 Client Capabilities,server/discover 是可选 Discovery 或 Compatibility Probe。2025-11-25 及更早版本仍使用 initialize 和 notifications/initialized。Dual-era Client 必须识别 Server Era 后只执行对应规则。

新的 MCP Client 应实现哪些 Transport?

当前标准 Binding 是 Client 启动本地子进程的 stdio,以及访问 MCP Endpoint 的 Streamable HTTP。Streamable HTTP 的响应可以使用 Request-scoped SSE Stream,但早期独立 HTTP+SSE Transport 已弃用。Custom Transport 必须保留 JSON-RPC、当前 Message Pattern、逐请求 Metadata、Cancellation 与互操作要求。

每个 MCP Client 都需要 OAuth 吗?

不需要。MCP Authorization 可选,其 OAuth Profile 适用于 HTTP-based Transport,不适用于 stdio。采用时,Client 必须发现并校验 Metadata,注册或标识自身,按 Issuer 绑定 Authorization State 与 Credential,使用目标 Resource Indicator,请求最小 Scope,保护 Token,并在不透传 Token 的前提下处理 401 与 403 Challenge。

MCP Client 必须测试哪些故障?

应测试 Unsupported Version、Legacy Fallback、Malformed JSON-RPC 与 Schema、Duplicate ID、Pagination、Stale Cache、List Change、Timeout 与 Cancellation Race、Interrupted Stream、MRTR Accept/Decline、requestState 错误复用、Authorization Redirect、SSRF、Token 过期或 Scope 不足,以及 Retry 后的 Duplicate Side Effect。错误信息必须可操作且不能泄露 Credential 或敏感 Payload。

相关工具

相关术语

相关文章