# Cards in Claude and ChatGPT

Two tools answer with an interactive card in hosts that support MCP Apps – Claude and ChatGPT among them. Every other host gets the same answer as text.

MCP Apps · list_events · get_offers

## What the cards show

| Tool | Card |
| --- | --- |
| `list_events` | Upcoming events with date, place, price and seats left, the person's own registrations marked. A free event has a **Register** button; every event links to its page. |
| `get_offers` | Passes and coaching with their prices before VAT, each linked to its page. Buying happens on Stripe's own page. |

**Register** on the card asks the person to sign in first, and nothing happens without their click. The card follows the host's light or dark look.

## How they work

- Each tool names its card in `_meta.ui.resourceUri`: `ui://pirateskills/events.html` and `ui://pirateskills/offers.html`, served as `text/html;profile=mcp-app`.
- The card reads the tool's `structuredContent` – `{ events }` or `{ offers }` – and talks to the host through the MCP Apps messages: it opens links and calls `register_for_event` through the host, never directly.
- The card loads nothing from outside the page, so hosts can apply their strictest content rules.

## In your own client

Not rendering MCP Apps? Read `structuredContent` yourself, or the text content, which carries the same data. Nothing about a tool's answer depends on the card.

---
Source: https://pirateskills.com/docs/cards · All docs: https://pirateskills.com/docs.md · Short overview: https://pirateskills.com/llms.txt
