EmailOctopus MCP Server
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@EmailOctopus MCP Server How did last Tuesday's newsletter do? Which links got clicked?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
EmailOctopus MCP Server
A Model Context Protocol server for EmailOctopus. It lets Claude, Cursor, ChatGPT and other AI agents manage your lists and contacts, read campaign results, and start automations.
Unofficial. This is a community project and is not affiliated with EmailOctopus. It was built from the public API v2 docs.
What you can ask your agent
"How did last Tuesday's newsletter do compared to the one before? Which links got clicked?"
"Tag everyone who clicked the pricing link in campaign X as
hot-lead.""Add these 12 webinar attendees to the Newsletter list with their first names and tag them
webinar-oct.""Who signed up this week? Summarize by source field."
"Unsubscribe jane@acme.com from all lists."
Related MCP server: Mailchimp MCP Server
Tools
Tool | What it does | Writes? |
| Lists with counts, fields and tags | No |
| Create a mailing list | Yes |
| Segment by tag, status, created/updated date range; paginated | No |
| Look up by email address or ID | No |
| Add or update by email, with fields, tags to add/remove, and status | Yes |
| Change email, fields, tags or status (for example, unsubscribe) | Yes |
| Permanently delete a contact | Destructive |
| Campaign list and details | No |
| Summary stats plus per-link clicks in one call | No |
| Who opened / clicked / bounced / did not open, etc. | No |
| Queue a contact into an API-triggered automation | Yes |
Notes for agents and humans:
Contacts can be referenced by email address. The server converts emails to the MD5 form EmailOctopus expects.
Tags are sent as simple
add_tags/remove_tagsarrays. The server builds EmailOctopus'{tag: true/false}patch format for you.Destructive tools carry MCP
destructiveHintannotations, so clients can ask before running them.
Setup
Create an API key at EmailOctopus → Settings → API keys.
Build it:
git clone https://github.com/OfirOhan/emailoctopus-mcp.git
cd emailoctopus-mcp && npm install && npm run buildClaude Desktop
{
"mcpServers": {
"emailoctopus": {
"command": "node",
"args": ["/absolute/path/to/emailoctopus-mcp/dist/index.js"],
"env": { "EMAILOCTOPUS_API_KEY": "your_api_key" }
}
}
}Claude Code / Cursor / other MCP clients
claude mcp add emailoctopus -e EMAILOCTOPUS_API_KEY=your_api_key -- node /path/to/emailoctopus-mcp/dist/index.jsDevelopment
npm install
npm test # builds, runs unit tests and an end-to-end MCP stdio test against a fake EmailOctopus APIThe tests run on Node 20, 22 and 24 in CI.
Author
Built by Ofir Ohana, an AI agents engineer. Issues and PRs are welcome.
License
MIT
Available Tools
13 toolscampaign_recipientsCampaign recipients by outcomeBRead-only
List contacts who opened, clicked, bounced, unsubscribed, complained, or did NOT open/click a campaign.
Inputs: status (required), campaignId (required), limit, starting_after.
campaign_reportCampaign performanceARead-only
Get a campaign's results: the summary (sent, opens, clicks, bounces, unsubscribes, complaints) plus per-link click counts. Good for 'how did last week's newsletter do?'.
Inputs: campaignId (required).
create_listCreate listC
Create a new mailing list.
Inputs: name (required).
delete_contactDelete contactADestructive
Permanently delete a contact from a list. Prefer update_contact with status=unsubscribed. Confirm with the user first.
Inputs: listId (required), contact (required).
get_campaignGet campaignBRead-only
Get a campaign's subject, sender, content and target lists.
Inputs: campaignId (required).
get_contactGet contactBRead-only
Look up a contact in a list by ID or email address.
Inputs: listId (required), contact (required).
get_listGet listBRead-only
Get one list, including its custom fields and tags.
Inputs: listId (required).
list_campaignsList campaignsARead-only
List email campaigns (newest first) with status and send dates.
Inputs: limit, starting_after.
list_contactsList / segment contactsARead-only
List contacts in a list, filtered by tag, status, and created/updated date ranges (ISO 8601). Paginated, up to 100 per page.
Inputs: listId (required), tag, limit, status, +5 more.
list_listsList mailing listsBRead-only
List all mailing lists with their contact counts.
Inputs: limit, starting_after.
trigger_automationStart automation for contactA
Queue a contact into an automation that uses the 'Started via API' trigger. This sends real emails, so confirm with the user.
Inputs: contact (required), automationId (required).
update_contactUpdate contactB
Update an existing contact's email, fields, tags or status (for example, unsubscribe someone).
Inputs: listId (required), contact (required), fields, status, +3 more.
upsert_contactAdd or update contactB
Create a contact, or update it if the email already exists in the list. Set custom fields by their tag (e.g. FirstName), add/remove tags, and set status.
Inputs: listId (required), email_address (required), fields, status, +2 more.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 13 tools
Most tools have clearly distinct resource/action targets, and descriptions help separate similar tools. However, upsert_contact and update_contact overlap because both can modify an existing contact, though upsert_contact's create-if-missing behavior differentiates them. Campaign reporting tools are well separated.
The set is mostly consistent with snake_case verb_noun names such as get_contact, update_contact, and list_campaigns. A few tools like campaign_report and campaign_recipients deviate from the verb_noun pattern, but the naming is still predictable and readable overall.
With 13 tools, the server is well-scoped for contact, list, campaign, and automation interactions. Each tool covers a meaningful operation without excessive duplication or padding.
Contact lifecycle coverage is strong, including list, get, upsert, update, and delete, and list basics are present. However, campaign tools only read and report on campaigns—there is no create/send/update campaign operation—and list update/delete tools are missing, which are notable gaps for an EmailOctopus management server.
Related MCP Connectors
Run email marketing from your AI assistant: contacts, newsletters, automations, behavior emails.
Send email, manage domains, templates, webhooks and broadcasts from your AI agent.
AI-controlled email ops for campaigns, contacts, segments, analytics, and sending.
AI-native email marketing. Campaigns, automations, transactional, contacts, and analytics.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables AI agents to manage email newsletters and contacts via Resend, including sending broadcasts to segments, managing subscribers in bulk, scheduling campaigns, and tracking delivery status using human-friendly identifiers.18,684 npm5MIT
- FlicenseNot gradedqualityDmaintenanceEnables interaction with the Mailchimp API for managing campaigns, lists, templates, reports, and automations through natural language.3-

Mailjet MCP Serverofficial
AlicenseNot gradedqualityCmaintenanceEnables AI agents to interact with Mailjet's contact, campaign, segmentation, statistics, and workflow APIs for managing email marketing operations through natural language.316 npm14Apache 2.0- FlicenseNot gradedqualityDmaintenanceEnables AI agents to programmatically manage email outreach campaigns, leads, domains, senders, and webhook events, as well as send emails, through the Model Context Protocol over HTTP.-