Error
MCP error -32022: unsupported protocol version
Against MCP 2026-07-28 · verified 10 August 2026
The error
-32022 Unsupported protocol versionWhat causes it
Every 2026-07-28 request states its protocol revision twice: on the `MCP-Protocol-Version` header and in `params._meta.protocolVersion`. They must agree. If they do, and the value names a revision the server does not implement, the correct answer is -32022.
The usual cause is simply that one side upgraded. A client moved to 2026-07-28 while the server still implements 2025-11-25, or a server was pinned to a single supported version and a new revision shipped.
A subtler cause is a library floor you do not control. If your server is built on an SDK whose supported-version list stops before 2026-07-28, no amount of application code will make it accept that version — the check happens below you.
How to fix it
The fix
The fix
The fix
{
"jsonrpc": "2.0",
"id": 1,
"error": {
"code": -32022,
"message": "Unsupported protocol version 2026-07-28. This server supports: 2025-11-25",
"data": { "supported": ["2025-11-25"] }
}
}The fix
Rules involved
Each of these is checked against a live server, and each links to the exact sentence of the specification it comes from.
| Rule | What we check | Level | If it fails |
|---|---|---|---|
| MCP-HDR-004 | Missing MCP-Protocol-Version rejected (modern-only servers) | MUST | fail |
| MCP-HDR-005 | MCP-Protocol-Version header must match _meta.protocolVersion | MUST | fail |
| MCP-DEP-001 | ping is no longer implemented | MAY | warn |
FAQ
Frequently asked
What is MCP error -32022?
It means the protocol revision the client requested is well-formed and consistent between header and body, but this server does not implement it. It is a negotiation result, not a malformed request.
How do I fix an unsupported protocol version error?
Establish which side is behind. If your server is older, add support for the requested revision — or, if you are on an SDK, upgrade it, because the supported-version list lives there and application code cannot override it. If your client is asking for a revision nothing implements yet, pin it to one the server advertises.
Can one MCP server support several protocol revisions?
Yes, and during a migration it is the right answer. Detect which era a request belongs to — a legacy client opens with initialize, a modern one sends params._meta with no handshake — and branch. Advertise every revision you accept in your error messages so clients can fall back.
Check this against your own server
Point the validator at a live MCP server and it reports every rule on this page as pass, warn or fail — each linked to the exact spec sentence it comes from.
Validate a server →