Files

62 lines
3.9 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
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 日志污染)。
**追问**:怎么验证模型能正确使用你的工具?→ 准备一组问题做评测,检查是否选对工具、参数是否正确,根据失败案例改进工具描述。