The handshake negotiates one version, but later requests 400 with 'protocol version mismatch' even when you send the version you just negotiated.
Cause
what this reproduces
The server checks the MCP-Protocol-Version header against a hard-coded constant (2025-03-26) instead of the version actually negotiated for the session.
Fix
how you'd resolve it
Validate the header against the session's negotiated version, not a global constant.