# EmailMCP (remote · mcp.setip.io)

AI agent email — 23 tools free to read inbox, 28 paid to send. $9.99/mo. Token auto-provisioned.

- Trust score: 79/100 (medium)
- Change this week: +9
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-08-03

## Components

- remote · `mcp.setip.io`: 79/100 (this document), [markdown](https://verifymcp.io/servers/io-setip-emailmcp/mcp.md), [page](https://verifymcp.io/servers/io-setip-emailmcp/mcp)

## Channel facts

- Endpoint: `https://mcp.setip.io/mcp`
- Transports: `streamable-http`
- Auth: `none`
- Version: `1.0.1`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-08-03.

- **Endpoint Security**: 89/100
  - The endpoint's TLS certificate is valid, in date, and uses a strong key.
  - Authorisation is enforced on tool calls, but the challenge carries no valid RFC 9728 metadata, so a client cannot discover where to get a token.
  - HTTPS is enforced; there's no plaintext access path.
  - The HSTS (Strict-Transport-Security) header is present.
  - DNSSEC check failed: this domain isn't protected by DNSSEC.
- **Transport & Reachability**: 100/100
  - Verified streamable-http transport via a live MCP handshake.
- **Schema Quality & AI Usability**: 71/100
  - AI-judged instruction clarity (good).
  - Tool/resource definitions use about 3724 tokens (~66/item across 56 items; 56 tools + 0 resources), lean.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 27/100
  - Stability observed for 8 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 99/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 97% of tool parameters carry a description.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

## Install

### Claude

```bash
claude mcp add --transport http io-setip-emailmcp https://mcp.setip.io/mcp
```

### Codex

```toml
[mcp_servers.io-setip-emailmcp]
url = "https://mcp.setip.io/mcp"
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "io-setip-emailmcp": {
      "type": "remote",
      "url": "https://mcp.setip.io/mcp",
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add io-setip-emailmcp --url https://mcp.setip.io/mcp --transport streamable-http
```

### Hermes

```yaml
mcp_servers:
  io-setip-emailmcp:
    url: "https://mcp.setip.io/mcp"
```

### Other

```json
{
  "mcpServers": {
    "io-setip-emailmcp": {
      "type": "http",
      "url": "https://mcp.setip.io/mcp"
    }
  }
}
```

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-08-03 (score 79, +1)

No change was recorded against any check on this day. Stability & Change Management went from 23 to 27. That category is still filling its 30-day observation window: 7 days of observed history at the previous scan, 8 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-08-01 (score 78, +1)

No change was recorded against any check on this day. Stability & Change Management went from 17 to 20. That category is still filling its 30-day observation window: 5 days of observed history at the previous scan, 6 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-07-31 (score 77, +5)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-30 (score 72, 0)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-29 (score 72, +1)

No change was recorded against any check on this day. Stability & Change Management went from 7 to 10. That category is still filling its 30-day observation window: 2 days of observed history at the previous scan, 3 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-07-28 (score 71, +1)

No change was recorded against any check on this day. Stability & Change Management went from 3 to 7. That category is still filling its 30-day observation window: 1 days of observed history at the previous scan, 2 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-07-27 (score 70, 0)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-26 (score 70)

First indexed and scored.

## MCP tools (56)

### `send_email` (~294 tokens)

Send an email with text or HTML content

Input parameters:

- `attachments` (array): Array of file attachments
- `bcc` (array): Array of BCC recipient email addresses
- `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 addresse…
- `cc` (array): Array of CC recipient email addresses
- `from` (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…
- `html` (string): HTML content of the email
- `provider` (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.
- `subject` (string, required): Email subject line
- `text` (string, required): Plain text content of the email
- `to` (array, required): Array of recipient email addresses

### `send_template_email` (~159 tokens)

Send an email using a predefined template

Input parameters:

- `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 addresse…
- `provider` (string): Send via a specific provider instead of the default (e.g. smtp, mailgun, sendgrid, ses, gmail, resend)
- `subject` (string): Email subject (can override template subject)
- `template` (string, required): Template name or path
- `to` (array, required): Array of recipient email addresses
- `variables` (object): Template variables to replace

### `validate_email` (~55 tokens)

Validate email addresses and check deliverability

Input parameters:

- `check_mx` (boolean): Check MX records for domain
- `check_smtp` (boolean): Perform SMTP validation
- `emails` (array, required): Array of email addresses to validate

### `get_email_usage` (~68 tokens)

Get email usage statistics — delivery rate, bounce rate, per-domain breakdown, top bounce reasons. Reads from persistent stats.

Input parameters:

- `account` (string): Filter stats by account address
- `domain` (string): Filter stats by domain
- `period` (string): Time period for usage statistics

### `verify_email_setup` (~86 tokens)

Verify IP whitelisting and email provider configuration

Input parameters:

- `domain` (string): Domain to check for DNS records (required if include_dns is true)
- `include_dns` (boolean): Include DNS record verification
- `provider` (string, required): Email provider to verify, or "all" for all configured providers
- `test_email` (string): Optional test email address to verify delivery

### `list_email_accounts` (~29 tokens)

List all configured IMAP email accounts. Shows default and named accounts (work, personal, etc.).

### `read_inbox` (~121 tokens)

Read 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.).

Input parameters:

- `account` (string): Named account to read from (e.g. "work", "personal"). Omit for default account.
- `filter` (object)
- `imap_config` (object): Optional if IMAP is configured in .env (IMAP_HOST, IMAP_EMAIL, IMAP_PASSWORD)
- `options` (object)

### `get_mailbox_status` (~84 tokens)

Get status information for an email mailbox. If IMAP is configured in .env, no credentials needed. Use "account" to pick a named account.

Input parameters:

- `account` (string): Named account (e.g. "work", "personal"). Omit for default.
- `imap_config` (object)
- `mailbox` (string): Mailbox to check

### `list_mailboxes` (~74 tokens)

List all available mailboxes for an email account. If IMAP is configured in .env, no credentials needed. Use "account" to pick a named account.

Input parameters:

- `account` (string): Named account (e.g. "work", "personal"). Omit for default.
- `imap_config` (object)

### `start_smtp_receiver` (~87 tokens)

Start the SMTP server to receive forwarded corporate emails

Input parameters:

- `allowedForwarders` (array): IP addresses allowed to forward emails (empty = allow all)
- `enableThreading` (boolean): Enable conversation threading
- `port` (number): Port to listen on (default: 2525)
- `receivingDomains` (array): Domains to accept emails for (empty = accept all)

### `stop_smtp_receiver` (~17 tokens)

Stop the SMTP forward receiver server

### `get_smtp_receiver_status` (~21 tokens)

Get the current status of the SMTP forward receiver

### `get_forwarded_emails` (~73 tokens)

Retrieve forwarded emails with optional filtering

Input parameters:

- `limit` (number): Maximum number of emails to return
- `originalSender` (string): Filter by original sender email address
- `since` (string): Filter emails since this date (ISO string)
- `threadId` (string): Filter by conversation thread ID

### `get_conversation_threads` (~71 tokens)

Get conversation threads with forwarded emails

Input parameters:

- `limit` (number): Maximum number of threads to return
- `participant` (string): Filter threads by participant email address
- `since` (string): Filter threads active since this date (ISO string)
- `subject` (string): Filter threads by subject content

### `get_conversation_context` (~49 tokens)

Get full conversation context for a specific thread

Input parameters:

- `maxEmails` (number): Maximum number of emails to include in context
- `threadId` (string, required): Thread ID to get conversation for

### `get_threads_for_sender` (~32 tokens)

Get all conversation threads involving a specific sender

Input parameters:

- `senderAddress` (string, required): Email address of the sender

### `check_email_config` (~21 tokens)

Check if email providers are configured, guide setup if needed

### `configure_mailgun` (~78 tokens)

Configure Mailgun email provider with step-by-step guidance

Input parameters:

- `api_key` (string, required): Mailgun API Key (starts with "key-")
- `domain` (string, required): Mailgun domain (e.g., mg.yourdomain.com)
- `from_email` (string, required): From email address (e.g., noreply@yourdomain.com)

### `test_email_config` (~40 tokens)

Test email configuration by sending a test email

Input parameters:

- `test_email` (string): Email address to send test email to (optional, defaults to from_email)

### `create_mailbox` (~66 tokens)

Create a new local mailbox for receiving email (autonomous mode). Each address gets its own inbox accessible via MCP tools.

Input parameters:

- `address` (string, required): Email address for the mailbox (e.g. sales@company.com)
- `display_name` (string): Display name for the mailbox

### `delete_mailbox` (~37 tokens)

Delete a local mailbox and all its stored emails (autonomous mode)

Input parameters:

- `address` (string, required): Email address of the mailbox to delete

### `list_local_mailboxes` (~23 tokens)

List all local mailboxes on this server (autonomous mode)

### `request_email_ip` (~54 tokens)

Request a dedicated WireGuard IP for email sending. Submits to the provisioning queue.

Input parameters:

- `account_id` (string): Optional account identifier
- `email_domain` (string, required): Your email domain (e.g. company.com)

### `check_ip_status` (~41 tokens)

Check the status of a pending WireGuard IP provisioning request

Input parameters:

- `request_id` (string): Request ID from request_email_ip (omit to check saved request)

### `get_dns_records` (~125 tokens)

Generate all required DNS records (A, MX, SPF, DKIM, DMARC) for autonomous email. Outputs copyable records for your DNS provider.

Input parameters:

- `dkim_selector` (string): DKIM selector (default: emailmcp)
- `dmarc_policy` (string): DMARC policy (default: reject)
- `domain` (string, required): Your email domain (e.g. company.com)
- `ipv4` (string, required): Your dedicated IPv4 address (from WireGuard provisioning)
- `mail_hostname` (string): Mail server hostname (default: mail.domain)

### `verify_autonomous_setup` (~41 tokens)

Verify that autonomous email is properly configured: DNS records, DKIM, SMTP send/receive

Input parameters:

- `domain` (string, required): Your email domain to verify

### `setup_autonomous_security` (~97 tokens)

Auto-configure DKIM, SPF, and DMARC for autonomous email. Generates DKIM keys, creates DNS records, and outputs everything needed.

Input parameters:

- `dkim_selector` (string): DKIM selector (default: emailmcp)
- `dmarc_policy` (string): DMARC policy (default: reject)
- `domain` (string, required): Your email domain
- `ipv4` (string, required): Your dedicated IPv4 address

### `create_email_rule` (~147 tokens)

Create a rule that triggers actions when incoming emails match conditions. Actions: forward, auto_reply, webhook, flag, move, mcp_tool, log, reject.

Input parameters:

- `actions` (array, required): Actions to execute when rule matches
- `description` (string): What this rule does
- `match` (object, required): Match conditions (ALL must match). Use from, domain, subject, subject_regex, body_contains, has_attachments, to, header.
- `name` (string, required): Rule name (unique)
- `priority` (number): Priority (lower = evaluated first, default 100)
- `stop` (boolean): Stop processing further rules after this one matches (default: false)

### `list_email_rules` (~24 tokens)

List all email rules with their match conditions, actions, and hit counts

### `delete_email_rule` (~28 tokens)

Delete an email rule by ID

Input parameters:

- `rule_id` (string, required): Rule ID to delete

### `update_email_rule` (~87 tokens)

Update an existing email rule (enable/disable, change match/actions/priority)

Input parameters:

- `actions` (array): New actions
- `enabled` (boolean): Enable or disable the rule
- `match` (object): New match conditions
- `priority` (number): New priority
- `rule_id` (string, required): Rule ID to update
- `stop` (boolean): Stop after match

### `start_idle_watch` (~69 tokens)

Start real-time IMAP IDLE watching on email accounts. Get push notifications when new emails arrive. Works with Gmail, iCloud, Office365, etc.

Input parameters:

- `account` (string): Account name to watch (e.g. "work", "personal"). Omit to watch all configured accounts.

### `stop_idle_watch` (~40 tokens)

Stop IMAP IDLE watching on an account (or all accounts)

Input parameters:

- `account` (string): Account to stop watching. Omit to stop all.

### `get_idle_status` (~31 tokens)

Get status of IMAP IDLE watchers — which accounts are being watched, connection status, new email counts

### `provision_start` (~129 tokens)

Phase 1: Create a cloud VPS with dedicated IP. Generates WireGuard config. Returns the IP and instructions to connect. Supports DigitalOcean, Vultr, Hetzner, OVH.

Input parameters:

- `cloud_api_key` (string, required): Cloud provider API key
- `cloud_provider` (string, required): Cloud provider
- `region` (string): Cloud region (e.g. nyc1, ewr, nbg1, GRA11). Omit for default.
- `service_domain` (string, required): Domain you own for the email service (e.g. emailrelay.xyz). NS will point here.

### `provision_resume` (~50 tokens)

Resume 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).

### `provision_status` (~23 tokens)

Show current provisioning state — which phases are complete, what to do next

### `list_cloud_providers` (~24 tokens)

List supported cloud providers with pricing, regions, and PTR support info

### `start_health_monitor` (~38 tokens)

Start monitoring the provisioned email server — checks tunnel, SMTP, DNS, and IP reputation every 60 seconds. Auto-restarts on failure.

### `get_health_status` (~29 tokens)

Get current health status of the email server — tunnel, SMTP, DNS, IP blocklist checks

### `add_sending_domain` (~59 tokens)

Add 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.

Input parameters:

- `domain` (string, required): Customer domain (e.g. company.com)

### `list_sending_domains` (~20 tokens)

List all configured sending domains with their verification status

### `remove_sending_domain` (~31 tokens)

Remove a sending domain and its DKIM keys

Input parameters:

- `domain` (string, required): Customer domain to remove

### `get_domain_dns_records` (~33 tokens)

Get the DNS records a customer needs to add for a sending domain

Input parameters:

- `domain` (string, required): Customer domain

### `regenerate_zone_file` (~33 tokens)

Regenerate the complete DNS zone file for the service domain including all customer subdomains. Use after adding/removing domains.

### `create_email_account` (~82 tokens)

Create an email account with SMTP credentials. Returns SMTP password once — save it. The account can then send/receive via this server.

Input parameters:

- `address` (string, required): Email address (e.g. sales@company.com)
- `display_name` (string): Display name for the account
- `domain` (string): Sending domain (auto-derived from address if omitted)

### `delete_email_account` (~33 tokens)

Delete an email account and revoke its SMTP credentials

Input parameters:

- `address` (string, required): Email address of the account to delete

### `list_email_accounts_managed` (~35 tokens)

List all email accounts with SMTP credentials (optionally filtered by domain)

Input parameters:

- `domain` (string): Filter by domain

### `reset_account_password` (~35 tokens)

Reset the SMTP password for an email account. Returns new password once.

Input parameters:

- `address` (string, required): Email address of the account

### `start_domain_verification` (~183 tokens)

Begin 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.

Input parameters:

- `domain` (string, required): Domain whose MX is being temporarily redirected (must be a POC we own in setipio-api)
- `forward_to` (string, required): Address where verification mails are relayed in real time
- `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.
- `ttl_minutes` (number): Auto-teardown after this many minutes (default 60)

### `stop_domain_verification` (~82 tokens)

Tear 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.

Input parameters:

- `domain` (string, required): Domain to tear down
- `real_mx_target` (string): Optional final MX target (e.g. apple.com). Overrides the snapshot restore.

### `get_domain_verification_status` (~24 tokens)

Show active verification windows, the receiver state, and TTLs.

### `get_domain_verification_emails` (~50 tokens)

List mails received in the verification window for a given domain (e.g. to find Apple's verification code without checking the forward_to mailbox).

Input parameters:

- `domain` (string, required): Domain to filter on

### `set_personal_email_credentials` (~274 tokens)

Attach 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.

Input parameters:

- `address` (string, required): Address of the existing account (must already be created via create_email_account)
- `imap_host` (string, required): e.g. imap.mail.me.com, imap.gmail.com, imap.fastmail.com
- `imap_password` (string, required): IMAP password (often same as SMTP)
- `imap_port` (number): Default 993
- `imap_user` (string, required): IMAP username — usually the full email address
- `sent_folder` (string): Override Sent folder name. Auto-discovered via SPECIAL-USE if omitted.
- `smtp_host` (string, required): e.g. smtp.mail.me.com (iCloud), smtp.gmail.com, smtp.fastmail.com
- `smtp_password` (string, required): SMTP password or app-specific password
- `smtp_port` (number): Default 587
- `smtp_user` (string, required): SMTP username — usually the full email address

### `get_suppression_list` (~28 tokens)

View all addresses on the bounce suppression list — these addresses will be rejected on send

### `remove_from_suppression` (~38 tokens)

Remove an address from the bounce suppression list (manual override to allow sending again)

Input parameters:

- `address` (string, required): Email address to unblock

## Diagnostics

Captured diagnostic sections: TLS, DNSSEC, Authorisation, Transports. The full working is on the page: https://verifymcp.io/servers/io-setip-emailmcp/mcp#diagnostics

## Score history

- 2026-08-03: 79
- 2026-08-02: 78
- 2026-08-01: 78
- 2026-07-31: 77
- 2026-07-30: 72
- 2026-07-29: 72
- 2026-07-28: 71
- 2026-07-27: 70
- 2026-07-26: 70

## Links

- Remote endpoint: https://mcp.setip.io/mcp
- Repository: https://github.com/nfodor/emailmcp
- Changelog RSS feed: https://verifymcp.io/servers/io-setip-emailmcp/mcp/changelog.xml
- Changelog JSON feed: https://verifymcp.io/servers/io-setip-emailmcp/mcp/changelog.json
- HTML version of this page: https://verifymcp.io/servers/io-setip-emailmcp/mcp
