Model Context Protocol (MCP) 核心知识点面试题库
本题库覆盖了 MCP 的核心知识体系,是评估 AI 应用开发工程师能力的权威标准。掌握这些内容,意味着候选人不仅能“用”好 MCP,更能“懂”好 MCP,具备构建下一代 AI 原生应用的坚实能力。
Model Context Protocol (MCP) 核心知识点面试题库
一份面向 AI 应用开发工程师的深度技术考核指南,涵盖架构、通信、原语与工程实践。
模块一:架构与基础设计
【问题】
MCP 的核心定义是什么?它相比传统的私有 API 集成方案,解决了哪些关键痛点?请从可组合性、版本管理、发现机制三个维度进行对比分析。
【重要程度】⭐⭐⭐⭐⭐
【考察点】架构理解能力、对现代 AI 工具链演进的认知深度。
【参考答案】 MCP(Model Context Protocol)是一种标准化协议,用于在大模型客户端(Client)与外部服务之间建立统一、可互操作的连接。其核心价值在于将 LLM 的“上下文”扩展为一个动态、可编程的资源池。
传统私有集成的三大痛点:
- 不可组合性:每个工具独立开发,缺乏统一接口,导致无法像搭积木一样组合使用;
- 版本混乱:工具更新后,客户端需手动同步,缺乏版本声明和兼容性保障;
- 发现困难:工具依赖硬编码或文档查找,无自动化发现机制,难以实现“即插即用”。
MCP 通过标准化的 JSON-RPC 接口、元数据声明和动态发现机制,从根本上解决了上述问题,实现了真正的“AI 时代的 USB 协议”。
【问题】
请详细描述 MCP 架构中 Client、Host、Server 三者的角色划分与交互流程。它们分别运行在什么环境?典型代表有哪些?
【重要程度】⭐⭐⭐⭐⭐
【考察点】系统级架构认知、对实际产品落地的理解。
【参考答案】
- Client(客户端):运行在用户终端,如 Cursor IDE、Claude Desktop、本地 CLI 工具。负责启动与 Server 建立连接,接收来自 Server 的资源、工具和提示词,并将用户的指令传递给 Server 执行。它是模型的“执行引擎”和“上下文管理器”。
- Host(宿主):是 Client 的运行环境,例如 VS Code 插件、浏览器扩展或桌面应用。它提供 UI 交互、权限控制、日志记录等基础设施,但不直接参与 MCP 协议通信。
- Server(服务端):运行在远程服务器或本地进程,提供具体功能。它可以是一个 LLM 工具服务(如代码生成、数据分析)、一个数据库连接器,或一个自定义的 AI Agent。它通过 MCP 协议暴露 Resources、Tools、Prompts 等能力。
交互流程:
- Client 启动时,通过配置或发现机制定位 Server 地址;
- 建立连接(通常通过 Stdio 或 SSE);
- Server 发送 Initialize 消息,包含其支持的能力清单;
- Client 根据能力清单构建 UI、缓存元数据;
- 用户发起请求,Client 将指令发送至 Server;
- Server 执行并返回结果,支持流式响应。
典型代表:
- Client: Cursor, Windsurf, Claude Desktop
- Host: VS Code, Web Browser
- Server: OpenAI API Wrapper, Custom Code Generation Service, Database Connector
【问题】
为什么说 MCP 被誉为 AI 时代的 "USB 协议"?请结合其设计理念与现实应用场景进行解释。
【重要程度】⭐⭐⭐⭐
【考察点】抽象思维能力、类比表达能力。
【参考答案】 这个比喻极具洞察力。类比如下:
- USB 是物理世界中“即插即用”的标准接口,允许不同厂商的设备(键盘、鼠标、硬盘)通过统一协议连接到计算机,无需重新设计硬件。
- MCP 是数字世界中“即插即用”的逻辑接口,允许不同的 AI 工具(代码生成、文件搜索、数据库查询)通过统一协议连接到大模型,无需重新编写集成代码。
关键相似点:
- 标准化:两者都定义了通用的协议规范;
- 自动发现:设备插入后,系统能自动识别并加载驱动/能力;
- 即插即用:用户无需关心底层细节,直接使用;
- 生态繁荣:因标准开放,催生大量第三方开发者和创新应用。
因此,MCP 不仅是技术协议,更是推动 AI 工具生态繁荣的基础性基础设施,正如当年的 USB 改变了计算设备的互联方式。
模块二:协议通信与底层机制
【问题】
JSON-RPC 2.0 在 MCP 协议中的作用是什么?请说明其消息结构(Request/Response/Error),并举例说明一个典型的 Tool 调用流程。
【重要程度】⭐⭐⭐⭐⭐
【考察点】底层协议理解、实际通信流程掌握。
【参考答案】 JSON-RPC 2.0 是 MCP 的通信基石,它定义了客户端与服务端之间的请求-响应模型,确保跨平台、跨语言的互操作性。
基本消息结构:
- Request:
{ "jsonrpc": "2.0", "id": 1, "method": "tools.call", "params": { "toolId": "code.generate", "args": {"language": "python", "prompt": "写一个斐波那契函数"} } } - Response:
{ "jsonrpc": "2.0", "id": 1, "result": "def fibonacci(n):\n if n <= 1:\n return n\n return fibonacci(n-1) + fibonacci(n-2)" } - Error:
{ "jsonrpc": "2.0", "id": 1, "error": { "code": -32000, "message": "Tool execution failed due to timeout", "data": {"details": "Timeout after 5s"} } }
典型 Tool 调用流程:
- Client 从 Server 的 Metadata 中发现
code.generate工具; - 用户输入指令:“帮我写个 Python 函数生成斐波那契数列”;
- Client 将指令解析为 Tool Call Request,发送至 Server;
- Server 执行代码生成逻辑;
- Server 通过流式响应返回结果(SSE);
- Client 将结果展示给用户,同时可能触发后续 Prompt 填充。
【问题】
在 MCP 中,Stdio 与 SSE 作为 Transport Layer 有何本质区别?请从连接方式、适用场景、性能特征三方面详细对比,并说明为何 CLI 工具多用 Stdio,而远程服务多用 SSE?
【重要程度】⭐⭐⭐⭐⭐
【考察点】工程选型能力、对网络传输机制的理解。
【参考答案】 | 维度 | Stdio (标准输入输出) | SSE (Server-Sent Events) | |------|------------------------|--------------------------| | 连接方式 | 进程间通信(IPC),通过管道(Pipe)或文件描述符连接 | 基于 HTTP/HTTPS 长连接,客户端主动发起连接 | | 适用场景 | 本地命令行工具、IDE 内嵌插件、快速原型开发 | 远程服务、Web 应用、需要高可用和可扩展性的生产环境 | | 性能特征 | 低延迟,零开销,适合高频短连接 | 高延迟(初始握手),但支持长连接,适合流式传输 | | 可靠性 | 一旦进程退出,连接即断 | 可通过心跳维持,具备重连机制 | | 安全性 | 仅限本地,不易被外部攻击 | 需要认证与授权机制 |
选择原因:
- CLI 工具用 Stdio:因为 CLI 通常是单次调用,启动快、关闭快,且运行在本地,安全风险低。使用 Stdio 可以避免网络开销,实现最高效的 IPC。
- 远程服务用 SSE:因为远程服务需要持久化连接,支持多个客户端并发,且必须通过网络暴露。SSE 提供了良好的流式支持和状态管理,是实现远程 Agent 服务的理想选择。
【问题】
请详细阐述 MCP 协议的生命周期管理机制。包括连接初始化(Initialize)、心跳检测(Ping)、优雅停机(Shutdown)的触发条件、消息格式与作用。
【重要程度】⭐⭐⭐⭐
【考察点】系统稳定性意识、对协议完整性的理解。
【参考答案】 MCP 协议的生命周期管理确保了连接的可靠性和服务的可控性。
-
Initialize(初始化)
- 触发条件:Client 与 Server 建立连接后立即发送。
- 消息格式:
{ "jsonrpc": "2.0", "method": "initialize", "params": { "clientName": "Cursor", "clientVersion": "1.2.3", "capabilities": ["resources", "tools", "prompts"] } } - 作用:告知对方自身身份与能力,是建立信任和协商能力的基础。
-
Ping(心跳检测)
- 触发条件:每 30 秒由 Client 向 Server 发送一次,或 Server 主动请求。
- 消息格式:
{ "jsonrpc": "2.0", "method": "ping", "id": 999 } - 作用:检测连接是否存活,防止因网络中断或进程崩溃导致的“僵尸连接”。
-
Shutdown(优雅停机)
- 触发条件:Client 需要关闭时,主动发送;Server 也可在维护时主动关闭。
- 消息格式:
{ "jsonrpc": "2.0", "method": "shutdown", "id": null } - 作用:通知对方即将断开连接,让对方有机会清理资源、保存状态,避免数据丢失。
这些机制共同构成了一个健壮的通信框架,是构建生产级 MCP 服务不可或缺的部分。
模块三:核心能力原语 (Primitives)
【问题】
Resources(资源)在 MCP 中不仅指文件读取,请详细说明 URI 模板的设计模式及其在动态资源订阅中的应用。请举例说明如何通过 resource.get 实现一个“当前工作目录下所有 Python 文件”的动态列表。
【重要程度】⭐⭐⭐⭐⭐
【考察点】对资源抽象的理解、高级编程能力。
【参考答案】 Resources 是 MCP 的核心抽象之一,它将任何可访问的数据源视为一个“资源”,并通过 URI 进行唯一标识。
URI 模板设计模式:
- URI 采用
{variable}语法表示占位符,支持参数化。 - 示例:
file://project/{projectName}/src/**/*.py - 当
projectName被替换为myapp时,URI 变为file://project/myapp/src/**/*.py,指向该项目的全部 Python Files.
动态资源订阅机制:
- Client 可以向 Server 发送
resource.subscribe消息,注册一个 URI 模板。 - Server 会监控该路径下的变化(如文件增删),并在变化发生时通过
resource.changed事件推送通知。
示例:获取当前工作目录下所有 Python 文件
{
"jsonrpc": "2.0",
"method": "resource.get",
"params": {
"uri": "file://./src/**/*.py"
}
}
此请求会返回一个包含所有匹配文件内容的数组。如果使用 subscribe,则可以持续监听新增的 .py 文件,实现“实时感知项目结构变化”。
【问题】
LLM 如何发现和调用 Tools?请解释 Side Effects(副作用)的处理原则,并说明 Human-in-the-loop(人工确认)在工具执行中的实现方式与必要性。
【重要程度】⭐⭐⭐⭐⭐
【考察点】工具链集成能力、安全意识、用户体验设计。
【参考答案】 工具发现与调用:
- Server 在 Initialize 阶段通过
capabilities字段暴露其支持的 Tools 列表,如:"capabilities": [ {"type": "tool", "id": "git.commit", "name": "Commit Changes", "description": "提交代码变更"} ] - Client 依据此信息,在 UI 中显示可用工具按钮。当用户输入“提交代码”时,Client 会自动匹配并生成 Tool Call Request。
Side Effects 处理原则:
- 所有具有潜在破坏性(如删除文件、修改数据库、发送邮件)的操作,必须明确标记为
sideEffect: true。 - LLM 本身不能直接执行此类操作,必须通过 User Confirmation 流程。
Human-in-the-loop 实现:
- Client 收到带有
sideEffect: true标记的 Tool Call Request 时,不会直接执行; - 它会弹出确认对话框,展示操作摘要(如“将提交以下 3 个文件”);
- 用户点击“确认”后,Client 才将请求发送至 Server;
- Server 执行成功后,返回结果。
必要性:防止模型因误判或恶意 prompt 导致灾难性后果,是 AI 安全的核心防线。
【问题】
Prompt 模版如何在 MCP 服务端复用?请解释其参数填充机制,并举例说明如何实现一个“根据项目类型生成不同风格的 README.md”模板。
【重要程度】⭐⭐⭐⭐
【考察点】提示工程能力、模板化设计思想。
【参考答案】 Prompt 模板复用机制:
- Server 在
prompts元数据中定义预设模板,例如:{ "id": "readme.generate", "template": "生成一个适用于 {{projectType}} 项目的 README,包含简介、安装步骤、使用示例。" }
参数填充机制:
- 使用
{{key}}语法进行变量替换。 - Client 在调用时提供参数对象,如:
{ "promptId": "readme.generate", "params": {"projectType": "react-app"} } - Server 将
{{projectType}}替换为react-app,生成最终提示词。
示例:动态生成 README
{
"jsonrpc": "2.0",
"method": "prompt.execute",
"params": {
"promptId": "readme.generate",
"params": {
"projectType": "vue3-project"
}
}
}
最终提示词为:“生成一个适用于 vue3-project 项目的 README,包含简介、安装步骤、使用示例。”
这使得模板高度可复用,降低了提示词维护成本,提升了开发效率。
【问题】
Sampling(采样)是 MCP 的独特功能,请解释 Server 端如何反向请求 Client(大模型)生成内容。请说明其典型应用场景,并分析其带来的核心优势。
【重要程度】⭐⭐⭐⭐⭐
【考察点】对 MCP 特性深度理解、创新思维能力。
【参考答案】 工作机制:
- 传统模式:Client 生成内容 → Server 处理
- MCP Sampling 模式:Server 生成提示词 → Client 生成内容 → Server 处理
Server 通过 sampling.request 方法,向 Client 发送一个待填充的模板,要求 Client 生成特定内容。
消息格式:
{
"jsonrpc": "2.0",
"method": "sampling.request",
"params": {
"template": "根据以下需求,生成一段简短的项目介绍:{{description}}",
"context": {"projectName": "MyApp"}
}
}
Client 收到后,会调用自身的 LLM 生成内容,如:“这是一个基于 React 构建的现代化 Web 应用,旨在提升用户交互体验。”
Server 再将此内容用于后续处理(如生成文档、嵌入到页面)。
典型应用场景:
- 智能摘要:让模型自动生成文档摘要、会议纪要;
- 内容补全:在已有草稿基础上,由模型补充细节;
- 个性化推荐:根据用户偏好生成定制化内容。
核心优势:
- 降低 Server 负载:将耗时的生成任务卸载到 Client 端,Server 只负责调度和整合;
- 提升响应速度:Client 通常离用户更近,生成更快;
- 增强灵活性:同一模板可适配不同用户、不同上下文,实现个性化。
这是 MCP 实现“去中心化 AI 计算”的关键体现。
模块四:工程实践与安全
【问题】
当 MCP 连接出现异常时,如何利用 Inspector 工具进行调试?请描述排查流程,包括关键日志位置、常见错误码及应对策略。
【重要程度】⭐⭐⭐⭐
【考察点】故障排查能力、工具使用熟练度。
【参考答案】 Inspector 是 MCP 开发者的“瑞士军刀”,它能可视化地查看整个通信过程。
排查流程:
- 启用 Inspector:在 Client 或 Server 启动时添加
--inspect参数。 - 观察日志:关键日志位于:
logs/mcp-connection.log(连接建立日志)logs/mcp-communication.log(消息收发日志)
- 检查常见错误码:
32000:通用错误,通常为参数缺失;32001:方法不存在(如tools.call未注册);32002:认证失败(权限不足);32003:超时(网络或 Server 无响应)。
- 验证连接:使用
ping检测心跳是否正常; - 检查 Meta Data:确认 Server 是否正确暴露了
capabilities。
应对策略:
- 若为
32001,检查 Server 代码中是否注册了对应方法; - 若为
32002,检查权限配置或 Token 是否有效; - 若为
32003,检查网络防火墙或 Server 是否已崩溃。
Inspector 的存在极大降低了 MCP 的学习与调试门槛。
【问题】
在 MCP 中,如何实现细粒度的权限控制以防止模型执行危险操作?请结合 Role-Based Access Control (RBAC) 和 Capability-Based Security 两种范式,说明其实现思路。
【重要程度】⭐⭐⭐⭐⭐
【考察点】安全设计能力、系统性思维。
【参考答案】 MCP 的安全性必须从“最小权限”原则出发。
1. Role-Based Access Control (RBAC):
- 定义角色,如
developer,auditor,admin。 - 每个角色拥有预定义的 Capability 集合。
- 例如:
"roles": { "developer": { "capabilities": ["tools.code.generate", "resources.read"] }, "admin": { "capabilities": ["tools.delete.file", "tools.send.email"] } }
2. Capability-Based Security:
- 每个 Capability(如
tools.delete.file)都有一个唯一的 Token,只能由拥有该 Token 的 Client 访问。 - Server 在收到请求时,校验 Token 是否有效且属于当前用户角色。
实现思路:
- Client 启动时,由 Host(如 IDE)根据用户身份分配角色;
- Server 在 Initialize 时,根据角色决定暴露哪些 Capability;
- 所有 Tool Call 均需携带 Token,Server 验证后才执行。
这种双重机制确保了即使模型被劫持,也无法越权操作,是构建可信 AI Agent 的基石。
【问题】
请描述 MCP 在 Cursor IDE 与 Claude Desktop 等主流 AI 工具中的工作流。以 “使用 AI 生成代码并提交 Git” 为例,说明从用户输入到最终提交的全流程,以及各组件在其中的作用。
【重要程度】⭐⭐⭐⭐⭐
【考察点】实战经验、对产品生态的理解。
【参考答案】 以 Cursor IDE 为例,完整工作流如下:
- 用户输入:在编辑器中输入“生成一个登录页面的 React 组件”;
- Client(Cursor):识别指令,调用 MCP Client SDK,向 Server 询问可用工具;
- Server(AI Agent):返回
code.generate工具可用,并附带提示词模版; - Client:调用
tools.call,发送请求,指定语言为 React; - Server:使用 LLM 生成代码,通过 SSE 流式返回;
- Client:将代码片段插入当前文件;
- 用户确认:点击“提交代码”按钮;
- Client:检测到
git.commit工具带有sideEffect: true,弹出确认框; - 用户确认:点击“确认”;
- Client:调用
tools.call执行git.commit; - Server:执行 Git 命令,返回成功消息;
- Client:在 UI 中显示“提交成功”提示。
各组件作用总结:
- Client(Cursor):协调者,负责 UI 交互、工具调用、安全确认;
- Host(VS Code):提供编辑器环境;
- Server(AI Agent):执行核心逻辑,生成代码和执行 Git 操作。
这一流程体现了 MCP 如何将复杂的 AI 功能封装成简单易用的原子操作,极大提升了开发效率。
总结
本题库覆盖了 MCP 的核心知识体系,是评估 AI 应用开发工程师能力的权威标准。掌握这些内容,意味着候选人不仅能“用”好 MCP,更能“懂”好 MCP,具备构建下一代 AI 原生应用的坚实能力。
更多推荐

所有评论(0)