all scenarios

Always negotiates the oldest version

version-downgrade · Protocol versioning

Endpoint (Streamable HTTP)
https://chaos-mcp.thomascdnns.com/s/version-downgrade/mcp
On the wire — recorded from a real request
your clientchaos-mcp01initializePOST /s/version-downgrade/mcp200 OK · application/json · 2 ms"jsonrpc""2.0""id"1"result""protocolVersion""2024-11-05""capabilities""tools""serverInfo""name""chaos-mcp/version-downgrade""version""1.0.0""instructions""chaos-mcp scenario: version-downgrade — Always negotiates the oldest version"02tools/listPOST /s/version-downgrade/mcp200 OK · application/json · 2 ms"jsonrpc""2.0""id"2"result""tools""name""echo""description""Echo back the provided message.""inputSchema""type""object""properties""message""type""string""description""Text to echo"… 40 more lines

Symptom

what you'll observe

You request a modern protocol version (e.g. 2025-06-18) but initialize always answers 2024-11-05, so newer features (the version header, structured tool output, elicitation) are silently off.

Cause

what this reproduces

protocolVersion is pinned to a stale hard-coded constant instead of negotiating against the client's requested version.

Fix

how you'd resolve it

Negotiate: if you support the client's requested version echo it back; otherwise return the newest version you actually support.

Try it with curl
bash
curl -sS -X POST \
  https://chaos-mcp.thomascdnns.com/s/version-downgrade/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"

'