Give your agent its own inbox.
This server turns email into tools your AI agent can call: send from its own address, read inbound as clean JSON — which most email MCPs skip — and reply in-thread, on your own domain. Connect any MCP client to one URL and sign in from the browser. No key to paste.
Connect in under a minute
Pick your agent and copy the snippet. Every path signs you in over OAuth in the browser — and if you're already in the dashboard, it connects with no extra login. Works with Claude Code, claude.ai, Cursor, Windsurf, Gemini, and any MCP client that speaks Streamable HTTP.
Using a chat-based agent (claude.ai, ChatGPT, your own assistant)? Paste this into the prompt — it adds the server and walks you through browser sign-in.
Connect to the MailKite MCP server (Streamable HTTP) at
https://mcp.mailkite.dev/mcp and authenticate in the browser when prompted.
Then use the mailkite_* tools to send, read inbound, and reply to email.
Run both in Claude Code, one after the other. Then /mcp → mailkite signs you in. You also get the /mailkite:* commands and the setup skill.
/plugin marketplace add mailkite/claude-code
/plugin install mailkite@mailkite
Prefer the bare CLI over the plugin? One command registers the remote server (add -s user for every project). Then /mcp → mailkite signs you in over OAuth — no key to paste.
claude mcp add --transport http mailkite https://mcp.mailkite.dev/mcp
Any MCP client — Cursor, Claude Desktop, Cline, Roo, Zed. Paste the block, restart, and sign in on first connect.
{
"mcpServers": {
"mailkite": {
"type": "http",
"url": "https://mcp.mailkite.dev/mcp"
}
}
}
Windsurf uses a serverUrl field — drop this into ~/.codeium/windsurf/mcp_config.json and restart.
{
"mcpServers": {
"mailkite": {
"serverUrl": "https://mcp.mailkite.dev/mcp"
}
}
}
Gemini CLI uses httpUrl in ~/.gemini/settings.json. Same idea for any other MCP client — keep the URL, swap the field name.
{
"mcpServers": {
"mailkite": {
"httpUrl": "https://mcp.mailkite.dev/mcp"
}
}
}
No browser (CI, servers)? Skip OAuth and pass your API key as a Bearer header — Claude Code, or any client's config.
claude mcp add --transport http mailkite https://mcp.mailkite.dev/mcp \
--header "Authorization: Bearer mk_live_3a9f…"
{
"mcpServers": {
"mailkite": {
"type": "http",
"url": "https://mcp.mailkite.dev/mcp",
"headers": { "Authorization": "Bearer mk_live_3a9f…" }
}
}
}
What your agent can do
39 mailkite_* tools — one per API operation, generated from the same
contract the SDKs use, so inputs are validated
before anything goes on the wire. Sign-ups, verification links, and 2FA codes land in an
inbox the agent owns and reads — no human in the loop.
Sending
Send from the agent’s own address — HTML, attachments, in-thread replies.
sendupload_attachmentInbound messages
Received mail is parsed to clean JSON the agent can list, read, and act on.
list_messagesget_messageretry_deliveryDomains
Add or even register a domain, get the DNS records, verify — all from the agent.
list_domainscreate_domainget_domainverify_domaindelete_domaincheck_domain_availabilityregister_domainWebhooks
Point inbound mail at your code, fire signed test events, verify signatures.
set_webhookdelete_webhooktest_webhookverify_webhookRoutes & agents
Per-address rules: webhook, forward, store, drop — or hand mail to an inbox agent.
list_routescreate_routeagentrouteTemplates
Save a design once, send it with data — the agent fills in the variables.
list_templateslist_base_templatesget_templatecreate_templateContact lists
Curated audiences the agent can build and maintain.
list_listscreate_listget_listupdate_listdelete_listlist_list_contactsadd_list_contactsremove_list_contactBroadcasts
One-to-many sends with scheduling and always-on one-click unsubscribe.
list_broadcastscreate_broadcastget_broadcastupdate_broadcastdelete_broadcastsend_broadcastDocumentation
Semantic search over the MailKite docs, so the agent can help itself.
semantic_searchSign in from the browser — keys optional
OAuth 2.1, discovered automatically
Your MCP client finds the sign-in flow on first connect (RFC 9728) and opens the browser. Approve once, and the connection carries your account — no key ever touches your config.
Zero-click when you're signed in
Already in the dashboard? The approval step recognizes your session and completes on its own.
Headless? Pass a key
CI and servers skip the browser: send Authorization: Bearer mk_live_… instead. A domain-scoped key confines each agent to its own domain and revokes on its own.
Ready to give your agent an email address?
Create a free account, add a domain (or register one right from the agent), and the
mailkite_* tools do the rest — unlimited domains, free to start.