Skip to content
签到签到

第 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.md
  • docs/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 分支。
  • 对危险工具做权限提示。

自测题

  1. MCP 解决的核心问题是什么?
  2. MCP 和内部插件工具的主要区别是什么?
  3. Function Calling 在 MCP 架构中的角色是什么?
  4. 为什么 MCP server 可能需要安全边界?

本章小结

MCP 是工具互操作层的候选标准。前端面试中要把它放到正确层次:它是协议,不是替代 Function Calling,也不是替代产品内部插件系统。

进一步阅读:

  • docs/subsystems/tools.md
  • packages/mcp/