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 instructuredContent. 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.
_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 toolsettle_approval with approval_id, approve and terms.
termsis a hash of the action shown. If the action changed, the answer fails withchanged. 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.
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 ininitialize, 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.