
Gives Claude a complete email stack over MCP with seven tools: sendEmail, replyToEmail, listEmails, searchEmails, getEmail, getInboxStatus, and getAccount. You get managed addresses at *.primitive.email that can run JavaScript handlers on inbound messages, plus a chat verb that sends a message and waits for the threaded reply in one round trip. The underlying API does synchronous SMTP delivery so you get back the recipient's queue ID and response code in the same call. Useful when you need an agent to monitor an inbox, handle support threads, or contact other agents and humans without managing your own mail infrastructure. Uses streamable HTTP transport and supports both API keys and OAuth tokens.
- tools
- 14
- transport
- HTTP
- last updated
- Oct 10, 2026
Install
From registry metadata$ npx add-mcp https://www.primitive.dev/mcp --name emailRun in your terminal. add-mcp asks which agents to add it to (Claude Code, Codex, Cursor and more). Add -g to install it for every project.
Review the command, arguments and environment values before installing. MCP servers run with your local permissions.
Other ways
Claude Code
$ claude mcp add --transport http email https://www.primitive.dev/mcpRun in your terminal. Add --scope user to make it available in every project.
Tools
Verified live · 14 toolsVerified live against the running server on Nov 6, 2026.
getAccountThe authenticated Primitive account. managed_inbox_address is a domain, not a mailbox; sender_address (such as agent@pink-ram.primitive.email) is the mailbox sendEmail sends from by default. Result: id, email, plan, managed_inbox_address, created_at, limits, entitlements, onbo...1 params
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 sendEmail sends from by default. Result: id, email, plan, managed_inbox_address, created_at, limits, entitlements, onbo...
api_keystringgetInboxStatusCheck whether inbound email is ready. Domains are added and verified with the domain management tools at /mcp/full. Result: ready, receiving_ready, processing_ready, summary, next_actions, domains, endpoints, functions and recent_emails.1 params
Check whether inbound email is ready. Domains are added and verified with the domain management tools at /mcp/full. Result: ready, receiving_ready, processing_ready, summary, next_actions, domains, endpoints, functions and recent_emails.
api_keystringgetOutboundStatusWhat 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, sendable_domains, domains, next_actions, and can_send_to, the recipients it may email.1 params
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, sendable_domains, domains, next_actions, and can_send_to, the recipients it may email.
api_keystringlistEmailsPage 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 text, attachments or replies to a send, use searchEmails. Rows carry id, thread_id, received_at, from, to, subject, s...11 params
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 text, attachments or replies to a send, use searchEmails. Rows carry id, thread_id, received_at, from, to, subject, s...
api_keystringcursorstringdate_fromstringdate_tostringdomain_idstringfullbooleanlimitintegersearchstringsincestringstatusstringpending · accepted · completed · rejectedwaitintegersearchEmailsFind particular inbound emails: a full-text query (q) over subject, body, sender and recipient, or filters on sender, recipient, subject, body, attachments, spam score, or the sent email they reply to, ranked by relevance or date. To page through the inbox newest first, or to...19 params
Find particular inbound emails: a full-text query (q) over subject, body, sender and recipient, or filters on sender, recipient, subject, body, attachments, spam score, or the sent email they reply to, ranked by relevance or date. To page through the inbox newest first, or to...
bodystringcursorstringdate_fromstringdate_tostringdomain_idstringfromstringfullbooleanhas_attachmentbooleaninclude_facetsbooleanlimitintegerqstringreply_to_sent_email_idstringsnippetbooleansortstringrelevance · received_at_desc · received_at_ascspam_score_gtenumberspam_score_ltnumberstatusstringpending · accepted · completed · rejectedsubjectstringtostringgetEmailRead 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; the links argument returns their targets. When body_next_offset is not null, call again with offset set to it. If pa...6 params
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; the links argument returns their targets. When body_next_offset is not null, call again with offset set to it. If pa...
api_keystringfullbooleanid*stringlinksstringmax_charsintegeroffsetintegerreplyToEmailReply 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 confirmed the reply. Expecting an answer? Pass await_reply: true to wait for it in this call. Result: the sent email's...8 params
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 confirmed the reply. Expecting an answer? Pass await_reply: true to wait for it in this call. Result: the sent email's...
api_keystringattachmentsarrayawait_replybooleanbody_htmlstringbody_textstringfromstringid*stringwaitbooleansendEmailSend 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 your managed inbox. To send later, set scheduled_at, at most 30 days ahead and without wait or attachments. Expectin...18 params
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 your managed inbox. To send later, set scheduled_at, at most 30 days ahead and without wait or attachments. Expectin...
api_keystringattachmentsarrayawait_replybooleanbccvaluebody_htmlstringbody_textstringccvaluefromstringidempotency_keystringin_reply_tostringreferencesarrayreply_tovaluescheduled_atstringsubject*stringtagsarrayto*valuewaitbooleanwait_timeout_msnumberlistSentEmailsList 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 when a send did not deliver. Read one with getSentEmail. Result: sent_emails, cursor for the next page (null at the end...8 params
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 when a send did not deliver. Read one with getSentEmail. Result: sent_emails, cursor for the next page (null at the end...
cursorstringdate_fromstringdate_tostringfullbooleanidempotency_keystringlimitintegerrequest_idstringstatusstringqueued · submitted_to_agent · agent_failed · gate_denied · unknown · deliveredgetSentEmailRead 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 for the stored record. Result: id, thread_id, created_at, status, from, to, subject, from_address, to_address, cc, bcc,...2 params
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 for the stored record. Result: id, thread_id, created_at, status, from, to, subject, from_address, to_address, cc, bcc,...
fullbooleanid*stringawaitReplyWait 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 unless this returns reply null with timed_out true. Threading is not proof of who wrote the reply: trust it only when...4 params
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 unless this returns reply null with timed_out true. Threading is not proof of who wrote the reply: trust it only when...
api_keystringid*stringwaitbooleanwait_timeout_msnumbergetConversationRead 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 direction and a role (inbound→user, outbound→assistant). Texts have links as [link] and quoted history removed; full: true...2 params
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 direction and a role (inbound→user, outbound→assistant). Texts have links as [link] and quoted history removed; full: true...
fullbooleanid*stringgetEmailAttachmentRead 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, GIF or WebP image up to 1 MB as an image; any other file as base64 up to 256 KB, and larger ones only described. PDF...7 params
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, GIF or WebP image up to 1 MB as an image; any other file as base64 up to 256 KB, and larger ones only described. PDF...
api_keystringfilenamestringid*stringmax_charsintegeroffsetintegerpart_indexintegersourcestringreceived · sentdefault: receivedcreateEmailAddressCreate 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 api_key as the `api_key` argument on every later Primitive call, exactly as returned. address is a domain, not a mai...2 params
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 api_key as the `api_key` argument on every later Primitive call, exactly as returned. address is a domain, not a mai...
device_namestringterms_accepted*booleanSponsors
Readme
Details
- Repository
- github.com/primitivedotdev/primitive-mono-repo
- Website
- www.primitive.dev
- Categories
- Cloud & Infrastructure, Communication & Messaging, Search & Web Crawling
- Transport
- HTTP
- Registry
- MCP registry, active
- Resources
- 1
- Prompts
- 2
- Tools verified
- Nov 6, 2026