Guides

What are MCP Apps?

An interface inside the AI chat: how MCP Apps work, how they differ from elicitation, and where both stop.

MCP Apps in one paragraph

MCP Apps let an MCP server show an interactive interface (a form, a chart, a viewer, buttons) right inside the conversation in an AI app, instead of answering only in text. They’re an official extension to the Model Context Protocol, and hosts such as Claude, Claude Desktop, VS Code GitHub Copilot, Microsoft 365 Copilot and Goose show them; support varies, so check the client matrix.

How they work

  1. A tool points at its interface. The tool’s description carries _meta.ui.resourceUri, pointing at a ui:// resource on the same server.
  2. The host fetches it. The resource is an HTML page, usually with its JavaScript and CSS bundled in. Anything it loads from elsewhere is listed in _meta.ui.csp.
  3. It runs in a sandbox. The host shows the page in a sandboxed iframe in the conversation, so it can’t reach the host page, its cookies or its storage. Extra capabilities, like the camera, are asked for in _meta.ui.permissions.
  4. It talks to the host. The app and the host exchange JSON-RPC messages over postMessage: the app can call the server’s tools (tools/call), send messages and update the model’s context, and the host pushes tool results to it.

A tool that opens an interface, as it appears in the server’s tool list:

{
  "name": "review_order",
  "description": "Show an order so the user can check it and approve it",
  "inputSchema": { "type": "object", "properties": { "orderId": { "type": "string" } } },
  "_meta": { "ui": { "resourceUri": "ui://orders/review.html" } }
}

The App class in @modelcontextprotocol/ext-apps wraps the messaging, with starter templates for React, Vue, Svelte, Preact, Solid and plain JavaScript; you can also implement the protocol yourself.

MCP elicitation: the simpler form

Elicitation is part of the core specification. Mid-task, a server asks the person using the client for input, and the host draws its own form. The form is flat: text (including emails, links and dates), numbers, yes or no, and choices. No files and no custom layout.

{
  "method": "elicitation/create",
  "params": {
    "mode": "form",
    "message": "Which delivery day suits you?",
    "requestedSchema": {
      "type": "object",
      "properties": {
        "day": { "type": "string", "format": "date" },
        "note": { "type": "string" }
      },
      "required": ["day"]
    }
  }
}
# the client's answer: {"action": "accept", "content": {"day": "2026-11-20"}}  (or "decline", or "cancel")

Form mode must never ask for passwords, API keys, access tokens or payment details. For those, URL mode sends the person to a page outside the client, after they agree to open it.

Which to use

MCP AppsElicitation
What the person seesAny HTML interface your server providesThe host’s own form, from a flat schema
Good forExploring data, configuring with many options, viewing media, multi-step workflowsA quick answer mid-task: a choice, a date, a confirmation
The answerTool calls and messages from the interfaceaccept with the data, decline or cancel
Who answersThe person using the AI app, in that conversation

Where they stop

Both reach one person: the one using the AI app, while the conversation is open. That’s right when they’re the one deciding. Often they aren’t: the answer has to come from a manager, a customer, a contractor or a supplier, who isn’t in the chat and may answer hours later on their phone.

For that, the agent has to reach the person where they are. Taskriz does it: the agent sends the person a request with an interface made for it, by email, text message or the Taskriz app, and gets their answer back as data whenever it comes. It works through MCP too, with the Taskriz MCP server. How an AI agent gets a person’s approval shows it step by step, and Taskriz, MCP Apps and MCP Elicitation compares them side by side.

Taskriz uses MCP Apps too

In hosts that show MCP Apps, the Taskriz tools show the request as the person will see it, their replies and the pairing QR code inside the chat. The person you’re asking still answers wherever they are.

Questions

Can an MCP App or elicitation ask someone other than the user?

No. Both reach the person using the MCP host, in the conversation that asked. Even elicitation’s URL mode expects that same person to open the link. To ask someone else, reach them where they are, for example with Taskriz.

Do I need the ext-apps SDK to build an MCP App?

No. The App class in @modelcontextprotocol/ext-apps is a convenience wrapper. You can implement the postMessage protocol directly, with any web framework or none.

Can elicitation ask for a password or payment details?

Not in form mode: the specification forbids asking for passwords, API keys, access tokens or payment credentials there. Sensitive interactions use URL mode, which opens a page outside the MCP client.

Which apps show MCP Apps?

Claude, Claude Desktop, VS Code GitHub Copilot, Microsoft 365 Copilot, Goose and others; support varies, and the MCP client matrix lists each host.

Sources

Next: How an AI agent gets a person’s approval, or Developers, the API, the plugins and the MCP tools.