MCP server
MailInApp exposes an MCP server so an external AI client — Claude Desktop, Claude Code, or any other MCP-compatible tool — can build and edit your account's email projects directly, the same way the in-studio AI copilot does. It's the same tool-use core either way: an MCP client and the studio panel are just two different front doors onto the identical set of edits.
This page covers the developer path: your own backend or CLI tooling authenticating with an API key you mint yourself, the same credential the Send API uses.
Endpoint & auth
https://mailinapp.com/api/mcp
Authenticate with the same Authorization: Bearer <apiKey> header as the Send API — mint or reuse a key from Developers in the dashboard. There's no separate MCP-specific credential to manage for this path; a key already represents "this account's own backend," so it's trusted at the same level here, with every tool documented below available regardless of scope.
The endpoint is stateless: every request is a self-contained MCP call, so there's nothing to keep alive between messages and no separate connect/disconnect step beyond your MCP client's normal setup.
Connecting Claude Code
claude mcp add --transport http mailinapp https://mailinapp.com/api/mcp \
--header "Authorization: Bearer mia_live_..."
Claude Desktop and other MCP clients that support a remote HTTP server take the same URL and header — consult your client's own docs for where to paste them.
Tools
An API key is trusted at full account-owner level, so it sees every tool available — project design, contacts and suppressions, campaign results and orders, sending (including real campaign sends, not just tests), mailbox and ticket replies, and plan usage.
Tree-editing tools (add_block/update_block/remove_block/move_block/set_theme, and friends) all take a leading projectId (from list_projects/create_project) — an MCP client has no open studio tab to infer it from. Every valid block type, its accepted parents, and its field list are described to the model as part of the tool set via list_block_types, so it stays in sync with whatever block types the studio currently ships; you don't need to tell it what's available.
How edits are applied
Each mutating tool call is its own atomic write straight to the project — there's no "apply" step like the in-studio panel has, since there's no open canvas to apply to. If you have the project open in the studio at the same time an MCP client edits it, your next autosave shows the normal "Changed elsewhere" conflict banner, exactly as if a teammate had edited it — reload to pick up the MCP-driven change, or save as a copy to keep your own in-progress edits.
Every MCP edit is also logged into the project's copilot chat thread (tagged as coming from MCP, not the studio panel), so it shows up in the same history the in-studio AI Copilot panel displays.
Rate limits & plan availability
- Per API key: 60 requests/minute, independent of other keys on the same account.
- Per account: every tool call draws from one monthly counter (
plan.connectorCallsMonthly, separate from the in-studio AI copilot's own turn allowance, since an MCP call never invokes an AI model on MailInApp's own side). Available with a real quota on every plan, Free included — see pricing for exact numbers, or callget_plan_usageto read your account's current month-to-date usage. - Sending real campaigns through this path is metered the same way
confirm_sendis, with the same confirmation flow and volume cap.