server/discover lets a client query a server’s supported protocol versions,
capabilities, and identity before sending any other requests. Servers MUST
implement it.
Calling server/discover is optional for clients — a client may invoke any
RPC inline and handle
UnsupportedProtocolVersionError
if the server does not support the requested version. However, server/discover
is useful in two scenarios:
Presenting server information. While a client doesn’t need to call
server/discover to use the server, it’s a convenient way to retrieve the
server’s identity, capabilities, and supported versions in a single request.
For example, a client can present the capabilities a server supports from a
single server/discover response instead of probing with separate
tools/list, prompts/list, and resources/list requests.
stdio backward-compatibility probe. On stdio, there is no per-request
HTTP status code to drive fallback. A client that supports both modern
(per-request _meta) and legacy (initialize handshake) servers SHOULD
send server/discover first; see
stdio: Backward Compatibility
for the fallback rules.
supportedVersions: Protocol versions the server supports. The client should
choose one of these for subsequent requests.
capabilities: Capabilities the server supports (tools, resources, prompts,
etc.)
_meta['io.modelcontextprotocol/serverInfo']: Name and version of the server
software. Servers SHOULD include this field.
instructions: Optional natural-language guidance for LLMs on how to use
this server effectively
serverInfo is self-reported by the server and is not verified by the
protocol. It is intended for display, logging, and debugging. Clients SHOULD
NOT use it to change their behavior, and SHOULD NOT rely on it for
security decisions.
Was this page helpful?
Assistant
Responses are generated using AI and may contain mistakes.