← Registry

Developer Tools

primitive.dev

Manage email domains and DNS records for your organization.

x402 supported2 endpoints32 known toolsFirst detected June 8, 2026Last detected September 21, 2026

ENDPOINT 1

https://www.primitive.dev/mcp

No auth detected

MCP server metadata

Name
primitive
Version
0.1.0
Capabilities
toolsresourcesprompts
Server instructions

Primitive is email infrastructure for AI agents. This MCP server exposes the core read and send surface of the Primitive v1 REST API (https://api.primitive.dev/v1) so agents can list, search, read, send, and reply to email without an SDK. When to use these tools: - The user has no Primitive account and wants an email inbox (createEmailAddress). It provisions a managed inbox domain instantly with no signup form, no password and no verification email, returns an api_key, and exposes a complete sender_address when the domain is available. Call it rather than telling the user to go and sign up. - You have no credential for a later call: pass the api_key that createEmailAddress returned as the `api_key` argument on sendEmail, replyToEmail, awaitReply, listEmails, getEmail, getInboxStatus and getAccount. Hosts that cannot set an Authorization header have no other way to present it, so reuse it on every call for the rest of the conversation. - The user asks about email they received or sent (listEmails, searchEmails, getEmail). - The user wants the full back-and-forth conversation an email belongs to (getConversation with the inbound email id). - The user wants to send a message to a person or another agent (sendEmail, or replyToEmail when there is an inbound email id to thread against). - You sent a message and expect an answer: call awaitReply with the sent id and WAIT. This is the normal way to use this server, not an optional extra. Sending and then telling the user the message went out leaves them holding nothing; the reply is what they asked for. - The user is setting up inbound mail for the first time and you need to see what is already configured (getInboxStatus). - The user asks for their account info, plan, or onboarding state (getAccount). Holding a conversation with another agent: 1. Know your own sender address. `from` is YOUR mailbox, never the recipient's. createEmailAddress.address and getAccount.managed_inbox_address are managed inbox domains, not complete mailbox addresses. Use the explicit sender_address that those MCP results provide, such as agent@pink-ram.primitive.email. Mailing someone as themselves gets ignored. 2. Send, then immediately awaitReply with the id you got back, and wait for it to return. 3. Only then answer the user. Do not report that there is no reply yet, and do not ask them to check back later, until awaitReply has returned empty. Agent mailboxes typically answer in seconds, so a single exchange usually completes inside one turn. Treat it as a conversation you stay in, not a message you drop off. Tools tagged with annotations.destructiveHint=true (sendEmail, replyToEmail) cause externally-visible side effects and should be confirmed with the user before invocation. Tools tagged readOnlyHint=true are safe to invoke without confirmation. Errors come back as CallToolResults with isError=true. The content text is a JSON object with top-level `code` (stable machine-readable identifier: unauthorized, unknown_tool, internal_error, upstream_error, or the Primitive API code passed through) and `message` (human-readable). Upstream Primitive API errors also carry `status` and, when present, `request_id`; include the request_id in any support escalation. Recoverable errors also carry structured remediation you should act on without re-prompting the user: `details` (e.g. cannot_send_from_domain returns `details.valid_senders` — the From domains you CAN use — plus a `remediation` object) and `gates` (per-gate denial detail for recipient_not_allowed). Branch on `code`, then read `details`/`gates` to self-correct, not `message`. Authenticate with a Primitive API key as a Bearer token or via OAuth at https://www.primitive.dev/.well-known/oauth-authorization-server

Known tools 30

listDomains

List all inbound domains for the organization, both verified and unverified.

Inferred read-only
addDomain

Claim a new domain and receive the DNS records to publish.

Potential side effects
verifyDomain

Check DNS records for a domain claim (MX, TXT, SPF, DKIM, DMARC).

Inferred read-only
downloadDomainZoneFile

Download a BIND-format DNS zone file for a domain.

Inferred read-only
getAccount

Use this when you need the authenticated Primitive account summary, including plan, onboarding state, and managed inbox domain.

Inferred read-only
getInboxStatus

Use this when the user asks whether inbound email is ready or needs setup.

Potential side effects
getOutboundStatus

What can I send FROM?

Potential side effects
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.

Inferred read-only
searchEmails

Use this when you need to find inbound emails with structured filters or full-text matching.

Inferred read-only
getEmail

Use this when you need full details for one inbound email ID, including parsed bodies, threading metadata, SMTP envelope, webhook state, and replies.

Potential side effects
replyToEmail

Use this when the user has selected a specific inbound email and confirmed a reply.

Potential side effects
sendEmail

Use this when the user has confirmed a new outbound email.

Potential side effects
sendEmailDemo

SIMULATION ONLY: nothing is delivered.

Inferred read-only
listSentEmails

List outbound emails sent by this org, with cursor pagination and filters.

Inferred read-only
getSentEmail

Get the full record for a single sent email by id, including body_text and body_html.

Potential side effects
cancelScheduledSend

Cancel a still-scheduled send before it dispatches (terminal status "canceled"; the same idempotency key becomes reusable).

Potential side effects
awaitReply

Wait for the threaded reply to a sent email.

Potential side effects
getConversation

Get the full conversation an inbound email belongs to as ordered, chat-model-ready turns with bodies.

Potential side effects
getThread

Get a conversation thread by id: metadata plus all inbound and outbound messages interleaved oldest-first.

Inferred read-only
downloadEmailAttachments

Download all attachments for an inbound email as a gzip-compressed tar archive.

Potential side effects
listEndpoints

List all active webhook endpoints for the organization.

Inferred read-only
createEndpoint

Create a webhook endpoint to receive email.received events.

Potential side effects
deleteEndpoint

Soft-delete a webhook endpoint.

Potential side effects
testEndpoint

Send a sample email.received event to a webhook endpoint to verify your signature verifier.

Potential side effects
listFilters

List all whitelist and blocklist filter rules for the organization.

Inferred read-only
createFilter

Create a whitelist or blocklist filter rule.

Potential side effects
deleteFilter

Delete a filter rule.

Potential side effects
listWebhookDeliveries

List webhook delivery attempts with pagination and filters.

Inferred read-only
replayWebhookDelivery

Re-send a stored webhook payload from a previous delivery attempt to its original endpoint.

Potential side effects
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.

Potential side effects

CONNECT WITH APPROVAL

Client installation

Review this server and its permissions before adding it. Secret placeholders must be set locally.

Codex

~/.codex/config.toml

[mcp_servers.primitive]
url = "https://www.primitive.dev/mcp"
enabled = true
Claude Code

.mcp.json

{
  "mcpServers": {
    "primitive": {
      "type": "http",
      "url": "https://www.primitive.dev/mcp"
    }
  }
}
Claude Desktop

Settings → Connectors → Add custom connector

Name: primitive
Remote MCP URL: https://www.primitive.dev/mcp

Add this remote URL as a custom connector in Claude Desktop. Availability depends on the user plan and workspace policy.

Cursor

.cursor/mcp.json

{
  "mcpServers": {
    "primitive": {
      "url": "https://www.primitive.dev/mcp"
    }
  }
}
Visual Studio Code

.vscode/mcp.json

Add to Visual Studio Code
{
  "servers": {
    "primitive": {
      "type": "http",
      "url": "https://www.primitive.dev/mcp"
    }
  }
}
Generic MCP

Client-specific MCP configuration

{
  "name": "primitive",
  "transport": "streamable-http",
  "url": "https://www.primitive.dev/mcp"
}
MCP Inspector

Run the official MCP Inspector locally and enter the indexed Streamable HTTP endpoint.

ENDPOINT 2

https://www.primitive.dev/mcp/docs

No auth detected

MCP server metadata

Name
primitive-docs
Version
0.1.0
Capabilities
toolsresources
Server instructions

Primitive documentation, exposed over MCP so agents can pull reference material over the same protocol they use to act with the product MCP at /mcp. This surface is public and read-only — no bearer token is required. - searchDocs: find documentation pages by keyword (matches page titles and summaries). Start here when you do not know the exact page. - readDoc: fetch the full Markdown of a page by its /docs path (e.g. "/docs/quickstart"). - resources/list + resources/read: every published docs page is also a resource whose content is its rendered Markdown. The page set is derived live from the published docs corpus, so it always matches docs.primitive.dev.

Known tools 2

searchDocs

Search the Primitive documentation by keyword.

Inferred read-only
readDoc

Fetch the full Markdown of a documentation page by its /docs path (e.g.

Inferred read-only

CONNECT WITH APPROVAL

Client installation

Review this server and its permissions before adding it. Secret placeholders must be set locally.

Codex

~/.codex/config.toml

[mcp_servers.primitive-docs]
url = "https://www.primitive.dev/mcp/docs"
enabled = true
Claude Code

.mcp.json

{
  "mcpServers": {
    "primitive-docs": {
      "type": "http",
      "url": "https://www.primitive.dev/mcp/docs"
    }
  }
}
Claude Desktop

Settings → Connectors → Add custom connector

Name: primitive-docs
Remote MCP URL: https://www.primitive.dev/mcp/docs

Add this remote URL as a custom connector in Claude Desktop. Availability depends on the user plan and workspace policy.

Cursor

.cursor/mcp.json

{
  "mcpServers": {
    "primitive-docs": {
      "url": "https://www.primitive.dev/mcp/docs"
    }
  }
}
Visual Studio Code

.vscode/mcp.json

Add to Visual Studio Code
{
  "servers": {
    "primitive-docs": {
      "type": "http",
      "url": "https://www.primitive.dev/mcp/docs"
    }
  }
}
Generic MCP

Client-specific MCP configuration

{
  "name": "primitive-docs",
  "transport": "streamable-http",
  "url": "https://www.primitive.dev/mcp/docs"
}
MCP Inspector

Run the official MCP Inspector locally and enter the indexed Streamable HTTP endpoint.

TRUST AND VERIFICATION EVIDENCE

Trust Data Available

BuiltWith Trust API v2 evidence for primitive.dev was fetched 2026-09-06T05:50:10.594Z.

Trust status Trusted

primitive.dev is assessed as Trusted: Domain has an established technology history spanning over a year.

Indexed

Evidence is source-attributed and does not guarantee that a third-party server is safe. Risk labels are conservative metadata heuristics.