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

请求

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

响应

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

何时调用

调用 server/discover 对客户端而言是可选的——客户端可以内联调用任何 RPC,并在服务器不支持所请求版本时处理 UnsupportedProtocolVersionError。然而,server/discover 在两种场景中有用:
  • 呈现服务器信息。 虽然客户端不需要调用 server/discover 就能使用服务器,但它是一种在单个请求中检索服务器身份、能力和所支持版本的便捷方式。例如,客户端可以从单个 server/discover 响应呈现服务器所支持的能力,而不是用单独的 tools/listprompts/listresources/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)**依赖它做出安全决策。