Before issuing any other request, a client wants to learn a server's supported protocol versions, capabilities and identity in a single call. Which request should it send under revision 2026-07-28?
Select an answer to reveal the explanation.
Short Explanation
Think of server/discover as the server's business card: versions, capabilities and name, all in one hand-off. Every 2026-07-28 server has to carry one, though you don't have to ask for it. The initialize handshake is the old card from a previous job.
Full Explanation
Servers implementing revision 2026-07-28 MUST implement server/discover. Its DiscoverResult contains supportedVersions, the server's capabilities, its identity in _meta under io.modelcontextprotocol/serverInfo, and optional instructions for the model. The result is cacheable and carries ttlMs and cacheScope. Calling it is optional for clients, which may instead send any request directly and handle an UnsupportedProtocolVersionError, but it is the single call that answers all three questions up front. The initialize and notifications/initialized exchange belongs to legacy revisions 2025-11-25 and earlier; a modern-only server does not offer it, and it is used only when a dual-era client falls back to a legacy server. Calling the three list methods reveals what primitives exist but not supported protocol versions or the capabilities object, and costs three round trips instead of one. subscriptions/listen opens a notification stream; its acknowledgment reports which notification filters the server agreed to honour, not the server's versions or identity. Exam caveat: serverInfo is self-reported and should be used for display, logging and debugging rather than security decisions. Operational check: send server/discover with the required _meta fields and confirm the result lists the expected version in supportedVersions and the capabilities you intend to use.