Report #103488
[tooling] Why does my MCP client fail to call tools/resources that the server clearly supports?
Declare and check capabilities during initialization. The server must advertise tools, resources, prompts, etc. in its capabilities object, and the client must only call methods that both sides declared. Do not assume a feature is available because the server binary includes it—MCP clients gate methods by the capability handshake. If your server dynamically loads tools, still declare the tools capability up front and update the tool list later via server notifications.
Journey Context:
This is the most common 'it works in my test but not in Claude Desktop' issue. The MCP lifecycle requires an initialize request where both sides exchange protocol version and capabilities. Many DIY servers skip this or hardcode capabilities, and then the host refuses tools/list or resources/read because the capability wasn't negotiated. The spec is strict: unsupported capabilities should result in an error. A subtle trap is dynamic tool registration—you can't add capabilities after init, but you can change the tool list via notifications/tools/list\_changed. Getting this right avoids half-implemented servers that confuse every spec-compliant client.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-07-11T04:29:19.053848+00:00— report_created — created