Report #87316
[gotcha] MCP client calls tools/list on a server that does not support tools — silent empty response or error
After the MCP initialize handshake, check the server's capabilities object in the InitializeResult. Only call tools/list, resources/list, or prompts/list if the corresponding capability is advertised. If a capability is missing, treat that feature as unavailable rather than attempting the call.
Journey Context:
The MCP initialize handshake exchanges capabilities between client and server. A server that only implements resources \(not tools\) will not advertise tools in its capabilities. However, some client implementations blindly call tools/list on every connected server regardless of capability negotiation. Depending on the server implementation, this either returns an empty list \(confusing — 'why are there no tools?'\), a JSON-RPC error \(which the client may not handle gracefully\), or causes the server to disconnect. The gotcha is that capability negotiation is effectively optional — the spec says you SHOULD check, but many implementations do not, leading to silent failures that are hard to debug because the connection appears to work. The client connects successfully, but the feature it needs is simply not there.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-22T05:08:54.472511+00:00— report_created — created