Problem Statement
When an MCP tool returns an image content block (base64-encoded PNG), Claude can see and reason about the image — but it is never rendered inline in the final assistant response visible to the user.
Environment:
- Platform: claude.ai (web)
-
- MCP server: remote (SSE), connected via Claude.ai Settings → Connections
-
-
- Tool type: chart rendering tool returning base64 PNG + URL
What our tool returns:
[
{
"type": "image",
"data": "<base64-encoded PNG>",
"mimeType": "image/png"
},
{
"type": "text",
"text": "Chart rendered: https://example.com/chart.png"
}
]
Observed behavior:
- Claude can see the image — it appears in the thinking/reasoning block and Claude correctly describes its contents
-
- The image appears inside the collapsed "tool use" accordion (which most users never expand)
-
- The image is never rendered inline in the final assistant response
Expected behavior:
When Claude references a tool result that contains an image block, that image should render inline in the assistant response — similar to how user-uploaded images are displayed.
Why this matters:
MCP is designed as the standard for extending Claude with external tools. Visual tools (charts, diagrams, screenshots) are a major category. If image results can't surface to the user without manual accordion expansion, it breaks the core value proposition of visual MCP tools.
Proposed Solution
Please support inline rendering of image content blocks from MCP tool results in the assistant response — either:
- Automatically when Claude references the image in its response, or
-
- Via an explicit opt-in mechanism for tool developers (e.g., a flag in the tool result or server manifest)
This would work similarly to how user-uploaded images are already rendered inline in the chat UI.
Alternatives Considered
All workarounds are suboptimal:
- Returning a URL in text → external images not rendered inline by claude.ai
-
- Building an HTML artifact wrapper → requires extra roundtrip, bad UX; also blocked by the widget sandbox CSP (all external image domains are blocked)
-
- Instructing users to open the accordion → not discoverable by end users
The Anthropic documentation explicitly recommends the base64 image content block approach for MCP tools, but the UI does not render these images inline, creating a contradiction.
Area
Tool Discovery / Invocation
Priority
High - Major improvement needed
Additional Context
This issue was originally filed in anthropics/anthropic-sdk-python#1329 but was redirected here as the correct repository.
Multiple developers have confirmed this issue:
- Chart rendering tools returning base64 PNG images
-
- Photography validation tools returning base64 image blocks
-
-
- The Anthropic documentation explicitly recommends the base64
image content block approach for MCP tools, but the claude.ai UI does not render these images inline
This creates a direct contradiction between the documented best practice and the actual behavior of claude.ai.
Problem Statement
When an MCP tool returns an
imagecontent block (base64-encoded PNG), Claude can see and reason about the image — but it is never rendered inline in the final assistant response visible to the user.Environment:
What our tool returns:
[ { "type": "image", "data": "<base64-encoded PNG>", "mimeType": "image/png" }, { "type": "text", "text": "Chart rendered: https://example.com/chart.png" } ]Observed behavior:
Expected behavior:
When Claude references a tool result that contains an
imageblock, that image should render inline in the assistant response — similar to how user-uploaded images are displayed.Why this matters:
MCP is designed as the standard for extending Claude with external tools. Visual tools (charts, diagrams, screenshots) are a major category. If image results can't surface to the user without manual accordion expansion, it breaks the core value proposition of visual MCP tools.
Proposed Solution
Please support inline rendering of
imagecontent blocks from MCP tool results in the assistant response — either:This would work similarly to how user-uploaded images are already rendered inline in the chat UI.
Alternatives Considered
All workarounds are suboptimal:
The Anthropic documentation explicitly recommends the base64
imagecontent block approach for MCP tools, but the UI does not render these images inline, creating a contradiction.Area
Tool Discovery / Invocation
Priority
High - Major improvement needed
Additional Context
This issue was originally filed in anthropics/anthropic-sdk-python#1329 but was redirected here as the correct repository.
Multiple developers have confirmed this issue:
imagecontent block approach for MCP tools, but the claude.ai UI does not render these images inlineThis creates a direct contradiction between the documented best practice and the actual behavior of claude.ai.