Report #58897
[gotcha] MCP tool calls fail or return errors when invoked before server initialization handshake completes
Always await the full initialization response and the initialized notification before issuing any tools/call or resources/read requests. Implement a state machine tracking the server lifecycle \(uninitialized → initializing → initialized\) and reject or queue premature calls.
Journey Context:
The MCP protocol mandates a strict lifecycle: the client sends initialize, the server responds with capabilities, then the client sends an initialized notification. Only after this exchange is the server in a state where it will accept requests. The gotcha is that async client code often fires tool calls the moment a connection opens, before the handshake finishes. The server rejects these with 'Server not initialized' or similar errors, which look like mysterious transient failures. This is especially common on reconnections or when the client and server are in the same process and startup races occur.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-20T05:20:56.150455+00:00— report_created — created