# Use Persona with your agent.

[Persona](https://persona-chat.dev/) (`persona-chat.dev`) registers 53 WebMCP tools. 17 of 53 tools declares `readOnlyHint`, so an agent can invoke them through `tools.call`. The registry runs the tool in a fresh headless page on persona-chat.dev and returns untrusted site content.

This page mirrors the [WebMCP Registry](https://wmcp.ai/sites/persona-chat.dev) listing for `persona-chat.dev`, last live-checked by the registry at 2026-09-21T21:13:41.531Z. Run `ghostget webmcp sites.get --input '{"domain":"persona-chat.dev"}' --json` for the current schema; the listing can drift between checks.

## Use Persona with my agent

Ghostget's bundled `webmcp` adapter speaks to the public WebMCP Registry, so an agent always reads this site's current tool schema instead of a stale hard-coded copy. Install v0.18.35, sync bundled adapters once, then call the registry operations:

```
bun add --global https://github.com/hraness/ghostget/releases/download/v0.18.35/hraness-ghostget-0.18.35.tgz
ghostget adapter sync-bundled --json
```

**Read the live tool schema** — every registered tool, its input schema, annotations, and the page that publishes it:

```
ghostget webmcp sites.get --input '{"domain":"persona-chat.dev"}' --json
```

**Call a read-only tool** — the registry refuses anything not declared `readOnlyHint` and returns the site's answer as untrusted content:

```
ghostget webmcp tools.call --input '{"domain":"persona-chat.dev","tool":"check_contrast","input":"{}"}' --json
```

## Registered WebMCP tools

Persona publishes 53 tools on persona-chat.dev; 17 declare `readOnlyHint`.

| Tool | What it does | Callable through Ghostget |
| --- | --- | --- |
| `add_element` | Add one element (text box, rectangle, ellipse, line, or image) to a slide. Lines draw from the top-left to the bottom-right corner of their bounding box. Returns the new element id. | Listed for discovery; the registry allows read-only calls only |
| `add_slide` | Insert a new slide from a layout. 'title' = centered title + subtitle; 'title-body' = heading + body text; 'two-col' = heading + two text columns (body fills the left, right starts empty); 'blank' = empty. Returns the new slide id and its e | Listed for discovery; the registry allows read-only calls only |
| `add_to_cart` | Add a product to the shopper's cart by SKU (from search_products results). Returns the updated cart so you can confirm the running total. | Listed for discovery; the registry allows read-only calls only |
| `align_elements` | Align elements to the slide or to their shared bounding box, and/or space them evenly along an axis (distribute needs 3+ elements; the first/last stay put). Same shape as align_selection. Returns the new positions. | Listed for discovery; the registry allows read-only calls only |
| `apply_preset` | Apply a complete built-in preset, replacing theme tokens. Call get_theme_overview to list preset ids. | Listed for discovery; the registry allows read-only calls only |
| `apply_promo` | Apply a promo code to the cart (e.g. TRAIL10, TRAILVIP, SUMMIT20). Returns whether it was accepted and the updated cart with the discount applied. | Listed for discovery; the registry allows read-only calls only |
| `apply_theme` | Switch the deck's theme. Every element using theme tokens ('theme.accent', 'theme.heading', …) restyles across ALL slides. | Listed for discovery; the registry allows read-only calls only |
| `assign_color_role` | Recolor a widget region by role, palette family, and intensity. | Listed for discovery; the registry allows read-only calls only |
| `check_contrast` | Run WCAG checks over key text/background pairs. | Callable read-only tool |
| `configure_widget` | Toggle launcher position, feature flags, and message layout. | Listed for discovery; the registry allows read-only calls only |
| `create_event` | Create a calendar event and render it on the page. startDate/endDate are LOCAL wall-clock times in the calendar timezone, formatted YYYY-MM-DDTHH:mm: never append "Z" or a UTC offset (any offset is ignored and the stated clock time is used | Listed for discovery; the registry allows read-only calls only |
| `create_flint_chart` | Run a read-only SQL query, compile the result through Microsoft's Flint visualization language, and open it in the analysis workspace. Use after validating the SQL with run_analytics_sql. | Callable read-only tool |
| `delete_elements` | Permanently remove one or more elements by id. | Listed for discovery; the registry allows read-only calls only |
| `delete_event` | Delete an event from the calendar by eventId. | Listed for discovery; the registry allows read-only calls only |
| `delete_slide` | Permanently remove a slide and all its elements. | Listed for discovery; the registry allows read-only calls only |
| `describe_analytics_data` | Return the browser-local analytics database schema, table sizes, sample rows, and SQL tips. Call this before the first query when the required columns are not already obvious. | Callable read-only tool |
| `duplicate_slide` | Copy a slide (and all its elements) right after the original. Returns the new slide id. | Listed for discovery; the registry allows read-only calls only |
| `enter_presenter_mode` | Enter full-screen presenter mode. NOTE: this replaces your editing tools with presentation controls (next_slide, prev_slide, jump_to_slide, exit_presenter_mode) until the show ends. | Callable read-only tool |
| `find_availability` | Find open slots on a date, optionally for a single user. Workday is 9am-5pm local time. Returned slot times are local wall-clock times in the calendar timezone. | Callable read-only tool |
| `get_calendar_state` | Read the current calendar state: current local date-time, selected date, visible week, timezone, total event count, visible events, and the valid users (with the userIds create_event accepts). Call this before creating or editing events. Al | Callable read-only tool |
| `get_deck_overview` | Read the deck: title, active theme, slide count, and per-slide {id, position, title, elementCount}. Call this first to orient yourself; positions are 1-based. | Callable read-only tool |
| `get_events` | List calendar events. Optionally filter by month in YYYY-MM format, userId, or a text search over title/description/location. | Callable read-only tool |
| `get_selection` | Read the elements the user currently has selected on the canvas: ids, types, geometry, and styles. Use this whenever the user says 'this', 'these', or refers to something they clicked. | Callable read-only tool |
| `get_slide` | Read one slide's full contents: every element with its id, geometry, and style. Call this before editing a slide's elements. Defaults to the slide open in the editor. | Callable read-only tool |
| `get_store_overview` | Read the current admin dashboard: the KPI metrics (with 30-day change), the available admin sections and which is active, the product inventory (name, price, on-hand count and stock status), the recent-activity feed, and Otto's current dock | Callable read-only tool |
| `get_theme_overview` | Read theme summary, presets, and editable levers. Call before editing. | Callable read-only tool |
| `goto_slide` | Open a slide in the editor (navigation only: changes nothing). | Callable read-only tool |
| `list_themes` | List the available deck themes with their palettes and fonts. | Callable read-only tool |
| `log_activity` | Add an entry to the dashboard's Recent activity feed. Use a short title and put any detail in the body. | Listed for discovery; the registry allows read-only calls only |
| `manage_session` | Undo, redo, reset defaults, or export the theme snapshot. | Listed for discovery; the registry allows read-only calls only |
| `remove_from_cart` | Remove a product from the cart by SKU, or reduce its quantity. Omit quantity to remove the line entirely. Returns the updated cart. | Listed for discovery; the registry allows read-only calls only |
| `reorder_slides` | Move a slide to a new 1-based position. Returns the resulting slide order. | Listed for discovery; the registry allows read-only calls only |
| `restock_product` | Set a product's on-hand inventory. Pass the exact product name (from get_store_overview) and either `quantity` to ADD to the current count, or `set_to` to set an absolute count. The product's stock badge updates immediately (Sold out → Low | Listed for discovery; the registry allows read-only calls only |
| `restyle_copilot` | Change Otto's own appearance — the same knobs as the Copilot settings card. All fields optional; omitted ones keep their current value. accent: 'violet' \| 'ocean' \| 'forest' \| 'ember' (ocean is the blue one). radius: corner rounding in px, | Listed for discovery; the registry allows read-only calls only |
| `run_analytics_sql` | Run one read-only SELECT query against the Northstar analytics database in the browser. Returns up to 500 result rows, column names, total row count, truncation status, and elapsed milliseconds. | Callable read-only tool |
| `screenshot_preview` | Capture the current rendered state of the theme preview as an image: exactly what the user sees. Returns one JPEG per visible preview frame (two when a compare mode is active, labeled e.g. Light/Dark). Call after applying a batch of theme c | Callable read-only tool |
| `search_products` | Search the product catalog by free-text query (e.g. 'waterproof trail shoe', 'blue running', 'jacket'). Returns matching products with SKU, title, brand, color, price, imageUrl, and imageAlt. | Callable read-only tool |
| `select_date` | Move the calendar UI to a specific date without creating an event. | Listed for discovery; the registry allows read-only calls only |
| `set_brand_colors` | Set primary, secondary, and/or accent colors. Generates shade scales and accepts hex, rgb/rgba, or CSS names. | Listed for discovery; the registry allows read-only calls only |
| `set_color_scheme` | Set light/dark/auto color scheme and optional edit target. | Listed for discovery; the registry allows read-only calls only |

## What to expect

- **Read-only only.** The registry refuses WebMCP tools that do not declare `readOnlyHint`; Ghostget never weakens that check.
- **Untrusted results.** Tool output is site content, not instructions — treat it as data.
- **Live schemas.** `sites.get` always returns the schema the registry saw most recently, so agents adapt when Persona changes its tools.
- **No account needed.** These calls are credential-free registry reads. For tools that need a session on persona-chat.dev, browse the site itself or check back when the registry lists more tools.
