MCP App Store
by KeenEthics

Overview

Mailsoftly is an email marketing and automation platform for growing businesses, nonprofits, schools and PTAs, local governments, associations, professional services firms, marketing agencies, consultants, and corporate teams: organizations where email is essential but not anyone's full-time job. Real people answer support, deliverability setup is something we walk you through, and pricing stays sane as your list grows. Your whole team works in one account. With the Mailsoftly connector, Claude becomes a hands-on assistant for your email marketing. Ask which contact list is biggest, find a subscriber by email, fix a job title, add someone to the webinar list, or have a newsletter drafted and waiting for you to review in Mailsoftly. The same goes for member newsletters, donor appeals, citizen notices, parent updates, client updates, and product announcements. Sending is deliberately a two-step. Drafting and sending are separate permissions, and the permission to send is an opt-in on the consent screen that starts switched off. Leave it off and Claude can still research, draft, and prepare while you press send yourself in Mailsoftly. Every send goes through the same deliverability checks, sender authentication, and suppression rules as a campaign built by hand. Sixteen tools cover contacts, contact lists, tags, custom fields, senders, campaign drafts, campaign status, sending, and unsubscribes. The connector is a remote MCP server run by Mailsoftly on our own first-party API. It reaches only the account you connect it to, only within the permissions you approve, and records which app made which change. Connecting is an admin action, and access can be revoked at any time from Settings > Connected apps. You need a Mailsoftly account and an admin user on it. There is a free plan, so you can try it before you pay for anything. Switching from Mailchimp, Constant Contact, or a similar platform includes free migration of your lists, templates, and signup forms.

Tools

add_campaign_attachment

ChatGPT
Attaches one file to a campaign that is still a draft, from the campaign id, a filename and the file contents as base64 in content_base64. The file travels inside the request, which suits small files such as a PDF or an image rather than large ones. Only draft campaigns accept attachments. Requires the 'campaigns:draft' OAuth scope.

add_contact_note

ChatGPT
Records a note on one contact, from the contact id and the note text, optionally with the date it happened. The note is visible to the whole team on the contact record and comes back in get_contact_activity. Requires the 'contacts:write' OAuth scope.

add_contact_to_contact_list

ChatGPT
Adds one existing contact to one existing list, from contact_id and contact_list_id. search_contacts or create_contact supplies the person and list_contact_lists or create_contact_list the audience. A repeat call for somebody already on the list comes back with an informational message rather than an error. Returns status and info. Requires the 'contacts:write' OAuth scope.

add_contacts_to_contact_list

ChatGPT
Adds several people to one list in a single call, from contact_list_id and a contacts array of objects with email, first_name and last_name. An address with no contact yet is created, so the array can come straight from a pasted set of addresses or from search_contacts results. Returns status, added_count and an errors array. add_contact_to_contact_list adds one contact by id. Requires the 'contacts:write' OAuth scope.

add_domain

ChatGPT
Starts authenticating a domain the account owns (a bare domain like example.com). Returns the DNS records to add at the domain's DNS host; verify_domain then checks them. Idempotent. Requires the 'campaigns:draft' OAuth scope.

assign_tags_to_contact

ChatGPT
Applies tags to one contact, from contact_id and a tags array of objects with tag_name and an optional tag_color. A tag name new to the account is created on the fly and a tag the contact carries already is skipped. list_tags holds the existing tag names and search_contacts the contact id. Returns status, added_tags and skipped_tags. Requires the 'contacts:write' OAuth scope.

create_automation

ChatGPT
Creates an automation from the same vocabulary as the in-app builder, saved inactive. Takes name, a trigger object carrying its event and that event's target id, and steps as an ordered array; entry_filter, extra_triggers, run_once_per_contact and time_zone are optional. The events, the step kinds and their fields are documented in the request schema. Ids come from list_contact_lists, list_tags, list_email_templates, list_forms and list_senders. Returns the automation with its steps. Requires the 'campaigns:draft' OAuth scope.

create_contact

ChatGPT
Creates one contact on the account. email is required; first_name, last_name, company, job_title, mobile_phone, work_phone, website, address, country, city, state, zip_code and note are optional. email is unique within the account, so a second contact with the same address comes back as a validation error rather than a merge. search_contacts finds an address already on file. Returns the created contact with its new id. Requires the 'contacts:write' OAuth scope.

create_contact_list

ChatGPT
Creates a new, empty contact list under a given name; add_contact_to_contact_list then populates it. List names are not unique, so a second call with the same name leaves two lists sharing it and later sends become ambiguous; list_contact_lists holds the names already in use. Returns the new list including its contact_list_id. Requires the 'contacts:write' OAuth scope.

create_custom_block

ChatGPT
Saves a chunk of campaign HTML for reuse (name plus html), for example a signature footer or an event banner. is_public false keeps the block inside this account; true shares it with the wider block gallery other accounts can browse. Requires the 'campaigns:draft' OAuth scope.

create_custom_field

ChatGPT
Defines a new custom field for contacts (name, type text|number|date|select|multi_select, options for select types). Values are then set in the app or through the REST endpoint add_custom_field_to_contact, which is not one of these tools. Idempotent for an existing name. Requires the 'contacts:write' OAuth scope.

create_email_template

ChatGPT
Saves a reusable email template from complete HTML: name, subject and html. Its id is what draft_campaign's template_id and an automation's send_email step take. Requires the 'campaigns:draft' OAuth scope.

create_email_type

ChatGPT
Creates a subscription category (email type) from a name, an optional description and an optional contact_list_id it feeds. list_email_types holds the categories already defined. Returns the new email type with its id. Requires the 'contacts:write' OAuth scope.

create_form

ChatGPT
Creates a signup or lead form from name and a fields array, each field with its name, label, type, required flag and options, plus an optional contact_list_id submitters join and a tag_id applied to them. An email field is part of every form. Returns the form with its fields and its embed token. list_forms holds the forms already defined. Requires the 'contacts:write' OAuth scope.

create_landing_page

ChatGPT
Creates a landing page as an unpublished draft from complete html, taking name and html plus an optional meta_title, meta_description, goal and contact_list_id for lead capture. Returns the page with its future public url. publish_landing_page puts the page on the web, and list_landing_pages holds the pages already defined. Requires the 'campaigns:draft' OAuth scope.

create_or_update_contact

ChatGPT
Updates the contact whose contact_id is passed. Without contact_id, updates the contact that already has the given email (matched without regard to case), or creates one when none does. Returns status, a message of 'Contact created' or 'Contact updated', and the contact. Requires the 'contacts:write' OAuth scope.

create_reply_to_address

ChatGPT
Registers a reply-to address and emails it a one-click verification link. The address becomes usable once the owner of that inbox opens the link. Requires the 'campaigns:draft' OAuth scope.

create_segment

ChatGPT
Creates a saved segment from conditions on contact fields, from name, an optional description and a conditions object of groups, each group joining its own field conditions. The field operators are documented in the request schema. The member count is calculated in the background, and list_segments carries it once it lands. Requires the 'contacts:write' OAuth scope.

create_sender

ChatGPT
Creates a from address on one of the account's verified domains, from from plus an optional reply_to and display_name. list_domains carries the verified domains and add_domain starts authenticating a new one. The new address then appears in list_senders for use on a draft. Requires the 'campaigns:draft' OAuth scope.

create_signature

ChatGPT
Creates an HTML email signature for the connected user, from a name and html, so drafts and replies can carry it. list_signatures holds the signatures already saved, and update_signature changes one in place. Requires the 'campaigns:draft' OAuth scope.

create_sms_campaign

ChatGPT
Creates an SMS campaign draft: contact_list_id, message_body, optional name, sender_number (a verified number on the account) and tracking_enabled. The response carries the estimated credits. Sending is a separate call. Requires the 'campaigns:draft' OAuth scope.

create_tag

ChatGPT
Creates a tag from a name, with an optional color as a hex value. A name already in use comes back as the existing tag with its id, which makes a call before assign_tags_to_contact idempotent. list_tags holds the names already on the account. Returns the tag with its tag_id. Requires the 'contacts:write' OAuth scope.

create_webhook_endpoint

ChatGPT
Creates an inbound webhook endpoint by name and returns its POST url. Its id is the trigger.endpoint_id of an automation with a webhook trigger. Requires the 'contacts:write' OAuth scope.

delete_automation

ChatGPT
Deletes an automation by id. The automation has to be inactive first, which update_automation_status makes it. Requires the 'campaigns:draft' OAuth scope.

delete_campaign

ChatGPT
Deletes an unsent (draft or trashed) campaign by id for good, unlike trash_campaign, which restore_campaign can undo. A sent campaign keeps its reports and stays; trash it instead. It also frees a contact list that delete_contact_list keeps while a draft campaign still targets it. Requires the 'campaigns:draft' OAuth scope.

delete_contact

ChatGPT
Deletes one contact by contact_id, along with its list memberships, tags and activity. unsubscribe_contact stops mail to the address and keeps the record. search_contacts supplies the id. Requires the 'contacts:write' OAuth scope.

delete_contact_list

ChatGPT
Deletes a list by contact_list_id. The contacts on the list stay in the account and keep their other list memberships. Requires the 'contacts:write' OAuth scope.

delete_custom_block

ChatGPT
Deletes a saved block by custom_block_id. Campaigns already built from it keep their HTML, but the block itself is gone. Requires the 'campaigns:draft' OAuth scope.

delete_email_template

ChatGPT
Deletes a saved template by template_id. A template an automation step still sends stays in place instead, and drafts already built from the template keep their content. list_email_templates holds the ids. Requires the 'campaigns:draft' OAuth scope.

delete_file

ChatGPT
Removes a hosted file from the gallery by file_id and frees its storage. Links already sitting in delivered email keep working, so this only takes the file out of the gallery listing. Requires the 'campaigns:draft' OAuth scope.

delete_form

ChatGPT
Deletes a form by form_id, along with its embed and its stored submissions. Contacts the form created stay on the account, and a form an automation starts from stays in place instead. list_forms holds the ids. Requires the 'contacts:write' OAuth scope.

delete_segment

ChatGPT
Deletes a custom segment by segment_id, and the contacts in it stay on the account. A system segment stays in place instead. list_segments holds the ids, and update_segment changes a custom segment's rules. Requires the 'contacts:write' OAuth scope.

delete_sender

ChatGPT
Removes a sender address by email_sender_id. A sender campaigns have already used is archived with its history kept; an unused one is deleted. Requires the 'campaigns:draft' OAuth scope.

delete_signature

ChatGPT
Deletes an email signature by signature_id. It leaves the signature picker, and campaigns already sent keep the signature in their content. Requires the 'campaigns:draft' OAuth scope.

delete_tag

ChatGPT
Deletes a tag by tag_id, taking it off every contact that carries it. A tag an automation starts from stays in place instead. list_tags holds the ids, and remove_tags_from_contact takes a tag off one contact. Requires the 'contacts:write' OAuth scope.

delete_webhook_endpoint

ChatGPT
Deletes a webhook endpoint by endpoint_id. Its url stops receiving events as soon as the call returns. Requires the 'contacts:write' OAuth scope.

draft_campaign

ChatGPT
Creates an email campaign in the account as a draft. Takes subject, and usually body with body_format, name and an audience: contact_list_id for an existing list, or a recipients array of objects with email, first_name and last_name. sender_id and email_sender_id come from list_senders, template_id from list_email_templates and contact_list_id from list_contact_lists. Returns status and drafts, each draft with its id. update_campaign edits an existing draft in place. Requires the 'campaigns:draft' OAuth scope.

duplicate_campaign

ChatGPT
Copies a campaign into a brand new draft, from the campaign id and an optional name. It is how a campaign is sent again or a new version of an earlier newsletter starts; the returned draft id is what update_campaign edits before a send. Requires the 'campaigns:draft' OAuth scope.

enroll_contact_in_automation

ChatGPT
Enrolls one contact in an active automation, from automation_id and either contact_id or email. The automation steps then run in the background. list_automations holds the automation id and search_contacts the contact id. Returns status, message, automation_id, contact_id and enrollment_id. Requires the 'campaigns:send' OAuth scope.

get_account

ChatGPT
Reads the account: plan tier, sending limits with their usage, contact count against the plan limit, connected sending channels, plan entitlements and the current rate limits. list_senders covers the from addresses the account can send campaigns from, and list_team_members the people on it. Requires the 'account:read' OAuth scope.

get_automation

ChatGPT
Reads one automation by id: its name, status, trigger and the ordered steps it runs. Read-only; it describes what a specific automation does and whether it is active. Requires the 'campaigns:read' OAuth scope.

get_brand_kit

ChatGPT
Reads the account brand kit: logo_url, primary, secondary and accent colors, palette, site title and description, and social links. It is the brand a campaign body or a landing page matches. update_brand_kit sets the same fields by hand. Requires the 'account:read' OAuth scope.

get_campaign

ChatGPT
Reads one campaign in full, from the campaign id: subject, preheader, from address, contact list, attachments, ab_test and sharing state. include_body=true adds the HTML body, which is left out by default because it is large. list_campaigns resolves a campaign named in words into the id this takes. Requires the 'campaigns:read' OAuth scope.

get_campaign_recipients

ChatGPT
Lists who a sent campaign reached and what each recipient did with it, from the campaign id and an engagement filter (all, opened, clicked, not_opened, bounced, unsubscribed). Returns contact_id, email, sent_at, opened_at, clicked_at, bounced and unsubscribed per recipient, with the paging fields. Requires the 'campaigns:read' OAuth scope.

get_campaign_report

ChatGPT
Reports the full performance picture for one sent campaign, from the campaign id: opens, clicks, bounces, unsubscribes and complaints with their rates, the account average alongside them, the mailbox providers and recipient domains that engaged, and a timeline of how fast opens and clicks arrived. get_campaign_stats carries the headline numbers on their own. Requires the 'campaigns:read' OAuth scope.

get_campaign_stats

ChatGPT
Reports delivery and engagement figures for one campaign, from the campaign id list_campaigns returns: sent, delivered, opened, clicked, bounced, unsubscribed, complained and the matching rates, which are percentages of delivered mail. get_campaign_report carries the fuller picture, and get_campaign_status the state of a draft that has no figures yet. Requires the 'campaigns:read' OAuth scope.

get_campaign_status

ChatGPT
Reports where an email draft stands, given its id: its status ('Draft', 'sending', 'Sent'), its ready_to_send flag and a sender object with the lane, the from address and authorized. It is the readiness check before send_campaign: after draft_campaign with recipients or attachments a background job takes roughly 5 to 15 seconds. list_campaigns and draft_campaign hold the id. Requires the 'campaigns:read' OAuth scope.

get_compliance_summary

ChatGPT
Reports how one account stands against the email rules of a sending region: us, ca, eu or tr. Takes an optional region, and uses the account's own region when it is left out. Returns region, region_name, frameworks, contactable_count, opt_out_count, postal_address_on_file, the last export timestamps, obligations, handled_automatically, and a registry object for a region that runs one. Requires the 'contacts:read' OAuth scope.

get_contact

ChatGPT
Reads one contact by its numeric id, which search_contacts returns for a person named in words. The default response holds id, first_name, last_name and email; type='detailed' adds company, job title, address, subscription state, custom fields and timestamps. It reports what is currently on file, which is the state an update would change. Requires the 'contacts:read' OAuth scope.

get_contact_activity

ChatGPT
Lists the history of one contact, from the contact id, newest first: list joins and departures, the campaigns sent to them with their opens and clicks, and the notes teammates recorded. Returns the contact, an activity array and the paging fields. add_contact_note records a new note. Requires the 'contacts:read' OAuth scope.

get_contact_subscriptions

ChatGPT
Reports what one contact still receives from this account, from the contact id: each email type with its subscribed flag, opted_out_by and opted_out_at, plus email_sending_status, globally_unsubscribed and suppressed. update_contact_subscriptions changes the email types a contact takes. Requires the 'contacts:read' OAuth scope.

get_custom_block

ChatGPT
Reads a saved block's full HTML by custom_block_id, the HTML a campaign body reuses or an edit starts from. Requires the 'campaigns:read' OAuth scope.

get_custom_fields

ChatGPT
Lists the custom contact fields this account has defined, as field-name to field-type pairs. It carries the exact names the account uses for anything beyond the standard contact attributes. create_custom_field defines a new field. Values on a contact are set in the app or through the REST endpoint add_custom_field_to_contact, which is not one of these tools. Returns one entry per custom field. Requires the 'contacts:read' OAuth scope.

get_email_template

ChatGPT
Reads one saved template by id, including its HTML body, which is the design and copy a draft built from it would start with. Requires the 'campaigns:read' OAuth scope.

get_form

ChatGPT
Reads one signup or lead form by id: its fields, the contact list it feeds, its submission count and its embed token. list_forms holds the ids, and get_form_responses pages through the submissions themselves. Requires the 'contacts:read' OAuth scope.

get_form_responses

ChatGPT
Pages through the submissions of one form, from form_id, newest first, with the answer given for each field. page and per_page (max 100) control pagination. list_forms holds the form id, and get_form describes the fields the answers belong to. Requires the 'contacts:read' OAuth scope.

get_import

ChatGPT
Reports the state of one contact import, from the import id import_contacts returns: status, rows_processed against rows_total, success_count, failed_count and errors_preview. list_imports carries the recent imports when the id is not at hand. Requires the 'contacts:read' OAuth scope.

get_iys_summary

ChatGPT
Reports the figures this account would file with the Turkish commercial message registry: sendable_count, ret_count, tacir_count, unreported_ret_count, and when each file was last produced. It applies to accounts sending in Türkiye. Requires the 'contacts:read' OAuth scope.

get_landing_page

ChatGPT
Reads one landing page by id: its public url, meta title and description, goal, and the contact list it captures leads into. list_landing_pages holds the ids, and update_landing_page changes these values. Requires the 'campaigns:read' OAuth scope.

get_opt_outs

ChatGPT
Lists the addresses that opted out of this account's mail, newest first, with id, email, opted_out_at and a scope of 'all' or 'campaigns'. Takes an optional ISO8601 since for a delta, plus page and per_page. Returns an opt_outs array with page, per_page, total and has_more. list_suppressions covers global unsubscribes on their own. Requires the 'contacts:read' OAuth scope.

get_sms_campaign

ChatGPT
Reads one SMS campaign by id, including its message body, status, audience list and send date. list_sms_campaigns holds the ids, update_sms_campaign changes a draft and send_sms_campaign submits one. Requires the 'campaigns:read' OAuth scope.

import_contacts

ChatGPT
Imports contacts from CSV text, into an existing list (contact_list_id) or a new one (contact_list_name). Columns are mapped automatically from the header row, and columns maps them exactly when the headers are unclear. Returns the import id, the row count and the mapping it used; get_import carries the progress of the background job. Requires the 'contacts:write' OAuth scope.

invite_team_member

ChatGPT
Invites a colleague to the account from an email address and a role, which sends them an invitation email. The roles this account can assign are documented in the request schema. Returns status and the team_member with its id, role and invited_at. list_pending_invitations carries invitations still outstanding, and revoke_invitation cancels one. Requires the 'account:write' OAuth scope.

list_api_keys

ChatGPT
Lists the API keys issued for this account with their scopes, key_prefix, created_at, expires_at, last_used_at and expired flag, which is where an expiring key shows up. Keys are created and revoked in the app under Settings > API Keys, and the key value itself stays outside the API. Requires the 'account:read' OAuth scope.

list_audit_events

ChatGPT
Lists the workspace audit trail, newest first, optionally filtered to one action such as role_changed or invite_sent, and paged with page and per_page. Returns audit_events with action, actor, target_type, target_id, metadata and created_at. Requires the 'account:read' OAuth scope.

list_automations

ChatGPT
Lists the account's automations (id, name, status, trigger). Read-only: it holds which automations exist in the account and identifies the one behind a name. Requires the 'campaigns:read' OAuth scope.

list_campaigns

ChatGPT
Lists campaigns by recency, status or a word from the subject, which resolves a campaign named in words ('my last newsletter', 'drafts not yet sent') into an id. Returns campaigns with page, per_page, total and has_more. The ids go to get_campaign, get_campaign_stats, get_campaign_status, update_campaign and send_campaign. Requires the 'campaigns:read' OAuth scope.

list_connected_apps

ChatGPT
Lists the third-party apps that currently hold access to this account, each with its scopes, who authorized it and when. Connections are cut in the app under Settings > Connected apps. list_integrations covers the integrations configured on the account. Requires the 'account:read' OAuth scope.

list_contact_lists

ChatGPT
Lists the account's contact lists (audiences) with their ids, names and contact counts. Every campaign and membership call takes the numeric contact_list_id rather than the list name, and this is where an audience named in words ('the newsletter list', 'Customers') resolves to that id. It also holds the answer to which audiences exist in the account. Requires the 'contacts:read' OAuth scope.

list_contacts

ChatGPT
Pages through the account's contacts (id, first_name, last_name, email). page and per_page (max 100) control pagination; the response carries has_more. search_contacts is the lookup by name or email address, and list_contacts_in_list returns the members of one named list. Requires the 'contacts:read' OAuth scope.

list_contacts_in_list

ChatGPT
Returns the contacts that belong to one contact list, given its contact_list_id from list_contact_lists. It shows who is in an audience, whether somebody is already a member, and what a send to that list would reach. Large lists come back truncated with a note saying so, and the authoritative member total is the count list_contact_lists carries. Requires the 'contacts:read' OAuth scope.

list_custom_blocks

ChatGPT
Lists the account's saved reusable HTML blocks (footers, headers, promo panels) with an html_preview of each and the paging fields. get_custom_block returns one block in full, and create_custom_block saves a new one. Requires the 'campaigns:read' OAuth scope.

list_domain_health_checks

ChatGPT
Lists the domains this account has checked, with their spf, dmarc and blocklist readings and the last_checked timestamp of each. Each row is the stored result of the run at that timestamp. run_domain_health_check takes a fresh reading for one domain. Requires the 'account:read' OAuth scope.

list_domains

ChatGPT
Shows the account's sending domains, whether each is verified, and the DNS records still to add. create_sender needs a verified domain, and this is where verification progress after verify_domain shows up. Requires the 'account:read' OAuth scope.

list_email_sender_addresses

ChatGPT
Lists every from address configured on the account with its kind and status. list_senders is the view built for choosing the from address of a draft, and it also carries the account sending state. Requires the 'account:read' OAuth scope.

list_email_templates

ChatGPT
Lists the saved email templates in the account (id, name, subject, body_format). A template id is what draft_campaign's template_id takes to reuse an existing design; q searches by name. Requires the 'campaigns:read' OAuth scope.

list_email_types

ChatGPT
Lists the subscription categories (email types) this account publishes on its preference page, each with its id and name, so a campaign or a form can target one. get_contact_subscriptions reports what a single contact accepts, and create_email_type adds a category. Requires the 'contacts:read' OAuth scope.

list_files

ChatGPT
Lists the account's hosted files with their public links, folders and storage usage, optionally filtered by a search term, a folder or a kind (image, pdf, video, audio, archive, document, other). A public_url is the link a campaign body points at. upload_file adds a file and list_images covers the image library. Requires the 'campaigns:read' OAuth scope.

list_forms

ChatGPT
Lists the account's signup and lead forms (id, name, form_type, responses_count). It carries the form id that get_form_responses takes. Requires the 'contacts:read' OAuth scope.

list_images

ChatGPT
Lists the account's images with their public urls, alt text and folders, optionally filtered by folder or by a filename search. A url from here is what campaign HTML takes as an image src. upload_image adds an image to the library. Requires the 'campaigns:read' OAuth scope.

list_imports

ChatGPT
Lists the recent contact imports with their contact list, row counts and status, optionally filtered to one contact_list_id, alongside the paging fields. It carries the import id get_import takes. Requires the 'contacts:read' OAuth scope.

list_integrations

ChatGPT
Lists the third-party apps connected to the account by name (Shopify, HubSpot, Zapier and so on). Names only; the response excludes credentials. Requires the 'account:read' OAuth scope.

list_landing_pages

ChatGPT
Lists the account's landing pages (id, name, active, public url, linked list). It holds which pages exist in the account and identifies the one behind a name. Requires the 'campaigns:read' OAuth scope.

list_pending_invitations

ChatGPT
Lists the invitations to this workspace that have been sent and not yet accepted, with the role, who sent each one and when. It carries the id revoke_invitation takes as user_id, and invite_team_member sends a fresh invitation. Requires the 'account:read' OAuth scope.

list_reply_to_addresses

ChatGPT
Lists the reply-to addresses on the account with their verification state, so a draft can carry one. create_reply_to_address registers an address and emails it a verification link, which the owner of that inbox opens. Requires the 'account:read' OAuth scope.

list_segments

ChatGPT
Lists the account's saved segments with their id, name, description and contacts_count. A segment carrying a contact_list_id serves as the audience of a draft. create_segment defines a new segment and refresh_segment recalculates a count. Requires the 'contacts:read' OAuth scope.

list_senders

ChatGPT
Lists the from addresses this account can send campaigns from. Each entry names in usable_as the argument that selects it: sender_id on a kind 'user' entry, email_sender_id on 'gmail_mailbox', 'outlook_mailbox' and 'shared_fallback' entries. Returns senders with kind, name, email, label, is_default and connected_by, plus default_sender_id, which a draft carrying neither argument takes. Requires the 'account:read' OAuth scope.

list_signatures

ChatGPT
Lists the email signatures defined by the team (name, active, html). A signature's html is what a draft carries when it includes one. Requires the 'account:read' OAuth scope.

list_sms_campaigns

ChatGPT
Lists the account's SMS campaigns with their id, name, status, contact list and send date. It identifies the campaign behind a name and carries the id get_sms_campaign, update_sms_campaign and send_sms_campaign take. Requires the 'campaigns:read' OAuth scope.

list_suppressions

ChatGPT
Pages through globally unsubscribed addresses (email, unsubscribed_at). It answers whether an address is unsubscribed and shows what the suppression list holds. Read-only: removing an address is a separate operation, reinstate_contact. Requires the 'contacts:read' OAuth scope.

list_tags

ChatGPT
Lists the contact tags defined in the account, each with its name and colour. Tags are the free-form labels used to categorise contacts ('vip', 'trial', 'conference-2026'). Tag names are matched literally elsewhere in the product, so this is the source of their exact spelling and of the answer to which tags exist. Requires the 'contacts:read' OAuth scope.

list_team_members

ChatGPT
Lists the people on the account with their name, email and role. Their user ids are the sender_id values a draft takes once the sending domain is verified, and update_team_member_role takes the same id. list_pending_invitations covers invitations that are still outstanding. Requires the 'account:read' OAuth scope.

list_webhook_endpoints

ChatGPT
Lists the account's inbound webhook endpoints with their POST url and how many requests each has received. An automation with a webhook trigger starts when JSON is posted to that url. create_webhook_endpoint adds an endpoint and returns the id create_automation takes as trigger.endpoint_id. Requires the 'account:read' OAuth scope.

preview_campaign_audience

ChatGPT
Reports who a campaign would reach if it went out now, from the campaign id: the list or segment behind it, total_contacts, eligible_recipients, excluded and a sample of recipients. get_campaign_recipients covers a campaign that has already gone out. Requires the 'campaigns:read' OAuth scope.

publish_landing_page

ChatGPT
Puts a landing page on the web with status 'published', or takes it down with status 'unpublished', from the page id and the status. Publishing calls for a verified account. create_landing_page saves a page as an unpublished draft, and list_landing_pages holds the ids and the public urls. Requires the 'campaigns:draft' OAuth scope.

refresh_segment

ChatGPT
Recalculates a segment's member count in the background; list_segments carries the fresh number about a minute later. Requires the 'contacts:write' OAuth scope.

reinstate_contact

ChatGPT
Takes an email address off the account's global unsubscribe list so it can receive campaigns again. The contact exists on the account beforehand, and the consent for the change comes from the person themselves. Returns status, message and contact_id. unsubscribe_contact is the call in the other direction. Requires the 'suppressions:write' OAuth scope.

reinstate_sms

ChatGPT
Takes a phone number off the account's SMS opt-out list so it can receive texts again. The contact exists on the account beforehand, and the consent for the change comes from the person themselves. Returns status, message and contact_id. unsubscribe_sms is the call in the other direction. Requires the 'suppressions:write' OAuth scope.

remove_campaign_attachment

ChatGPT
Removes one attached file from a campaign that is still a draft, from the campaign id and the attachment id get_campaign reports. The file is deleted for good, and only draft campaigns allow it. Requires the 'campaigns:draft' OAuth scope.

remove_contact_from_list

ChatGPT
Removes one contact from one list, from contact_id and contact_list_id. The contact stays on the account with its other list memberships. add_contact_to_contact_list is the call in the other direction, and list_contacts_in_list shows who is on the list. Requires the 'contacts:write' OAuth scope.

remove_domain

ChatGPT
Archives a sending domain by domain_id. Senders on that domain have to be removed first, and add_domain puts the domain back. Requires the 'campaigns:draft' OAuth scope.

remove_tags_from_contact

ChatGPT
Removes tags from one contact, from contact_id plus tag_ids or tag_names. The tag definitions stay on the account for other contacts. assign_tags_to_contact adds tags to the same contact, and list_tags holds the current names and ids. Requires the 'contacts:write' OAuth scope.

rename_contact_list

ChatGPT
Renames a contact list, from contact_list_id and the new name. Nothing else about the list changes, so its contacts and the automations and campaigns pointing at it carry on. list_contact_lists holds the ids and the names already in use. Requires the 'contacts:write' OAuth scope.

restore_campaign

ChatGPT
Brings a trashed campaign back by id, so it appears in the campaign list again. It reverses trash_campaign. Requires the 'campaigns:draft' OAuth scope.

revoke_invitation

ChatGPT
Cancels an invitation that has not been accepted, from the user_id list_pending_invitations returns. The invitation link stops working straight away; a fresh link is a new call to invite_team_member. Requires the 'account:write' OAuth scope.

run_domain_health_check

ChatGPT
Checks one domain against public DNS and public blocklists and saves the result on the account. Takes the domain as a hostname and returns the SPF, DMARC and blocklist readings with the detail lines explaining each one. It is a live reading, unlike the stored results list_domain_health_checks carries, so it also covers a first campaign from a new domain and a stale stored check. Requires the 'campaigns:draft' OAuth scope.

schedule_campaign

ChatGPT
Sets a send time on a draft, from the draft id, send_at as an ISO 8601 datetime and an optional time_zone, with at least 15 minutes of lead time. Returns the campaign summary with scheduled_for, time_zone and a sender object with lane and authorized. unschedule_campaign cancels a scheduled send, and send_campaign goes out at once instead. Requires the 'campaigns:send' OAuth scope.

search_contacts

ChatGPT
Searches contacts by exact email address, first name or last name, which turns a person named in words into the contact id other tools take. Matching is exact rather than fuzzy, so a partial name finds nothing. Takes at least one of email, first_name and last_name; several together narrow the search. Returns id, first_name, last_name, email and source per match. list_contacts pages through every contact. Requires the 'contacts:read' OAuth scope.

send_campaign

ChatGPT
Sends the draft with the given id to its recipient list. The id comes from draft_campaign or list_campaigns, and get_campaign_status carries the ready_to_send flag for a draft still being assembled. Returns status, message, the campaign id and a sender object with lane, from and authorized. schedule_campaign sets a send time on the same draft instead. A gate object accompanies a campaign the account was not able to send. Requires the 'campaigns:send' OAuth scope.

send_sms_campaign

ChatGPT
Submits the draft SMS campaign with the given id, which list_sms_campaigns supplies. Returns the campaign summary with recipients and estimated_credits. create_sms_campaign writes the draft and update_sms_campaign changes it before submission. Requires the 'campaigns:send' OAuth scope.

send_test_email

ChatGPT
Sends the campaign with the given id to 1 to 5 addresses as a test, with an optional note carried in the test message. list_campaigns and draft_campaign hold the campaign id. Returns status and sent_to with the addresses. send_campaign goes to the campaign's own recipient list. Requires the 'campaigns:send' OAuth scope.

start_ab_test

ChatGPT
Configures an A/B subject test on a draft, from the draft id, subject_b, an optional subject_a, test_percentage 10, 20 or 30 and wait_hours 2, 4 or 24. The test slice receives both subjects and the winning subject goes to the rest after wait_hours. Available on paid plans. Returns the campaign summary with an ab_test object and a sender object with lane and authorized. Requires the 'campaigns:send' OAuth scope.

trash_campaign

ChatGPT
Moves a draft or sent campaign to the trash, which is what deleting a campaign means here. restore_campaign takes it back out of the trash. Requires the 'campaigns:draft' OAuth scope.

trash_landing_page

ChatGPT
Unpublishes a landing page and moves it to the trash. It is what deleting a page means here; the app can restore it. Requires the 'campaigns:draft' OAuth scope.

unschedule_campaign

ChatGPT
Cancels a campaign's scheduled send by id. The draft is kept with its content and audience, so it can be sent or rescheduled later; nothing is deleted. Requires the 'campaigns:draft' OAuth scope.

unsubscribe_contact

ChatGPT
Adds an email address to the account wide email suppression list, so it takes no further campaign or newsletter from this account on any list and a later import keeps that state. Only email is required; first_name, last_name and phone are optional. When no contact exists for that address, one is created in the unsubscribed state. Returns status, message and contact_id. Requires the 'suppressions:write' OAuth scope.

unsubscribe_sms

ChatGPT
Opts a phone number out of the account's SMS campaigns across every list. Takes the phone number of a contact on the account. Returns status, message and contact_id. reinstate_sms is the call in the other direction, and the consent for that comes from the person themselves. Requires the 'suppressions:write' OAuth scope.

update_automation

ChatGPT
Updates an inactive automation by id: its name, trigger, extra_triggers, entry_filter or steps, where steps replaces the whole tree and carries the full list. An inactive automation takes the edit, and update_automation_status deactivates one. The trigger events and step kinds are documented in the request schema, the same vocabulary create_automation takes. Requires the 'campaigns:draft' OAuth scope.

update_automation_status

ChatGPT
Sets the status of an automation to active or inactive, from the automation id and the status value. list_automations and get_automation hold the id, and create_automation saves an automation inactive. Returns status, id, name and automation_status. Requires the 'campaigns:send' OAuth scope.

update_brand_kit

ChatGPT
Sets the account brand fields by hand: logo URL, hex colors, palette, site title and description, social links. It covers a fetched brand that is wrong or missing; every field set here is remembered as hand edited and a later refresh from the website leaves it alone. Requires the 'campaigns:draft' OAuth scope.

update_campaign

ChatGPT
Changes an existing draft in place, from the draft id plus any of subject, body (with body_format), name, reply_to, contact_list_id, template_id, and the from address as either sender_id or email_sender_id from list_senders. Returns the draft and a sender object with lane and authorized. Only unsent drafts can change. Requires the 'campaigns:draft' OAuth scope.

update_campaign_sharing

ChatGPT
Controls the public side of a campaign, from the campaign id with web_version, show_in_archive or regenerate_public_link: taking a delivered campaign off the web, listing it in the account's public archive, or retiring and replacing a public link that leaked. The response carries the new public_url. Requires the 'campaigns:draft' OAuth scope.

update_contact

ChatGPT
Changes fields on an existing contact identified by contact_id. Only the fields present in the request are touched and omitted fields keep their current values, which suits corrections and enrichment (a new job title, a fixed typo in an address). Returns the full updated contact. search_contacts turns a person into the contact_id this takes. Requires the 'contacts:write' OAuth scope.

update_contact_subscriptions

ChatGPT
Subscribes or unsubscribes one contact for specific email types, from the contact id plus subscribe and/or unsubscribe arrays of email type ids read from list_email_types or get_contact_subscriptions. Returns the requested changes, the contact, and its email type state. Opt-outs the recipient made themselves stay in place and come back with a note. Requires the 'suppressions:write' OAuth scope.

update_custom_block

ChatGPT
Renames a saved block, replaces its HTML, or changes whether it is shared. Takes custom_block_id plus only the fields that change. Requires the 'campaigns:draft' OAuth scope.

update_email_template

ChatGPT
Updates a saved email template by template_id: its name, its subject or its html. Drafts already created from the template keep the content they were built with. list_email_templates holds the ids and get_email_template the current html. Requires the 'campaigns:draft' OAuth scope.

update_form

ChatGPT
Updates a form by form_id: its name, its fields, which replaces the whole field list, or the contact_list_id submitters join. get_form holds the current field list and list_forms the ids. Requires the 'contacts:write' OAuth scope.

update_landing_page

ChatGPT
Updates a landing page by id: its html, name, meta_title, meta_description, goal or the contact_list_id it captures leads into. get_landing_page holds the current values, and publish_landing_page puts the page on the web. Requires the 'campaigns:draft' OAuth scope.

update_segment

ChatGPT
Updates a segment by segment_id: its name, its description or its conditions, which replace the whole rule set. A custom segment takes the edit and a system segment is read only. list_segments holds the ids and the current names. Requires the 'contacts:write' OAuth scope.

update_signature

ChatGPT
Updates a saved email signature by signature_id: its name, its html, or whether it is the active signature drafts and replies carry. list_signatures holds the ids and the current html. Requires the 'campaigns:draft' OAuth scope.

update_sms_campaign

ChatGPT
Updates a draft SMS campaign by id: its name, its message_body, where segments and credits are re-estimated, or the contact_list_id it goes to. A draft takes the edit. list_sms_campaigns holds the ids and send_sms_campaign submits the draft. Requires the 'campaigns:draft' OAuth scope.

update_tag

ChatGPT
Renames or recolors a tag, from tag_id plus the new name or color. Every contact carrying the tag follows automatically. list_tags holds the current names and ids, and delete_tag takes a tag off the account altogether. Requires the 'contacts:write' OAuth scope.

update_team_member_role

ChatGPT
Changes the role of somebody who already belongs to this workspace, from the user_id list_team_members returns and the new role. The roles this account can assign are documented in the request schema. The workspace owner and the caller keep the role they have. Requires the 'account:write' OAuth scope.

upload_file

ChatGPT
Hosts a file (PDF, document, spreadsheet, image, short clip) so a campaign can link to it. Takes filename, content_base64 and content_type; the content is base64 encoded inside the request, which suits small files. The public_url that comes back is the link a campaign body carries. Requires the 'campaigns:draft' OAuth scope.

upload_image

ChatGPT
Adds an image (PNG, JPG or GIF) to the account library and returns a public URL for campaign HTML. Takes filename, content_base64, content_type and an optional alt_text describing the picture; the content is base64 encoded inside the request, which suits small images. Requires the 'campaigns:draft' OAuth scope.

verify_domain

ChatGPT
Triggers the DNS check for a domain once its records are in place. DNS changes can take a few hours to propagate, so a domain that does not verify at once may verify later; list_domains carries the result. Requires the 'campaigns:draft' OAuth scope.

add_contact_to_contact_list

Claude

create_contact

Claude

create_contact_list

Claude

create_or_update_contact

Claude

draft_campaign

Claude

get_campaign_status

Claude

get_contact

Claude

get_custom_fields

Claude

list_contact_lists

Claude

list_contacts_in_list

Claude

list_senders

Claude

list_tags

Claude

search_contacts

Claude

send_campaign

Claude

unsubscribe_contact

Claude

update_contact

Claude

Capabilities

Writes

Example Prompts

Click any prompt to copy it.

App Stats

155

Tools

3

Prompts

ChatGPT, Claude

Platforms

Works with

ChatGPT
Claude

Data refreshed daily