Model Context Protocol (MCP) 核心知识点面试题库

一份面向 AI 应用开发工程师的深度技术考核指南,涵盖架构、通信、原语与工程实践。

模块一:架构与基础设计

【问题】

MCP 的核心定义是什么?它相比传统的私有 API 集成方案,解决了哪些关键痛点?请从可组合性、版本管理、发现机制三个维度进行对比分析。

【重要程度】⭐⭐⭐⭐⭐

【考察点】架构理解能力、对现代 AI 工具链演进的认知深度。

【参考答案】 MCP(Model Context Protocol)是一种标准化协议,用于在大模型客户端(Client)与外部服务之间建立统一、可互操作的连接。其核心价值在于将 LLM 的“上下文”扩展为一个动态、可编程的资源池。

传统私有集成的三大痛点:

  1. 不可组合性:每个工具独立开发,缺乏统一接口,导致无法像搭积木一样组合使用;
  2. 版本混乱:工具更新后,客户端需手动同步,缺乏版本声明和兼容性保障;
  3. 发现困难:工具依赖硬编码或文档查找,无自动化发现机制,难以实现“即插即用”。

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 等能力。

交互流程:

  1. Client 启动时,通过配置或发现机制定位 Server 地址;
  2. 建立连接(通常通过 Stdio 或 SSE);
  3. Server 发送 Initialize 消息,包含其支持的能力清单;
  4. Client 根据能力清单构建 UI、缓存元数据;
  5. 用户发起请求,Client 将指令发送至 Server;
  6. 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 工具(代码生成、文件搜索、数据库查询)通过统一协议连接到大模型,无需重新编写集成代码。

关键相似点:

  1. 标准化:两者都定义了通用的协议规范;
  2. 自动发现:设备插入后,系统能自动识别并加载驱动/能力;
  3. 即插即用:用户无需关心底层细节,直接使用;
  4. 生态繁荣:因标准开放,催生大量第三方开发者和创新应用。

因此,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 调用流程:

  1. Client 从 Server 的 Metadata 中发现 code.generate 工具;
  2. 用户输入指令:“帮我写个 Python 函数生成斐波那契数列”;
  3. Client 将指令解析为 Tool Call Request,发送至 Server;
  4. Server 执行代码生成逻辑;
  5. Server 通过流式响应返回结果(SSE);
  6. 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 协议的生命周期管理确保了连接的可靠性和服务的可控性。

  1. Initialize(初始化)

    • 触发条件:Client 与 Server 建立连接后立即发送。
    • 消息格式
      {
        "jsonrpc": "2.0",
        "method": "initialize",
        "params": {
          "clientName": "Cursor",
          "clientVersion": "1.2.3",
          "capabilities": ["resources", "tools", "prompts"]
        }
      }
      
    • 作用:告知对方自身身份与能力,是建立信任和协商能力的基础。
  2. Ping(心跳检测)

    • 触发条件:每 30 秒由 Client 向 Server 发送一次,或 Server 主动请求。
    • 消息格式
      {
        "jsonrpc": "2.0",
        "method": "ping",
        "id": 999
      }
      
    • 作用:检测连接是否存活,防止因网络中断或进程崩溃导致的“僵尸连接”。
  3. 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 实现

  1. Client 收到带有 sideEffect: true 标记的 Tool Call Request 时,不会直接执行;
  2. 它会弹出确认对话框,展示操作摘要(如“将提交以下 3 个文件”);
  3. 用户点击“确认”后,Client 才将请求发送至 Server;
  4. 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 再将此内容用于后续处理(如生成文档、嵌入到页面)。

典型应用场景

  1. 智能摘要:让模型自动生成文档摘要、会议纪要;
  2. 内容补全:在已有草稿基础上,由模型补充细节;
  3. 个性化推荐:根据用户偏好生成定制化内容。

核心优势

  • 降低 Server 负载:将耗时的生成任务卸载到 Client 端,Server 只负责调度和整合;
  • 提升响应速度:Client 通常离用户更近,生成更快;
  • 增强灵活性:同一模板可适配不同用户、不同上下文,实现个性化。

这是 MCP 实现“去中心化 AI 计算”的关键体现。


模块四:工程实践与安全

【问题】

当 MCP 连接出现异常时,如何利用 Inspector 工具进行调试?请描述排查流程,包括关键日志位置、常见错误码及应对策略。

【重要程度】⭐⭐⭐⭐

【考察点】故障排查能力、工具使用熟练度。

【参考答案】 Inspector 是 MCP 开发者的“瑞士军刀”,它能可视化地查看整个通信过程。

排查流程

  1. 启用 Inspector:在 Client 或 Server 启动时添加 --inspect 参数。
  2. 观察日志:关键日志位于:
    • logs/mcp-connection.log(连接建立日志)
    • logs/mcp-communication.log(消息收发日志)
  3. 检查常见错误码
    • 32000:通用错误,通常为参数缺失;
    • 32001:方法不存在(如 tools.call 未注册);
    • 32002:认证失败(权限不足);
    • 32003:超时(网络或 Server 无响应)。
  4. 验证连接:使用 ping 检测心跳是否正常;
  5. 检查 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 为例,完整工作流如下:

  1. 用户输入:在编辑器中输入“生成一个登录页面的 React 组件”;
  2. Client(Cursor):识别指令,调用 MCP Client SDK,向 Server 询问可用工具;
  3. Server(AI Agent):返回 code.generate 工具可用,并附带提示词模版;
  4. Client:调用 tools.call,发送请求,指定语言为 React;
  5. Server:使用 LLM 生成代码,通过 SSE 流式返回;
  6. Client:将代码片段插入当前文件;
  7. 用户确认:点击“提交代码”按钮;
  8. Client:检测到 git.commit 工具带有 sideEffect: true,弹出确认框;
  9. 用户确认:点击“确认”;
  10. Client:调用 tools.call 执行 git.commit
  11. Server:执行 Git 命令,返回成功消息;
  12. Client:在 UI 中显示“提交成功”提示。

各组件作用总结

  • Client(Cursor):协调者,负责 UI 交互、工具调用、安全确认;
  • Host(VS Code):提供编辑器环境;
  • Server(AI Agent):执行核心逻辑,生成代码和执行 Git 操作。

这一流程体现了 MCP 如何将复杂的 AI 功能封装成简单易用的原子操作,极大提升了开发效率。


总结

本题库覆盖了 MCP 的核心知识体系,是评估 AI 应用开发工程师能力的权威标准。掌握这些内容,意味着候选人不仅能“用”好 MCP,更能“懂”好 MCP,具备构建下一代 AI 原生应用的坚实能力。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐