{"$schema":"https://wellknown.network/schemas/agent-record-v1.json","schemaVersion":"1","id":"ag_pf88f7scdcq4","handle":"email","url":"https://wellknown.network/agents/email","links":{"self":"https://wellknown.network/agents/email/record.json","html":"https://wellknown.network/agents/email","markdown":"https://wellknown.network/agents/email/record.md","api":"https://wellknown.network/api/v1/agents/email","status":"https://wellknown.network/api/v1/agents/email/status","claim":"https://wellknown.network/agents/email/claim","claimApi":"https://wellknown.network/api/v1/claims","badge":"https://wellknown.network/agents/email/badge.svg","openapi":"https://wellknown.network/openapi.json"},"ard":{"identifier":"urn:air:www.primitive.dev:server:email","type":"application/mcp-server-card+json"},"kind":"mcp_server","declared":{"name":"email","summary":"Email infrastructure for AI agents — send, receive, search, and reply to email over MCP.","description":"Email infrastructure for AI agents — send, receive, search, and reply to email over MCP.","publisher":{"name":"dev.primitive","url":null},"homepage":"https://www.primitive.dev","repository":"https://github.com/primitivedotdev/primitive-mono-repo","version":"0.1.0","license":null,"protocols":["mcp"],"tags":[],"pricing":null,"endpoints":[{"url":"https://www.primitive.dev/mcp","type":"mcp_streamable_http","auth":null,"probeable":true}],"skills":null,"tools":null,"extra":{"updatedAt":"2026-06-09T20:14:14.549231Z","publishedAt":"2026-06-09T20:14:14.549231Z","registryName":"dev.primitive/email"},"attribution":{"kind":"mcp_registry","name":"mcp_registry","repoUrl":"mcp_registry","summary":"mcp_registry","version":"mcp_registry","description":"mcp_registry","homepageUrl":"mcp_registry","publisherName":"mcp_registry"}},"derived":{"capabilities":[{"slug":"productivity.email","name":"Email","confidence":1,"provenance":"derived"},{"slug":"dev.terminal","name":"Terminal & Shell","confidence":0.525,"provenance":"derived"},{"slug":"content.writing","name":"Writing & Editing","confidence":0.51,"provenance":"derived"},{"slug":"communication.notifications","name":"Notifications","confidence":0.51,"provenance":"derived"},{"slug":"infra.browser-automation","name":"Browser Automation","confidence":0.51,"provenance":"derived"}],"categories":["communication","content","dev","infra","productivity"]},"observed":{"status":"live","statusReason":"Responded 5h ago.","lastOkAt":"2026-09-06T01:23:40.590Z","lastProbedAt":"2026-09-06T01:23:40.590Z","statusComputedAt":"2026-09-06T01:24:39.640Z","reliability30d":{"probes":1,"successRate":1,"p50Ms":836},"latestObservations":[{"at":"2026-09-06T01:23:40.590Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":836,"error":null,"detail":{"tools":[{"name":"listDomains","description":"List all inbound domains for the organization, both verified and unverified. Each domain includes its verification status and DNS records. Use before addDomain "},{"name":"addDomain","description":"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 pr"},{"name":"verifyDomain","description":"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 ch"},{"name":"downloadDomainZoneFile","description":"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. Retu"},{"name":"getAccount","description":"Use this when you need the authenticated Primitive account summary, including plan, onboarding state, and managed inbox domain. managed_inbox_address is a domai"},{"name":"getInboxStatus","description":"Use this when the user asks whether inbound email is ready or needs setup. Returns domains, routes, deployed Functions, and recent inbound activity."},{"name":"getOutboundStatus","description":"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 BE"},{"name":"listEmails","description":"Use this when you need to browse inbound emails received at verified domains with cursor pagination, status filters, date filters, or sender/recipient search."},{"name":"searchEmails","description":"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."},{"name":"getEmail","description":"Use this when you need full details for one inbound email ID, including parsed bodies, threading metadata, SMTP envelope, webhook state, and replies."},{"name":"replyToEmail","description":"Use this when the user has selected a specific inbound email and confirmed a reply. Sends real outbound email with threading handled server-side."},{"name":"sendEmail","description":"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 sched"},{"name":"sendEmailDemo","description":"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 messag"},{"name":"listSentEmails","description":"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"},{"name":"getSentEmail","description":"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 respon"},{"name":"cancelScheduledSend","description":"Cancel a still-scheduled send before it dispatches (terminal status \"canceled\"; the same idempotency key becomes reusable). Pass the sent email id from a sendEm"},{"name":"awaitReply","description":"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 l"},{"name":"getConversation","description":"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/out"},{"name":"getThread","description":"Get a conversation thread by id: metadata plus all inbound and outbound messages interleaved oldest-first. Each message has a direction (inbound/outbound) and i"},{"name":"downloadEmailAttachments","description":"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 a"},{"name":"listEndpoints","description":"List all active webhook endpoints for the organization. Each endpoint shows its URL, enabled state, and optional domain restriction."},{"name":"createEndpoint","description":"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 creatin"},{"name":"deleteEndpoint","description":"Soft-delete a webhook endpoint. The endpoint will no longer receive deliveries."},{"name":"testEndpoint","description":"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-"},{"name":"listFilters","description":"List all whitelist and blocklist filter rules for the organization."},{"name":"createFilter","description":"Create a whitelist or blocklist filter rule. Patterns are stored lowercase. Per-domain filters require a Pro plan."},{"name":"deleteFilter","description":"Delete a filter rule."},{"name":"listWebhookDeliveries","description":"List webhook delivery attempts with pagination and filters. Each delivery includes the target endpoint and a nested email object with sender/recipient/subject. "},{"name":"replayWebhookDelivery","description":"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 "},{"name":"createEmailAddress","description":"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 FIR"}],"toolCount":30,"serverName":"primitive","capabilities":["tools","resources","prompts"],"serverVersion":"0.1.0","protocolVersion":"2025-06-18"}}],"tools":[{"name":"listDomains","description":"List all inbound domains for the organization, both verified and unverified. Each domain includes its verification status and DNS records. Use before addDomain "},{"name":"addDomain","description":"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 pr"},{"name":"verifyDomain","description":"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 ch"},{"name":"downloadDomainZoneFile","description":"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. Retu"},{"name":"getAccount","description":"Use this when you need the authenticated Primitive account summary, including plan, onboarding state, and managed inbox domain. managed_inbox_address is a domai"},{"name":"getInboxStatus","description":"Use this when the user asks whether inbound email is ready or needs setup. Returns domains, routes, deployed Functions, and recent inbound activity."},{"name":"getOutboundStatus","description":"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 BE"},{"name":"listEmails","description":"Use this when you need to browse inbound emails received at verified domains with cursor pagination, status filters, date filters, or sender/recipient search."},{"name":"searchEmails","description":"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."},{"name":"getEmail","description":"Use this when you need full details for one inbound email ID, including parsed bodies, threading metadata, SMTP envelope, webhook state, and replies."},{"name":"replyToEmail","description":"Use this when the user has selected a specific inbound email and confirmed a reply. Sends real outbound email with threading handled server-side."},{"name":"sendEmail","description":"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 sched"},{"name":"sendEmailDemo","description":"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 messag"},{"name":"listSentEmails","description":"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"},{"name":"getSentEmail","description":"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 respon"},{"name":"cancelScheduledSend","description":"Cancel a still-scheduled send before it dispatches (terminal status \"canceled\"; the same idempotency key becomes reusable). Pass the sent email id from a sendEm"},{"name":"awaitReply","description":"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 l"},{"name":"getConversation","description":"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/out"},{"name":"getThread","description":"Get a conversation thread by id: metadata plus all inbound and outbound messages interleaved oldest-first. Each message has a direction (inbound/outbound) and i"},{"name":"downloadEmailAttachments","description":"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 a"},{"name":"listEndpoints","description":"List all active webhook endpoints for the organization. Each endpoint shows its URL, enabled state, and optional domain restriction."},{"name":"createEndpoint","description":"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 creatin"},{"name":"deleteEndpoint","description":"Soft-delete a webhook endpoint. The endpoint will no longer receive deliveries."},{"name":"testEndpoint","description":"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-"},{"name":"listFilters","description":"List all whitelist and blocklist filter rules for the organization."},{"name":"createFilter","description":"Create a whitelist or blocklist filter rule. Patterns are stored lowercase. Per-domain filters require a Pro plan."},{"name":"deleteFilter","description":"Delete a filter rule."},{"name":"listWebhookDeliveries","description":"List webhook delivery attempts with pagination and filters. Each delivery includes the target endpoint and a nested email object with sender/recipient/subject. "},{"name":"replayWebhookDelivery","description":"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 "},{"name":"createEmailAddress","description":"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 FIR"}],"package":null},"verification":{"claimed":false,"claimedAt":null,"proofs":[]},"provenance":{"sources":[{"source":"mcp_registry","key":"dev.primitive/email","url":"https://registry.modelcontextprotocol.io/v0/servers/dev.primitive%2Femail","firstSeenAt":"2026-09-05T23:20:58.013Z","fetchedAt":"2026-09-05T23:20:58.013Z","normalizedAt":"2026-09-05T23:20:58.013Z"}]},"firstSeenAt":"2026-09-05T23:20:58.013Z","updatedAt":"2026-09-06T01:24:46.793Z"}