These docs intentionally cover the stable tool surface only. Registered tools that still return placeholder responses — analytics, credit balance, and campaign content generation (generate_campaign) — are intentionally omitted until they return real workspace data.

Contacts

create_contact

Required arguments:
  • email
Optional arguments:
  • firstName
  • lastName
  • source (defaults to mcp)
  • userId
Example arguments:

update_contact

Use email or userId to identify the contact, then supply any fields you want to update.

list_contacts

Optional filters:
  • email
  • userId

delete_contact

Delete by email or userId.

Events

send_event

Required arguments:
  • eventName
Optional arguments:
  • email
  • userId
Example arguments:

Email

send_email

Required arguments:
  • to
Optional arguments:
  • templateId
  • subject
  • htmlBody
  • textBody
  • from
If you provide templateId, MailKatana loads the saved template first and fills missing body fields from that template.

list_templates

Lists available templates in the workspace.

get_template

Required arguments:
  • templateId
Returns the saved subject, HTML body, text body, and status.

create_template

Required arguments:
  • name
  • subject
Optional arguments:
  • content — a React Email component-tree JSON string ({schema:1,nodes:[...]} or a node array) for the primary locale. Components: container, section, header, footer, heading, text, button, link, image, list. {{variable}} placeholders are supported in text.
  • preheader
Returns the new template’s id (public ID), slugId, name, subject, and status.

update_template

Applies a partial update — only the fields you supply are changed. When content is supplied it replaces the primary-locale component tree. Required arguments:
  • templateId
Optional arguments:
  • name
  • subject
  • content — new component-tree JSON for the primary locale
  • preheader

delete_template

Required arguments:
  • templateId
The templateId for get_template, update_template, and delete_template is the template public ID (as returned by list_templates / create_template).

Mailing lists

list_mailing_lists

Returns active mailing lists for the workspace.

Campaigns

Create and send marketing campaigns to a contact list. A campaign is created as a draft and is only sent when you call send_campaign. 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 actual delivery runs asynchronously after the send is accepted.

create_campaign

Creates a draft campaign targeting a contact list. Required arguments:
  • name — campaign name (internal label)
  • subject — email subject line
  • from — From email address; its domain must be configured in the workspace
  • listId — audience contact list public ID (e.g. clist_..., from list_mailing_lists)
  • htmlBody — HTML body of the campaign email
Optional arguments:
  • textBody
  • preheader — preview text
  • fromName — sender display name
  • unsubscribePageEnabled — enable the hosted unsubscribe page (defaults to true)
Returns the campaign’s id (public ID, e.g. cmp_...), status (draft), audience list_id, recipient_count_estimate, and timestamps. Example arguments:

send_campaign

Sends a campaign now to every active contact on its audience list. Only campaigns in a draft, approved, or scheduled state can be sent. Required arguments:
  • campaignId — campaign public ID (e.g. cmp_...)
Returns the campaign with its updated status (sending).

list_campaigns

Lists campaigns in the workspace, newest first. Optional arguments:
  • limit — maximum number to return (default 50, max 100)

get_campaign

Required arguments:
  • campaignId — campaign public ID (e.g. cmp_...)
Returns the campaign’s status, audience list_id, recipient_count_estimate, and timestamps.

Inbox & mailboxes

Inbox mail is private per mailbox, so it lives behind a per-mailbox credential, never the workspace API key. The workspace MCP exposes only mailbox inventory; reading and replying happen on a separate, single-mailbox endpoint (below).

list_mailboxes

Returns configured inbox mailboxes for the workspace (mailbox ID, address, display name, status). Inventory only — no message content — and works with the workspace API key. Use it to discover which mailbox to mint an access token for.

Mailbox MCP endpoint

Reading a mailbox’s mail and replying happen on a dedicated MCP endpoint scoped to a single mailbox, authenticated by that mailbox’s own access token — not the workspace API key.
  • Streamable HTTP server URL: https://api.mailkatana.com/mailbox/mcp
  • Legacy SSE endpoint: https://api.mailkatana.com/mailbox/mcp/sse
  • Authentication: Authorization: Bearer <mailbox access token> — an mbtok_… token minted for one mailbox
The token identifies the mailbox and carries its scopes (read, reply), so these tools take no mailbox argument — everything is confined to the token’s mailbox.

mailbox_info

Returns the mailbox this token authenticates as: id (public ID), address, and granted scopes.

read_inbox

Read this mailbox’s received mail (requires the read scope).
  • With no messageId, lists recent received messages (newest first).
  • With messageId, returns that message’s full content (from, to, subject, text/HTML body).
Optional arguments:
  • messageId — return the full content of a specific received message instead of a list
  • folder — inbox (default), sent, drafts, archive, trash, or junk
  • limit — maximum messages to list (default 20, max 50)

reply_to_email

Reply to a received message in this mailbox (requires the reply scope). The reply is sent from this mailbox, to the original sender (or its Reply-To), with a Re: subject line. Required arguments:
  • messageId — public ID of the received message (from read_inbox)
  • body — reply body (plain text)