“MCP App renders blank”

The host fetched the view and put it in a sandboxed iframe, and the iframe painted nothing: the view never connected to the host, the host's CSP refused its code, or it connected and received no data or no height. The three common causes: (1) The view never opens the bridge: nothing calls the ext-apps SDK's app.connect() (or useApp() in React), so no ui/initialize reaches the host and Claude never sizes or shows the frame. To tell: The doctor fails at resource-bridge; Claude's developer tools show the inner iframe with no ui/initialize message. (2) The host's CSP refuses the bundle: a script or stylesheet loaded from an origin _meta.ui.csp.resourceDomains does not declare, or by a relative URL that resolves to the host's sandbox instead of your server. To tell: The doctor fails at resource-csp-undeclared or resource-relative-refs; the iframe's console says "Refused to load the script". (3) The view connects and gets no data or no height: it reads only structuredContent (Claude Desktop was seen to drop it), or its root element has zero height so the host collapses the frame. To tell: The doctor passes; its preview shows the view empty. In the host's developer tools the inner iframe is 0 px tall or the tool-result notification has no structuredContent. One command shows which: npx --allow-git=root github:agentwares/mcp-apps-doctor https://your-server.example/mcp.

Check your server now

npx --allow-git=root github:agentwares/mcp-apps-doctor https://your-server.example/mcp

Discovery only: no credential, no tool called. It prints the first broken step, whose it is, and the fix with its source, and shows the view in a sandboxed preview.

Who prints it

Nobody prints it: Claude, ChatGPT and VS Code show the tool call and then an empty or invisible frame, with nothing in the server's logs.

The three causes, and how to tell them apart

  1. Cause 1. The view never opens the bridge: nothing calls the ext-apps SDK's app.connect() (or useApp() in React), so no ui/initialize reaches the host and Claude never sizes or shows the frame.
    The check flags it at resource-bridge. The doctor fails at resource-bridge; Claude's developer tools show the inner iframe with no ui/initialize message.
  2. Cause 2. The host's CSP refuses the bundle: a script or stylesheet loaded from an origin _meta.ui.csp.resourceDomains does not declare, or by a relative URL that resolves to the host's sandbox instead of your server.
    The check flags it at resource-csp-undeclared. The doctor fails at resource-csp-undeclared or resource-relative-refs; the iframe's console says "Refused to load the script".
  3. Cause 3. The view connects and gets no data or no height: it reads only structuredContent (Claude Desktop was seen to drop it), or its root element has zero height so the host collapses the frame.
    The check cannot see this one from outside: it happens inside the host or the portal. The doctor passes; its preview shows the view empty. In the host's developer tools the inner iframe is 0 px tall or the tool-result notification has no structuredContent.

Sources and public reports

Keep checking

agentcheck's free watch checks this server every hour and emails when it stops answering or its tool list changes; no account. It does not re-read the ui:// views.

mcpcheck Server Pro diffs the server's tool catalog every night — removed tools, tightened schemas, changed descriptions — with the client-compat matrix, OAuth conformance and 90 days of history; $49 a server a month, first run free. It does not re-run these MCP Apps checks.

Other messages

Written 8 October 2026 from the sources above. The MCP Apps check · MCP Liveness · Terms · Privacy