# Primitive Email MCP server

Source: https://glimind.com/server/mcp-registry%2Fdev.primitive%2Femail
Registry id: `mcp-registry/dev.primitive/email`
Status: live (checked 2026-10-27T01:23:21.416Z)

## Verdict

Primitive Email MCP server answered 100% of Glimind's liveness checks over 30 days, better than 42% of MCP servers, with 653 ms median handshake and 0 outages in 90 days. Its agent-readiness grade is A (94/100) across 14 tools, costing an agent about 7,022 tokens to load. Checked every few minutes; no tool is ever called.

## Measurements (30 days)

| Metric | Value | Better than |
|---|---|---|
| Uptime, 30 days | 100% | 42% of MCP servers |
| Median handshake latency | 653 ms | 37% of MCP servers |
| p95 handshake latency | 2730 ms | — |
| Checks in 30 days | 4,984 | — |
| Outages, 90 days | 0 | — |
| Median recovery | — | — |
| Agent-readiness score | 94/100 (A) | 78% of MCP servers |
| Tools | 14 | — |
| Tool-list size for an agent | ~7,022 tokens | 34% of MCP servers |
| Days observed | 29 | — |

## Install

```json
{
  "mcpServers": {
    "primitive-email-mcp-server": {
      "type": "http",
      "url": "https://www.primitive.dev/mcp"
    }
  }
}
```

Claude Code:

```sh
claude mcp add --transport http primitive-email-mcp-server https://www.primitive.dev/mcp
```

## Tools (14)

- `awaitReply`: Wait for the threaded reply to a sent email (an id sendEmail or replyToEmail returned) when that send's own wait got none. Do not tell the user nobody replied u
- `createEmailAddress`: Create an email account with no signup and get its api_key; call this first when you have no Primitive API key and the user wants to send or receive email. Pass
- `getAccount`: The authenticated Primitive account. managed_inbox_address is a domain, not a mailbox; sender_address (such as agent@pink-ram.primitive.email) is the mailbox se
- `getConversation`: Read a whole conversation with message bodies: the tool for finding out what was said. Pass the id of any inbound email in the thread. Each message has a direct
- `getEmail`: Read one inbound email by id; read its attachments with getEmailAttachment. By default body_text leaves out quoted history and shows each link as an [n] marker;
- `getEmailAttachment`: Read ONE attachment of an email. A text file (plain text, CSV, JSON, XML, Markdown, calendar and similar) comes back as text, HTML reduced to text; a PNG, JPEG,
- `getInboxStatus`: Check whether inbound email is ready. Domains are added and verified with the domain management tools at /mcp/full. Result: ready, receiving_ready, processing_r
- `getOutboundStatus`: What this account can send from, and to whom. Call it before sending outside Primitive or from a domain other than the managed inbox. Result: ready, summary, se
- `getSentEmail`: Read a single sent email by id, to inspect its delivery, such as the SMTP response on a bounced send or the gate denial on a gate_denied one. Pass full: true fo
- `listEmails`: Page through inbound email newest first, or tail new mail with since and wait. Filters by domain, status, date and sender, recipient or subject words; for body 
- `listSentEmails`: List sent emails to audit delivery. Rows carry id, thread_id, created_at, status, from, to, subject and snippet, plus error_code, smtp_response_code or gates wh
- `replyToEmail`: Reply to one inbound email, threaded server-side. This sends a real email immediately and it cannot be undone or recalled, so call it only after the user has co
- `searchEmails`: Find particular inbound emails: a full-text query (q) over subject, body, sender and recipient, or filters on sender, recipient, subject, body, attachments, spa
- `sendEmail`: Send a new email. It goes out immediately (or at scheduled_at) and cannot be recalled, so confirm the message with the user first. Leave `from` out to send from

Measured by Glimind (https://glimind.com): MCP handshake + tool list only, no tool is ever called. CC BY 4.0.
