commit_activate_sequence
ChatGPTActivate a previously prepared Reach email sequence. Requires a valid unused confirmationToken from prepare_activate_sequence and confirm=true within five minutes. This mutates sequence state and starts the automation: tag-triggered sequences begin emailing every contact newly given the trigger tag, so email can be sent externally. Requires send access.
commit_campaign_send
ChatGPTCommit a previously prepared Reach campaign send. Requires the same campaignId plus the unused sendToken returned by prepare_campaign_send and confirm=true within five minutes. This mutates campaign state and can send irreversible real email to the prepared audience. If the workspace requires human send approval, it instead moves the campaign to pending approval and sends nothing until a studio owner approves it in Reach; otherwise it queues delivery immediately. Requires send access.
commit_delete_contact
ChatGPTPermanently delete a previously prepared Reach contact and related records. Requires a valid unused confirmationToken from prepare_delete_contact and confirm=true within five minutes. This is destructive, cannot be undone, and requires write access. It sends no email, but cannot recall email already sent.
commit_enroll_contact
ChatGPTStart a previously prepared Reach sequence enrollment. Requires a valid unused confirmationToken from prepare_enroll_contact and confirm=true within five minutes. This mutates enrollment data and starts the contact's automated email flow, so email can be sent externally and the action may not be fully reversible. Requires send access.
commit_resume_sequence
ChatGPTResume a previously prepared Reach email sequence. Requires a valid unused confirmationToken from prepare_resume_sequence and confirm=true within five minutes. This mutates sequence state, re-queues active enrollments, and can send email externally as contacts advance. Requires send access.
create_contact
ChatGPTCreate a person in the connected Reach workspace, or update non-subscription fields for the existing person with the same email. Requires an email address and mutates contact data, but cannot re-subscribe an existing unsubscribed or bounced contact. Optional tags are attached only when none triggers an active email sequence; for a send-triggering tag, create the contact without tags and use tag_contact's prepare/confirm flow. This tool sends no email and requires write access.
create_draft_campaign
ChatGPTCreate a draft email campaign in the connected Reach workspace. This mutates data but does NOT send email. Reach uses the requested fromSenderAddress or the workspace's default sender; call list_senders first to discover valid addresses. Set audienceType/audienceValue deliberately before sending (for example all, tag name, list ID, or selected contacts). The result contains the campaign ID needed by update_draft_campaign and prepare_campaign_send. Requires write access.
create_draft_sequence
ChatGPTCreate a new Reach email sequence as a draft, including its whole step list in one call. A draft never sends email; nobody is enrolled until it is activated with prepare_activate_sequence and commit_activate_sequence. Steps are objects with kind wait (waitValue, waitUnit), email (subject, bodyHtml, optional bodyText and fromName), or branch (branchCondition opened/clicked/tag_added, optional branchTagName, waitValue, waitUnit, yesStep, noStep as zero-based step indexes). Email steps send from fromSenderAddress or the workspace default sender. Use {{first_name}} in email bodies for personalization. This writes data and requires write access.
get_campaign_stats
ChatGPTGet delivery and engagement results for one Reach email campaign, including recipient, delivery, open, click, bounce, and unsubscribe counts plus computed rates. Requires a campaign ID from list_campaigns or a campaign-creation result. This is read-only and does not send email.
get_contact
ChatGPTGet one person from the connected Reach workspace, including tags, status, source, and active sequence-enrollment count. Provide either a contact ID from list_contacts/search_contacts or an exact email address. This is read-only and does not send email.
get_contact_engagement
ChatGPTGet one Reach contact's campaign engagement: open and click counts/timestamps plus the most recent campaign sent to that person. Requires contactId from list_contacts, search_contacts, or get_contact. This is read-only and does not send email.
get_org_summary
ChatGPTSummarize the connected Reach workspace. Reach is an email marketing and contact-management service for dance studios. Returns the workspace ID and name, the active-contact count, three recent campaigns, unread-reply count, and whether MCP/API campaign sends require human approval in Reach. This is read-only, does not send email, and needs no identifier because OAuth selects the workspace.
get_sequence
ChatGPTGet the full definition of one Reach email sequence: name, status, trigger, every step in run order (email subject and body, wait durations, branch conditions with yes/no targets as step indexes), and enrollment counts by status. Requires sequenceId from list_sequences. This is read-only and does not send email.
get_sequence_stats
ChatGPTReport how one Reach email sequence is performing: per-step emails sent, unique opens, unique clicks, unsubscribes, open and click rates, plus enrollment counts by status (active, completed, exited, failed). Requires sequenceId from list_sequences. Optional range 7d or 30d counts only enrollments that started and emails sent in that window; the default, all, counts everything. This is read-only and does not send email.
get_signup_activity
ChatGPTCheck whether an app is sending its new signups to this Reach workspace through the signed contact ingest endpoint. For one contact source label (the source string the app sends), returns when the newest contact with that source was created, its email, how many were created in the last 24 hours, and the total. Without a source, reports the source of the most recently created contact that did not come from Reach's own dashboard, imports, hosted signup forms, or MCP. This is read-only and does not send email.
list_campaigns
ChatGPTList non-deleted email campaigns in the connected Reach workspace, newest first, including each campaign ID, status, audience, and delivery totals. Optionally filter by status and paginate. Use a returned draft campaign ID with update_draft_campaign or prepare_campaign_send. This is read-only and does not send email.
list_contacts
ChatGPTList people stored in the connected Reach workspace, newest first, so their contact IDs can be used with contact, tagging, sequence, and campaign tools. Optionally filter by name/email text, exact tag name, or subscription status and paginate with limit/offset. Defaults to active contacts. This is read-only and does not send email.
list_inbox
ChatGPTList recent inbound email replies received by the connected Reach workspace, with sender details, subject, a short body preview, read state, and a matched contact when available. Optionally filter by read state. This is read-only and does not send email.
list_senders
ChatGPTList verified sender identities available when drafting email in the connected Reach workspace, including each sender's address, name, and default status. Use an address returned here as fromSenderAddress in create_draft_campaign. This is read-only, does not send email, and requires write access because it supports campaign drafting.
list_sequence_enrollments
ChatGPTList the people enrolled in one Reach email sequence, newest first, with each person's contact ID, email, enrollment status, current step index, enrollment and finish times, and last delivery error. Requires sequenceId from list_sequences; optionally filter by status and page with limit/offset. This is read-only and does not send email.
list_sequences
ChatGPTList the email automation sequences in the connected Reach workspace, including sequence IDs, names, status, trigger type, step counts by kind (email, wait, branch), and active and completed enrollment counts. Use a returned ID with enrollment, pause, or resume tools. This is read-only and does not send email.
list_tags
ChatGPTList all organizational labels in the connected Reach workspace, including each tag ID, name, color, and contact count. Use these IDs or names with contact-tagging and tag-audience campaign tools. This is read-only and does not send email.
list_workspace_members
ChatGPTList the people who have accounts in the connected Reach workspace (team members, not contacts), with each member's email, name, and role. Use a returned email as toEmail for send_test_sequence_email. This is read-only and does not send email.
pause_sequence
ChatGPTPause an active Reach email sequence. People currently enrolled stop advancing until the sequence is resumed; email already sent is unaffected. Requires sequenceId from list_sequences, mutates sequence state, requires write access, and does not send email.
prepare_activate_sequence
ChatGPTPrepare, but do not activate, a draft Reach email sequence. Requires sequenceId from list_sequences; the sequence must be a draft with at least one email step. This writes a five-minute confirmation record but sends no email and leaves the sequence a draft. Call commit_activate_sequence with the returned confirmationToken to start its email automation. Requires send access.
prepare_campaign_send
ChatGPTPrepare a Reach draft campaign for sending and return its audience details, estimated recipient count, sender, whether this workspace requires human send approval, and a five-minute sendToken. Requires campaignId from list_campaigns or create_draft_campaign; the campaign must still be a draft with an audience. This mutates only the campaign's temporary send token and does NOT send any email. Review the returned recipients, sender, and humanSendApprovalRequired value, then call commit_campaign_send with the same campaignId and sendToken to continue. Requires send access.
prepare_delete_contact
ChatGPTPrepare, but do not delete, one person from Reach. Requires contactId from list_contacts or search_contacts. Returns the matched contact and a five-minute confirmationToken. This writes a confirmation record but does not delete data or send email. Call commit_delete_contact to perform the permanent deletion. Requires write access.
prepare_enroll_contact
ChatGPTPrepare, but do not start, a manual enrollment of one Reach contact in an email sequence. Requires sequenceId from list_sequences and contactId from list_contacts/search_contacts. The sequence must be active and manual-triggered, and the contact must be active with an email address. This writes a five-minute confirmation record but sends no email. Call commit_enroll_contact with the returned confirmationToken to start the email flow. Requires send access.
prepare_resume_sequence
ChatGPTPrepare, but do not resume, a paused Reach email sequence. Requires sequenceId from list_sequences. This writes a five-minute confirmation record but sends no email and leaves the sequence paused. Call commit_resume_sequence with the returned confirmationToken to resume email behavior for active enrollments. Requires send access.
preview_sequence_email
ChatGPTRender one Reach sequence email exactly as Reach would send it and return the complete HTML document (brand header, body, footer), the subject, and the sender. Provide sequenceId from list_sequences plus either stepIndex (zero-based index of an email step from get_sequence) or unsaved editor content as subject and bodyHtml, which is sanitized exactly as saving would. {{first_name}} is filled from contactId, else sampleVars, else the same "friend" fallback real sends use. The unsubscribe link is an inert #unsubscribe-preview placeholder. This is read-only: it sends no email and changes nothing.
search_contacts
ChatGPTSearch people in the connected Reach workspace by a case-insensitive name or email substring. Returns contact IDs needed by other contact and sequence tools. Defaults to active contacts. This is read-only and does not send email.
send_test_sequence_email
ChatGPTSend one test copy of a Reach sequence email to a member of the connected Reach workspace so they can check it in a real inbox. Provide sequenceId plus stepIndex or unsaved subject and bodyHtml (same rules as preview_sequence_email), and toEmail, which must be the account email of a workspace member from list_workspace_members; any other address is refused and nothing is sent. The subject is prefixed with "[Test] ", the unsubscribe link is inert, and nobody is enrolled. Test sends are not recorded as sequence sends or analytics. Limited to 10 test sends per workspace per hour. Requires send access.
tag_contact
ChatGPTAttach an organizational label to one Reach contact with confirmation when email automation would start. For an inert tag, supply contactId plus tagId/tagName; Reach attaches it without sending email. If active sequences match, retry with prepare=true: the tag stays unattached and the result lists exact sequences plus a five-minute confirmationToken. After user review, call tag_contact with only that token and confirm=true; Reach rechecks contact status and the sequence set, then attaches the tag and can send external email. Requires write access for inert tags and send access for prepare/confirm.
unenroll_contact
ChatGPTStop one contact's active enrollment in one Reach email sequence so that person does not advance to later steps. Requires sequenceId from list_sequences and contactId from list_contacts/search_contacts, and an active enrollment must exist. This mutates enrollment state, requires write access, and sends no email; it cannot recall email already sent.
untag_contact
ChatGPTRemove an organizational label from one Reach contact. Requires contactId from list_contacts/search_contacts and either tagId or tagName from list_tags. This deletes the contact-tag association, requires write access, and does not send email or undo email already triggered by that tag.
update_contact
ChatGPTChange a Reach contact's first name, last name, phone, or internal notes. Requires a contact ID from list_contacts, search_contacts, or get_contact and at least one field to change. This mutates and can overwrite contact data, requires write access, and does not itself send email.
update_draft_campaign
ChatGPTChange content or audience fields on an existing Reach draft email campaign. Requires a campaign ID from list_campaigns or create_draft_campaign; non-draft campaigns cannot be changed. This mutates and overwrites supplied campaign fields, requires write access, and does NOT send email. Call prepare_campaign_send only after reviewing the saved draft and audience.
update_draft_sequence
ChatGPTChange a draft Reach email sequence: rename it, change its trigger, and/or replace its entire step list (same step format as create_draft_sequence). Only draft sequences can be changed here; active or paused sequences are refused so live email flows are never rewritten by a tool. This mutates sequence data, requires write access, and sends no email.