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
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"}}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