发现
社区译文;来源: 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 依赖它作出安全决策。