Skip to main content
Glama
EmailOctopus MCP Server

EmailOctopus MCP Server

by OfirOhan

EmailOctopus MCP Server

CI MCP License: MIT

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?

list_lists / get_list

Lists with counts, fields and tags

No

create_list

Create a mailing list

Yes

list_contacts

Segment by tag, status, created/updated date range; paginated

No

get_contact

Look up by email address or ID

No

upsert_contact

Add or update by email, with fields, tags to add/remove, and status

Yes

update_contact

Change email, fields, tags or status (for example, unsubscribe)

Yes

delete_contact

Permanently delete a contact

Destructive

list_campaigns / get_campaign

Campaign list and details

No

campaign_report

Summary stats plus per-link clicks in one call

No

campaign_recipients

Who opened / clicked / bounced / did not open, etc.

No

trigger_automation

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_tags arrays. The server builds EmailOctopus' {tag: true/false} patch format for you.

  • Destructive tools carry MCP destructiveHint annotations, so clients can ask before running them.

Setup

  1. Create an API key at EmailOctopus → Settings → API keys.

  2. Build it:

git clone https://github.com/OfirOhan/emailoctopus-mcp.git
cd emailoctopus-mcp && npm install && npm run build

Claude 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.js

Development

npm install
npm test   # builds, runs unit tests and an end-to-end MCP stdio test against a fake EmailOctopus API

The 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 tools
campaign_recipientsCampaign recipients by outcomeB
Read-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 performanceA
Read-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 contactA
Destructive

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 campaignB
Read-only

Get a campaign's subject, sender, content and target lists.

Inputs: campaignId (required).

get_contactGet contactB
Read-only

Look up a contact in a list by ID or email address.

Inputs: listId (required), contact (required).

get_listGet listB
Read-only

Get one list, including its custom fields and tags.

Inputs: listId (required).

list_campaignsList campaignsA
Read-only

List email campaigns (newest first) with status and send dates.

Inputs: limit, starting_after.

list_contactsList / segment contactsA
Read-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 listsB
Read-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

    B3.4/5.0

    Scored across 13 tools

    Disambiguation4/5

    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.

    Naming Consistency4/5

    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.

    Tool Count5/5

    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.

    Completeness3/5

    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

    Related MCP Servers

    • A
      license
      Not graded
      quality
      D
      maintenance
      Enables 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 npm
      5
      MIT
    • F
      license
      Not graded
      quality
      D
      maintenance
      Enables interaction with the Mailchimp API for managing campaigns, lists, templates, reports, and automations through natural language.
      3
      -
    • A
      license
      Not graded
      quality
      C
      maintenance
      Enables AI agents to interact with Mailjet's contact, campaign, segmentation, statistics, and workflow APIs for managing email marketing operations through natural language.
      316 npm
      14
      Apache 2.0
    • F
      license
      Not graded
      quality
      D
      maintenance
      Enables 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.
      -