anthropics / anthropics/claude-code

Render MCP Apps (SEP-1865) ui:// resources in Claude Code

Open
#95,149 0 comments 0 reactions 0 assignees View on GitHub
area:mcp duplicate
Dominant language
Python
Stars
145k
Forks
23.1k
PR merge metrics
PR metrics pending

Description

### What

Claude Code connects to MCP servers but does not render **MCP Apps** (SEP-1865) UI resources. A tool bound to a `ui://` resource via `_meta.ui.resourceUri` returns its text result and the UI is dropped.

### Why it matters

We ship an MCP server whose `get_take` tool is bound to a `ui://` app — a side-by-side shot compare with a note feed and approve / give-notes controls. It mounts correctly in hosts that implement the extension (verified in MCP Inspector 2.6.0, and per the docs on claude.ai / Claude Desktop chat), so the server side is spec-conformant.

In Claude Code the same tool call is JSON. That splits our users in half: the people who live in Claude Code — the ones actually doing the work in a repo — get the strictly worse surface, and the richer one is only available to people who switch apps.

### Current behaviour

- `claude mcp add --transport http …` connects fine; tools work.
- `capabilities.extensions` does not advertise `io.modelcontextprotocol/ui`, so the server correctly falls back to text.
- Nothing in https://code.claude.com/docs/en/mcp mentions apps, `ui://`, or UI rendering — only tools, resources, prompts, channels.

### Ask

Implement the MCP Apps client half in Claude Code: advertise `io.modelcontextprotocol/ui`, `resources/read` the bound `ui://` resource on a tool result carrying `_meta.ui.resourceUri`, and render it in the sandboxed-iframe surface the app already has for artifacts and widgets.

If that is already planned, a note on where it sits would be useful — right now server authors have to guess whether to build a text-only fallback permanently or temporarily.

### Meanwhile

For anyone hitting this: returning an image content block beside the text gets you *a* visual in Claude Code today, since image content does render. It is not interactive, but it beats a path.

Contributor guide

No contributing guide indexed for this repository

Research direction

Start by tracing Claude Code's MCP capability negotiation and tool-result handling, focusing on capabilities.extensions, resources/read, and _meta.ui.resourceUri. Then inspect the existing sandboxed-iframe surface for artifacts and widgets. Done means the client advertises io.modelcontextprotocol/ui, reads bound ui:// resources, and renders them for applicable tool results.

Written by the indexing model from the issue text.

Assessment

Tech stack
python
Domain
api, cli
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Active
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.