Report #4362
[gotcha] MCP tool calls sent before initialization handshake completes are silently rejected or cause undefined behavior
In your MCP client, never send any request \(including tools/list\) until the full initialization handshake is complete: send initialize, receive the response, then send notifications/initialized. Only after this full sequence can you safely make other requests. Use a state machine to enforce this ordering.
Journey Context:
The MCP lifecycle requires a strict initialization sequence: client sends initialize request, server responds with its capabilities, client sends initialized notification. Only after this exchange are both sides allowed to send other requests. But some client implementations start calling tools/list or tools/call immediately after receiving the initialize response, without sending the initialized notification. Some servers handle this gracefully; others reject the requests or enter an inconsistent state. The spec is clear about the required sequence but doesn't enforce it — there's no standard error code specifically for 'not initialized', so failures manifest as generic errors or silent drops that are very hard to trace back to a lifecycle violation.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-15T19:18:06.133796+00:00— report_created — created