进阶第 9 章:MCP 与工具互操作
业务问题
AI 产品会接入内部工具、第三方服务和外部 MCP server。前端不能为每种工具来源写一套 UI。
交互图解:MCP 与内部工具归一化架构 · 查看图解导读
核心原理
MCP 是工具互操作协议。它让客户端发现和调用工具。
内部插件工具和 MCP 工具最终都应归一化为统一 Tool:
text
工具来源
-> Tool Discovery
-> Tool Schema
-> Tool Registry
-> 统一执行结果
-> 统一前端工具视图真实项目中的映射
编码助手可能接入:
- 内部文件工具。
- 内部命令工具。
- MCP Git 工具。
- MCP Issue 工具。
客服 Agent 可能接入:
- 内部订单 API 工具。
- MCP CRM 工具。
- MCP 工单工具。
前端只关心工具名称、Schema、状态和结果。
DeepSeek Harness 对应实现
DeepSeek Harness 有 dsh-mcp-client,工具注册后进入 ctx.tools。
MCP server 默认不启用,因为每个 server command 是沙箱外的可信可执行代码。
进一步阅读:
apps/cli/reference/README.mddocs/subsystems/tools.md
代码示例
ts
interface McpTool {
name: string
description: string
inputSchema: Record<string, unknown>
}
interface UnifiedTool {
source: 'internal' | 'mcp'
name: string
description: string
parameters: Record<string, unknown>
execute(args: unknown): Promise<unknown>
}
function normalizeMcpTool(
tool: McpTool,
call: (name: string, args: unknown) => Promise<unknown>,
): UnifiedTool {
return {
source: 'mcp',
name: tool.name,
description: tool.description,
parameters: tool.inputSchema,
execute(args) {
return call(tool.name, args)
},
}
}统一工具模型是前端不感知工具来源的基础。
面试追问
问:MCP 和 Function Calling 有什么区别?
回答要点:
- Function Calling 是模型能力。
- MCP 是工具协议。
- MCP 负责发现和调用。
- 两者不在同一层。
问:内部工具和 MCP 工具为什么要统一?
回答要点:
- 前端 UI 可以复用。
- 权限策略可以统一。
- 日志和回放格式一致。
- 工具切换不影响业务。
问:MCP 工具有哪些安全风险?
回答要点:
- server 可能执行命令。
- 工具可能暴露敏感数据。
- 需要权限和沙箱。
- 前端要显示工具来源和风险。
实践任务
设计 UnifiedTool,把内部订单工具和 MCP 工单工具统一注册,并画出前端统一展示方案。
验收标准
- 能解释 MCP 的定位。
- 能统一内部和 MCP 工具。
- 能说明 MCP 安全边界。