Zenaique

What should an MCP client do when no mutually supported protocol version can be found?

MCQ·Medium·4.0 · 0·~1 min·Asked atFlipkartHebbiaSigmoid·Relevant atAnthropic
Attempt it
TL;DR

When no shared protocol version exists, the MCP client should abort gracefully at initialize time and report the mismatch, never proceed and hope runtime errors catch it.

Memory aid
Sign in to see the mnemonic that makes this stick.
Easy to grasp

Picture two people meeting who each speak a few languages. Before chatting, they swap lists and pick one both know. If the lists overlap, great, they talk in that shared language. If there is zero overlap, the sensible move is to stop and say 'we cannot understand each other' right away. The reckless move is to just start talking in your own language and hope the other person guesses. MCP works the same way at connection time. The client sends the newest version it knows. The server either agrees or names one it prefers. If nothing matches, the honest move is to close the connection and report it, not to barrel ahead and discover the breakage halfway through a real task.

Concept explanation~2 min read

Everything you need to truly understand this topic: intuition, mechanics, step by step explanation, code, formulas, and worked example. Click to expand.

MCP connections begin with a handshake, and the first thing the two sides settle is which protocol version they will speak. The protocol uses date-based version strings, for example 2025-06-18, rather than semantic version numbers. Each published revision of the spec gets a date, and a client or server simply carries the set of dates it knows how to speak. This question targets the edge case: what happens when the client and server share no common version at all?

The short answer is graceful abort. The client should close the connection and report an incompatibility error rather than proceed. The interesting part is why that is correct, why the other plausible-sounding options are wrong, and how version negotiation relates to the separate mechanism of capability negotiation that rides in the same handshake.

The topic matters in interviews because it sits at the intersection of protocol design and operational reliability. A weak answer recites 'abort' without explaining the failure mode. A strong answer names capability decay, ties the choice to the fail-fast principle, and separates the version axis from the capability axis. This deep dive walks the initialize lifecycle, explains the failure mode the spec is protecting against, separates version gating from capability gating, and gives you a clean mental model for forward and backward compatibility across an evolving server fleet.

The initialize handshake and where version lives

Every MCP session opens with the client sending an initialize request. That request carries a protocolVersion field set to the newest version the client supports, plus the client's declared capabilities and a clientInfo block with name and version. The initialize call is special: it is the only request allowed before negotiation completes, and the client must not send any other request until it succeeds.

The server responds to initialize with its own protocolVersion, its capabilities, and serverInfo. If it supports the version the client proposed, it echoes that exact string back. If it does not, it replies with a version it does support, effectively a counter-proposal. The client then inspects the server's chosen version and decides whether it appears in its own supported set.

If the versions agree, the client sends an initialized notification and normal operation begins. If they do not, the client is responsible for terminating the connection. This responsibility split is worth stressing: the server's job is to name a version it can speak, and the client's job is to accept it or abort. The server never has to reason about the client's full supported set.

Crucially, all of this happens before a single tool is called or a single resource is read. The negotiation is a gate at the front door, not a check sprinkled through later requests. That ordering is the entire reason the abort behavior is safe and cheap: no state has been mutated, no tool has run, so closing the transport leaves nothing half-done to clean up.

Why graceful abort is the correct action
Why not just default to an old version
Version negotiation versus capability negotiation
Designing for forward and backward compatibility
Sign in to unlock the full deep dive.

Situations where this technique stops working.

Sign in to see when this approach fails.

2–4 min · Everything important, quickly.

Sign in to see the quick scan of the deep dive.
AspectProtocol versionCapabilities
What it selectsThe wire contract and method setWhich optional features are live
FormatDate based string (2025-06-18)Named flags (tools, resources, prompts)
Negotiated whereinitialize request and responseSame handshake, capabilities field
No agreement meansAbort the connectionFeature is simply unavailable
Failure mode if ignoredWrong method set, broken contractCalling an unadvertised feature

Real products, models, and research that use this idea.

  • Claude Code and Claude Desktop send their supported MCP version in the initialize request and refuse to operate against a server with no shared version.
  • The official MCP TypeScript and Python SDKs implement the initialize handshake and reject connections when the negotiated version is unsupported.
Sign in to see more production examples.

What an interviewer would ask next. Try answering before peeking at the approach.

QHow does capability negotiation in the same handshake differ from protocol version negotiation?
A

Version picks the wire contract and method set; capabilities are named flags that gate optional features like tools, resources, prompts, and sampling within that contract.

2 more follow-ups an interviewer would ask next. Sign in to reveal them.

Red flags & common mistakes

The phrases that signal junior thinking. Click to expand.

Most common mistake

Assuming the client should silently fall back to an old version. The spec says abort and report when no shared version exists, not guess.

Sign in to see all red flags and common mistakes.

60 second bullets to scan on the way to the call.

  • Where the protocol version is exchanged in the lifecycle

  • The format of MCP version strings

Sign in to unlock the revision sheet.

Primary sources. Browse if you want the original framing.

Similar questions

Same topic, related formats. Practice these next.

4 curated
Next question
What is the Model Context Protocol (MCP) and what problem does it solve?
MCQ·Easy