Interactive cards
In the Claude app, every VibeSell tool result renders as a card: the count of leads, the people of a preview, the plans, your domains and mailboxes, the campaign, an approval with its Approve and Reject buttons. The cards below are the real VibeSell card, fed example data — try the buttons.
How it works
Section titled “How it works”The card follows the MCP Apps extension:
- Every tool declares the card in
_meta.ui.resourceUri—ui://vibesell/card-2f87d8dc967b. - The client reads that resource once: a single self-contained HTML document
(
text/html;profile=mcp-app), with no remote script. - After each call, the client hands the card the tool’s
structuredContent; the card renders it by itskind, with the words and order of the VibeSell app’s screens. - The card follows the client’s light or dark theme, and asks to open links (
ui/open-link) — VibeSell, a LinkedIn profile — rather than opening them itself.
Company logos load only from media.licdn.com and logo.clearbit.com; anywhere else, the client’s
content security policy blocks them and the card falls back to initials.
Questions on a card
Section titled “Questions on a card”Tools that ask you something — the sending source, the domain names, each email of the sequence — show their choices as buttons. A click calls the same tool again with your answer, exactly as the assistant would.
Approve and Reject
Section titled “Approve and Reject”On an approval card, Approve and Reject call decide_approval, a tool the Claude app
hides from the model (_meta.ui.visibility: ["app"]). Only your click can call it. See
Approval cards.
A campaign, before and after launch
Section titled “A campaign, before and after launch”In Claude: “Interactive tools”
Section titled “In Claude: “Interactive tools””Because every VibeSell tool declares the card, Claude lists them under Interactive tools in the connector’s settings. Like any connector’s tools, they start on Needs approval; set them to Always allow to stop Claude asking before each call. Approval cards still wait for your click.
The card is cached
Section titled “The card is cached”Claude keeps a card by its address until you open a new chat. The card’s address ends with a hash of its code, so a new version gets a new address; any older address still returns today’s card, so a chat that kept an older tool list keeps working.
If a card looks outdated after an update, start a new chat.
Text-only clients
Section titled “Text-only clients”Codex, Claude Code and other clients that don’t render MCP Apps ignore the card. They get the same
structuredContent and a Markdown summary in content[0].text, and the card-only tool
decide_approval is not listed for them: approval cards are decided in the VibeSell app.