--- id: ai.mcp.interview title: MCP 面试题 type: interview domain: ai stack: [mcp] tags: [MCP, 面试] level: intermediate related: [ai.mcp.protocol-server] week: [10, 11, 16] --- # MCP 面试题 ## 基础 ### 【基础】MCP 是什么?解决什么问题? **参考答案**:模型上下文协议,一个让 AI 应用以统一方式接入外部工具和数据的开放协议。解决 M 个 AI 应用 × N 个工具的重复集成问题:工具方实现一次 MCP 服务,所有支持 MCP 的应用都能使用。 **追问**:MCP 和 OpenAPI 有什么区别?→ OpenAPI 描述 HTTP 接口;MCP 面向 AI 应用,除了工具还定义了资源、提示词模板、双向能力(sampling、elicitation)和会话,工具描述直接供模型理解。 ### 【基础】tools、resources、prompts 有什么区别? **参考答案**:tools 由模型决定调用,可以有副作用;resources 是只读的上下文数据,由应用或用户选择加入;prompts 是预定义的提示词模板,由用户选择使用。 **追问**:查询数据库表结构应该做成 tool 还是 resource?→ 如果希望用户 / 应用主动选择放入上下文,用 resource;如果希望模型按需获取,用 tool。很多客户端对 tools 支持最好,实践中常做成 tool。 ### 【基础】MCP 有哪些传输方式? **参考答案**:stdio(本地子进程,标准输入输出)和 Streamable HTTP(远程服务)。消息格式都是 JSON-RPC 2.0。早期的 HTTP + SSE 传输已被 Streamable HTTP 取代。 **追问**:stdio 服务为什么不能用 print 打日志?→ 标准输出是协议通道,打印的内容会破坏消息格式;日志写到标准错误。 ## 进阶 ### 【进阶】MCP 和 Function Calling 是什么关系? **参考答案**:层次不同。Function Calling 是模型与应用之间的接口;MCP 是应用与工具服务之间的接口。应用从 MCP 服务获取工具列表,转成模型的工具定义,模型发起调用后,应用再通过 MCP 执行。 **追问**:LangGraph 怎么使用 MCP 工具?→ 使用 MCP 适配器(如 `langchain-mcp-adapters`,以官方文档为准)把 MCP 工具转成 LangChain 工具,交给 Agent 使用。 ### 【进阶】远程 MCP 服务怎么做安全? **参考答案**:HTTPS;基于 OAuth 的授权(规范为 HTTP 传输定义了授权流程);以用户身份访问业务系统;工具级权限和确认;限流、审计;校验 Origin 等防止 DNS 重绑定类攻击(以规范的安全建议为准)。 **追问**:安装第三方 MCP 服务有什么风险?→ 本地服务能以你的权限执行代码、读取文件;工具描述也可能包含诱导模型的指令(工具投毒)。只使用可信来源并审查代码和权限。 ## 场景题 ### 【场景题】公司有 5 个团队都要接入工单系统,怎么设计? **参考答案**:由工单系统团队提供一个远程 MCP 服务,统一鉴权(SSO 令牌、用户身份透传)、审计、限流;工具规范命名和描述,写操作带幂等 ID;各团队的 Agent 和开发工具都通过它接入。详见[企业内部 MCP 服务](scenarios/internal-tools-gateway.md)。 **追问**:工单系统接口改版怎么办?→ 只需要改 MCP 服务内部实现,工具接口保持兼容;需要改工具时做版本标记和废弃周期。 ### 【场景题】你在项目中写过 MCP 服务吗?讲一下。 **参考答案**(按自己的项目讲):服务提供了哪些工具 / 资源,为什么这样划分;参数怎么校验;有副作用的工具怎么保证幂等;怎么测试(进程内客户端测试);接入了哪些客户端(Cursor、自己的 LangGraph Agent);遇到的问题(例如 SDK 版本升级的不兼容、stdio 日志污染)。 **追问**:怎么验证模型能正确使用你的工具?→ 准备一组问题做评测,检查是否选对工具、参数是否正确,根据失败案例改进工具描述。