Skip to main content
A client that supports MCP Apps shows ImpelLabs results as cards inside the conversation. The server offers one view for this: the resource ui://impellabs/card, with the MIME type text/html;profile=mcp-app.

What the card shows

The card draws the same working cards as the ImpelLabs chat. A tool result carries the card in structuredContent. The card kinds include:
  • Reports, charts and tables of records.
  • Plans, questions and forms.
  • Previews of an agent, an app or a workflow.
  • Lists of free times to book.
  • Files.
  • Approval cards for an action that waits for a yes.
A tool shows a card when it returns one, or when its call waits for approval. Such a tool has _meta.ui.resourceUri in tools/list. A card is a view of the result. The text answer is always in content too.

Approve from the card

A call that needs a yes returns a card with the exact action and its fields. The card has Approve and Not now. When you select one, the card calls the tool settle_approval with approval_id, approve and terms.
  • terms is a hash of the action shown. If the action changed, the answer fails with changed. A new approval is needed.
  • If nothing waits under this id, the answer fails with not_waiting. Another approver may have it. See Approvals in the app.
Only the card may call settle_approval. It is hidden from the model (visibility is app), so a model cannot approve its own action. A client lists it only when it draws cards.

How the server knows

A client says it draws cards in initialize, with the extension io.modelcontextprotocol/ui and the MIME type above in capabilities.extensions. Without it, the server sends no card view and no settle_approval. Approve in the app instead. The view loads no outside address. A link on the card opens an ImpelLabs page through the client. The card cannot open any other address.

Resources