MCP App Store
by KeenEthics
MillionSend icon

MillionSend

By CODARI GLOBAL, LLC

Get New App Alerts

Overview

MillionSend is an email-sending platform for transactional and marketing email. Once MillionSend is connected, ChatGPT works inside one MillionSend team that the user chooses when connecting, within the permissions the user grants. ChatGPT can read sent emails and their delivery status, per-email Insights checks and scores, the team's deliverability, sending limits and usage, contacts and their properties, segments, topics, suppressions, broadcasts, templates, sending domains and webhooks. After the user confirms, it can send single emails and batches of up to 100, reschedule or cancel scheduled emails, create broadcasts and send them to a segment, and create, update and delete contacts, segments, topics, contact properties, suppressions and templates. Team owners and admins can also manage sending domains and webhooks. Email sent through MillionSend is real email, delivered from the team's own verified domains to recipients who agreed to receive it. Suppression lists and topic unsubscribes are enforced on every send, and delivered emails cannot be recalled. Text written by contacts or other third parties comes back marked as untrusted data. API keys and webhook signing secrets are never shown in ChatGPT; they stay in the MillionSend dashboard. Users disconnect at any time by revoking access under Settings > Connected apps in the MillionSend dashboard. Requires a MillionSend account and membership in a team. Sending to external recipients needs a domain verified in that team.

Tools

add_contact_to_segment

ChatGPT
Add a contact to a manual segment. Idempotent: adding twice is not an error.

add_suppressions

ChatGPT
Block up to 1000 addresses in one call. origin (default manual) is recorded on rows this call creates: bounce, complaint and manual block every send; unsubscribe (a migrated opt-out list) blocks topic sends and broadcasts only, so topic-less POST /emails still delivers. An address already suppressed keeps its origin and reports its existing id.

cancel_broadcast

ChatGPT
Cancel a queued broadcast. Emails already sent are not recalled; the broadcast's sent_count says how many went out and canceled_remaining says how many were stopped.

cancel_email

ChatGPT
Cancel a scheduled email before it is sent.

create_broadcast

ChatGPT
Create a broadcast (bulk email to a segment or the whole audience). Saved as a draft unless send is true; send_broadcast sends a saved draft. A large audience is paced over days; the response's finishes_at and warning say when it finishes.

create_contact

ChatGPT
Create a contact in the team audience, optionally placing it in segments and setting topic subscriptions. Fails with 409 if the email already exists.

create_contact_batch

ChatGPT
Create up to 1000 contacts in one call. Each item has the same shape as create_contact. on_conflict decides what happens to an email that already belongs to a contact, or repeats inside the batch: error (default) counts it as a failed item, skip keeps the existing contact and reports its id, upsert merges names, properties, segments and topics into it (a batch never re-subscribes anyone). validation strict (default) is all-or-nothing: any failed item — invalid, conflicting, or naming an unknown segment or topic — rejects the whole batch with that item's status and nothing is written; permissive writes every item that succeeds and lists the failures in errors.

create_contact_property

ChatGPT
Define a custom contact property (key, type, optional fallback value).

create_domain

ChatGPT
Add a sending domain. region is optional: this deployment serves sa-east-1, us-east-1 (default sa-east-1) and refuses any other. A domain has one region, fixed when it is added. Returns the DNS records to create; the domain sends once they verify. Open and click tracking start off; open_tracking/click_tracking together with a tracking_subdomain set the domain up tracked in one call — its Tracking CNAME then comes back with the other records (same rules as update_domain).

create_segment

ChatGPT
Create a segment. With a filter it selects contacts dynamically; without one it is a manual membership list fed by add_contact_to_segment.

create_template

ChatGPT
Create an email template: name, html, optional subject, text and alias (a stable handle, unique per team). Live immediately. A template created with html opens in the dashboard's code mode and keeps its HTML byte for byte; converting it to blocks is the user's explicit choice there. from, reply_to and variables are not supported yet; passing them is a 422.

create_topic

ChatGPT
Create a subscription topic (name, description, default_subscription, visibility). Topic ids scope sends and broadcasts.

create_webhook

ChatGPT
Create a webhook endpoint subscribed to email events. MillionSend generates its Standard Webhooks signing secret, which these tools never return; the full secret is available by rotating it in the MillionSend dashboard or from the REST API (GET /webhooks/{id}).

delete_broadcast

ChatGPT
Delete a draft broadcast. Sent broadcasts cannot be deleted.

delete_contact

ChatGPT
Delete a contact and its segment memberships; its emails stay in the log. erase=true also scrubs the address from email history, event payloads and API logs (GDPR/LGPD). This cannot be undone.

delete_contact_property

ChatGPT
Delete a custom contact property definition.

delete_contacts

ChatGPT
Delete up to 1000 contacts in one call, by ids or by email addresses (exactly one of the two). Returns the contacts actually deleted; unknown ones are skipped. Emails stay in the log; erase=true also scrubs each address from email history, like delete_contact. This cannot be undone.

delete_domain

ChatGPT
Remove a sending domain and its SES identity. Sends from it stop immediately; this cannot be undone.

delete_segment

ChatGPT
Delete a segment. Its contacts remain in the audience.

delete_suppression

ChatGPT
Remove one suppression by id or email address; the address can receive email again.

delete_template

ChatGPT
Delete a template. Broadcasts keep their own copy of its content. This cannot be undone.

delete_topic

ChatGPT
Delete a subscription topic and the per-contact choices recorded for it.

delete_webhook

ChatGPT
Delete a webhook endpoint. Deliveries to it stop immediately.

get_broadcast

ChatGPT
Get one broadcast: audience, content, schedule and status.

get_contact

ChatGPT
Get one contact by id or email, including custom properties and global unsubscribe state.

get_contact_topics

ChatGPT
List every topic of the team with the contact's effective subscription (their explicit choice, else the topic's default) and whether it was explicit.

get_deliverability

ChatGPT
Get the team's deliverability standing over the trailing 30 days: a 0-10 headline score with band, content and outcome sub-scores, complaint and hard-bounce rates, and guardrail status. The score measures best-practice compliance and recipient outcomes for the account — it is NOT an inbox-placement probability. Per-email check results come from get_email_insights.

get_domain

ChatGPT
Get one sending domain with its DNS records (DKIM, MAIL FROM, DMARC, and the Tracking CNAME once a tracking subdomain is set) and per-record status. Only the DKIM and MAIL FROM (SPF) rows gate sending. The DMARC row is recommended, and reads verified when a parent-domain policy covers the subdomain (see inherited_from and policy). Each record's live field says what public DNS answers now; detail explains a pending or failed row.

get_email

ChatGPT
Get one email by id: sender, recipients, subject, body, schedule and delivery status (last_event: queued, sent, delivered, bounced, complained, ...).

get_email_insights

ChatGPT
Get the best-practice report for one email, computed when it was sent: per-check results (id, severity, pass/fail, points deducted) and a 0-10 score. The score measures compliance with sending best practices — it is NOT an inbox-placement probability. Each failing check describes what lowered the score.

get_segment

ChatGPT
Get one segment: its name and filter, or manual membership when it has no filter.

get_suppression

ChatGPT
Get one suppression by id or email address: its origin and the email that caused it.

get_template

ChatGPT
Get one template by id or alias, including its subject, html and text. Every save is live: there is no draft/publish cycle.

get_topic

ChatGPT
Get one subscription topic: name, description, default and visibility.

get_usage

ChatGPT
Get the team's plan name (plan), sending limits and usage: the send limit (emails_per_day or emails_per_month), domain limit and contact limit (limits.contacts, null when unlimited), emails accepted so far today (UTC) and when that counter resets, and on a monthly limit a period object with the period's emails_sent, included volume, whether sending past it is on and when the period ends. A self-hosted instance reports cloud=false with null plan, limits and period; the instance's own (system) team reports cloud=true with the same nulls.

get_webhook

ChatGPT
Get one webhook endpoint by id: URL, subscribed events and status. The signing secret is not returned by these tools; it is available by rotating it in the MillionSend dashboard or from the REST API.

list_api_keys

ChatGPT
List the team's active API keys: name, creation and last-used times. Tokens are never returned; a lost token means a new key.

list_broadcasts

ChatGPT
List broadcasts with their status (draft, scheduled, sending, sent).

list_contact_properties

ChatGPT
List the custom contact property definitions (key, type, fallback) usable on contacts and in templates.

list_contacts

ChatGPT
List contacts of the team, oldest first, with cursor pagination. segment_id limits the list to that segment's members; include=properties,topics attaches the typed property map and the topic subscriptions to every item.

list_domains

ChatGPT
List sending domains with verification status. Emails can only be sent from a verified domain.

list_emails

ChatGPT
List the team's transactional emails (sent, queued and scheduled), oldest first, with cursor pagination.

list_segments

ChatGPT
List segments (saved audience filters or manual contact lists) — the targets broadcasts are sent to.

list_suppressions

ChatGPT
List suppressed addresses — bounces, complaints and manual blocks that every send skips, plus unsubscribes that block topic sends and broadcasts only — oldest first, with cursor pagination. origin filters to one kind. Addresses erased for GDPR/LGPD are hidden here and reachable by id only.

list_templates

ChatGPT
List email templates (name, alias, timestamps), oldest first, with cursor pagination.

list_topics

ChatGPT
List subscription topics (newsletter, product updates, ...) contacts can opt in or out of; topic ids scope sends and broadcasts.

list_webhooks

ChatGPT
List webhook endpoints with their subscribed events and status (list rows never carry signing secrets).

remove_contact_from_segment

ChatGPT
Remove a contact from a manual segment. The contact itself is kept.

remove_suppressions

ChatGPT
Unblock up to 1000 addresses in one call, by emails or by ids (exactly one of the two). Returns only the rows actually removed.

revoke_api_key

ChatGPT
Revoke an API key. Requests carrying it fail from now on; this cannot be undone.

send_broadcast

ChatGPT
Send a draft broadcast now, or schedule it with scheduled_at. Recipients are resolved at send time; unsubscribed and topic-opted-out contacts are skipped. A large audience is paced over days; the response's finishes_at and warning say when it finishes.

send_email

ChatGPT
Send a transactional email (or schedule it with scheduled_at). Suppressed and topic-opted-out recipients are skipped automatically. Returns the email id. Each call is a new send: repeating it delivers the email again.

send_email_batch

ChatGPT
Send up to 100 emails in one call; each entry has the same shape as send_email. Returns one id per accepted email. Each call is a new send: repeating it delivers every email again.

update_broadcast

ChatGPT
Update a draft broadcast's audience, content or subject.

update_contact

ChatGPT
Update a contact's name, custom properties or global unsubscribe flag. Omitted fields are left unchanged.

update_contact_property

ChatGPT
Update a custom contact property definition.

update_contact_topics

ChatGPT
Set a contact's per-topic subscription choices. Topics not listed are left unchanged.

update_domain

ChatGPT
Change a domain's open/click tracking. Tracking is served from the domain's own tracking subdomain: tracking_subdomain (a label such as "links") sets it, and the returned records include its CNAME; links are tracked through it once that CNAME resolves (verify_domain re-checks it). On MillionSend Cloud, turning tracking on without a subdomain is refused.

update_email

ChatGPT
Reschedule a scheduled email that has not been sent yet.

update_segment

ChatGPT
Rename a segment or change its filter (null clears the filter, making it manual).

update_template

ChatGPT
Change a template's name, subject, html, text or alias (null clears the alias). Omitted fields are left unchanged; the change is live immediately. Writing html makes the template html-authored: it opens in the dashboard's code mode and keeps its HTML byte for byte; converting it to blocks is the user's explicit choice there.

update_topic

ChatGPT
Update a topic's name, description or visibility. The default subscription is immutable.

update_webhook

ChatGPT
Update a webhook's endpoint URL, subscribed events, or enabled/disabled status.

verify_domain

ChatGPT
Re-check a domain's DNS records and SES verification, returning the domain with fresh per-record status. Only the DKIM and MAIL FROM (SPF) rows gate sending. The DMARC row is recommended, and reads verified when a parent-domain policy covers the subdomain (see inherited_from and policy). Each record's live field says what public DNS answers now; detail explains a pending or failed row.

Capabilities

Writes

Example Prompts

Click any prompt to copy it.

Similar Apps