Skip to content
Skip to main content
Claude, ChatGPT, and VS Code app icons — the AI clients that render MCP Apps interactive UI
8 min readBy Carlos Aragon

MCP Apps: Interactive UI Inside Your AI Client

MCP Apps are the first official Model Context Protocol extension, shipped January 26, 2026. In plain terms: an MCP tool can now return a real interface — a dashboard, a form, a chart, a multi-step wizard — that the AI client renders in a sandboxed iframe right inside the chat, instead of dumping a wall of text. Claude, ChatGPT, VS Code, and Goose already support it. Here's how it works and where it's actually worth using.

The One-Line Answer

MCP Apps let a tool return an interface instead of text.That's the whole idea. Before this, every MCP tool answered with plain text or structured data, and the model read it back to you. Now a tool can hand the client an actual UI — you filter the table, drag the slider, fill the form — and the client renders it inline, in the same conversation, no tab-switch.

It landed on January 26, 2026 as the first official extensionto the Model Context Protocol. That “official” word matters: it's not one vendor's UI hack. It's a spec, so a UI you ship once renders the same in every client that supports it. I've been building on MCP for a while now, and this is the first change that makes an agent feel like an app instead of a chat log.

The mental model:

A regular MCP tool is a function that returns JSON. An MCP App is a function that returns JSON and a little web page to look at it in — plus a wire back to the server so the page can do more than sit there.

How MCP Apps Actually Work

There are three moving parts, and once you see them the whole thing clicks:

  • The ui:// resource: Your server bundles HTML and JavaScript and serves it as a resource under the ui:// URI scheme — say ui://reports/dashboard. It's just a tiny web app the client can fetch.
  • The tool link: A tool declares which UI belongs to it through the _meta.ui.resourceUri field in its metadata. When that tool runs, the host knows to fetch the resource and render it.
  • The App class: The @modelcontextprotocol/ext-apps package ships an App class that speaks JSON-RPC over postMessage. That's the two-way wire between your rendered UI and the host.

The flow at runtime: the model calls your tool, the host renders the linked ui:// resource in a sandboxed iframe, and your UI comes to life. From there the App class gives you three things that matter: it receives the tool result (app.ontoolresult), it can call other server tools on demand (app.callServerTool()), and it can push text back into the model's context (app.updateModelContext()) so the conversation stays aware of what the user just did in the UI.

That last piece is the clever bit. The UI isn't a dead end — when a user picks a region in your dashboard, you can feed that selection back to the model so its next answer already knows about it. The interface and the conversation stay in sync instead of talking past each other.

The AI clients that render MCP Apps — Claude, ChatGPT, and VS Code — shown as app icons
One UI resource, many hosts: MCP Apps render the same in Claude, ChatGPT, VS Code, and Goose.

MCP App vs Plain MCP Tool: When Each Wins

Not every tool should sprout a UI. Text is faster to build, cheaper to run, and easier for the model to reason over. Reach for an MCP App only when the user genuinely needs to see or manipulatesomething. Here's the split I use:

SituationPlain toolMCP App
Return a number, a status, a short answer✅ Best fitOverkill
Explore data — filter, drill down, exportClunky✅ Interactive dashboard
Collect structured input with dependent fieldsBack-and-forth prompts✅ A real form / wizard
Show a chart, a map, a 3D model, sheet musicCan't✅ Rendered inline

The official example set makes the range obvious: the launch shipped demo servers for a Three.js scene, an interactive map, a PDF viewer, a system monitor, and even sheet music. A deployment wizard where selecting “production” reveals extra security fields is a perfect fit; “what's my error rate?” is not — that's a one-line answer. If you're still deciding whether a job even needs a tool versus a skill or a CLI, I broke that down in MCP vs CLI for AI agents.

Is It Safe to Render Someone Else's UI?

This was my first question too, because “a server can now render code in my client” sounds like a security nightmare. The spec takes it seriously with a layered model:

  • The UI runs in a sandboxed iframe with limited permissions — it can't reach the rest of the host or the wider app.
  • UI templates are pre-declared as resources, so the client can review what it's about to render instead of getting surprised.
  • Every message between the UI and the host is auditable JSON-RPC — no opaque side channels.
  • Tool calls triggered from the UI can require explicit user consent before they fire.

None of that removes the oldest rule in the book: you still vet the server you install. A malicious MCP server is dangerous with or without a UI, and the same care you already apply to tool definitions — clear scopes, least privilege, honest descriptions — carries straight over here. If you want the fundamentals on writing tools the model actually uses correctly, that's in Claude tool use best practices.

The Cost Angle Nobody Mentions

Here's a benefit that gets buried under the demos: MCP Apps can actually saveyou tokens. When a user explores a 500-row dataset by clicking around a rendered table, none of that interaction runs back through the model. Compare that to the old way, where the tool dumps all 500 rows into the context window and the model narrates them — that's thousands of tokens spent just to show data a UI could render for free.

It ties directly into the thing I harp on constantly: your context window is a budget, and MCP overhead is real. I measured how much raw tool schemas alone cost in what MCP servers actually cost you in tokens, and the same instinct applies to results: push the presentation into a UI, keep the model's context lean, and only feed back the one selection that matters via updateModelContext(). If you're weighing whether to invest in a skill, a plain server, or a full app, the decision framework in Claude Skills vs MCP still holds — MCP Apps just add a richer output option to the “connection” side of that split.

The Short Version

  • MCP Apps (shipped Jan 26, 2026) let an MCP tool return interactive UI — dashboard, form, chart, wizard — instead of plain text.
  • Three parts: a ui:// resource (bundled HTML/JS), a tool linked to it via _meta.ui.resourceUri, and an App class for two-way JSON-RPC.
  • It renders in a sandboxed iframe; the App class receives the tool result, calls server tools, and pushes selections back to the model's context.
  • It's an official, cross-client extension — Claude, ChatGPT, VS Code, and Goose already support it, and one UI works everywhere.
  • Use an App only when the user needs to see or manipulate something; plain tools still win for short answers.
  • Bonus: rendering data in a UI instead of narrating it back through the model can cut token cost, not add it.

Straight from the source: the official MCP Apps announcement and the ext-apps spec and example servers are the canonical references if you want to build one this week.

Want an MCP Server That Feels Like an App?

I build production MCP servers, Claude agents, and n8n automations — now with MCP Apps UI where it earns its keep, and lean text tools where it doesn't. If you want an agent your team can actually click through instead of squint at, let's talk.

Related Posts

AI Agents

MCP vs CLI for AI Agents: The 4–32× Token Tax Nobody Warns You About

For most agent tasks a CLI is 4–32× cheaper than an MCP server — 1,365–8,750 tokens per task instead of 32,000–82,000 — because every connected MCP server injects all of its tool definitions into every turn, used or not. One Microsoft Intune test came out ~35× cheaper on the CLI (~4,150 vs ~145,000 tokens), and at 10k ops/month that's roughly $3.20 vs $55.20. The CLI was also more reliable in one 75-run benchmark (100% vs 72%, MCP's failures were mostly TCP timeouts on its persistent connection). Use a CLI when a mature one exists and you own the box; keep MCP for OAuth SaaS, multi-tenant per-user auth, governance/audit needs, and tools with no CLI. For high-volume fan-out, let the model write code that orchestrates the calls (programmatic tool calling / Code Mode) to cut tokens 98–99%. The best agents mix all three; measure tokens per completed task, not per call.

AI Agents

Claude Skills vs MCP: When I Reach for Each (and the Token Cost That Decides It)

A skill is knowledge, an MCP server is a connection — use a skill to teach the model how, use MCP to let it reach a system it can't otherwise touch. The tiebreaker most people skip is token cost: skills sit idle at ~30–100 tokens each, while five MCP servers can burn ~55k tokens before you type a word. The exact rule I run in production.

AI Agents

What MCP Servers Actually Cost You in Tokens (and How I Cut the Context Tax)

MCP servers spend tokens before your agent says a word — the GitHub MCP alone loads ~55,000 tokens of tool definitions. How I measure the context tax, what it costs per run, and the four controls I use to cut it in production.