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'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 tool a deep-research-capable client 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. |
publish_landing_page | projects:write | | Publishes an email as a public web page at /lp/<slug> and returns its URL. The assistant is told to show you the email and get your approval first, as with sending. |
unpublish_landing_page | projects:write | | Takes the page down. The address stays reserved for you. |
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, suppression totals and the email verification breakdown, plus the last re-check's status — no individual contact data. |
find_contacts | contacts:read | | Bounded lookup (≤25 rows, cursor-paginated). sortBy: "engagementScore" returns the list's warmest contacts first, with their score and this week's change. 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, and how many contacts will be skipped as invalid addresses or for no consent. 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. |
Journeys & segments
| Tool | Scope | Destructive | Notes |
|---|
list_journeys | journeys:read | | Id, name, on/off, trigger kind and step count for every journey. |
get_journey | journeys:read | | A journey's full flow, with your emails', lists' and segments' names, plus anything that would stop it from running. For a journey that's off and can run, also returns an enableToken. |
list_segments | journeys:read | | Saved segments, with their contact list and rules. |
create_segment | journeys:write | | Saves a segment on one contact list. Enforces your plan's segment cap. |
build_journey | journeys:write | | Builds a new journey, or edits one that's off, from a plain-language request, using the journey builder's AI copilot. Uses one AI copilot turn. The result is always saved turned off, and a journey that's on is never changed. |
set_journey_enabled | journeys:write (+ campaigns:send to turn on) | ✓ | Turning a journey on requires the enableToken from get_journey, unchanged, within 10 minutes and before any further edit. Same two-step idea as prepare_send/confirm_send. Pausing needs neither. |
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. |
Three tools attach an interactive widget on hosts that support MCP Apps (Claude — 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).