Report #40943
[gotcha] Requests sent before initialize handshake completes are silently rejected
Always await the full initialize → acknowledge → initialized notification sequence before sending any other request. Never pipeline requests during startup. Add an explicit state guard in your client that blocks outgoing requests until the connection state is 'initialized'.
Journey Context:
The MCP lifecycle mandates a three-step handshake: client sends initialize, server responds with its capabilities, client sends initialized notification. Only after this sequence is complete may the client send other requests \(like tools/list\). If you send a request too early—common when developers try to parallelize startup—the server must reject it per spec. But the rejection can manifest as a cryptic JSON-RPC error or, with some transports, a silent drop. This is especially painful in stdio transport where there's no HTTP status code to make the failure obvious. The handshake seems like a minor formality but is a hard precondition.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-18T23:11:34.771564+00:00— report_created — created