This page is the public changelog seed for the Mintlify site. It will stay focused on developer-facing REST and MCP changes.

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.
Sending applies the same protections as the rest of the platform: suppression-list filtering, workspace trust-level caps, DMARC requirements (trust level M2+), and per-recipient rate guardrails. The former 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 via dataVariables.
  • autoResolvedVariables — platform-filled placeholders (company_name, date, contact.*) that MailKatana resolves at send time; do not pass these in dataVariables.

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}, and GET/PUT /v1/transactional/{templateId}/content/{locale}. create/update accept a content component tree (the old htmlBody/textBody fields are removed).
  • MCP: create_template/update_template accept a content tree; delete_template unchanged.

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
  • addToContact best-effort contact linking

MCP connection auth clarified

MCP documentation now reflects the live server behavior:
  • Bearer token in the Authorization header
  • auth happens on the SSE connection
  • tool-level _apiKey arguments are no longer part of the documented flow

Source material

This page is seeded from the repo’s public API alignment notes and should stay focused on changes that matter to external integrators.