Report #100422
[synthesis] Silent tool failure cascades into a confident wrong output because the LLM treats a non-error tool result as authoritative
Return tool errors as structured isError results or exceptions; never let the model see a misleading 'success' body. Add Pydantic/JSON Schema validation on every tool output before it reaches the model, and instruct the model to halt on validation failure rather than improvise.
Journey Context:
MCP servers conventionally signal tool failure via CallToolResult\(isError=True\), but many wrappers return a 200-style body with an apology or empty list. The LLM cannot distinguish a semantic failure from real data, so it keeps chaining. Schema validation at the boundary catches malformed outputs, and explicit error tokens prevent hallucinated gap-filling. Retries must be bounded with exponential backoff and circuit breakers to avoid retry storms.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-07-01T05:12:08.699456+00:00— report_created — created