Documentation menu

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.

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 or OAuth flow; a key already represents "this account's own backend," so it's trusted at the same level here.

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

| Tool | What it does | | --- | --- | | list_projects | Lists your account's email projects (id, name, purpose). | | create_project | Creates a new project, optionally seeded from a built-in purpose template. | | get_email | Reads a project's current block tree, theme, and name. | | add_block | Adds a new block under a parent (or the document root) at a given position. | | update_block | Updates one block's props. | | remove_block | Removes a block. | | move_block | Moves a block to a new parent/position. | | set_theme | Updates the project's brand colors, font stack, or button shape. |

add_block/update_block/remove_block/move_block/set_theme 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, 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: roughly 30 requests/minute, independent of other keys on the same account.
  • Per account: MCP tool calls draw from the same monthly AI copilot turn allowance as the in-studio panel — see pricing. A create_project/add_block/etc. call on an account without the copilot feature (Free/Starter) returns an error rather than making the change.