EmailMCP
Measured conclusion: Deep-tested. L2 outcome: tools_ok.
AI agent email — 23 tools free to read inbox, 28 paid to send. $9.99/mo. Token auto-provisioned.
| Author | io.setip |
|---|---|
| Access | remote |
| Publisher key required | No |
| Measured state | Deep-tested |
| L1 liveness | alive |
| L1 latency | 173 ms |
| Last measured | 2026-10-24 |
Add to your agent
Copy this into your MCP client config:
{
"mcpServers": {
"EmailMCP": {
"url": "https://mcp.setip.io/mcp",
"transport": "streamable-http"
}
}
}
Measured tools (56)
send_emailSend an email with text or HTML content
Parameters:
to(required) — array — Array of recipient email addressessubject(required) — string — Email subject linetext(required) — string — Plain text content of the emailcc— array — Array of CC recipient email addressesbcc— array — Array of BCC recipient email addressesfrom— string — Personal account address to send from. If set and matching account has personal SMTP/IMAP credentials (via set_personal_email_credentials), sends via that account and IMAP-APPENDs a copy to its Sent folder. If exactly one personal account exists and from is omitted, it is used. If multiple personal accounts exist and from is omitted, the call errors and lists choices.html— string — HTML content of the emailprovider— string — Send via a specific provider instead of the default (e.g. smtp, mailgun, sendgrid, ses, gmail, resend). Requires that provider's credentials in env.bulk_mode— string — Required when sending to multiple recipients. "individual": sends a separate email to each recipient (safest). "bcc": puts first recipient in TO:, rest in BCC. "to": puts all in TO: (exposes addresses — use only when intended, e.g. team threads).attachments— array — Array of file attachments
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
send_template_emailSend an email using a predefined template
Parameters:
to(required) — array — Array of recipient email addressestemplate(required) — string — Template name or pathsubject— string — Email subject (can override template subject)provider— string — Send via a specific provider instead of the default (e.g. smtp, mailgun, sendgrid, ses, gmail, resend)bulk_mode— string — Required when sending to multiple recipients. "individual": sends a separate email to each recipient (safest). "bcc": puts first recipient in TO:, rest in BCC. "to": puts all in TO: (exposes addresses — use only when intended).variables— object — Template variables to replace
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
validate_emailValidate email addresses and check deliverability
Parameters:
emails(required) — array — Array of email addresses to validatecheck_mx— boolean — Check MX records for domaincheck_smtp— boolean — Perform SMTP validation
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
get_email_usageGet email usage statistics — delivery rate, bounce rate, per-domain breakdown, top bounce reasons. Reads from persistent stats.
Parameters:
domain— string — Filter stats by domainperiod— string — Time period for usage statisticsaccount— string — Filter stats by account address
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
verify_email_setupVerify IP whitelisting and email provider configuration
Parameters:
provider(required) — string — Email provider to verify, or "all" for all configured providersdomain— string — Domain to check for DNS records (required if include_dns is true)test_email— string — Optional test email address to verify deliveryinclude_dns— boolean — Include DNS record verification
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
list_email_accountsList all configured IMAP email accounts. Shows default and named accounts (work, personal, etc.).
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
read_inboxRead emails from an inbox via IMAP with filtering options. If IMAP is configured in .env, no credentials needed. Use "account" to pick a named account (work, personal, etc.).
Parameters:
filter— objectaccount— string — Named account to read from (e.g. "work", "personal"). Omit for default account.options— objectimap_config— object — Optional if IMAP is configured in .env (IMAP_HOST, IMAP_EMAIL, IMAP_PASSWORD)
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
get_mailbox_statusGet status information for an email mailbox. If IMAP is configured in .env, no credentials needed. Use "account" to pick a named account.
Parameters:
account— string — Named account (e.g. "work", "personal"). Omit for default.mailbox— string — Mailbox to checkimap_config— object
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
list_mailboxesList all available mailboxes for an email account. If IMAP is configured in .env, no credentials needed. Use "account" to pick a named account.
Parameters:
account— string — Named account (e.g. "work", "personal"). Omit for default.imap_config— object
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
start_smtp_receiverStart the SMTP server to receive forwarded corporate emails
Parameters:
port— number — Port to listen on (default: 2525)enableThreading— boolean — Enable conversation threadingreceivingDomains— array — Domains to accept emails for (empty = accept all)allowedForwarders— array — IP addresses allowed to forward emails (empty = allow all)
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
stop_smtp_receiverStop the SMTP forward receiver server
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
get_smtp_receiver_statusGet the current status of the SMTP forward receiver
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
get_forwarded_emailsRetrieve forwarded emails with optional filtering
Parameters:
limit— number — Maximum number of emails to returnsince— string — Filter emails since this date (ISO string)threadId— string — Filter by conversation thread IDoriginalSender— string — Filter by original sender email address
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
get_conversation_threadsGet conversation threads with forwarded emails
Parameters:
limit— number — Maximum number of threads to returnsince— string — Filter threads active since this date (ISO string)subject— string — Filter threads by subject contentparticipant— string — Filter threads by participant email address
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
get_conversation_contextGet full conversation context for a specific thread
Parameters:
threadId(required) — string — Thread ID to get conversation formaxEmails— number — Maximum number of emails to include in context
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
get_threads_for_senderGet all conversation threads involving a specific sender
Parameters:
senderAddress(required) — string — Email address of the sender
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
check_email_configCheck if email providers are configured, guide setup if needed
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
configure_mailgunConfigure Mailgun email provider with step-by-step guidance
Parameters:
api_key(required) — string — Mailgun API Key (starts with "key-")domain(required) — string — Mailgun domain (e.g., mg.yourdomain.com)from_email(required) — string — From email address (e.g., [email protected])
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
test_email_configTest email configuration by sending a test email
Parameters:
test_email— string — Email address to send test email to (optional, defaults to from_email)
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
create_mailboxCreate a new local mailbox for receiving email (autonomous mode). Each address gets its own inbox accessible via MCP tools.
Parameters:
address(required) — string — Email address for the mailbox (e.g. [email protected])display_name— string — Display name for the mailbox
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
delete_mailboxDelete a local mailbox and all its stored emails (autonomous mode)
Parameters:
address(required) — string — Email address of the mailbox to delete
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
list_local_mailboxesList all local mailboxes on this server (autonomous mode)
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
request_email_ipRequest a dedicated WireGuard IP for email sending. Submits to the provisioning queue.
Parameters:
email_domain(required) — string — Your email domain (e.g. company.com)account_id— string — Optional account identifier
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
check_ip_statusCheck the status of a pending WireGuard IP provisioning request
Parameters:
request_id— string — Request ID from request_email_ip (omit to check saved request)
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
get_dns_recordsGenerate all required DNS records (A, MX, SPF, DKIM, DMARC) for autonomous email. Outputs copyable records for your DNS provider.
Parameters:
domain(required) — string — Your email domain (e.g. company.com)ipv4(required) — string — Your dedicated IPv4 address (from WireGuard provisioning)dmarc_policy— string — DMARC policy (default: reject)dkim_selector— string — DKIM selector (default: emailmcp)mail_hostname— string — Mail server hostname (default: mail.domain)
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
verify_autonomous_setupVerify that autonomous email is properly configured: DNS records, DKIM, SMTP send/receive
Parameters:
domain(required) — string — Your email domain to verify
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
setup_autonomous_securityAuto-configure DKIM, SPF, and DMARC for autonomous email. Generates DKIM keys, creates DNS records, and outputs everything needed.
Parameters:
domain(required) — string — Your email domainipv4(required) — string — Your dedicated IPv4 addressdmarc_policy— string — DMARC policy (default: reject)dkim_selector— string — DKIM selector (default: emailmcp)
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
create_email_ruleCreate a rule that triggers actions when incoming emails match conditions. Actions: forward, auto_reply, webhook, flag, move, mcp_tool, log, reject.
Parameters:
name(required) — string — Rule name (unique)match(required) — object — Match conditions (ALL must match). Use from, domain, subject, subject_regex, body_contains, has_attachments, to, header.actions(required) — array — Actions to execute when rule matchesstop— boolean — Stop processing further rules after this one matches (default: false)priority— number — Priority (lower = evaluated first, default 100)description— string — What this rule does
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
list_email_rulesList all email rules with their match conditions, actions, and hit counts
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
delete_email_ruleDelete an email rule by ID
Parameters:
rule_id(required) — string — Rule ID to delete
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
update_email_ruleUpdate an existing email rule (enable/disable, change match/actions/priority)
Parameters:
rule_id(required) — string — Rule ID to updatestop— boolean — Stop after matchmatch— object — New match conditionsactions— array — New actionsenabled— boolean — Enable or disable the rulepriority— number — New priority
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
start_idle_watchStart real-time IMAP IDLE watching on email accounts. Get push notifications when new emails arrive. Works with Gmail, iCloud, Office365, etc.
Parameters:
account— string — Account name to watch (e.g. "work", "personal"). Omit to watch all configured accounts.
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
stop_idle_watchStop IMAP IDLE watching on an account (or all accounts)
Parameters:
account— string — Account to stop watching. Omit to stop all.
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
get_idle_statusGet status of IMAP IDLE watchers — which accounts are being watched, connection status, new email counts
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
provision_startPhase 1: Create a cloud VPS with dedicated IP. Generates WireGuard config. Returns the IP and instructions to connect. Supports DigitalOcean, Vultr, Hetzner, OVH.
Parameters:
cloud_provider(required) — string — Cloud providercloud_api_key(required) — string — Cloud provider API keyservice_domain(required) — string — Domain you own for the email service (e.g. emailrelay.xyz). NS will point here.region— string — Cloud region (e.g. nyc1, ewr, nbg1, GRA11). Omit for default.
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
provision_resumeResume provisioning from where you left off. Automatically detects the current phase and advances: WireGuard connection → DNS setup → TLS → verification. Run this after each user action (connecting WireGuard, adding DNS records).
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
provision_statusShow current provisioning state — which phases are complete, what to do next
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
list_cloud_providersList supported cloud providers with pricing, regions, and PTR support info
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
start_health_monitorStart monitoring the provisioned email server — checks tunnel, SMTP, DNS, and IP reputation every 60 seconds. Auto-restarts on failure.
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
get_health_statusGet current health status of the email server — tunnel, SMTP, DNS, IP blocklist checks
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
add_sending_domainAdd a customer sending domain. Generates DKIM keys and returns the 4 DNS records the customer needs to add. Works like SendGrid domain authentication — self-hosted.
Parameters:
domain(required) — string — Customer domain (e.g. company.com)
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
list_sending_domainsList all configured sending domains with their verification status
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
remove_sending_domainRemove a sending domain and its DKIM keys
Parameters:
domain(required) — string — Customer domain to remove
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
get_domain_dns_recordsGet the DNS records a customer needs to add for a sending domain
Parameters:
domain(required) — string — Customer domain
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
regenerate_zone_fileRegenerate the complete DNS zone file for the service domain including all customer subdomains. Use after adding/removing domains.
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
create_email_accountCreate an email account with SMTP credentials. Returns SMTP password once — save it. The account can then send/receive via this server.
Parameters:
address(required) — string — Email address (e.g. [email protected])domain— string — Sending domain (auto-derived from address if omitted)display_name— string — Display name for the account
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
delete_email_accountDelete an email account and revoke its SMTP credentials
Parameters:
address(required) — string — Email address of the account to delete
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
list_email_accounts_managedList all email accounts with SMTP credentials (optionally filtered by domain)
Parameters:
domain— string — Filter by domain
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
reset_account_passwordReset the SMTP password for an email account. Returns new password once.
Parameters:
address(required) — string — Email address of the account
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
start_domain_verificationBegin a domain-verification window: temporarily set the target domain's MX to verify.setip.io, start (or reuse) the EmailMCP SMTP receiver on :25, and forward any inbound mail for *@domain to forward_to so a human can grab a verification code from the provider (Apple/Google/etc). Auto-tears down after ttl_minutes.
Parameters:
domain(required) — string — Domain whose MX is being temporarily redirected (must be a POC we own in setipio-api)forward_to(required) — string — Address where verification mails are relayed in real timettl_minutes— number — Auto-teardown after this many minutes (default 60)real_mx_target— string — Optional. If provided, on teardown the MX is set to this target (e.g. apple.com) instead of restoring the pre-window snapshot.
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
stop_domain_verificationTear down an active domain-verification window: restore MX (snapshot or supplied real_mx_target), remove the per-domain forwarder. Stops the receiver if no other windows remain.
Parameters:
domain(required) — string — Domain to tear downreal_mx_target— string — Optional final MX target (e.g. apple.com). Overrides the snapshot restore.
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
get_domain_verification_statusShow active verification windows, the receiver state, and TTLs.
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
get_domain_verification_emailsList mails received in the verification window for a given domain (e.g. to find Apple's verification code without checking the forward_to mailbox).
Parameters:
domain(required) — string — Domain to filter on
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
set_personal_email_credentialsAttach a personal account's own SMTP + IMAP credentials (iCloud, Gmail app password, Fastmail, Office365, etc.) to an existing account. Once set, send_email with from=<address> sends via that SMTP and IMAP-APPENDs a copy to its Sent folder. Passwords are AES-256-GCM encrypted at rest with EMAILMCP_SECRET.
Parameters:
address(required) — string — Address of the existing account (must already be created via create_email_account)smtp_host(required) — string — e.g. smtp.mail.me.com (iCloud), smtp.gmail.com, smtp.fastmail.comsmtp_user(required) — string — SMTP username — usually the full email addresssmtp_password(required) — string — SMTP password or app-specific passwordimap_host(required) — string — e.g. imap.mail.me.com, imap.gmail.com, imap.fastmail.comimap_user(required) — string — IMAP username — usually the full email addressimap_password(required) — string — IMAP password (often same as SMTP)imap_port— number — Default 993smtp_port— number — Default 587sent_folder— string — Override Sent folder name. Auto-discovered via SPECIAL-USE if omitted.
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
get_suppression_listView all addresses on the bounce suppression list — these addresses will be rejected on send
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
remove_from_suppressionRemove an address from the bounce suppression list (manual override to allow sending again)
Parameters:
address(required) — string — Email address to unblock
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
Measured by MCPYP probing. Untested fields are omitted, never estimated. Listing is always free; MCPYP never proxies calls or stores user tokens.