> ## Documentation Index
> Fetch the complete documentation index at: https://mcp-zh.com/llms.txt
> Use this file to discover all available pages before exploring further.

# 发现

<div id="enable-section-numbers" />

`server/discover` 让客户端在发送任何其他请求之前查询服务器所支持的协议版本、能力和身份。服务器\*\*必须（MUST）\*\*实现它。

## 请求

请求除标准的 `_meta` 之外不携带任何主体参数：

```json theme={null}
{
  "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": {}
    }
  }
}
```

## 响应

服务器以其所支持的协议版本、能力和身份回复。此操作支持[缓存](/specification/2026-07-28/server/utilities/caching)。

```json theme={null}
{
  "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`](/specification/2026-07-28/schema#unsupportedprotocolversionerror)。然而，`server/discover` 在两种场景中有用：

* **呈现服务器信息。** 虽然客户端不需要调用 `server/discover` 就能使用服务器，但它是一种在单个请求中检索服务器身份、能力和所支持版本的便捷方式。例如，客户端可以从单个 `server/discover` 响应呈现服务器所支持的能力，而不是用单独的 `tools/list`、`prompts/list` 和 `resources/list` 请求进行探测。
* **stdio 向后兼容探测。** 在 stdio 上，没有每请求的 HTTP 状态码来驱动回退。一个同时支持现代（每请求 `_meta`）和旧式（`initialize` 握手）服务器的客户端\*\*应当（SHOULD）\*\*先发送 `server/discover`；回退规则参见 [stdio：向后兼容](/specification/2026-07-28/basic/transports/stdio#backward-compatibility)。

完整的版本选择流程参见[协议版本协商](/specification/2026-07-28/basic/versioning#protocol-version-negotiation)。有关为未知方法返回的 HTTP 特定状态码，参见传输中的[协议版本 header](/specification/2026-07-28/basic/transports/streamable-http#protocol-version-header)一节。

## 数据类型

### DiscoverResult

一个发现结果包括：

* `supportedVersions`：服务器所支持的协议版本。客户端应为后续请求选择其中之一。
* `capabilities`：服务器所支持的能力（工具、资源、提示等）
* `_meta['io.modelcontextprotocol/serverInfo']`：服务器软件的名称和版本。服务器\*\*应当（SHOULD）\*\*包含此字段。
* `instructions`：为 LLM 提供的、关于如何有效使用此服务器的可选自然语言指导

<Note>
  `serverInfo` 由服务器自行报告，且不由协议校验。它旨在用于显示、日志记录和调试。客户端\*\*不应（SHOULD NOT）**使用它来改变它们的行为，并**不应（SHOULD NOT）\*\*依赖它做出安全决策。
</Note>
