Assistant text emitted before an MCP widget tool call is not rendered in the desktop app transcript
Environment
- Claude Code 2.1.201, desktop app (macOS, Darwin 25.5.0)
- Model: claude-fable-5
- MCP: built-in
visualizeserver (mcp__visualize__show_widget)
What happened
Within a single assistant turn, the model produced:
- several tool calls (
mcp__visualize__read_me, two Bash calls) - ~5 paragraphs of markdown explanation (text block A)
- a
mcp__visualize__show_widgetcall (SVG diagram) - a closing markdown section (text block B)
The transcript rendered the widget and text block B, but text block A never appeared — the visible message starts with the inline widget followed by B, whose first sentence ("And the loop closes the same way…") clearly references setup prose the user never saw. The user noticed the message read as if it started mid-thought and asked whether the reply was cut off.
Expected
Text emitted between tool calls should render in the transcript in order — especially around show_widget, whose own design guidance instructs the model to put ALL explanatory prose in the response text outside the tool call ("Text goes in your response, visuals go in the tool"). If inter-tool-call text is dropped, the prescribed prose + inline-widget pattern silently loses the prose half.
Impact
Silent content loss: the model believes it delivered the explanation, the user never sees it, and neither side gets an error. Worst case for teaching/explanatory flows where the widget is the accompaniment and the dropped text is the substance.
Repro sketch
Ask for an explanation with an accompanying visual so the turn shape is: tool call(s) → long text → show_widget → short text. Observe whether the pre-widget text renders.