anthropics / anthropics/claude-ai-mcp

MCP Apps UI views from custom connector not rendering in Claude.ai (Android mobile web)

Open
#714 4 comments 0 reactions 0 assignees View on GitHub
bug
Dominant language
No language data
Stars
471
Forks
76
PR merge metrics
No merged PRs in 30d

Description

### What happened?

I'm a Claude Max subscriber, mobile-only (Android, Brave browser, claude.ai web). I built a custom MCP connector for image generation and cannot get any visual output to display in chat, despite the server working correctly.
Setup:
Custom MCP server on a Cloudflare Worker (streamable HTTP, JSON-RPC: initialize, tools/list, tools/call, resources/list, resources/read)
One tool, generate_image, calling Gemini 2.5 Flash Image
Auth via secret token in URL path; connector added via Settings → Connectors → Add custom connector
What works:
Connector connects; tool is listed and callable
Tool executes successfully; Claude receives and describes the generated image
Tool result includes: a text block with a public HTTPS image URL, raw MCP image content blocks (base64 + mimeType), and an MCP Apps embedded view
Problem 1 — raw MCP image blocks never render in chat: the tool result's image content blocks are collapsed into a text summary ("The image was successfully generated"). No image is displayed to the user.
Problem 2 — MCP Apps (SEP-1865) view never mounts: I implemented the UI extension per spec: capabilities.extensions["io.modelcontextprotocol/ui"] declared in initialize; tool _meta.ui.resourceUri pointing to a predeclared ui:// resource; resources/list + resources/read serving text/html;profile=mcp-app with the ui/initialize handshake. In chat, an empty vertical space appears where the panel should be, but the iframe never loads — a built-in diagnostic (renders debug output 3s after load if no tool result arrives) never appears either, indicating the HTML is never mounted at all.
Problem 3 — connector re-registration is flaky: repeated "Couldn't register with [connector]'s sign-in service... add an OAuth Client ID" errors (support refs: ofid_5f341ebb2e2bc8cb, ofid_45c190da2bf9f404, ofid_46ad10664bc31751, ofid_b70c066621710e39) when connecting/reconnecting a token-authenticated (non-OAuth) server. Connection eventually succeeds only after full logout/login.
Requests:
Render MCP image content blocks from custom connectors inline in chat (they render fine when Claude itself views them)
Support MCP Apps UI views in the mobile web client, or document which clients support them
Fix the OAuth-registration probe incorrectly triggering for token-authenticated custom connectors
Happy to provide the connector URL, timestamps, or run tests on request.

### What did you expect to happen?

Generated images display visually in the chat: either the MCP image content blocks render inline, or the MCP Apps UI view mounts and renders the image. Instead the user sees only a text summary; no visual output is possible from a custom connector on mobile web.

### Steps to reproduce

1. Add a token-authenticated custom connector (Cloudflare Worker, streamable HTTP) whose tool returns: a text block with an HTTPS image URL, MCP image blocks (base64+mimeType), and an MCP Apps view (capabilities.extensions["io.modelcontextprotocol/ui"], tool _meta.ui.resourceUri, ui:// resource served via resources/read as text/html;profile=mcp-app).
2. On Android (Brave, claude.ai web), call the tool in a chat.
3. Tool succeeds; Claude describes the image. Image blocks collapse to a text summary; an empty vertical space appears where the MCP Apps view should be — the iframe never mounts (a built-in 3s diagnostic inside the view never renders, so the HTML is never loaded).

### Area

MCP Connector (adding/managing servers)

### MCP Server (if applicable)

custom server (Cloudflare Worker) — https://github.com/juanitto-maker/nano-banana-mcp

### Error messages or logs

```shell
No client-side errors for the rendering issue. Related connect/reconnect errors: "Couldn't register with nano-banana-mcp's sign-in service... add an OAuth Client ID" — refs ofid_5f341ebb2e2bc8cb, ofid_45c190da2bf9f404, ofid_46ad10664bc31751, ofid_b70c066621710e39 — on a token-authenticated (non-OAuth) server; connection only re-establishes after full logout/login. Possibly same root cause as #705.
```

### Additional context

Claude Max, Android-only user (no desktop available to compare). Server is fully functional: images generate, KV-served public URLs work when opened in a browser. Full source at the repo above — reproducible with any Gemini API key + auth token.

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.