Skip to content

高频面试题

MCP 协议的架构包含哪些核心组件?Server 和 Client 分别负责什么?

这道题考的不是背组件名,而是能否把 Host、Client、Server 的职责、连接生命周期和工具暴露方式讲成一条真实执行链路。

适合阶段:Agent Runtime / MCP Server 开发面核心能力:Host-Client-Server · Capability Negotiation · Tool Routing · Transport

面试官角度分析,想考什么

  • MCP 架构有哪些核心角色?
    考 Host、Client、Server 的职责,而不是把三者混成“一个 MCP”。

  • Server 和 Client 分别负责什么?
    考边界:Server 暴露 tools/resources/prompts,Client 负责连接、协商和代 Host 发请求。

  • 一次工具调用链路怎么走?
    考端到端:Host 聚合 schema -> 模型 tool call -> Client 调 Server -> 结果回传模型。

可直接抄走的 30 秒参考答案

text
MCP 的核心组件是 Host、Client、Server。Host 是 AI 应用或 Agent Runtime,负责和用户、模型、权限和多个工具连接打交道;Client 是 Host 里针对某个 MCP Server 的连接实例,负责 initialize、能力协商、JSON-RPC 请求和会话状态;Server 是能力提供方,把外部系统封装成 tools、resources、prompts。一次调用通常是 Host 聚合 Server 暴露的工具给模型,模型返回 tool call,Host 路由到对应 Client,Client 调 Server,Server 执行后把结果返回给 Agent。

面试回答详解,知其所以然

MCP 架构题的关键是讲清“谁和谁通信”。不是模型直接连 MCP Server,而是 Host 里的 MCP Client 代表应用连接 Server,再把 Server 暴露的能力转给模型使用。

1. 三个核心组件:Host、Client、Server

MCP 官方架构把参与方拆成三类:

  • MCP Host:用户直接使用的 AI 应用或 Agent Runtime,例如桌面助手、AI IDE、企业 Agent 平台。它负责和用户交互、管理多个 MCP Client、把工具能力提供给模型、控制权限和最终输出。
  • MCP Client:Host 内部的协议客户端。通常每连接一个 MCP Server,就有一个独立 Client 实例。它负责握手、能力协商、发送 JSON-RPC 请求、接收通知、维护会话状态。
  • MCP Server:独立进程或远程服务,暴露具体能力。它可以连接本地文件系统、数据库、SaaS API、代码仓库或内部服务,并按 MCP 的 tools/resources/prompts 形式对外呈现。

最简链路是:

text
User -> MCP Host -> MCP Client -> MCP Server -> Tool / Data Source

2. Server 的职责:把外部能力封装成 MCP primitive

MCP Server 是能力提供方,但它不应该只是把底层 API 原样透出。一个好的 Server 会把外部系统封装成适合 Agent 使用的抽象。

Server 常见职责包括:

  • 声明自己支持哪些能力,例如 tools、resources、prompts、logging。
  • 暴露 tool 列表和 input schema,让 Host 知道如何调用。
  • 提供 resource 列表、resource 读取和订阅能力,让 Host 获取上下文。
  • 提供 prompt 模板,封装领域任务的推荐提示结构。
  • 调用底层系统,例如数据库、REST API、CLI、文件系统或企业服务。
  • 做输入校验、分页、摘要、错误码标准化和超大结果控制。
  • 落实 server 侧权限,比如 token scope、租户隔离、文件访问范围。

面试里可以强调:Server 不是“模型插件描述文件”,而是一个可运行的服务进程或远程服务,负责把真实系统的复杂性收敛成 Agent 可用的能力。

3. Client 的职责:维护一条到 Server 的有状态连接

MCP Client 位于 Host 内部。它不直接面对用户,也不直接替代模型推理,而是负责协议通信和连接状态。

Client 常见职责包括:

  • 启动或连接 MCP Server,例如本地 stdio 进程或远程 HTTP endpoint。
  • 执行 initialize 握手,交换协议版本、client info 和能力声明。
  • 维护 capability negotiation 的结果,知道这个 server 支持什么。
  • 拉取工具、资源、prompt 列表,并交给 Host 聚合。
  • 把 Host 的 tool/resource 请求转换成 MCP JSON-RPC 请求。
  • 处理 server 返回、错误、通知、日志和取消请求。
  • 维护会话级状态,例如订阅、认证上下文、连接健康和超时。

所以 Client 更像协议适配层和连接管理器,Host 才是整体编排者。

4. Host 的职责:把 MCP 能力接进 Agent Runtime

Host 是 MCP 体系里最容易被忽略但最重要的角色。用户不是直接和 Client 或 Server 交互,而是通过 Host 使用这些能力。

Host 负责:

  • 管理多个 MCP Client,每个 Client 对应一个 Server 连接。
  • 聚合多个 Server 的 tools/resources/prompts。
  • 把 MCP tool schema 转成模型 API 的工具格式。
  • 在模型返回 tool call 后,把调用路由到正确的 Client。
  • 执行权限确认、危险动作审批、结果裁剪和上下文注入。
  • 把 tool result 写回 Agent 状态,并决定是否继续循环。
  • 记录 trace、日志、错误和 stop reason。

这也是为什么 MCP 不是“模型直接会了一个新协议”。真正懂 MCP 的回答,会把 Host 的编排和安全职责说出来。

5. 一次工具调用的完整流程

可以用这条流程回答:

text
Host 启动
  -> 为每个 MCP Server 创建 Client
  -> Client initialize 并协商能力
  -> Client 拉取 tools/resources/prompts
  -> Host 聚合工具 schema 给 LLM
  -> LLM 选择某个 tool 并生成参数
  -> Host 根据 tool 来源路由到对应 Client
  -> Client 向 Server 发 tools/call
  -> Server 执行底层系统调用
  -> 结果回到 Host,写入 Agent observation
  -> Runtime 判断继续、停止、追问或审批

这里最重要的工程点是:模型只看到 Host 整理后的工具定义,真实连接、认证、超时、重试和日志在 Host/Client/Server 之间完成。

6. Transport 和消息协议

MCP 在消息层使用 JSON-RPC 2.0,并支持不同 transport。常见部署形态包括:

  • stdio:Host 启动本地 Server 子进程,通过标准输入输出通信,适合本地工具、AI IDE、个人桌面环境。
  • Streamable HTTP:Server 作为远程 HTTP 服务运行,更适合 SaaS、企业服务、云端部署和集中运维。

面试中不必死背所有字段,但要知道 MCP 的“消息语义”和“传输方式”是分开的:协议定义 JSON-RPC 方法和生命周期,transport 决定这些消息如何送达。

面试官追问3个问题

追问一:MCP Host 和 MCP Client 有什么区别?

  • 考察点:是否理解 Host 是产品 / runtime,Client 是协议连接组件。
  • 回答方向:Host 面向用户和模型,负责聚合工具、权限控制、上下文管理和 Agent loop;Client 是 Host 内部连接某个 Server 的实例,负责协议握手、请求发送、会话维护和返回处理。

追问二:Server 暴露 tool schema 后,模型是不是直接调用 Server?

  • 考察点:是否理解调用链路。
  • 回答方向:不是。模型只通过 Host 的工具调用接口表达意图。Host 解析 tool call 后,根据工具来源路由给对应 MCP Client,再由 Client 调 MCP Server。

追问三:MCP Server 应该做成很薄的 API wrapper 吗?

  • 考察点:Server 设计能力。
  • 回答方向:不应该无脑透出底层 API。好的 Server 应该面向 Agent 任务设计工具粒度,处理分页、错误、权限、结果摘要和幂等语义,避免把复杂底层接口直接丢给模型。

扩展知识

为什么一个 Server 通常对应一个 Client

MCP Client 和 Server 之间不是无状态的一次性调用关系。连接建立后会有协议版本、能力协商、会话状态、日志、通知、资源订阅和认证上下文。

text
1 个 MCP Server <-> 1 个 MCP Client 会话
多个 Server -> Host 内部多个 Client

这样做的好处是状态清晰、错误隔离明确。某个 Server 卡住、断开或权限失败,不应该污染其他 Server 的连接。

Server 暴露什么,不等于模型一定能直接用什么

Server 会声明工具和资源,但 Host 仍然要做二次治理:

  • 哪些工具进入当前模型上下文。
  • 工具描述是否需要裁剪或改写。
  • 危险工具是否需要用户确认。
  • 工具返回是否要摘要、分页或脱敏。
  • Resource 是否可以注入 prompt。
  • 多个 Server 出现同名或相似工具时如何消歧。

所以 MCP Server 是能力来源,Host 才是 Agent 行为的治理入口。

本地 Server 和远程 Server 的取舍

  • 本地 Server:适合访问本机文件、IDE、shell、浏览器状态;优点是低延迟、贴近用户环境;风险是本地权限大、供应链审计重要。
  • 远程 Server:适合 SaaS 和企业服务;优点是集中部署、统一升级、OAuth 和审计更方便;风险是网络、租户隔离、数据出境和服务方信任。

面试里能讲出这层部署取舍,比只背 stdio/HTTP 更有工程含量。

基于 MIT 协议开源