anthropics / anthropics/claude-code
Render MCP Apps (SEP-1865) ui:// resources in Claude Code
- 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