Documentation menu

Tool reference

Every tool a connected assistant can call, grouped the same way the server registers them. A tool is only ever offered to the assistant if your connection holds the scope it needs — there's no such thing as a write tool that's present but always errors; if you didn't grant contacts:write, the assistant simply doesn't see upsert_contacts at all. See Scopes & permissions for what each scope means.

Destructive in the tables below is the same MCP annotation Claude and ChatGPT's own review process requires — it marks a tool whose effect can't be trivially undone (deleting a project, overwriting a tree, removing a contact), not "dangerous" in some vaguer sense. Every write tool still only takes the fields you'd expect; none of them accept a raw payload the model could smuggle arbitrary changes through.

Discovery

| Tool | Scope | Notes | | --- | --- | --- | | search | any of projects:read / templates:read / contacts:read | Searches projects, templates and contact lists by name. Returns opaque ids for fetch. This is the exact tool ChatGPT's deep-research mode calls automatically. | | fetch | same as search | Resolves one id from search into its full content. |

Email design

| Tool | Scope | Destructive | Notes | | --- | --- | :-: | --- | | list_projects | projects:read | | Id, name, purpose for every project. | | get_email | projects:read | | A project's current block tree and theme. | | preview_email | projects:read | | Renders through the real mailed-HTML pipeline — the exact document a send would produce. Widget-attached (see below). | | list_block_types | projects:read | | The full 44-block catalog, generated from the live registry — always current, never hand-maintained. | | list_templates | projects:read | | Your saved templates, or the approved community gallery. | | create_project | projects:write | | Optionally seeded from a built-in purpose template. | | add_block / update_block / move_block | projects:write | | Tree edits, canPlace/field-validated the same way the in-studio copilot's edits are. | | remove_block | projects:write | ✓ | Deletes a block and its children. | | set_theme | projects:write | | Brand colors, font, button radius. | | rename_project | projects:write | | | | delete_project | projects:write | ✓ | Permanent. | | apply_template | projects:write | ✓ | Overwrites the project's entire tree and theme. | | save_as_template | templates:write | | Snapshots the current project into a reusable template. |

Audience

| Tool | Scope | Destructive | Notes | | --- | --- | :-: | --- | | list_data_sources | contacts:read | | Every data source, contact lists included. Credential values are never returned. | | list_contact_lists | contacts:read | | Contact lists specifically — id, name, fields, row count. | | get_contact_list_summary | contacts:read | | Counts and suppression totals — no individual contact data. | | find_contacts | contacts:read | | Bounded lookup (≤25 rows, cursor-paginated). Every call is written to the personal-data access log, same as a dashboard contact read. | | upsert_contacts | contacts:write | | Add or update rows; enforces your plan's contact cap. | | remove_contact | contacts:write | ✓ | Permanently removes one row. | | add_suppression / remove_suppression | contacts:write | | Blocks or unblocks an address account-wide, same effect as a recipient's own unsubscribe link. |

Results

| Tool | Scope | Destructive | Notes | | --- | --- | :-: | --- | | get_campaign_results | analytics:read | | Opens/clicks/responses/revenue, A/B variant comparison, click heatmap. Summarized only — never raw per-recipient events. Widget-attached. | | get_form_responses | analytics:read | | Per-question rollups; free-text answers are a capped, fenced sample. | | list_orders | analytics:read | | Product-block checkout orders. | | list_campaign_sends | analytics:read | | Past bulk sends, most recent first. | | list_schedules | analytics:read | | Recurring sends configured on a project. | | mark_order_fulfilled | commerce:write | | Marks a physical order shipped and emails the buyer. | | create_schedule | campaigns:send | | Configures a new recurring send. | | set_schedule_enabled | campaigns:send | ✓ | Marked destructive because disabling a live schedule stops future sends silently. |

Sending

| Tool | Scope | Destructive | Notes | | --- | --- | :-: | --- | | send_test_email | campaigns:read | | A single [Test]-prefixed copy to one address you specify — doesn't touch your real audience or need campaigns:send. | | prepare_send | campaigns:send | | Read-only by annotation — resolves the audience and renders a preview, sends nothing. Returns a confirmationToken. Widget-attached (send-confirmation card). | | confirm_send | campaigns:send | ✓ | Requires the exact confirmationToken prepare_send returned, unchanged, within 10 minutes. See Security for why. |

Mailbox & tickets

| Tool | Scope | Notes | | --- | --- | --- | | list_mailbox_threads / get_mailbox_thread | mailbox:read | Inbound mail at your verified domain. Message bodies are fenced as untrusted, recipient-authored content. | | reply_to_mailbox_thread | mailbox:write | Sends from the exact mailbox address the original mail arrived at, correctly threaded. | | list_tickets / get_ticket | mailbox:read | Support-ticket conversations. Same untrusted-content fencing. | | reply_to_ticket | mailbox:write | Adds an owner message and emails the recipient a link back. |

Account

| Tool | Scope | Notes | | --- | --- | --- | | get_plan_usage | none — always available | Plan, quotas, and this month's usage. Read-only, and not sensitive account data the way projects/contacts/mailbox are, so it's available regardless of which scopes you granted. |

Widgets

Three tools attach an interactive widget on hosts that support MCP Apps / the Apps SDK (Claude and ChatGPT — Gemini has no widget layer and always gets the plain-text/JSON result instead): preview_email (live desktop/mobile email preview), get_campaign_results (results dashboard), and prepare_send (the send-confirmation card, whose own Confirm & Send button is what actually calls confirm_send).