Skip to main content
Glama
Campaign Monitor MCP

Campaign Monitor MCP

by pauliowest

Campaign Monitor MCP

A Model Context Protocol (MCP) server that wraps the full Campaign Monitor REST API v3.3, giving Claude the ability to manage email campaigns, subscriber lists, journeys, segments, transactional email, and more via natural language.

Quick install (Mac)

Open Terminal and run:

curl -fsSL https://raw.githubusercontent.com/pauliowest/cmon-mcp/main/install.sh | bash

The script will:

  1. Check you have Node.js 18+ and Git (and tell you how to install them if not)

  2. Download this repo to ~/claude-tools/cmon-mcp

  3. Build the server

  4. Ask for your Campaign Monitor API key

  5. Add the server to Claude Desktop automatically

Then quit and relaunch Claude Desktop — Campaign Monitor will appear as a connected integration.

API key: find yours in Campaign Monitor under Account Settings → API Keys.
Agency accounts: leave the Client ID blank — the server discovers all your clients automatically at startup.


Related MCP server: Mailchimp MCP Server

Features

113 tools covering the complete Campaign Monitor API:

  • 📧 Campaigns — create, send, schedule, preview, and pull stats (opens, clicks, bounces, spam)

  • 👥 Subscribers — add, update, import in bulk, unsubscribe, delete, view history

  • 📋 Lists — full CRUD, custom fields, webhooks, subscriber state queries

  • 🔀 Segments — create and manage rule-based segments, query matching subscribers

  • 🤖 Journeys — list automations, view per-email stats, publish trigger events

  • 📄 Templates — create, update, copy templates across clients

  • ⚡ Transactional — send classic and smart emails, view message timeline and stats

  • 🏢 Clients — manage clients, people, suppression lists, sending domains, billing

  • ⚙️ Account — admins, billing details, primary contact, timezones

Requirements

Manual installation

If you prefer to set things up yourself:

  1. Clone this repo and install dependencies:

git clone https://github.com/pauliowest/cmon-mcp.git
cd cmon-mcp
npm install
npm run build
  1. Add to your claude_desktop_config.json (found at ~/Library/Application Support/Claude/claude_desktop_config.json on macOS):

{
  "mcpServers": {
    "Campaign Monitor": {
      "command": "node",
      "args": ["/path/to/cmon-mcp/dist/index.js"],
      "env": {
        "CM_API_KEY": "your_api_key_here",
        "CM_CLIENT_ID": ""
      }
    }
  }
}
  1. Restart Claude Desktop.

Environment Variables

Variable

Required

Description

CM_API_KEY

✅

Your Campaign Monitor API key

CM_CLIENT_ID

Optional

Default client ID — tools fall back to this when no client is specified explicitly

Development

npm run build      # compile TypeScript → dist/
npm run dev        # watch mode
npm run inspector  # open MCP Inspector UI for manual tool testing

Architecture

src/
  index.ts              # Entry point — wires up MCP server + stdio transport
  client.ts             # CampaignMonitorClient — all HTTP + Basic Auth
  tools/
    account.ts          # 11 tools — billing, admins, timezones
    campaigns.ts        # 17 tools — CRUD, send, stats
    clients.ts          # 19 tools — client management, people, domains
    journeys.ts         # 8 tools  — automations + stats
    lists.ts            # 20 tools — CRUD, custom fields, webhooks
    segments.ts         # 7 tools  — rule-based segments
    subscribers.ts      # 7 tools  — add, import, manage
    templates.ts        # 5 tools  — template management
    transactional.ts    # 9 tools  — classic + smart email

License

MIT

Available Tools

113 tools
activate_webhookB

Activate a webhook for a subscriber list

Inputs: list_id (required), webhook_id (required).

add_adminB

Add a new administrator to the account

Inputs: email (required), name (required).

add_client_personB

Add a person to a client with a specified access level

Inputs: email (required), name (required), access_level (required), password (required), +1 more.

add_segment_rule_groupB

Add a rule group to an existing segment

Inputs: segment_id (required), rule_group (required).

add_sending_domainC

Add a sending domain for a client

Inputs: domain (required), client_id.

add_subscriberC

Add a subscriber to a list

Inputs: list_id (required), email_address (required), consent_to_track (required), name, +2 more.

add_to_suppression_listB

Add email addresses to a client's suppression list

Inputs: emails (required), client_id.

authenticate_sending_domainC

Verify DNS records and authenticate a sending domain for a client

Inputs: domain (required), client_id.

clear_segment_rulesA

Remove all rules from a segment

Inputs: segment_id (required).

copy_journeyB

Copy a journey to a specified client

Inputs: journey_id (required), client_id (required).

copy_sending_domainB

Copy a verified sending domain to another client

Inputs: domain (required), destination_client_id (required), client_id.

copy_templateB

Copy a template to another client

Inputs: template_id (required), client_id.

create_campaignC

Create a new draft campaign in Campaign Monitor

Inputs: name (required), subject (required), from_name (required), from_email (required), +6 more.

create_campaign_from_templateC

Create a new campaign from a Campaign Monitor template

Inputs: name (required), subject (required), from_name (required), from_email (required), +5 more.

create_clientB

Create a new Campaign Monitor client

Inputs: company_name (required), country (required), timezone (required).

create_custom_fieldB

Create a new custom field for a subscriber list

Inputs: list_id (required), field_name (required), data_type (required), visible_in_preference_center.

create_external_sessionA

Initiate a new login session for embedding Campaign Monitor in an iframe

Inputs: email (required), chrome (required), url (required), integrator_id (required), +1 more.

create_listB

Create a new subscriber list

Inputs: title (required), unsubscribe_page, confirmed_opt_in_page, confirmation_success_page, +1 more.

create_segmentB

Create a new segment for a subscriber list

Inputs: list_id (required), title (required), rule_groups.

create_templateB

Create a new email template for a client

Inputs: name (required), client_id, html_page_url, zip_file_url.

create_webhookB

Create a webhook for a subscriber list

Inputs: list_id (required), url (required), events (required), payload_format (required).

deactivate_webhookA

Deactivate a webhook for a subscriber list

Inputs: list_id (required), webhook_id (required).

delete_adminB

Remove an administrator from the account

Inputs: email (required).

delete_campaignA

Delete a draft campaign

Inputs: campaign_id (required).

delete_clientB

Delete a Campaign Monitor client

Inputs: client_id.

delete_client_personB

Remove a person's access to a client

Inputs: email (required), client_id.

delete_custom_fieldB

Delete a custom field from a subscriber list

Inputs: list_id (required), field_key (required).

delete_listB

Delete a subscriber list

Inputs: list_id (required).

delete_segmentB

Delete a segment

Inputs: segment_id (required).

delete_sending_domainB

Delete a sending domain from a client

Inputs: domain (required), client_id.

delete_subscriberA

Permanently delete a subscriber from a list

Inputs: list_id (required), email (required).

delete_templateB

Delete an email template

Inputs: template_id (required).

delete_webhookB

Delete a webhook from a subscriber list

Inputs: list_id (required), webhook_id (required).

get_active_subscribersB

Get a paginated list of active subscribers for a list

Inputs: list_id (required), date, page, page_size.

get_adminB

Get details for a specific administrator by email

Inputs: email (required).

get_adminsA

List all administrators for the account

Inputs: no named parameters.

get_billing_detailsB

Get account billing info and credits

Inputs: no named parameters.

get_campaign_bouncesA

Get a paginated list of subscribers who bounced for a campaign

Inputs: campaign_id (required), page, page_size.

get_campaign_clicksB

Get a paginated list of subscribers who clicked links in a campaign

Inputs: campaign_id (required), page, page_size.

get_campaign_email_client_usageA

Get email client usage stats for a campaign

Inputs: campaign_id (required).

get_campaign_lists_and_segmentsA

Get which lists and segments a campaign was sent to

Inputs: campaign_id (required).

get_campaign_opensB

Get a paginated list of subscribers who opened a campaign

Inputs: campaign_id (required), page, page_size.

get_campaign_recipientsC

Get a paginated list of recipients for a campaign

Inputs: campaign_id (required), page, page_size.

get_campaign_spamB

Get spam complaints for a campaign

Inputs: campaign_id (required), page, page_size.

get_campaign_summaryC

Get statistics summary for a campaign

Inputs: campaign_id (required).

get_campaign_unsubscribesB

Get a paginated list of subscribers who unsubscribed via a campaign

Inputs: campaign_id (required), page, page_size.

get_classic_email_groupsB

List all classic email groups for a client

Inputs: client_id.

get_client_detailsB

Get detailed information about a specific Campaign Monitor client

Inputs: client_id (required).

get_client_peopleB

List all people with access to a client

Inputs: client_id.

get_client_primary_contactC

Get the primary contact for a client

Inputs: client_id.

get_clientsA

List all clients accessible with the current API key

Inputs: no named parameters.

get_client_tagsA

Get all campaign tags for a client

Inputs: client_id.

get_countriesA

List all valid countries for Campaign Monitor

Inputs: no named parameters.

get_custom_fieldsA

Get all custom fields for a subscriber list

Inputs: list_id (required).

get_deleted_subscribersB

Get a paginated list of deleted subscribers for a list

Inputs: list_id (required), page, page_size.

get_journey_email_bouncesB

Get a paginated list of bounces for a journey email

Inputs: email_id (required), page, page_size.

get_journey_email_clicksB

Get a paginated list of clicks for a journey email

Inputs: email_id (required), page, page_size.

get_journey_email_opensC

Get a paginated list of opens for a journey email

Inputs: email_id (required), page, page_size.

get_journey_email_recipientsA

Get a paginated list of recipients for a journey email

Inputs: email_id (required), page, page_size.

get_journey_email_unsubscribesB

Get a paginated list of unsubscribes for a journey email

Inputs: email_id (required), page, page_size.

get_journeysC

List all journeys for the Campaign Monitor client

Inputs: client_id.

get_journey_summaryB

Get full stats summary for a journey

Inputs: journey_id (required).

get_list_detailsC

Get details of a subscriber list

Inputs: list_id (required).

get_listsB

List all subscriber lists for the Campaign Monitor client

Inputs: client_id.

get_lists_for_emailA

Get all lists a particular email address is subscribed to for a client

Inputs: email (required), client_id.

get_list_statsB

Get statistics for a subscriber list

Inputs: list_id (required).

get_primary_contactC

Get the primary contact email for the account

Inputs: no named parameters.

get_segment_detailsB

Get details for a segment including its rules

Inputs: segment_id (required).

get_segmentsB

Get all segments for a subscriber list

Inputs: list_id (required).

get_segment_subscribersB

Get active subscribers matching a segment's rules

Inputs: segment_id (required), page, page_size.

get_sending_domainsB

Get all sending domains for a client

Inputs: client_id.

get_smart_email_detailsA

Get full configuration and details for a smart email template

Inputs: smart_email_id (required).

get_subscriberA

Get details for a subscriber in a list

Inputs: list_id (required), email (required).

get_subscriber_historyB

Get the campaign history for a subscriber in a list

Inputs: list_id (required), email (required).

get_suppression_listB

Get the suppression list for a client

Inputs: client_id, page, page_size.

get_system_dateA

Get the current date/time in the account timezone

Inputs: no named parameters.

get_templateB

Get details for an email template

Inputs: template_id (required).

get_timezonesB

List all valid timezones for Campaign Monitor

Inputs: no named parameters.

get_transactional_message_detailsC

Get details for a single transactional message

Inputs: message_id (required).

get_transactional_statsC

Get transactional email statistics

Inputs: from, to, timezone, group, +1 more.

get_transactional_timelineC

Get a timeline of transactional messages

Inputs: status, count, client_id.

get_unconfirmed_subscribersA

Get a paginated list of unconfirmed subscribers for a list

Inputs: list_id (required), page, page_size.

get_unsubscribed_subscribersA

Get a paginated list of unsubscribed subscribers for a list

Inputs: list_id (required), date, page, page_size.

import_subscribersB

Bulk import subscribers into a list

Inputs: list_id (required), subscribers (required), resubscribe, queue_subscription_based_auto_responders.

list_campaignsB

List all sent campaigns for the Campaign Monitor client

Inputs: client_id.

list_draft_campaignsB

List all draft campaigns for the Campaign Monitor client

Inputs: client_id.

list_scheduled_campaignsB

List all scheduled campaigns for the Campaign Monitor client

Inputs: client_id.

list_smart_emailsB

List all available smart email templates for the client

Inputs: client_id.

list_templatesB

List all email templates for a client

Inputs: client_id.

publish_journey_eventB

Publish an event to trigger a subscriber activity journey

Inputs: event_data (required), client_id.

remove_from_suppression_listB

Remove an email address from a client's suppression list

Inputs: email (required), client_id.

resend_transactional_messageB

Resend a previously sent transactional message

Inputs: message_id (required).

send_campaignA

Send or schedule a campaign for delivery

Inputs: campaign_id (required), confirmation_email (required), send_date.

send_campaign_previewA

Send a preview of a campaign to one or more email addresses

Inputs: campaign_id (required), preview_recipients (required), personalize.

send_classic_emailB

Send a one-off transactional email via Campaign Monitor

Inputs: to (required), from (required), subject (required), consent_to_track (required), +5 more.

send_smart_emailC

Send a transactional email using a Campaign Monitor smart email template

Inputs: smart_email_id (required), to (required), consent_to_track (required), cc, +2 more.

set_client_monthly_billingB

Configure monthly billing for a client

Inputs: currency (required), client_pays (required), markup_percentage (required), monthly_scheme (required), +1 more.

set_client_payg_billingB

Configure pay-as-you-go billing for a client

Inputs: currency (required), can_purchase_credits (required), client_pays (required), markup_percentage (required), +1 more.

set_client_primary_contactC

Set the primary contact for a client

Inputs: email (required), client_id.

set_primary_contactC

Set the primary contact for the account

Inputs: email (required).

test_webhookB

Send a test payload to a webhook

Inputs: list_id (required), webhook_id (required).

transfer_creditsC

Transfer credits to or from a client

Inputs: credits (required), can_use_my_credits (required), client_id.

unschedule_campaignA

Unschedule a scheduled campaign and return it to draft status

Inputs: campaign_id (required).

unsubscribe_subscriberC

Unsubscribe a subscriber from a list

Inputs: list_id (required), email (required).

update_adminB

Update an existing administrator's details

Inputs: current_email (required), new_email (required), name (required).

update_client_basicsC

Update a client's basic details including company name, country, and timezone

Inputs: company_name (required), country (required), timezone (required), client_id.

update_client_personB

Update a person's details or access level for a client

Inputs: current_email (required), new_email (required), name (required), access_level (required), +1 more.

update_custom_fieldC

Update an existing custom field on a subscriber list

Inputs: list_id (required), field_key (required), field_name (required), visible_in_preference_center.

update_custom_field_optionsB

Update the options available for a multi-select or select custom field

Inputs: list_id (required), field_key (required), options (required), keep_existing.

update_listC

Update settings for a subscriber list

Inputs: list_id (required), title (required), unsubscribe_page, confirmed_opt_in_page, +1 more.

update_segmentA

Update an existing segment's title and/or rules

Inputs: segment_id (required), title (required), rule_groups.

update_subscriberB

Update a subscriber's details in a list

Inputs: list_id (required), email (required), new_email, name, +2 more.

update_templateC

Update an existing email template

Inputs: template_id (required), name (required), html_page_url, zip_file_url.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    B3/5.0

    Scored across 113 tools

    Disambiguation5/5

    Each tool targets a distinct resource and action, with clear descriptions that differentiate them. For example, bounce, click, open, and unsubscribe stats are separated per campaign or journey, avoiding ambiguity.

    Naming Consistency3/5

    Most tools use verb_noun pattern, but verbs are inconsistent: 'get' vs 'list' for similar operations (e.g., 'get_lists' vs 'list_campaigns'), and 'add' vs 'create' (e.g., 'add_subscriber' vs 'create_campaign'). This reduces predictability.

    Tool Count1/5

    With 113 tools, the count far exceeds the typical well-scoped range (3-15). Even for a full API, this is overwhelming and likely to cause confusion or tool selection errors.

    Completeness5/5

    The tool set covers all major Campaign Monitor features: clients, lists, subscribers, campaigns, journeys, templates, webhooks, sending domains, admins, billing, transactional email, and more. No obvious gaps in lifecycle or reporting.

    Maintenance

    ActivityInactive
    ResponsivenessOutdated data

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      B
      quality
      C
      maintenance
      Enables management of AI-powered email marketing automation, including subscriber segments, campaigns, and templates. It allows users to generate email sequences with AI and track detailed analytics through natural language commands.
      100
      2,940 npm
      3
      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
      B
      maintenance
      Manage Mailchimp audiences, campaigns, and members via the Mailchimp Marketing API through natural language queries.
      156 npm
      MIT
    • A
      license
      B
      quality
      D
      maintenance
      Enables to interact with Zoho Campaigns API v1.1, supporting OAuth2 authentication, contact and campaign management, bounced contact queries, and more, through natural language.
      11
      MIT