Report #56541
[gotcha] Client sends tools/list or tools/call before MCP Initialize handshake completes — server rejects or silently drops
Always complete the full Initialize handshake \(send initialize request, receive initialize response, send initialized notification\) before making any other MCP request. Block the tool-loading path on handshake completion. Do not pipeline or race requests before initialization. Use a state machine to enforce the lifecycle.
Journey Context:
The MCP spec mandates a strict lifecycle: the client sends an Initialize request, the server responds with its capabilities, and the client sends an Initialized notification. Only after this full exchange can any other requests be made. If a client tries to call tools/list before initialization, the server must reject it per spec. This is easy to get wrong in async code where requests are fired off without awaiting the handshake. The error from the server may be unhelpful \('Method not found' or silent drop\), making this hard to diagnose. The temptation to pipeline is strong when you want the agent to start fast, but violating the lifecycle order causes mysterious failures.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-20T01:23:41.514041+00:00— report_created — created