- Initialization establishes a protocol version and optional capabilities.
- Both sides must use only what they negotiated.
- Version and capability dimensions are useful compatibility signals when bounded.
Capability negotiation is the part of MCP initialization where a client and server agree on the protocol version and optional features they can use together. It prevents one side from assuming that the other side supports a feature it never advertised.
Version agreement comes first
The client begins by sending an initialize request with a protocol version it supports. The server responds with the version that will govern the session. If the two sides cannot agree, the session should not proceed to normal operations.
Capabilities describe optional features
Capabilities are grouped by client and server responsibilities. A server can advertise tools, resources, prompts, logging, completions, or other supported features. A client can advertise support for roots, sampling, elicitation, tasks, or other features. Optional sub-capabilities can describe things such as list-change notifications or resource subscriptions.
Negotiated does not mean universal
The server may implement a feature in its codebase but still need to advertise it for the client to use it. After initialization, both sides must respect the negotiated set. A client should not send a request for an unadvertised capability, and a server should not emit feature-specific notifications without declaring the relevant support.
Diagnosing negotiation problems
- Capture the client and server protocol versions without guessing from a product name.
- Compare the advertised capability object with the method or notification that failed.
- Check whether the issue is version mismatch, missing capability, invalid parameters, or a server runtime error.
- Test more than one client when the server behaves differently across hosts.
Operational telemetry for compatibility
Version and capability dimensions can have high diagnostic value, but they should remain bounded and low-cardinality. A server team can use them to find clients that still use an older transport or a feature set that the current release no longer exercises. They should not collect raw message bodies when a small set of validated fields answers the question.
Can capabilities change during a session?
Some catalogs can change and servers can send the corresponding notifications when supported. The initial capability negotiation still establishes which feature families are available for the session.
Does a negotiated capability guarantee a successful tool call?
No. It only says that the feature is available. Authorization, validation, downstream dependencies, and application behavior can still cause a call to fail.
About the publisher
TrackMCP, also written Track MCP
TrackMCP helps teams understand which clients connect to their MCP servers, which tools agents use, and where workflows fail. Learn more about Track MCP.
See this on your own server
TrackMCP turns your MCP server's calls into adoption, workflows, and outcomes. One line to install.