MCP server(工具服务器) 协议

别名: 工具服务器

工具的所有者:声明「我提供这些工具」(tools/list)并执行调用(tools/call)。一个能用的工具型 server 只需实现 initialize、tools/list、tools/call 三个方法。见[第 21 章](/chapters/21-mcp-v08/)。

它是什么

MCP server(工具服务器)是工具的所有者:声明「我提供这些工具」并执行它们的调用。GitHub、数据库、浏览器的官方 MCP server 就是这个角色。一个能用的工具型 server 只需实现三个方法:

方法 做什么 响应
initialize 能力协商:双方报协议版本与能力 { protocolVersion, capabilities: { tools: {} }, serverInfo }
tools/list 列出暴露的工具 { tools: [{ name, description, inputSchema }] }
tools/call 执行一个工具 { content: [{ type: 'text', text }] }

加上接收 notifications/initialized 通知(不回复)。工具参数用 JSON SchemainputSchema)描述,这是它与 ch08 本地注册表 parameters 数组之间的桥(第 21 章schemaToParams 转换)。

最重要的错误分层

这也是 ch08 error-protocol 的协议版:

  • 调用不存在的工具协议错误(JSON-RPC error-32602)——「这个方法不可用」;
  • 工具存在但运行失败数据(正常 result 但带 isError: true)——模型的职责就是看到失败并恢复:换个参数重试、换工具、或告诉用户。如果运行失败也回 JSON-RPC error,消息交换直接断了,模型连「刚才发生了什么」都看不到。

所以 tools/call 里 try/catch 的是工具函数,而不是整个方法分派。

在本教程的位置

第 21 章手写了一个暴露 echo 工具的 server(MCP 世界的 hello-world),并设了两道门禁:收到 notifications/initialized 之前拒绝 tools/list/tools/call(回 -32600);未知方法回 -32601。完整链路见官方 quickstart。

相关词条

出现在这些章节