Recent highlights
Inbox moved to a dedicated per-mailbox MCP endpoint
Inbox mail is private per mailbox, so reading and replying no longer live on the workspace MCP at all.read_inbox and reply_to_email now run on a separate, mailbox-scoped endpoint — https://api.mailkatana.com/mailbox/mcp — authenticated by a mailbox access token (mbtok_…) minted for a single mailbox, not the workspace API key. The token identifies the mailbox and carries its scopes (read, reply), so those tools take no mailbox argument and can only ever touch the token’s own mailbox. A new mailbox_info tool reports which mailbox you’re authenticated as. The workspace MCP keeps list_mailboxes (inventory only) so you can discover which mailbox to mint a token for.
Inbox read + reply added to MCP
The MCP reads and replies to received mail (previously placeholder-only):read_inbox— list a mailbox’s received messages (newest first), or read one message’s full content by ID.reply_to_email— reply to a received message from the mailbox that received it, to the original sender.
list_mailboxes returns the mailbox inventory.
Campaign tools added to MCP
The MCP now exposes marketing-campaign management:create_campaign— create a draft campaign targeting a contact list.send_campaign— send a draft/approved/scheduled campaign to its audience list.list_campaigns/get_campaign— list and read campaigns.
generate_newsletter placeholder is renamed to generate_campaign.
Transactional list endpoint now returns body and variables
GET /v1/transactional previously returned metadata only. Each template now also includes:
htmlBody/textBody— the rendered body for the primary locale, with{{variable}}placeholders preserved.variables— the placeholders you supply viadataVariables.autoResolvedVariables— platform-filled placeholders (company_name,date,contact.*) that MailKatana resolves at send time; do not pass these indataVariables.
Email templates now use React Email component trees
Email rendering and design moved to React Email. Template bodies are authored as a component tree (a small fixed set of components: container, section, header, footer, heading, text, button, link, image, list) rather than raw HTML. A render service turns the tree into HTML/text;{{variable}} substitution is unchanged.
Developer API + MCP template management reflects this:
- REST:
POST /v1/transactional/create,PUT /v1/transactional/update,POST /v1/transactional/delete,GET /v1/transactional/{templateId}, andGET/PUT /v1/transactional/{templateId}/content/{locale}.create/updateaccept acontentcomponent tree (the oldhtmlBody/textBodyfields are removed). - MCP:
create_template/update_templateaccept acontenttree;delete_templateunchanged.
Event API side effects clarified
POST /v1/events/send now documents its current behavior explicitly: event ingestion, contact updates, and synchronous event side effects happen in one transaction. Delayed template jobs are scheduled immediately, while future execution stays in the separate template-delivery worker.
Transactional send guidance expanded
Transactional email docs now call out:- locale fallback behavior
- attachment limits
addToContactbest-effort contact linking
MCP connection auth clarified
MCP documentation now reflects the live server behavior:- Bearer token in the
Authorizationheader - auth happens on the SSE connection
- tool-level
_apiKeyarguments are no longer part of the documented flow