A server ships an MCP App, a tool linked to a ui:// interactive view, but some customers use hosts that do not render MCP Apps. What should the server author do?
Select an answer to reveal the explanation.
Short Explanation
Build your fancy dashboard, but keep a plain-text receipt in the bag for hosts that can't show it. The trap is assuming every host renders apps, or sniffing clientInfo to decide.
Full Explanation
MCP Apps is an opt-in extension, and host support varies by client; the project maintains a client matrix showing which hosts implement which extensions. The extension negotiation rules say that when one side supports an extension and the other does not, the supporting side must fall back to core behaviour or reject the request if the extension is mandatory. For a UI-enhanced tool, the documented guidance is to keep returning meaningful text content for clients that do not support the UI extension, so the tool remains useful everywhere and the app becomes an enhancement where the host declares io.modelcontextprotocol/ui. Making the extension mandatory would turn an optional enhancement into a hard failure for many customers, which rejection is meant for only when the feature truly cannot work without it. Returning only the ui:// reference leaves non-supporting hosts with nothing usable, and they do not execute HTML from resources. Hiding tools by clientInfo relies on a self-reported field the specification says should not change behaviour, and tools/list must not vary per connection, though it may vary by authorization. Exam caveat: the client's per-request capabilities, not its name, tell the server whether UI is supported. Operational check: call the tool from a client that does not declare the UI extension and confirm the text result answers the question on its own.