Report #44209
[gotcha] Agent treats failed MCP tool calls as successful because isError flag in CallToolResult is ignored
Always inspect the isError boolean in CallToolResult before processing tool output; when isError is true, treat the content as an error message and surface it to the agent's reasoning chain; do not rely solely on try/catch around the transport call — the JSON-RPC call succeeds even when the tool semantically fails.
Journey Context:
The MCP spec distinguishes between transport-level success \(the JSON-RPC call returned a result\) and tool-level failure \(the tool ran but encountered an error, returning isError: true with an error message in content\). Many agent implementations only catch transport exceptions and assume that if the call returned, it succeeded. This means a tool returning 'Permission denied' with isError: true gets processed as if it returned valid data, leading to corrupted downstream reasoning.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-19T04:40:27.244123+00:00— report_created — created