MCP 面试问答
Model Context Protocol (MCP) 综合面试准备指南。
1. 基础概念与核心价值
Q1:什么是 MCP?请简要描述其定义及其在连接 AI 应用与外部系统中的作用。
答案:
Model Context Protocol (MCP) 是 Anthropic 于 2024 年 11 月推出的开放标准,为 AI 应用连接外部数据源和工具提供了一种通用、标准化的方式。它充当 AI 模型(如 Claude、GPT-4)与企业系统(数据库、API、文件系统等)之间的桥梁。
核心作用:MCP 通过定义通用协议来解决集成挑战,允许任何 AI 应用通过标 准化接口与任何数据源通信,消除了定制化、一次性集成的需求。
Q2:MCP 解决了什么核心问题?请解释"N × M 集成问题"以及 MCP 如何改善这一状况。
答案:
N × M 集成问题:
在 MCP 出现之前,如果你有:
- N 个 AI 应用/宿主(Claude Desktop、Cursor、自定义聊天机器人、CI/CD 代理)
- M 个数据源(PostgreSQL、GitHub、Slack、Google Drive、Linear)
你需要构建 N × M = 20 个独立的定制集成。每个 AI 应用都需要为每个数据源构建自己的连接器。
MCP 如何解决:
MCP 将 N × M 转变为 N + M:
- 将每个数据源集成为 一次 MCP Server
- 将每个 AI 应用 一次 更新为支持 MCP Client 标准
- 结果:N+M 个连接,而非 N×M 个
这极大地减少了开发工作量、维护负担,并实现了生态系统范围的互操作性。
Q3:MCP 的类比是什么?为什么 MCP 常被比作 AI 应用的"USB-C 接口"?
答案:
"AI 的 USB-C"类比:
就像 USB-C 允许单个设备(硬盘、显示器、键盘)连接到任何电脑(MacBook、Windows PC、Android 手机)而无需为每种设备准备不同的线缆,MCP 允许单个数据源连接到任何 AI 应用而无需定制连接器。
为什么这个类比成立:
| 方面 | USB-C | MCP |
|---|---|---|
| 通用标准 | 一种端口类型 | 一种协议 |
| 互操作性 | 跨品牌兼容 | 模型无关 |
| 即插即用 | 无需定制线缆 | 无需定制集成 |
| 生态效应 | 设备越多价值越大 | 服务器越多价值越大 |
Q4:MCP 对开发者、AI 应用和最终用户的主要好处是什么?
答案:
| 利益相关者 | 好处 |
|---|---|
| 开发者 | • 一次构建集成,处处复用 • 无需维护 N 个不同的连接器 • 利用社区构建的服务器 • 专注于业务逻辑,而非底层连接 |
| AI 应用 | • 访问不断增长的工具生态系统 • 标准化接口降低复杂性 • 模型无关(切换 LLM 无需重写集成) • 丰富的双向上下文交换 |
| 最终用户 | • AI 助手能够真正访问他们的数据 • 更强大的 AI 工作流(多步骤任务) • 更快的功能交付(标准化集成) • 减少 AI 幻觉(访问真实数据) |
2. 架构与协议细节
Q5:请描述 MCP 的客户端-服务器架构。Host、Client 和 Server 各自的职责是什么?
答案:
MCP 使用三组件架构:
| 组件 | 职责 | 示例 |
|---|---|---|
| Host(宿主) | 编排 AI 交互、管理 UI、聚合上下文、执行安全策略、决定何时调用工具 | Claude Desktop、Cursor IDE、Zed、自定义 Web 应用 |
| Client(客户端) | Host 内部的协议实现;将 LLM 输出转换为 JSON-RPC 消息;管理与 Server 的 1:1 持久连接 | Host 应用内部 组件 |
| Server(服务器) | 封装数据源的独立进程;暴露 Resources、Tools、Prompts;执行实际的 API 调用 | GitHub MCP Server、Postgres MCP Server、Slack MCP Server |
关键点:Host 包含 Client,Client 与一个或多个 Server 通信。
Q6:MCP 使用什么基础协议进行消息通信?
答案:
MCP 使用 JSON-RPC 2.0 作为传输协议——一种轻量级、无状态的远程过程调用协议。
消息结构:
- 请求:
method、params和唯一的id - 响应:
result或error,带有匹配的id - 通知:
method和params(无id——即发即忘)
Q7:MCP 支持哪两种主要传输机制?请区分 stdio 和 Streamable HTTP 的使用场景。
答案:
| 传输方式 | 描述 | 使用场景 | 安全上下文 |
|---|---|---|---|
| stdio(标准输入/输出) | Server 作为子进程运行;通过 stdin/stdout 管道通信 | 本地桌面应用(IDE、Claude Desktop) | 继承用户 OS 权限;进程隔离 |
| SSE/HTTP(Server-Sent Events) | HTTP POST 用于客户端→服务器;SSE 用于服务器→客户端流式传输 | 远程/共享企业服务器;云部署 | 需要 OAuth/Bearer 令牌 + TLS 加密 |
何时使用哪种:
- stdio:本地文件访问、git 操作、个人工具
- HTTP:共享数据库(CRM、ERP)、云 API、多用户场景
Q8:MCP 协议中定义的四种基本消息类型是什么?
答案:
四种原语消息类型:
- Resources(Server 能力):只读数据访问——文件、数据库记录、API 响应。通过 URI 标识。
- Tools(Server 能力):具有输入/输出 schema 的可执行函数。代表 AI 可以执行的操作。
- Prompts(Server 能力):为常见工作流预构建的提示模板。标准化最佳实践。
- Sampling(Client 能力):反向请求流——Server 可以请求 Host 的 LLM 处理数据(实现服务器端 RAG)。
3. 核心能力(原语)
Q9:Server 提供的三个核心能力是什么?请分别解释 Tools、Resources 和 Prompts 的作用。
答案:
| 能力 | 用途 | 示例 |
|---|---|---|
| Tools | 接受参数并返回结果的可执行函数。有副作用。 | deleteFile()、sendEmail()、createIssue() |
| Resources | 提供上下文的只读数据。可订阅以获取实时更新。 | file://logs/app.log、postgres://users/schema、git://repo/pull/123 |
| Prompts | 为常见任务编码最佳实践的预配置模板。 | generateCommitMessage、codeReviewPrompt、summarizeDocument |
关键区别:Tools = 操作(写),Resources = 数据(读),Prompts = 模式(知识)。
Q10:Client 提供的三个核心能力是什么?请分别解释 Sampling、Elicitation 和 Roots。
答案:
| 能力 | 用途 |
|---|---|
| Sampling | 允许 Server 请求 Host 进行 LLM 推理。无需嵌入式 LLM 即可实现服务器端 RAG。 |
| Elicitation | (已弃用/高级)渐进式权限征求——在操作时而非预先请求同意 |
| Roots | 定义工作空间/可访问目录。使服务器能够理解项目结构和边界 |
最常用:Sampling 被广泛使用;Elicitation 和 Roots 更专业化。
Q11:什么是 Sampling?为什么 Server 有时需要反向请求 Client 来调用 LLM?
答案:
Sampling 定义:
Sampling 是一种机制,Server 请求 Host/Client 使用其 LLM 来处理数据。它反转了正常的控制流。
为什么需要:
- 服务器端 RAG:Server 找到相关数据但需要 LLM 在返回给 Host 之前进行摘要/转换
- 代码分析:Server 遇到无法解析的代码;请求 Host 的 LLM 解释
- 成本效率:Server 不需要嵌入自己的 LLM——利用 Host 的模型
示例流程:
Server → Client: "我有一个 10MB 的日志文件。请用你的 LLM 提取错误模式。"
Client → LLM: 处理并提取模式
Client → Server: 返回处理后的摘要
Server → Client: 返回结构化洞察