“Tool has no UI”
The host ran the tool but did not treat it as an MCP App: it found no UI linked by a key it reads, or the linked resource is not an MCP App view. The three common causes: (1) The tool links its view only by _meta["openai/outputTemplate"], ChatGPT's alias, or links nothing; Claude and other MCP Apps hosts read _meta.ui.resourceUri. To tell: The doctor fails at tool-ui-link (alias only) or tool-no-ui (resources declared, none linked). (2) The linked resource is not typed text/html;profile=mcp-app: plain text/html, or text/html+skybridge from the Apps SDK before MCP Apps. To tell: The doctor fails at resource-mime and prints the type the server returned. (3) The server only registers UI tools for clients that declare MCP Apps support, and this client did not, or does not implement MCP Apps (see the extension support matrix). To tell: The doctor, which declares support, finds the UI; the host does not. Check the host against the matrix and the server's capability check. 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
No host prints it as such: the tool runs and its result shows as text or JSON. OpenAI's troubleshooting page calls it "Structured content only, no component".
The three causes, and how to tell them apart
- Cause 1. The tool links its view only by _meta["openai/outputTemplate"], ChatGPT's alias, or links nothing; Claude and other MCP Apps hosts read _meta.ui.resourceUri.
The check flags it attool-ui-link. The doctor fails at tool-ui-link (alias only) or tool-no-ui (resources declared, none linked). - Cause 2. The linked resource is not typed text/html;profile=mcp-app: plain text/html, or text/html+skybridge from the Apps SDK before MCP Apps.
The check flags it atresource-mime. The doctor fails at resource-mime and prints the type the server returned. - Cause 3. The server only registers UI tools for clients that declare MCP Apps support, and this client did not, or does not implement MCP Apps (see the extension support matrix).
The check cannot see this one from outside: it happens inside the host or the portal. The doctor, which declares support, finds the UI; the host does not. Check the host against the matrix and the server's capability check.
Sources and public reports
- "Structured content only, no component: confirm the tool descriptor sets _meta.ui.resourceUri … mimeType text/html;profile=mcp-app" [source: OpenAI plugins troubleshooting, read 8 October 2026]
- servers SHOULD check client capabilities before registering UI-enabled tools [source: MCP Apps spec 2026-01-26, Client<>Server Capability Negotiation, read 8 October 2026]
- which hosts implement MCP Apps [source: MCP Extension Support Matrix, read 8 October 2026]
Keep checking
Other messages
- “MCP App renders blank”
- “Resource not found: ui://”
- “Invalid ui.domain format”
- “ui.domain mismatch”
- “Refused to load the script”
- “annotations_required”
- “domain_verification_required”
- “frame_domain_explanation_required”
- “screenshots_not_allowed”
- “Failed to fetch template”
Written 8 October 2026 from the sources above. The MCP Apps check · MCP Liveness · Terms · Privacy