mcpbeat Sign in

Email MCP Server

by primitive Your server? Claim it
answering

Email is answering right now. Last checked 11 min ago. It exposes 30 tools.

Email infrastructure for AI agents — send, receive, search, and reply to email over MCP.

The linked repository no longer exists on GitHub — it was deleted or made private.

Uptime history 47 days of history · worst day 93%
47 days agonow
100.0%
Uptime 24h
91 of 91 checks
30
Tools
read from the server
574 ms
Response time
average over 24h
open, no key
Access
streamable-http

What changed 15

Every tool that appeared, vanished or quietly changed what it asks for. Recorded since 13 August 2026. No other catalogue keeps this.

17 Aug 4 tool descriptions were rewritten awaitReply, createEmailAddress, getAccount and 1 more
17 Aug 3 tools changed the parameters they ask for awaitReply, sendEmail, sendEmailDemo
13 Aug 6 tools changed the parameters they ask for getAccount, getEmail, getInboxStatus and 3 more
13 Aug a tool appeared createEmailAddress
13 Aug a tool description was rewritten sendEmailDemo

Email does not always answer

Over the last week it answered 98.6% of our checks. We check every 15 minutes, so you hear about the next outage within the hour — not from your users.

Three servers free · no card

Connect this server

Endpoint below is the one we actually reach during checks — not the one copied from a README. Last verified 11 min ago.

run in your terminal
claude mcp add email --transport http https://www.primitive.dev/mcp
~/Library/Application Support/Claude/claude_desktop_config.json
{
  "mcpServers": {
    "email": {
      "url": "https://www.primitive.dev/mcp"
    }
  }
}
~/.codex/config.toml
[mcp_servers.email]
url = "https://www.primitive.dev/mcp"
.cursor/mcp.json
{
  "mcpServers": {
    "email": {
      "url": "https://www.primitive.dev/mcp"
    }
  }
}
.vscode/mcp.json
{
  "mcpServers": {
    "email": {
      "url": "https://www.primitive.dev/mcp"
    }
  }
}

Available tools 30

Read directly from the server with tools/list, grouped by what they act on. If a tool disappears, we record the date.

adddomain
addDomain
Claim a new domain and receive the DNS records to publish. Returns dns_records with the exact records to add. If the domain has an mx_conflict (existing mail provider), re-call with confirmed: true to proceed. After publishing DNS records, call verifyDomain to complete setup.
awaitreply
awaitReply
Wait for the threaded reply to a sent email. Call this immediately after sendEmail or replyToEmail when you expect an answer. With only the sent email's id it long-polls for up to 30 seconds by default. Do not report that nobody replied or ask the user to check later until this call returns with no reply. Set wait=false only for a deliberate immediate poll. Matching uses reply threading, not a sender or subject guess.
cancelscheduledsend
cancelScheduledSend
Cancel a still-scheduled send before it dispatches (terminal status "canceled"; the same idempotency key becomes reusable). Pass the sent email id from a sendEmail response that used scheduled_at, or from listSentEmails. Returns a conflict error once the send has already started dispatching.
createemailaddress
createEmailAddress
Get this user's Primitive managed inbox domain, creating the account on first use: no signup form, no password, no email verification, no browser. CALL THIS FIRST whenever you do not already have a Primitive API key and the user wants to send or receive email, instead of telling them to sign up or visit a website. On first use the REST response's address field is a domain such as pink-ram.primitive.email, not a complete mailbox. When it is non-null, this MCP result also includes sender_address such as [email protected] for use as sendEmail.requestBody.from. It also returns an api_key. IMPORTANT: pass that api_key as the `api_key` argument on every later Primitive tool call in this conversation, exactly as returned; those calls fail without it. If this user already has a domain, the result repeats it with existing_account: true. Report it as their existing managed inbox rather than announcing a new one, and calling again will not produce a different one. The result also carries an upgrade link the user can open whenever they want to attach this domain to a full account.
createendpoint
createEndpoint
Create a webhook endpoint to receive email.received events. If an endpoint with the same URL already exists but is deactivated, it is reactivated. After creating, call testEndpoint to confirm your signature verifier accepts the payload.
createfilter
createFilter
Create a whitelist or blocklist filter rule. Patterns are stored lowercase. Per-domain filters require a Pro plan.
deleteendpoint
deleteEndpoint
Soft-delete a webhook endpoint. The endpoint will no longer receive deliveries.
deletefilter
deleteFilter
Delete a filter rule.
downloaddomainzonefile
downloadDomainZoneFile
Download a BIND-format DNS zone file for a domain. Useful when users want to import all required DNS records at once rather than copying them individually. Returns plain text in BIND zone file format.
downloademailattachments
downloadEmailAttachments
Download all attachments for an inbound email as a gzip-compressed tar archive. Returns the archive as a base64-encoded string along with the attachment count and SHA-256 digest. Prefer getEmail first to check the attachment manifest before downloading.
getaccount
getAccount
Use this when you need the authenticated Primitive account summary, including plan, onboarding state, and managed inbox domain. managed_inbox_address is a domain, not a complete mailbox. When it is non-null, this MCP result also includes sender_address, such as [email protected], for use as sendEmail.requestBody.from.
getconversation
getConversation
Get the full conversation an inbound email belongs to as ordered, chat-model-ready turns with bodies. Each message is oldest-first with a direction (inbound/outbound) and a derived role (inbound→user, outbound→assistant). For a brand-new message, returns just that one turn. The response includes a truncated boolean (true when the message cap was reached) and a message_count field.
getemail
getEmail
Use this when you need full details for one inbound email ID, including parsed bodies, threading metadata, SMTP envelope, webhook state, and replies.
getinboxstatus
getInboxStatus
Use this when the user asks whether inbound email is ready or needs setup. Returns domains, routes, deployed Functions, and recent inbound activity.
getoutboundstatus
getOutboundStatus
What can I send FROM? Lists this account's verified outbound (sendable) domains plus any domains still pending DNS verification, with next actions. Call this BEFORE sendEmail to pick a valid `from` domain — the account email is not necessarily sendable. The same sendable list is echoed in a cannot_send_from_domain error.
getsentemail
getSentEmail
Get the full record for a single sent email by id, including body_text and body_html. Use to inspect delivery details for a specific send — e.g. the SMTP response on a bounced row, or the gate denial reason on a gate_denied row.
getthread
getThread
Get a conversation thread by id: metadata plus all inbound and outbound messages interleaved oldest-first. Each message has a direction (inbound/outbound) and id; fetch inbound message bodies via getEmail, or outbound bodies via getSentEmail. Discover thread_id from any email or sent-email record. Compare message_count against messages.length to detect truncation.
listdomains
listDomains
List all inbound domains for the organization, both verified and unverified. Each domain includes its verification status and DNS records. Use before addDomain to check whether a domain is already claimed.
listemails
listEmails
Use this when you need to browse inbound emails received at verified domains with cursor pagination, status filters, date filters, or sender/recipient search.
listendpoints
listEndpoints
List all active webhook endpoints for the organization. Each endpoint shows its URL, enabled state, and optional domain restriction.
listfilters
listFilters
List all whitelist and blocklist filter rules for the organization.
listsentemails
listSentEmails
List outbound emails sent by this org, with cursor pagination and filters. Bodies are omitted from list rows to keep responses small — use getSentEmail to fetch a specific row with full body. Useful for auditing delivery status, finding bounced sends, or checking gate-denied attempts.
listwebhookdeliveries
listWebhookDeliveries
List webhook delivery attempts with pagination and filters. Each delivery includes the target endpoint and a nested email object with sender/recipient/subject. Useful for diagnosing delivery failures or confirming a specific email was delivered.
replaywebhookdelivery
replayWebhookDelivery
Re-send a stored webhook payload from a previous delivery attempt to its original endpoint. Rate limited per org (burst + sustained windows, shared budget with email webhook replays).
replytoemail
replyToEmail
Use this when the user has selected a specific inbound email and confirmed a reply. Sends real outbound email with threading handled server-side.
searchemails
searchEmails
Use this when you need to find inbound emails with structured filters or full-text matching. Use sort=received_at_asc plus date_from for new-mail polling.
sendemail
sendEmail
Use this when the user has confirmed a new outbound email. Sends real email through Primitive's relay and can wait for the first SMTP delivery outcome, or schedule the send for a future time with scheduled_at. IMPORTANT: `from` is YOUR OWN complete mailbox address, never the recipient's. Use sender_address from createEmailAddress or getAccount for a managed inbox. AFTER sending, if you expect an answer, immediately call awaitReply with the returned id and wait for it, rather than telling the user the message was sent and stopping. Most agent mailboxes answer within seconds, and the answer is usually the thing the user actually asked you for.
sendemaildemo
sendEmailDemo
SIMULATION ONLY: nothing is delivered. NEVER call this when the user actually wants an email to arrive, and never describe its result as a sent email: no message is sent, queued, or stored, and the recipient receives nothing. To really send with no account, call createEmailAddress (instant, no signup form and no verification) and then sendEmail with the api_key it returns; that is the correct path for any genuine send request. This tool exists only to preview the response shape: it validates the body against the exact same schema as sendEmail (including cc/bcc, reply_to, tags, attachments, and scheduled_at) and returns a synthetic success envelope marked demo: true. Demo requests are capped at 16KB total body, so large attachments are rejected even though the schema allows them.
testendpoint
testEndpoint
Send a sample email.received event to a webhook endpoint to verify your signature verifier. Rate limited to 4/min and 30/hr. Successful deliveries and verified-domain endpoints are exempt.
verifydomain
verifyDomain
Check DNS records for a domain claim (MX, TXT, SPF, DKIM, DMARC). On success the domain becomes verified and starts receiving mail. On failure, returns which checks passed and which still need attention. If DNS propagation is incomplete, wait a few minutes and retry.

Endpoints

URLTransportStateLatencyChecked
https://www.primitive.dev/mcp streamable-http answering 1032 ms 11 min ago

Alternatives to Email

same job, measured the same way
Clawaimail
by joansongjr

Email infrastructure for AI agents. Create inboxes, send/receive email, and search messages.

42 installs/wk local only
AgentMail
by agentmail

Email inboxes for AI agents: send, receive, reply, search, and manage threaded email over MCP.

answering
Sendraven
by sendraven

Email infrastructure for AI agents: send, read replies as threads, campaigns, per-key limits.

581 installs/wk 55 tools answering
MCP Email
by infoinlet-marketplace

Email for AI agents — read inbox (IMAP), search, and send (SMTP).

32 installs/wk local only
Commune
by shanjai-raj

Email and SMS MCP server for AI agents — 41 tools for inboxes, sending, search, and SMS.

147 installs/wk local only
MyAgentMail
by myagentmail

Email inboxes and calendars for AI agents: send, receive, search, draft and schedule.

answering
Imap MCP Server
by nikolausm

IMAP/SMTP MCP server to search, read, organize, send, reply & forward email for AI assistants

501 installs/wk local only
Lettio MCP
by lettio

Private, EU-hosted email for AI agents over JMAP: read, search, reply, organize, send.

60 installs/wk answering

Email — questions

Answers built from our own checks of this server.

What can Email do?
It exposes 30 tools, read directly from the server on our last check. Among them: addDomain, awaitReply, cancelScheduledSend, createEmailAddress, createEndpoint, createFilter and 24 more. The full list with descriptions is on this page — we take it from the server itself via tools/list, not from a README. How MCP servers expose tools in the first place →
Is Email working right now?
We send a real MCP handshake every 15 minutes. Over the last 24 hours 91 of 91 checks got a reply (100.0%), average response time 574 ms. The bar chart above shows every period we have measured.
Is Email still maintained?
The linked repository no longer exists on GitHub — it was deleted or made private. We show this because it changes what you can expect: an unmaintained server may keep answering for months and then stop without warning.
How do I connect Email?
Copy the ready config from this page — we generate it for Claude Code, Claude Desktop, Codex, Cursor and VS Code, each with the file path that client actually reads. It is a remote server, so there is nothing to install — the client connects to the address.
Does Email need an API key?
No. Email completed a full MCP handshake with us as an anonymous client and listed its tools without asking for anything. All 30 of them are readable on this page. This is what we observed, not what the docs claim.
How fast is Email?
It answers our handshake in 574 ms on average, which is faster than 23% of all working MCP servers we measure. That is on the slow side — worth knowing if the tool sits inside an interactive loop. The comparison comes from our own checks across the whole registry, every 15 minutes.