Skip to content
签到签到

进阶第 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.md
  • docs/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 安全边界。