30 things to ask an email and SMS MCP server
Connected to Unitpost's MCP server, Claude, Cursor, ChatGPT or any MCP client can set up a domain, debug a bounce, build a segment, validate a campaign, check SMS consent, test a webhook and pull stats. Ask for the job, not the endpoint. Each prompt below names the tools it calls and whether it sends or changes anything. Most tools are in the default list; a few need a group added with ?toolsets= on the server URL.
Unitpost ·
Every prompt here works in any client connected to https://mcp.unitpost.com/mcp. Each tool is one Unitpost REST call, so it carries the same scopes, per-workspace rate limit and sending gate as the API. Swap in your own domain, addresses and names.
How to read the list
- Tool names in backticks are what the client would call, taken from the server's tool list. The client chooses, so it may add a read of its own.
- Sends means a real email, text or webhook leaves Unitpost. Changes means a write to your workspace. Unmarked prompts only read.
- Unitpost marks sends, cancels, deletes and overwrites as destructive, so Claude and ChatGPT ask before a send goes out. Additive writes, such as creating a contact or a draft campaign, are not marked, so a client may run them without asking.
- A tool followed by a group name, like
email_list_events(sending), is outside the default list. Add the group to the URL or send it in anX-MCP-Toolsetsheader. The groups areaudience,templates,campaigns,sending,inbox,domains,workspaceandsms, plusdefaultandall.
https://mcp.unitpost.com/mcp?toolsets=default,campaignsSet up a sending domain
- "Add mail.yourdomain.com as a sending domain and list the DNS records I need to publish."
email_domains_createreturns therecords. Changes. - "Is mail.yourdomain.com verified yet? Check it once and tell me what's pending."
email_domains_get, thenemail_domains_verify. The tool's own note says to call verify once, never in a loop: DNS can take hours and Unitpost keeps re-checking a pending domain in the background. Changes (status only). - "Verification failed. What does each nameserver return, and what's the fix?"
email_domains_diagnoseranksfindingsby severity, each with itsfix. It shares verify's DNS rate limit, so one call. - "Which From addresses have we saved on that domain?"
email_senders_list(domains).
Send and debug transactional email
- "Send a test from hello@yourdomain.com to me@yourdomain.com with the subject 'MCP test'."
email_domains_listto confirm the domain isverifiedordegraded, thenemail_send. Sends. - "Send our published 'Welcome' template to sam@yourdomain.com with first_name set to Sam."
email_templates_list, thenemail_sendwithtemplate: { id, variables }. A draft template is refused withtemplate_not_published. Sends. - "Schedule that for 9:00 tomorrow New York time and show me it's scheduled."
email_sendwithscheduled_atcarrying an offset (a time with no zone is rejected), thenemail_getto read backstatus: scheduled. Sends (later). - "Cancel the scheduled email to sam@yourdomain.com."
email_listfiltered bytoandstatus, thenemail_update. Changes. - "Why didn't ada@example.com get yesterday's receipt?"
email_listwithto,email_list_events(sending) for the bounce'sdiagnostic_code, andsuppressions_getby email. - "That one failed with a temporary error. Retry it."
email_retry(sending) sends again on the same id, only for a one-off send whose failure was temporary, with anidempotency_key. Sends.
Contacts, segments and topics
- "Add ada@example.com with first name Ada and the custom field plan set to pro."
contacts_create. Changes. - "Change Ada's plan to team and leave her other fields alone."
contacts_get, thencontacts_update. Thecustom_fieldsmap you send replaces the whole map, so the client starts from the current one. Changes. - "Make a dynamic segment of contacts on the pro plan and tell me how many a campaign would reach."
segments_createwithtype: dynamicand afilter, thensegments_get_preview(audience) forsubscribed_count. Changes. - "Create a 'Product updates' topic people can opt out of, then show Ada's subscriptions."
email_topics_createwithdefault_opt_in, thencontact_topics_list. Changes. - "Import the people who signed up for our webinar updates from this list."
contact_imports_create, thencontact_imports_get. New contacts only; existing addresses are skipped, not updated. The server's instructions refuse scraped, purchased or rented lists. Changes.
Campaigns
- "Draft a campaign from the 'October update' template to the pro segment, scoped to the Product updates topic. Don't send it."
email_campaigns_createmakes a draft; nothing sends. Changes. - "Validate it and list every blocker and warning."
email_campaigns_validatereturnscan_send,blockers,sendable,variable_coverageandwarnings. - "Send me a test of that template first."
email_templates_test_send. Without a verified domain, only workspace members can receive it. Sends. - "Schedule it for Tuesday at 10:00 Berlin time."
email_campaigns_sendwithbody.scheduled_at(nullmeans now), thenemail_campaigns_getto confirmscheduled. Sends. - "How did last week's campaign do, and why did it pause?"
email_campaigns_stats(campaigns) andpause_reasonfromemail_campaigns_get.
SMS
- "Is SMS ready? Which of our senders can send right now?"
sms_brands_list(statusand themissinglist) andsms_numbers_list, where onlyactivesenders send. - "Has Ada agreed to marketing texts? Show the history."
contacts_get, thensms_consent_getfor her consent state and every recorded change. - "Text Ada: 'Your appointment is confirmed for Thursday at 3 pm.'"
sms_send. Marketing texts need recorded consent; a refusal comes back as a 403 with the reason, such asrecipient_not_opted_in. STOP and HELP replies are handled for you. Sends. - "Show me my whole conversation with Ada's number."
sms_listwithparticipantset to her E.164 number returns both directions.
Webhooks
- "Register https://api.yourdomain.com/hooks/unitpost for email.bounced and email.complained."
webhooks_createreturns thesigning_secretexactly once, so move it into your secret store. Changes. - "Fire a test event at it and show me what our server answered."
webhooks_testposts a signed sample event and returns the receiver's response. Sends. - "Why are deliveries failing? Once it's fixed, replay the last failed one."
webhooks_list_deliveries, thenwebhooks_replay_delivery(workspace), which runs your handler again with the same event id. Sends.
Reporting
- "Last 30 days of email for mail.yourdomain.com: delivered, bounced, complained."
email_statswithdaysanddomain_id. - "How many texts did we send this period, and how much of the period's allowance is used?"
sms_statsandusage_get. - "Who changed the pro segment yesterday, and with which key?"
activity_list(sending), which needsactivity:readticked for the app.
Reporting sessions
For a session that should only look, connect with ?readonly=1 (or X-MCP-Readonly: 1). The server lists read tools only and refuses any write on that connection, whatever the model tries.
What stays in the dashboard?
Some jobs have no tool on purpose, and the server tells the agent to send you to the dashboard instead: API keys and SMTP passwords, teammates, plan and billing, the free-form footer, connected apps, importing from another provider, and toll-free numbers or brand documents for SMS. If a prompt asks for one of these, the right answer is a pointer to the page, not a workaround.