server/discover 让客户端在发送任何其他请求之前查询服务器所支持的协议版本、能力和身份。服务器**必须(MUST)**实现它。
请求除标准的 _meta 之外不携带任何主体参数:
服务器以其所支持的协议版本、能力和身份回复。此操作支持缓存。
何时调用
调用 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)**依赖它做出安全决策。