all scenarios

Requires MCP-Protocol-Version header

requires-version-header · Protocol versioning

Endpoint (Streamable HTTP)
https://chaos-mcp.thomascdnns.com/s/requires-version-header/mcp
On the wire — recorded from a real request
your clientchaos-mcp01initializePOST /s/requires-version-header/mcp200 OK · application/json · 3 ms"jsonrpc""2.0""id"1"result""protocolVersion""2024-11-05""capabilities""tools""serverInfo""name""chaos-mcp/requires-version-header""version""1.0.0""instructions"02tools/listPOST /s/requires-version-header/mcp400 Bad Request · application/json · 2 ms"jsonrpc""2.0""id"null"error""code"-32600"message""missing required MCP-Protocol-Version header"

Symptom

what you'll observe

initialize succeeds, but every following request (tools/list, tools/call) fails with HTTP 400 unless an MCP-Protocol-Version header is sent. Clients that negotiated 2024-11-05 never send it and break.

Cause

what this reproduces

The server enforces the 2025-06-18 MCP-Protocol-Version header requirement on all sessions, including older clients that pre-date it.

Fix

how you'd resolve it

Only require the header for sessions that negotiated 2025-06-18+; assume the negotiated version when it's absent.

Try it with curl
bash
curl -sS -X POST \
  https://chaos-mcp.thomascdnns.com/s/requires-version-header/mcp \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json' \
  -d '
"jsonrpc""2.0"
"id"1
"method""initialize"
"params"
"protocolVersion""2024-11-05"
"capabilities"
"clientInfo""name""curl""version""1"

'