Skip to main content
Some tools produce images for the user — a CAD screenshot, a plotted result. They ride the ToolCall’s finish event as event.images, a tuple[str, ...] of image data: URIs (empty on the start event, and from apps too old to send them). Decode each on the finish event:
Each data: image is also embedded in the run’s final result as a spec-native MCP image content block, so plain MCP clients see it too. .text() is unaffected — it joins only the text.
Only data: URIs are embedded in the final result — a tool that returns an http(s) image link surfaces it on the stream event but can’t embed it, so it stays stream-only.

Reference: ToolCall.images

The images field on the streamed ToolCall event.