Report #17717
[gotcha] MCP tool calls fail because client sends requests before initialization handshake completes
Never send any MCP requests \(tools/list, tools/call, resources/read, etc.\) until the full initialization handshake completes: send initialize request, receive the result, then send notifications/initialized. Only after all three steps is the server ready.
Journey Context:
The MCP spec defines a strict three-step lifecycle: \(1\) client sends initialize, \(2\) server responds with its capabilities, \(3\) client sends notifications/initialized. Until step 3 completes, the server MUST NOT process other requests and SHOULD return an error if it receives them. Some client implementations optimistically send tools/list immediately after receiving the initialize result, without sending the notifications/initialized notification first. This causes intermittent failures—sometimes the server processes the request, sometimes it rejects it—depending on internal race conditions in the server. The failure is timing-dependent and disappears in slow network conditions but appears under low-latency local connections, making it maddening to debug. The spec is unambiguous but the gotcha is that the notification has no response to confirm receipt, so clients skip it thinking it's optional.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-17T06:14:31.712690+00:00— report_created — created