Give an AI agent its own inbox — receive email as a webhook, send over a verified domain.
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent — or use 1-click editor setup below.
💡 Paste into ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows)
Email for every product you ship — receive email as a webhook, send over a verified domain, give an AI agent its own inbox.
The official MailKite library for AI agents (MCP).
Docs · Library guide · mailkite.dev · AI agents
Read-only mirror. This repo is a generated, release-time mirror of the MailKite monorepo (the private source of truth) — development doesn't happen here. Install from npm and open issues against the MailKite docs.
One tool per MailKite API method, generated from the shared contract. Full list + schemas: https://mailkite.dev/docs/libraries#mcp.
70 tools, generated from the shared API contract — the same spec the server registers at startup. * marks a required argument. Access: API key (mk_live_…), session (management token), or local (runs in-process, no network).
| Tool | Signature | Access | What it does |
|---|---|---|---|
mailkite_send | from*: string, to*: any, subject: string, html: string, text: string, templateId: string, templateData: object, cc: any, bcc: any, replyTo: string, inReplyTo: string, headers: object, attachments: array, scheduledAt: string,number, trackOpens: boolean, trackClicks: boolean | API key · write | Send a message over a verified domain. |
mailkite_send_batch | from*: string, recipients*: array, subject: string, html: string, text: string, templateId: string, templateData: object, headers: object, replyTo: string, inReplyTo: string, attachments: array, scheduledAt: string,number, trackOpens: boolean, trackClicks: boolean | API key · write | Send one personalized message per recipient (up to 50) in a single call. |
mailkite_upload_attachment | filename: string, path: string, url: string, content: string, contentType: string, retentionDays: integer | API key · write | Upload a file to MailKite storage and get back a secure, time-limited URL. |
mailkite_list_templates | — | session · read | List your saved email templates (light metadata only — no body). |
mailkite_list_base_templates | — | session · read | List the premade base templates (light metadata). |
mailkite_get_template | id* | session · read | Get one template (full: subject, html, text, theme). |
mailkite_create_template | baseId: string, name: string, subject: string, html: string, text: string, json: string, theme: string | session · write | Create a template. |
mailkite_list_domains | — | session · read | List your domains, each with its webhook URL. |
mailkite_create_domain | domain*: string | session · write | Add a domain. |
mailkite_get_domain | id* | session · read | Get one domain with DNS records + webhook. |
mailkite_delete_domain | id* | session · delete/replace | Remove a domain. |
mailkite_verify_domain | id* | session · write | Check DNS and update status. |
mailkite_set_webhook | id*, url*: string | session · delete/replace | Set or replace the domain's catch-all webhook. |
mailkite_set_tracking_webhook | id*, url*: string | session · delete/replace | Set or replace the domain's dedicated tracking-event webhook: an HTTPS endpoint that receives signed email.* engagement events (email.sent / email.bounced / email.complained / email.opened / email.clicked, shaped per the tracking-event schema) SEPARATELY from inbound mail. |
mailkite_delete_tracking_webhook | id* | session · delete/replace | Remove the domain's tracking-event webhook (engagement events stop). |
mailkite_set_webhook_events | id*, events*: any | session · delete/replace | Opt the domain's inbound webhook into engagement events — one webhook, all events. |
mailkite_delete_webhook_events | id* | session · delete/replace | Opt the domain's inbound webhook back out of engagement events (inbound email.received only — the default). |
mailkite_delete_webhook | id* | session · delete/replace | Remove the domain's webhook. |
mailkite_test_webhook | id* | session · write | Send a signed test event to the domain's webhook. |
mailkite_check_domain_availability | domain* | session · read | Check whether a domain is available to register, and at what price. |
mailkite_register_domain | domain*: string, contact*: object, years: integer, dryRun: boolean | session · write | Register (buy) a domain on the customer's behalf; provisions mail DNS and adds it to the account in one call. |
mailkite_list_routes | — | session · read | List inbound routing rules. |
mailkite_create_route | match*: string, action: string, destination: string, agentPrompt: string, agentForwardTo: array, agentContext: string | session · write | Create a route (match, action, destination). |
mailkite_delete_route | id* | session · delete/replace | Delete an inbound routing rule by id. |
mailkite_agent | text*: string, subject: string, from: string, html: string, routeId: string, address: string, model: string | API key · write | Send a message to one of your inbox agents and get its reply. |
mailkite_route | routeId: string, address: string, from*: string, subject: string, text: string, html: string | API key · write | Route a message to one of your registered routes (by routeId or address), running that route's action — agent, webhook, or forward. |
mailkite_list_messages | — | session · read | List stored messages, newest first. |
mailkite_get_message | id* | session · read | Get a message with deliveries + attachments. |
mailkite_retry_delivery | id* | session · write | Re-deliver a stored message to its webhook. |
mailkite_list_lists | — | session · read | List your contact lists (static, curated broadcast audiences), each with its member count. |
mailkite_create_list | name*: string | session · write | Create a contact list. |
mailkite_get_list | id* | session · read | Get one contact list with its member count. |
mailkite_update_list | id*, name*: string | session · write | Rename a contact list. |
mailkite_delete_list | id* | session · delete/replace | Delete a contact list. |
mailkite_list_list_contacts | id* | session · read | List the contacts that are members of a list, newest first. |
mailkite_add_list_contacts | id*, contactIds*: array | session · write | Add contacts (by id, ctr_…) to a list. |
mailkite_remove_list_contact | id*, contactId* | session · delete/replace | Remove one contact from a list (the contact itself is kept). |
mailkite_list_broadcasts | — | session · read | List your broadcasts (one-to-many sends) with status and send stats. |
mailkite_create_broadcast | name: string, from*: string, replyTo: string, subject: string, preview: string, audience: object, templateId: string, html: string, text: string, footerAddress: string | session · write | Create a broadcast draft. |
mailkite_get_broadcast | id* | session · read | Get one broadcast with its status and recipient summary. |
mailkite_update_broadcast | id*, name: string, from: string, replyTo: string, subject: string, preview: string, audience: object, templateId: string, html: string, text: string, footerAddress: string | session · write | Edit a draft broadcast (any of from/subject/audience/html/… ). |
mailkite_delete_broadcast | id* | session · delete/replace | Delete a broadcast draft. |
mailkite_send_broadcast | id*, scheduledAt: string | session · write | Send a broadcast now, or pass an ISO 8601 scheduledAt to schedule it. |
mailkite_verify_webhook | payload*: string, signature*: string, secret*: string, toleranceMs: integer | local · read | Verify the x-mailkite-signature header on an inbound webhook delivery. |
mailkite_semantic_search | query* | API key · read | Semantic search over the MailKite documentation — returns the most relevant doc sections for a natural-language query (hybrid vector + keyword search over https://mailkite.dev/docs). |
mailkite_set_retention | id*, zeroRetention*: boolean | session · delete/replace | Toggle zero-retention passthrough for the domain ({ zeroRetention }). |
mailkite_set_encryption | id*, publicKey*: string | session · delete/replace | Enable at-rest encryption for the domain with a public key ({ publicKey }). |
mailkite_delete_encryption | id* | session · delete/replace | Disable at-rest encryption for the domain. |
mailkite_list_schemas | — | API key · read | List every published JSON Schema with the URL it is served from. |
mailkite_get_schema | name* | API key · read | Fetch one schema as application/schema+json, with an absolute $id a validator can resolve and cache. |
mailkite_signup | email*: string, password*: string, ref: string, channel: string, referrer: string | session · write | Create an account. |
mailkite_login | email*: string, password*: string | session · write | Log in with email + password. |
mailkite_google_signin | code*: string, redirectUri*: string, ref: string | session · write | Sign in with a Google auth code. |
mailkite_get_api_key | — | session · read | Get the account's unrestricted API key (mk_live_…). |
mailkite_rotate_api_key | — | session · write | Rotate the account API key: the old key stops working immediately and a fresh one is returned. |
mailkite_list_scoped_keys | — | session · read | List the account's domain-scoped API keys. |
mailkite_create_scoped_key | domainId*: string, name: string | session · write | Create a key scoped to one domain. |
mailkite_delete_scoped_key | id* | session · delete/replace | Revoke a domain-scoped key. |
mailkite_list_app_passwords | — | session · read | List the account's app passwords. |
mailkite_create_app_password | domain*: string, domainId: string, address: string, protocols: array, label: string | session · write | Create an app password for one domain and address pattern. |
mailkite_delete_app_password | id* | session · delete/replace | Revoke an app password. |
mailkite_list_mailbox_messages | address* | session · read | List a mailbox's messages, newest first. |
mailkite_get_mailbox_message_raw | uid*, address* | session · read | Fetch one message's raw RFC822 bytes from a mailbox. |
mailkite_set_mailbox_message_flags | uid*, address*, flags*: string | session · write | Replace a message's IMAP flags (e.g. |
mailkite_get_usage | — | session · read | Current billing-period usage: emails used vs the plan's included bucket (null = unlimited), AI actions, and the overage state that gates sending. |
mailkite_list_suppressions | — | session · read | List suppressed addresses (unsubscribes, hard bounces, spam complaints, manual). |
mailkite_add_suppression | email*: string, reason: string, note: string | session · write | Suppress an address so this account never sends to it again (reason defaults to manual). |
mailkite_remove_suppression | email* | session · delete/replace | Remove an address from the suppression list (URL-encode the email in the path). |
mailkite_register | email*: string, channel: string, ref: string, referrer: string | session · write | Create a MailKite account from just an email — no password. |
mailkite_me | — | API key · read | The account behind this credential: email, whether it is verified (sending is blocked until it is), and plan. |
MailKite speaks the Model Context Protocol: every API method is a tool your AI assistant (Claude, Cursor, …) can call — send mail, manage domains, search the docs, and give an agent its own inbox. Full guide: https://mailkite.dev/docs/ai-agents.
Hosted (recommended) — one-click OAuth, no key to copy:
In Claude Code you can also install the plugin:
Any chat/UI agent: "Add the MCP server at https://mcp.mailkite.dev/mcp and authenticate in the browser when prompted."
Local (static key, offline / CI):
Give an agent its own inbox. Route inbound mail to a built-in inbox agent (the agent route action) and it answers, files, or escalates on its own — see https://mailkite.dev/docs/ai-agents.
Same contract, every language — pick the one for your stack (full list: https://mailkite.dev/docs/libraries):
| Library | Repo | Distribution |
|---|---|---|
| MailKite for Node.js | mailkite-node | npm |
| MailKite for Python | mailkite-python | PyPI |
| MailKite for Ruby | mailkite-ruby | RubyGems |
| MailKite for Java | mailkite-java | Maven Central |
| MailKite for PHP | mailkite-php | Packagist |
| MailKite for Go | mailkite-go | Go modules |
| @mailkite/cli | mailkite-cli | npm |
| @mailkite/mcp (this repo) | mailkite-mcp | npm |
| @mailkite/client | mailkite-js | npm |
| @mailkite/expo | mailkite-expo | npm |
| MailKiteClient | mailkite-swift | Swift Package Manager |
| dev.mailkite:mailkite-client | mailkite-kotlin | Maven Central |
| mailkite_client | mailkite-flutter | pub.dev |
Generated from the shared MailKite API contract. © MailKite.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/agent-mail)<a href="https://allmcps.com/mcp/agent-mail"><img src="https://allmcps.com/api/badge/agent-mail?style=directory" alt="Agent Mail on AllMCPs" /></a>