Jixue AI学习库
返回面试题库
MCP初级

tools/list 和 tools/call 分别是什么?一个 MCP Client 从连接到调用工具要走哪几步?

MCPToolsJSON-RPC
30 秒回答

tools/list 是向 Server 要当前可用工具清单,返回每个工具的 name、description 和 inputSchema(参数结构);tools/call 是按清单里的 name 加 arguments 真正执行一个工具。完整步骤:建立连接 → initialize 握手 → 发 notifications/initialized 确认就绪 → tools/list 拿清单 → 按 inputSchema 组装参数发 tools/call。

完整回答

tools/list 的价值是让 Host 拿到工具定义后喂给模型做选择——它对应 function calling 里的 tools 参数,模型看到 name、description、inputSchema 才知道有什么可调、怎么填参,所以清单以握手后的 tools/list 为准,不该在 Client 里硬编码。tools/call 的 params 固定是 name(字符串)加可选 arguments(对象),结果放在 content 数组里返回;注意工具执行失败不是协议错误,按约定返回带 isError: true 的正常结果。顺序不能乱:没完成 initialize 和 initialized 通知就调用,属于跳过握手。以本站 POST /api/mcp 为例:tools/call 缺 name 或参数结构不合法返回 -32602;调用未暴露的工具名同样返回 -32602,并在 error.data.exposedTools 里列出可用工具。

加分信息

  • 把 tools/list 与 function calling 的 tools 参数对应起来,说明模型选工具的信息来源
  • 指出工具清单应以 tools/list 动态获取而非硬编码,便于 Server 侧增删工具

常见问题

  • 从不调 tools/list,把工具名和参数硬编码在 Client 里
  • 以为 tools/call 执行失败会返回协议错误码,其实走结果里的 isError 字段

面试官可能追问

项目连接

/labs/mcp-tools 完整演示 initialize → notifications/initialized → tools/list → tools/call 四步轨迹,每帧都是真实请求/响应原文;站内 MCP server 只暴露 2 个只读工具,写工具 save_learning_note 不经 MCP 暴露,调它会收到 -32602。