Same topic, related formats. Practice these next.
Same topic, related formats. Practice these next.
A client sends `initialize` proposing `protocolVersion: "2025-11-05"`. The server replies with `protocolVersion: "2024-11-01"`, a version the client does not recognize. The client continues the session and sends `tools/list`.
The client must abort: when the server returns a protocolVersion the client does not support, the spec says close the transport and report incompatibility. Sending tools/list anyway is the bug.
Imagine two people agreeing on a language before a meeting. You say, 'Let's use English-2025.' The other person replies, 'I only speak English-2024,' a dialect you have never learned. The safe move is to stop and say 'we are not compatible,' then hang up. The dangerous move is to keep talking anyway, guessing at words, hoping the meaning carries. You might get lucky on simple sentences and then completely misunderstand an important one. MCP version negotiation works the same way. The client proposes a version, the server answers with the version it will actually use, and if the client does not recognize that answer it should disconnect rather than push forward and risk silent misunderstandings later in the conversation.
Everything you need to truly understand this topic: intuition, mechanics, step by step explanation, code, formulas, and worked example. Click to expand.
Everything you need to truly understand this topic: intuition, mechanics, step by step explanation, code, formulas, and worked example.
Everything important, quickly.
5 min: initialize handshake + server-authoritative version + abort rule on unrecognized version + capability decay failure modes + the security-mismatch variant.
| Behavior | Abort on unrecognized version (correct) | Continue and send tools/list (the bug) |
|---|---|---|
| When the mismatch surfaces | Immediately at the initialize handshake | Later, at some runtime call |
| Failure shape | One loud, clear incompatibility error | Scattered errors or silent semantic drift |
| Security posture | No assumptions made on an unverified contract | May assume guarantees the old version never gave |
| Debuggability | Single obvious failure point | Hard to trace, looks like a tool bug |
Real products, models, and research that use this idea.
What an interviewer would ask next. Try answering before peeking at the approach.
Red flags and common mistakes that signal junior thinking. Click to expand.
Assuming the session continues on a best-effort basis. An unrecognized version is a hard stop, not a soft fallback the client can paper over with optimistic calls.
The night-before-the-interview bullets. Scan these on the way to the call.
Primary sources. Skim if you want the original framing.