What is Capability negotiation (MCP)?
Capability negotiation is the MCP initialization handshake where client and server each declare which features they support, so both sides only use functionality the other side actually implements.
Capability negotiation is the opening exchange of every Model Context Protocol connection, the step that establishes what the two sides can do together before any real work happens. When a client connects it sends an initialize request that includes the protocol version it speaks and a list of the capabilities it supports, things like roots, sampling, and elicitation. The server replies with its own protocol version and the capabilities it offers, such as tools, resources, prompts, and whether each supports change notifications. Both sides then confine themselves to the intersection: a server will not attempt sampling against a client that did not advertise it, and a client will not call tools a server never declared. This handshake is what lets MCP evolve without breaking older participants, newer optional features can be added because each side learns at connect time whether the other understands them, and falls back gracefully when it does not. Version matching also happens here: if the two cannot agree on a compatible protocol version the connection fails fast rather than misbehaving later. Everything downstream, the list of usable tools, whether interactive features work, depends on what this negotiation settled.