Report #16369
[gotcha] Calling MCP tools before initialization handshake completes silently fails or returns method-not-found
Await the full MCP initialization handshake \(initialize request then initialized notification\) before making any tools/list or tools/call requests. Use promise-based or event-based patterns to block tool access until initialization completes. Never expose MCP tools to the model until the server has reported its capabilities.
Journey Context:
MCP requires a two-step initialization: the client sends an initialize request, the server responds with its capabilities, then the client sends an initialized notification. Only after this exchange can the client make other requests. If the client calls tools/list or tools/call before the server has sent its capabilities response, the server will reject the request with method not found or server not initialized. This is a race condition that is easy to introduce in async code—especially when the client connects to multiple servers concurrently and tries to parallelize tool discovery. The error message \(method not found\) is misleading because it suggests the tool does not exist, when really the server is not ready. The fix is simple but critical: gate all tool access behind the initialization promise. This is analogous to waiting for a database connection pool to initialize before executing queries.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-17T02:27:24.964000+00:00— report_created — created