主题
高频面试题
MCP 的工作流程是什么?
面试官问 MCP workflow,重点是你能否讲清一次连接从 initialize 到 tools/list、tools/call、resources/read 再到结果回传模型的完整链路。
面试官角度分析,想考什么
MCP 工作流程的参与方和连接阶段是什么?
考 Host、Client、Server,以及 initialize 能力协商。工具调用完整链路怎么走?
考发现、模型 tool call、Host 路由、tools/call、结果回传。Resources、Prompts 和安全边界在哪?
考 MCP 不只是函数调用;权限、确认、Server 信任和结果校验要由 Host 管住。
可直接抄走的 30 秒参考答案
text
MCP 的流程可以分成连接、发现、调用和回传。Host 里的 MCP Client 先连接 MCP Server,通过 initialize 协商协议版本和能力;然后用 tools/list、resources/list、prompts/list 发现工具、资源和提示模板。Host 把工具 schema 转成模型可见的 tools,模型返回 tool call 后,Host 做权限和参数校验,再通过 MCP Client 发 tools/call 给 Server。Server 执行外部 API、数据库或文件操作后返回结果,Host 把结果作为 observation 给模型继续推理。资源读取和 prompt 获取也是类似,由 Host 控制是否进入上下文。面试回答详解,知其所以然
MCP 工作流程要从分层讲起。模型通常不直接连接 MCP Server,真正连接的是 Host 内的 MCP Client。Host 负责把 MCP 暴露的工具和资源转成模型可使用的上下文和 tool schema。
1. 参与方:Host、Client、Server
典型结构是:
text
LLM / Agent Runtime
-> MCP Host
-> MCP Client
-> MCP Server
-> 外部工具 / 数据源- Host:用户正在使用的 AI 应用或 Agent Runtime,例如 IDE、桌面助手、企业 Agent。
- MCP Client:Host 内部负责和某个 MCP Server 通信的协议客户端。通常一个 server 对应一个 client 会话。
- MCP Server:暴露 tools、resources、prompts 的进程或远程服务。
- 外部系统:文件系统、数据库、SaaS API、代码仓库、搜索服务等。
面试里不要说“模型直接调用 MCP”。更准确是 Host 把模型的工具调用意图转成 MCP 请求。
2. 连接和初始化
MCP lifecycle 通常从初始化开始:
text
Client -> Server: initialize
Server -> Client: initialize result(capabilities, protocolVersion, serverInfo)
Client -> Server: initialized notification初始化阶段会协商:
- 协议版本。
- Client 能力。
- Server 能力,例如是否支持 tools、resources、prompts。
- Server 信息和可用能力。
- 后续通信使用的 transport。
Transport 常见有 stdio 和 Streamable HTTP。stdio 适合本地工具进程;HTTP 更适合远程服务、OAuth 和多用户部署。
3. 能力发现:tools、resources、prompts
连接建立后,Host 可以向 Server 发现能力:
text
tools/list -> 这个 Server 有哪些可调用工具
resources/list -> 这个 Server 暴露哪些可读资源
prompts/list -> 这个 Server 提供哪些 prompt 模板这些 primitive 的边界不同:
- Tools:动作,模型可以选择调用,例如
search_issues、query_database、create_ticket。 - Resources:可读上下文,例如文件、数据库记录、文档片段、日志。
- Prompts:可复用提示模板或工作流入口,例如“总结这个仓库”“生成发布说明”。
Host 通常会把 tools/list 得到的工具 schema 转成当前模型 API 支持的 tool calling schema,让模型知道有哪些工具可用。
4. 一次工具调用的完整流程
典型工具调用链路是:
text
1. Host 连接 MCP Server 并获取 tools/list
2. Host 把工具 schema 放入模型上下文
3. LLM 返回 tool call:工具名 + JSON 参数
4. Host/Runtime 校验参数、权限和风险
5. MCP Client 发送 tools/call 给对应 Server
6. MCP Server 调外部系统或本地能力
7. Server 返回 tool result
8. Host 把结果作为 tool observation 回传给 LLM
9. LLM 继续推理、再次调用工具或生成最终回答所以 MCP workflow 横跨两条链:
- 模型侧:tool schema -> tool call -> tool result。
- MCP 侧:tools/list -> tools/call -> result。
Host/Runtime 是中间桥梁。
5. Resource 读取流程
Resource 通常用于把外部上下文带入任务:
text
resources/list -> 用户或 Host 选择资源 -> resources/read -> 内容进入上下文例如文件系统 MCP Server 暴露某个目录下的文件,Host 可以展示资源列表,用户选择一个文件后读取内容给模型。和 Tool 不同,Resource 偏“读取上下文”,不一定由模型主动触发。
生产里要注意:Resource 内容可能来自不可信文件、网页或文档,不能让它覆盖系统指令。它应该被标记为数据,并受权限和脱敏控制。
6. Prompt 使用流程
Prompts 是 Server 提供的可复用任务模板:
text
prompts/list -> prompts/get(name, args) -> prompt messages -> Host 交给模型它适合把领域经验封装在 Server 侧。例如 Git Server 提供“生成 PR review 摘要”的 prompt,数据库 Server 提供“解释这个 schema”的 prompt。
Prompt 不是安全边界。Host 仍要决定是否信任、是否展示给用户、是否和系统指令冲突。
7. 通知和变化
MCP 还支持一些通知类机制。例如 Server 工具列表、资源列表发生变化时,可以通知 Client;长任务或采样等能力也有更复杂流程。面试中不必展开所有细节,但要知道 MCP 不只是“一次 HTTP 调用”,它有会话、能力和生命周期。
8. 安全边界贯穿整个 workflow
MCP 标准化了连接,不等于自动安全。关键边界包括:
- Server 信任:来源、版本、依赖和发布链路要审核。
- 认证授权:stdio 不能随便继承全部本地凭据;HTTP 要有明确 auth 和 scope。
- 工具权限:Host/runtime 要按用户、任务、风险动态授权。
- 参数校验:模型生成参数必须校验。
- 用户确认:高风险 tools/call 前要展示影响范围。
- 结果处理:tool result 和 resource 内容可能包含 prompt injection。
- 审计追踪:记录 initialize、tools/list、tools/call、resources/read、错误和审批。
成熟回答要把 workflow 和安全一起讲,因为 MCP Server 往往正好连接文件、数据库、代码和企业系统。
面试官追问3个问题
追问一:模型是否直接调用 MCP Server?
- 考察点:执行主体。
- 回答方向:通常不是。模型返回 tool call 意图,Host/Runtime 负责校验和路由,MCP Client 才真正调用 Server。
追问二:initialize 阶段有什么用?
- 考察点:生命周期理解。
- 回答方向:用于协商协议版本、client/server capabilities 和 server 信息,确认双方支持哪些 primitive 和功能,随后进入可用状态。
追问三:tools、resources、prompts 有什么区别?
- 考察点:MCP primitive 边界。
- 回答方向:Tools 是可调用动作,Resources 是可读上下文,Prompts 是可复用任务模板。它们可以配合,但不应该全部混成函数。
扩展知识
MCP 和 Function Calling 在 workflow 中如何衔接
text
MCP: tools/list -> Host 获取工具定义
LLM API: tools schema -> 模型返回 tool_call
MCP: tools/call -> Server 执行工具
LLM API: tool result -> 模型继续生成Function Calling 是模型侧表达调用意图,MCP 是 Host 到工具 Server 的连接和调用协议。
stdio 和 HTTP 的流程差异
- stdio:Host 启动本地 Server 进程,通过标准输入输出交换 JSON-RPC 消息,适合本地文件、Git、开发工具。
- Streamable HTTP:Host 连接远程 Server,适合企业服务、SaaS、OAuth、多用户部署和网关治理。
Transport 选择会影响认证、延迟、部署、沙箱和数据边界。
为什么 Resources 不是普通 Tool
把所有读取都包装成 tool 会让模型过度参与上下文选择。Resource 允许 Host 或用户主动选择上下文,适合文件、文档和数据库记录,也更容易做权限和展示控制。