MCP server
Connect eusend to any AI coding tool over the Model Context Protocol — send email and manage domains, audiences, and broadcasts from Claude, Cursor, Codex, and other MCP clients.
The Model Context Protocol (MCP) lets AI tools call external services through a typed set of tools. eusend runs an MCP server so assistants like Claude Code, Claude Desktop, Cursor, and Codex can send email and manage domains, audiences, and broadcasts on your behalf — using your API key, through the exact same pipeline as the HTTP API. DKIM signing, tracking, suppression, rate limits, and your sending ceilings all apply identically.
There are two ways to connect, and they use the same tools underneath:
Remote (hosted)
Zero install — point your client at a URL. Best for getting started.
Local (stdio)
Runs on your machine via npx. Your key never leaves your computer.
How authentication works
Every tool call is authorized with one of your eusend API keys — the same key you use for the HTTP API. Nothing new to provision.
- Remote: your client sends the key on each request as an
Authorization: Bearerheader. The hosted server holds no key of its own; it simply forwards authenticated calls to the API, so it can never do anything your key can't. - Local: the key is read from the
EUSEND_API_KEYenvironment variable in your own MCP config and never leaves your machine.
Use an eu_test_ key while wiring things up — calls are accepted and tracked
but never delivered. Swap in an eu_live_ key to send for real.
Remote (hosted)
Endpoint: https://mcp.eusend.dev/mcp. No installation — add the URL to your
client along with an Authorization header carrying your key.
Claude Code
claude mcp add --transport http eusend https://mcp.eusend.dev/mcp \
--header "Authorization: Bearer eu_live_xxxxxxxxxxxx"Cursor, Windsurf, and other JSON-configured clients
Add a remote server entry to the client's MCP config (e.g. .cursor/mcp.json):
{
"mcpServers": {
"eusend": {
"url": "https://mcp.eusend.dev/mcp",
"headers": {
"Authorization": "Bearer eu_live_xxxxxxxxxxxx"
}
}
}
}Codex
codex mcp add eusend --url https://mcp.eusend.dev/mcpThen set the Authorization: Bearer eu_live_… header for the eusend server in
your Codex MCP configuration so tool calls are authenticated.
Local (stdio)
The local server runs as a subprocess your client launches on demand, via
@eusend_dev/mcp. Your key stays in your own config and is
never sent to eusend as part of setup. Requires Node.js.
Claude Code
claude mcp add eusend \
--env EUSEND_API_KEY=eu_live_xxxxxxxxxxxx \
-- npx -y @eusend_dev/mcpClaude Desktop, Cursor, and other JSON-configured clients
{
"mcpServers": {
"eusend": {
"command": "npx",
"args": ["-y", "@eusend_dev/mcp"],
"env": {
"EUSEND_API_KEY": "eu_live_xxxxxxxxxxxx",
"EUSEND_FROM": "[email protected]"
}
}
}
}Setting EUSEND_FROM pins a default sender, so the assistant doesn't have to
guess an address on every send. It must be on a
verified domain.
Available tools
| Parameter | Type | Description |
|---|---|---|
Emails | 4 tools | send_email, list_emails, get_email, cancel_email — send transactional mail and inspect delivery. |
Domains | 3 tools | list_domains, get_domain, create_domain — add a sending domain and read back its DNS records. |
Audiences & contacts | 4 tools | list_audiences, create_audience, list_contacts, create_contact — manage contact lists. |
Broadcasts | 4 tools | list_broadcasts, get_broadcast, create_broadcast, send_broadcast — create and send a broadcast to an audience. |
Destructive actions — deleting domains, audiences, contacts, or API keys — are
intentionally not exposed to the assistant. Broadcasts are also two steps:
create_broadcast only drafts, and send_broadcast is a separate call, so a
bulk send is never a single accidental action.
The sender address
Like every other way to send through eusend, the from address must use a domain
you have verified. Sends from an unverified domain fail with DOMAIN_NOT_VERIFIED
— see Domain Setup to add one. Pin a default with EUSEND_FROM
(local) so the assistant always has a valid sender to use.