Report #59681
[gotcha] Agent blindly retries a tool call that returned isError: true — treating a business-logic error as a transport failure
Distinguish MCP protocol errors \(connection failures, timeouts — safe to retry\) from tool-level errors \(isError: true in the result — the tool executed but hit a business-logic error, must be reasoned about, not retried\). Never auto-retry isError results with the same arguments.
Journey Context:
MCP tool results can include \`isError: true\` to signal that the tool ran but encountered a semantic error \(file not found, permission denied, invalid query\). This is still a successful protocol-level exchange — the server received the call, executed it, and returned a result. Agents frequently conflate this with a network or transport failure and retry the identical call, which will fail identically. The correct behavior is to treat isError results as actionable information: the agent should read the error text, adjust its approach, and try something different. The gotcha is that most agent frameworks have a generic retry-on-error path that doesn't distinguish these two cases, so the agent loops: call → isError → retry → isError → retry.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-20T06:39:44.485859+00:00— report_created — created