第 11 章:MCP 与工具互操作
本章解决的问题
MCP 是当前 AI 面试高频词。这一章解释它解决什么问题,以及它与 Function Calling、插件工具的关系。
交互图解:MCP 与内部工具归一化架构 · 查看图解导读
大白话理解
如果没有标准协议,每个 AI 应用都要为不同外部工具写一套适配器。
MCP 的目标是提供标准工具协议,让模型客户端和工具服务之间可以对接。
你可以把它类比成:
- 浏览器插件不是标准。
- USB 是一个标准接口。
- MCP 试图成为 AI 工具的一种标准接口。
必须掌握的概念
1. MCP
MCP 是 Model Context Protocol,定义模型客户端如何发现和调用工具、资源和提示。
2. Tool
Tool 是可被模型调用的能力,有名称、描述和参数。
3. Function Calling
Function Calling 是模型输出结构化工具调用意图。MCP 可以负责传输和发现这些工具。
4. 插件工具
DeepSeek Harness 的内部工具是 Cordis 插件注册到 ctx.tools。
5. MCP 与插件工具的区别
- MCP 更像外部协议。
- 插件工具更像进程内扩展。
- 一个 MCP server 可以被多个客户端使用。
- 一个内部插件更贴近当前 Harness 运行时。
DeepSeek Harness 对应实现
DeepSeek Harness 有 dsh-mcp-client 插件,但默认不启用 MCP server,因为每个 server command 是 agent 沙箱外的可信可执行代码。
在仓库配置中,MCP 可以接入为工具来源。工具注册后进入 ctx.tools,前端通过统一工具视图展示,不关心工具来自内部插件还是 MCP。
进一步阅读:
apps/cli/reference/README.mddocs/subsystems/tools.md
代码示例
简化 MCP 工具发现
ts
interface McpTool {
name: string
description: string
inputSchema: Record<string, unknown>
}
async function discoverMcpTools(endpoint: string): Promise<McpTool[]> {
const response = await fetch(endpoint, {
method: 'POST',
headers: { 'content-type': 'application/json' },
body: JSON.stringify({ method: 'tools/list' }),
})
const payload = await response.json()
return payload.tools as McpTool[]
}把 MCP 工具转成内部 Tool
ts
interface InternalTool {
name: string
description: string
parameters: Record<string, unknown>
execute(args: unknown): Promise<unknown>
}
function toInternalTool(mcpTool: McpTool, callTool: (name: string, args: unknown) => Promise<unknown>): InternalTool {
return {
name: mcpTool.name,
description: mcpTool.description,
parameters: mcpTool.inputSchema,
execute(args) {
return callTool(mcpTool.name, args)
},
}
}前端不需要知道工具来自 MCP,只要知道它有名称、Schema、执行状态和结果。
面试怎么问
问:MCP 是什么?
回答要点:
- 一种标准协议。
- 让模型客户端发现和调用工具。
- 降低外部工具集成的重复适配。
问:MCP 和 Function Calling 有什么区别?
回答要点:
- Function Calling 是模型侧能力。
- MCP 是工具协议。
- MCP 可以承载工具发现和调用。
- 两者处在不同层次。
问:MCP 工具进入产品后,前端如何展示?
回答要点:
- 按统一 Tool Schema 展示。
- 展示 pending、running、success、error。
- 不把 MCP 当成特殊 UI 分支。
- 对危险工具做权限提示。
自测题
- MCP 解决的核心问题是什么?
- MCP 和内部插件工具的主要区别是什么?
- Function Calling 在 MCP 架构中的角色是什么?
- 为什么 MCP server 可能需要安全边界?
本章小结
MCP 是工具互操作层的候选标准。前端面试中要把它放到正确层次:它是协议,不是替代 Function Calling,也不是替代产品内部插件系统。
进一步阅读:
docs/subsystems/tools.mdpackages/mcp/