For most of MCP's life, a tool could only answer in text or structured JSON — fine for the model to parse, awkward for a human staring at a table they'd rather filter, sort, or click. MCP Apps (proposed as SEP-1865) tackles that mismatch by letting a server ship its own UI alongside its data, rendered right inside the conversation rather than bolted on by each client.
What Sets It Apart
- Tools declare
ui://resources containing plain HTML; the host fetches them and renders inside a sandboxed iframe, so untrusted server UI can't touch the page around it. That sandbox-by-default posture is the part most "rich tool output" attempts skip. - A bidirectional message channel lets the embedded UI call back into tools and read host state, so a chart or form is genuinely interactive rather than a static snapshot.
- The SDK ships adapters for React, Vue, Svelte, Preact, and Solid, plus a separate package for registering UI on the server side — you bring your own framework instead of adopting a bespoke widget language.
- It is an extension layered on core MCP, not a fork, so an app degrades to ordinary text output on clients that don't implement it.
Who It's For
Great fit if you build MCP servers and want dashboards, forms, or design canvases that feel native in Claude, ChatGPT, or any compliant client — without writing per-client glue. Look elsewhere if your tool only returns short text answers, or if you need something stable across every client today: this is an early, evolving spec, and whether a UI renders depends on hosts choosing to support it.