发现

社区译文;来源: MCP 80041ab0

server/discover 允许客户端在发送任何其他请求之前,查询服务器支持的协议版本、能力和身份。服务器 MUST 实现此方法。

请求

除标准 _meta 外,请求不携带其他正文参数:

{
  "jsonrpc": "2.0",
  "id": "discover-1",
  "method": "server/discover",
  "params": {
    "_meta": {
      "io.modelcontextprotocol/protocolVersion": "2026-07-28",
      "io.modelcontextprotocol/clientInfo": {
        "name": "ExampleClient",
        "version": "1.0.0"
      },
      "io.modelcontextprotocol/clientCapabilities": {}
    }
  }
}

响应

服务器返回其支持的协议版本、能力和身份。此操作支持缓存 。

{
  "jsonrpc": "2.0",
  "id": "discover-1",
  "result": {
    "resultType": "complete",
    "supportedVersions": ["2026-07-28"],
    "capabilities": {
      "tools": {},
      "resources": {}
    },
    "_meta": {
      "io.modelcontextprotocol/serverInfo": {
        "name": "ExampleServer",
        "version": "1.0.0"
      }
    },
    "instructions": "This server provides weather and resource utilities.",
    "ttlMs": 3600000,
    "cacheScope": "public"
  }
}

何时调用

客户端可以选择是否调用 server/discover。客户端可以直接调用任意 RPC,并在服务器不支持所请求版本时处理 UnsupportedProtocolVersionError(英文) 。不过,server/discover 在以下两种场景中很有用:

  • 展示服务器信息。 客户端无需调用 server/discover 即可使用服务器,但此方法可以通过单个请求便捷地获取服务器身份、能力和支持的版本。例如,客户端可以根据一条 server/discover 响应展示服务器支持的能力,而不必分别发送 tools/list、prompts/list 和 resources/list 请求进行探测。
  • stdio 向后兼容探测。 在 stdio 中,没有逐请求的 HTTP 状态码可用于触发回退。同时支持现代服务器(逐请求 _meta)和旧版服务器(initialize 握手)的客户端 SHOULD 先发送 server/discover;回退规则请参阅 stdio:向后兼容(英文) 。

完整的版本选择流程请参阅协议版本协商 。对于未知方法返回的 HTTP 特定状态码,请参阅传输章节中的协议版本 Header(英文) 。

数据类型

DiscoverResult

发现结果包括:

  • supportedVersions:服务器支持的协议版本。客户端应从中选择一个版本用于后续请求。
  • capabilities:服务器支持的能力(工具、资源、提示词等)。
  • _meta['io.modelcontextprotocol/serverInfo']:服务器软件的名称和版本。服务器 SHOULD 包含此字段。
  • instructions:可选的自然语言指南,用于说明 LLM 如何有效使用此服务器。
serverInfo 由服务器自行报告,协议不会对其进行验证。它仅用于展示、日志记录和调试。客户端 SHOULD NOT 使用它改变自身行为,也 SHOULD NOT 依赖它作出安全决策。