createmcps.com

MCP-ERR-001

Unsupported version returns -32022 with data.supported[]

“If the server does not implement the requested version, it MUST respond with an UnsupportedProtocolVersionError listing the versions it does support.” — spec anchor

How to fix this

Reject a protocol version you do not implement with `-32022`, and list the versions you do support in `data.supported`. Without that array a client has nothing to retry with.

Example: failing and passing

The client asks for protocol version 1900-01-01, which the server does not implement, and the server answers as if it did.
Violates MCP-ERR-001 · HTTP
POST /mcp HTTP/1.1
Host: mcp.example.com
Content-Type: application/json
MCP-Protocol-Version: 1900-01-01
Mcp-Method: tools/list

{"jsonrpc": "2.0", "id": 1, "method": "tools/list",
  "params": {
    "_meta": {"io.modelcontextprotocol/protocolVersion": "1900-01-01",
              "io.modelcontextprotocol/clientCapabilities": {}}}}

HTTP/1.1 200 OK
Content-Type: application/json

{"jsonrpc": "2.0", "id": 1, "result": {"resultType": "complete", "tools": [], "ttlMs": 300000, "cacheScope": "public"}}
The server rejects the unknown version with UnsupportedProtocolVersionError (-32022) and lists the versions it supports in data.supported.
Complies with MCP-ERR-001 · HTTP
POST /mcp HTTP/1.1
Host: mcp.example.com
Content-Type: application/json
MCP-Protocol-Version: 1900-01-01
Mcp-Method: tools/list

{"jsonrpc": "2.0", "id": 1, "method": "tools/list",
  "params": {
    "_meta": {"io.modelcontextprotocol/protocolVersion": "1900-01-01",
              "io.modelcontextprotocol/clientCapabilities": {}}}}

HTTP/1.1 400 Bad Request
Content-Type: application/json

{"jsonrpc": "2.0", "id": 1, "error": {"code": -32022, "message": "Unsupported protocol version", "data": {"supported": ["2026-07-28"], "requested": "1900-01-01"}}}

How the validator checks this

Probe P4.2, against a streamable-http server on the modern protocol. What it reports:

pass
Rejected version 1900-01-01 with -32022 and listed supported versions
warn
Returned -32022 with data.supported[], but HTTP … rather than 400 Bad Request
fail
Accepted protocol version 1900-01-01 — an unimplemented version must be rejected with -32022
skip
No response to the unsupported-version request (…), so version negotiation could not be assessed

Quoted from the probe that runs this check, so it cannot drift from what the validator actually reports.

This rule is checked deterministically: a fail here is a certain violation, not an inference.

Check your own server against MCP-ERR-001

Probe P4.2 checks MCP-ERR-001 in a request of its own, so one run shows your server's result for this rule next to the rest. Validate a server or read how the validator works.

Background on this topic: MCP error codes explained.

Other Error codes rules

  • MCP-ERR-002Unknown method returns HTTP 404 and JSON-RPC -32601
  • MCP-ERR-003Resource-not-found uses -32602, not the retired -32002
  • MCP-ERR-004The retired -32042 code is never emitted
  • MCP-ERR-005No undefined code is emitted in the reserved -32020…-32099 range
  • MCP-ERR-006Missing required _meta field returns HTTP 400 + JSON-RPC -32602
  • MCP-ERR-007Missing client capability returns -32021 with data.requiredCapabilities
  • MCP-ERR-008New implementation-defined codes avoid the legacy -32000…-32019 range