What each revision gets¶
The claim this package makes is that an application declares something once and a client loses a capability only where its revision genuinely cannot express it. This page is that claim, stated precisely.
The matrix¶
2026-07-28 |
2025-11-25 |
2025-06-18 |
2025-03-26 |
2024-11-05 |
|
|---|---|---|---|---|---|
Tools, resources, prompts, completion |
yes |
yes |
yes |
yes |
yes |
Structured output |
any JSON value |
object only |
object only |
as text |
as text |
Progress |
yes |
yes |
yes |
yes |
without a message |
Ask the user |
MRTR |
pushed request |
pushed request |
in the tool call |
in the tool call |
Logging |
per request |
per session |
per session |
per session |
per session |
Subscriptions |
|
|
same |
same |
same |
Sessions |
by handle |
by |
same |
same |
same |
Tool hints ( |
yes |
yes |
yes |
yes |
no |
Display titles |
yes |
yes |
yes |
no |
no |
Cache hints on results |
yes |
no |
no |
no |
no |
Batching |
no |
no |
no |
yes |
no |
Header mirroring |
yes |
no |
no |
no |
no |
Extension methods and discovery |
yes |
resources only |
resources only |
resources only |
resources only |
Skill files |
|
|
same |
same |
same |
Rows in bold are the ones where the mechanism differs but the application code does not. Everything else is either present everywhere or a property of the revision that no amount of work can add.
What is genuinely lost¶
The following differences affect what an older client receives.
Structured output. A tool returning a bare list gets structuredContent on
2026-07-28 and text on 2025-11-25 and 2025-06-18, which require an object
there. 2025-03-26 and 2024-11-05 predate the field entirely and get the
same data as text, which is where a tool of those revisions is supposed to put
it. The console reads it back either way, so it looks the same to a person.
Schemas the older clients cannot read. A tool whose input schema uses
composition or $ref is simplified where that is lossless, and hidden where it
is not. Declaring min_revision says so explicitly; the rest is decided in one
place, by the adapter.
Cache hints. ttlMs and cacheScope exist only on 2026-07-28.
Extension methods. Older clients can list and read extension files and a
manifest under mcp-extensions://{name}/.... Every registered method, including methods that change state,
runs through a resources/read route. Native extension capabilities and custom
JSON-RPC methods remain unavailable on these revisions. See Extension compatibility through resources.
What costs something¶
Two, worth knowing before you rely on them.
Asking on 2025-03-26 costs model context. The question and its answers
pass through the model as tool arguments, because the revision has no other
channel. Only tools whose handler takes the Exchange carry the two extra
arguments, so nothing else is affected.
A pushed question holds a connection. On 2025-11-25 and 2025-06-18 the
server keeps the call’s stream open while a person decides. ask_timeout_seconds
bounds it; the default is two minutes.
What it takes¶
A session store and a hub, both required. See Stores and hubs. Given a shared pair, nothing pins a client to a worker: a round trip started on one finishes on another, and a question asked by one is answered through another.
Client compatibility¶
Client defaults depend on the installed version and configuration. Inspect the actual discovery or initialization exchange instead of assuming support from a product name. The bundled console can select each supported revision and show the wire messages.
For Skills, both the protocol revision and the extension declaration matter.
On 2026-07-28, check capabilities.extensions before calling skills/list
or skills/get. On older revisions, use the resource fallback. A client that
can read a skill file does not necessarily support automatic skill loading.