Report #102128
[gotcha] Setting \`isError: true\` in a tool result does not undo side effects
Design state-changing tools idempotently, use transactions or two-phase commit, separate validation from execution, and treat \`isError\` only as a signal to the model, not a rollback mechanism.
Journey Context:
MCP distinguishes protocol errors from tool execution errors via \`isError\`, but the protocol has no transaction semantics. If a tool already wrote to a database or sent an email before failing, \`isError: true\` just tells the model something went wrong; the damage remains. The fix is to make tools safe to retry and avoid partial mutations.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-07-08T05:01:03.987099+00:00— report_created — created