A platform team runs an MCP server behind a load balancer across many instances. They ask why revision 2026-07-28 made every request carry its own protocol version and client capabilities. What is the main reason?
Select an answer to reveal the explanation.
Short Explanation
Think of each request as a sealed envelope with the return address and instructions inside — any clerk can process it. That's why your load balancer can send a request to whichever instance is free. The 'pinned session' option is the old world sneaking back in.
Full Explanation
Revision 2026-07-28 makes MCP a stateless protocol: all information needed to process a request is contained in the request itself. Every request carries io.modelcontextprotocol/protocolVersion and io.modelcontextprotocol/clientCapabilities in _meta, and servers MUST NOT rely on prior requests over the same connection to establish context such as capabilities, protocol version or client identity. Because no instance needs memory of an earlier exchange, any instance behind a load balancer can answer any request, and state that spans requests is referenced by explicit identifiers passed on each call. Skipping validation is the opposite of the design; each request is validated independently, and a request missing required fields is rejected with -32602. Pinning a long-lived session to one instance describes the legacy model built on initialize and the Mcp-Session-Id header, which this revision removed. Smaller requests are not the benefit; repeating version and capability metadata on every request adds bytes, a cost accepted in exchange for independence from connection state. Exam caveat: subscriptions/listen is long-lived, but its state is scoped to that request rather than to a session. Operational check: send consecutive requests through the load balancer to different instances and confirm each succeeds without session affinity configured.