MailKite Programmable Email
Programmable email for developers and agents.
What it can do
- Mailkite Send: Send a message over a verified domain. Pass `templateId` (+ optional `templateData`) to send from a saved or base template. Requires an API key (mk_live_…).
- Mailkite Upload Attachment: Upload a file to MailKite storage and get back a secure, time-limited URL. Reference the returned `url` as an attachment in send() (`{ filename, url }`) or link it inline i
- Mailkite List Templates: List your saved email templates (light metadata only — no body). Use getTemplate for the full template. Requires a management session token.
What data it sees
Do you need an account
No: the server works without sign-in
Programmable email for developers and agents. Send and Receive email. Create Inboxes for your agents Manage email domain (add inboxes, accounts, teams) Read all emails
How to connect
How to connect MailKite Programmable Email to Claude
The server address to paste into Claude settings:
https://mailkite--bucabay.run.tools
- Open Claude (claude.ai or the desktop app).
- Go to Settings → Connectors.
- Click Add custom connector.
- Paste the server address copied below into Remote MCP server URL and click Add.
- In a chat, click + → Connectors and switch the new connector on.
Custom connectors are available on Free, Pro, Max, Team and Enterprise plans (Free is limited to one). On Team and Enterprise an organization Owner adds the connector first under Organization settings → Connectors.
Authorization
After you click Add, a sign-in window for the service opens. Sign in with your own account and approve access. Claude never sees your password.
How to connect MailKite Programmable Email to ChatGPT
The server address to paste into ChatGPT settings:
https://mailkite--bucabay.run.tools
- Open ChatGPT in a browser (chatgpt.com). A Plus, Pro, Business, Enterprise or Edu plan is required.
- Turn on developer mode once: Settings → Apps → Advanced settings → Developer mode.
- Open Settings → Connectors and click Create.
- Fill in the form: Name (anything), Description (one line about what the service does), MCP server URL (copy it below).
- Under Authentication choose OAuth if the service requires sign-in, otherwise None. Click Create.
- In a new chat open + → Apps/Connectors and enable the connector.
OpenAI has renamed this section before (Connectors → Apps/Plugins). If the label differs, search settings for "developer mode". On Business/Enterprise workspaces an admin must allow custom connectors first.
Authorization
On first use ChatGPT opens the service's sign-in window. Sign in and approve access.
How to connect MailKite Programmable Email to Cursor
The server address to paste into Cursor settings:
https://mailkite--bucabay.run.tools
Fastest: click Open in Cursor below and confirm the prompt.
Manually:
- In Cursor open Settings → Cursor Settings → MCP and click Add new global MCP server.
- Paste the JSON copied below into
~/.cursor/mcp.json(per project:.cursor/mcp.jsonin the repo root). - Save the file. The server appears in the MCP list; authorize it there if asked.
Authorization
If the service needs sign-in, an authorize button appears next to the server in the MCP list.
Server tool list (40)
Raw names from tools/list. Only developers need these.
| mailkite_send | Send a message over a verified domain. Pass `templateId` (+ optional `templateData`) to send from a saved or base template. Requires an API key (mk_live_…). |
| mailkite_upload_attachment | Upload a file to MailKite storage and get back a secure, time-limited URL. Reference the returned `url` as an attachment in send() (`{ filename, url }`) or link it inline in your HTML — instead of base64-inlining large files on every send. Give the file ONE of four ways: a local `path` (read and streamed as raw bytes by the CLI/SDK/local MCP), a remote `url` (MailKite fetches and re-hosts it), base64 `content`, or — over raw HTTP — the file bytes as the POST body with `?filename=`. `retentionDays` (7/30/90/365, default 7) sets how long the file and URL live. Requires an API key (mk_live_…). |
| mailkite_list_templates | List your saved email templates (light metadata only — no body). Use getTemplate for the full template. Requires a management session token. |
| mailkite_list_base_templates | List the premade base templates (light metadata). Clone one with createTemplate({ baseId }) or send from it directly via send({ templateId }). Requires a management session token. |
| mailkite_get_template | Get one template (full: subject, html, text, theme). Works for your templates (tpl_…) and base templates (base_…). Requires a management session token. |
| mailkite_create_template | Create a template. Pass `baseId` to clone a base template into your own, or provide name/subject/html/text/theme directly. Requires a management session token. |
| mailkite_list_domains | List your domains, each with its webhook URL. Requires a management session token. |
| mailkite_create_domain | Add a domain. Returns the domain + DNS records. Requires a management session token. |
| mailkite_get_domain | Get one domain with DNS records + webhook. Requires a management session token. |
| mailkite_delete_domain | Remove a domain. Requires a management session token. |
| mailkite_verify_domain | Check DNS and update status. Requires a management session token. |
| mailkite_set_webhook | Set or replace the domain's catch-all webhook. Requires a management session token. |
| mailkite_delete_webhook | Remove the domain's webhook. Requires a management session token. |
| mailkite_test_webhook | Send a signed test event to the domain's webhook. Requires a management session token. |
| mailkite_check_domain_availability | Check whether a domain is available to register, and at what price. Read-only — no charge. Requires a management session token. |
| mailkite_register_domain | Register (buy) a domain on the customer's behalf; provisions mail DNS and adds it to the account in one call. Charges the registrar. Requires a management session token. Does NOT register automatically — returns a dashboard link for the user to review the price and confirm. An assistant can never purchase a domain on its own. |
| mailkite_list_routes | List inbound routing rules. Requires a management session token. |
| mailkite_create_route | Create a route (match, action, destination). Requires a management session token. |
| mailkite_delete_route | Delete an inbound routing rule by id. Pair with createRoute to register and tear down a webhook destination — e.g. an automation platform subscribing on enable and cleaning up on disable. Requires a management session token. |
| mailkite_agent | Send a message to one of your inbox agents and get its reply. Defaults to the account's default agent; pass `routeId` or `address` to target a specific agent, or `model` to override the model. This is separate from inbound routing — it does not match or override routes. Requires an API key (mk_live_…). |
| mailkite_route | Route a message to one of your registered routes (by `routeId` or `address`), running that route's action — agent, webhook, or forward. The route must already exist on your account; arbitrary destinations are not allowed. Requires an API key (mk_live_…). |
| mailkite_list_messages | List stored messages, newest first. Optionally filter with `search` (matches sender, recipient, or subject) and page with `before` (a `received_at` cursor) and `limit`; omit all for the default newest 100. Response is a bare array — paginate by passing the last row's `received_at` as the next `before`. Requires a management session token. |
| mailkite_get_message | Get a message with deliveries + attachments. Requires a management session token. |
| mailkite_retry_delivery | Re-deliver a stored message to its webhook. Requires a management session token. |
| mailkite_list_lists | List your contact lists (static, curated broadcast audiences), each with its member count. Requires a management session token. |
| mailkite_create_list | Create a contact list. Returns the list with its id (lst_…); add contacts with addListContacts. Requires a management session token. |
| mailkite_get_list | Get one contact list with its member count. Requires a management session token. |
| mailkite_update_list | Rename a contact list. Requires a management session token. |
| mailkite_delete_list | Delete a contact list. The list is removed; the contacts themselves are kept. Requires a management session token. |
| mailkite_list_list_contacts | List the contacts that are members of a list, newest first. Optionally page with `before` (a `last_seen_at`/`created_at` cursor) and `limit`. Response is a bare array — paginate by passing the last row's `last_seen_at` (or `created_at`) as the next `before`. Requires a management session token. |
| mailkite_add_list_contacts | Add contacts (by id, ctr_…) to a list. Returns how many were newly added; contacts already on the list are ignored. Requires a management session token. |
| mailkite_remove_list_contact | Remove one contact from a list (the contact itself is kept). Requires a management session token. |
| mailkite_list_broadcasts | List your broadcasts (one-to-many sends) with status and send stats. Requires a management session token. |
| mailkite_create_broadcast | Create a broadcast draft. `from` is required; set `audience` to { type: "all" } or { type: "list", id: "lst_…" }. Returns the broadcast with its id (bct_…). Send it with sendBroadcast. Requires a management session token. |
| mailkite_get_broadcast | Get one broadcast with its status and recipient summary. Requires a management session token. |
| mailkite_update_broadcast | Edit a draft broadcast (any of from/subject/audience/html/… ). Drafts only. Requires a management session token. |
| mailkite_delete_broadcast | Delete a broadcast draft. Requires a management session token. |
| mailkite_send_broadcast | Send a broadcast now, or pass an ISO 8601 `scheduledAt` to schedule it. A one-click unsubscribe is always added. Returns the status and resolved audience count. Requires a management session token. Does NOT register automatically — returns a dashboard link for the user to review the price and confirm. An assistant can never purchase a domain on its own. |
| mailkite_verify_webhook | Verify the `x-mailkite-signature` header on an inbound webhook delivery. Runs entirely locally (HMAC-SHA256 over `${t}.${payload}`) — no network call. Returns true only when the signature matches and the event is within the freshness window. Runs locally (no API call) — no credentials needed. |
| mailkite_semantic_search | 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). Public; no authentication required. Requires an API key (mk_live_…). |