Problem
The TypeScript everything-server misclassifies a stateful initialize request as stateless whenever params._meta is present. It rejects a valid 2025-11-25 request with HTTP 400 and -32020 Missing MCP-Protocol-Version header.
InitializeRequestParams extends RequestParams in the 2025-11-25 schema, so _meta is allowed on initialize. MCP Python SDK 2.x currently emits _meta: {} there, which makes the conformance fixture unusable as an upstream server for that client.
Reproduction
Start the fixture:
npx tsx examples/servers/typescript/everything-server.ts
Then send:
curl -i -X POST http://127.0.0.1:3000/mcp \
-H 'Accept: application/json, text/event-stream' \
-H 'Content-Type: application/json' \
--data '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-11-25","capabilities":{},"clientInfo":{"name":"probe","version":"1"},"_meta":{}}}'
Observed:
{"jsonrpc":"2.0","id":1,"error":{"code":-32020,"message":"Missing MCP-Protocol-Version header"}}
The same request succeeds when _meta is omitted.
Suggested fix
Route initialize through the stateful transport when params.protocolVersion names a session-era protocol, independently of whether optional request metadata is present. Add an integration regression test that sends _meta: {} to the everything-server and asserts a successful initialize response.
Problem
The TypeScript everything-server misclassifies a stateful
initializerequest as stateless wheneverparams._metais present. It rejects a valid 2025-11-25 request with HTTP 400 and-32020 Missing MCP-Protocol-Version header.InitializeRequestParamsextendsRequestParamsin the 2025-11-25 schema, so_metais allowed oninitialize. MCP Python SDK 2.x currently emits_meta: {}there, which makes the conformance fixture unusable as an upstream server for that client.Reproduction
Start the fixture:
Then send:
Observed:
{"jsonrpc":"2.0","id":1,"error":{"code":-32020,"message":"Missing MCP-Protocol-Version header"}}The same request succeeds when
_metais omitted.Suggested fix
Route
initializethrough the stateful transport whenparams.protocolVersionnames a session-era protocol, independently of whether optional request metadata is present. Add an integration regression test that sends_meta: {}to the everything-server and asserts a successful initialize response.