Skip to content
MCP 文档版本 2026-07-28 更新于 2026-10-14

能力发现(Discovery)

server/discover 让客户端在发送任何其他请求之前,先查询服务端支持的协议版本、能力与身份。 服务端 MUST(必须)实现它。

请求(Request)

除了标准的 _meta 之外,该请求不携带任何 body 参数:

json
{
  "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": {}
    }
  }
}

响应(Response)

服务端回以自己支持的协议版本、能力与身份。该操作支持缓存。

json
{
  "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"
  }
}

何时调用(When to Call)

对客户端而言,调用 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 上返回哪些状态码,见传输章节中的 协议版本头。

数据类型(Data Types)

DiscoverResult

发现结果包含:

  • supportedVersions:服务端支持的协议版本。客户端应从中挑选一个用于后续请求。
  • capabilities:服务端支持的能力(tools、resources、prompts 等)。
  • _meta['io.modelcontextprotocol/serverInfo']:服务端软件的名称与版本。服务端 SHOULD(应当)包含该字段。
  • instructions:可选的、面向 LLM 的自然语言指引,说明如何有效使用该服务端。

NOTE

serverInfo 由服务端自报,协议不做验证。它的用途是展示、日志与调试。 客户端 SHOULD NOT(不应当)据此改变自身行为,也 SHOULD NOT 将其用于任何安全决策。

BytesRouter 是社区翻译站点,所有译文仅供参考,一切以官方英文原文为准。