MCP error responses still drop all content blocks after the first (re: #1804)
AI Disclaimer: This issue was researched and drafted using Claude Code (v2.1.76) powered by Claude Opus 4.6. Trust nothing.
Summary
This is a re-report of #1804, which was autoclosed due to inactivity without being fixed. The issue is locked so a new issue is required.
When an MCP tool returns isError: true with multiple content blocks, Claude Code only passes the first content block to the model. All subsequent blocks are silently dropped.
Reproduction
Using the clojure-mcp clojure_eval tool:
Multi-expression eval (bug triggers):
(+ 1 1)
(/ 10 0)
The MCP server returns two content blocks: => 2 (expression 1 success) and the ArithmeticException (expression 2 failure), with isError: true.
Claude Code sees: => 2 with is_error: true
Claude Code should see: The ArithmeticException from the second content block.
Workaround — wrap in do:
(do (+ 1 1) (/ 10 0))
One expression, one content block. Error is visible: ArithmeticException: Divide by zero.
Measured impact
Analysis of 314 Claude Code session logs (899 clojure_eval calls):
- 20 false-positive errors: Tool returned
=> nil(a valid result fromrequire,def, etc.) markedis_error: true, with the actual error in a dropped content block - 14 of those 20 (70%) triggered a retry — Claude re-ran the same code thinking it failed
- This makes it the third most common source of wasted turns in Clojure REPL workflows
Environment
- Claude Code version: 2.1.76
- Platform: macOS 14.6 (Darwin 23.6.0)
- MCP server: clojure-mcp (bhauman/clojure-mcp)
- Model: claude-opus-4-6
Related issues
- #1804 — Original report (autoclosed, locked)
- bhauman/clojure-mcp#111 — Reported on MCP side, closed as Claude Code bug
- bhauman/clojure-mcp#118 — Partial mitigation (validation errors no longer set isError)
This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗