Campaign Monitor MCP
This server provides comprehensive control over Campaign Monitor through 113 tools covering the full Campaign Monitor REST API, including:
Campaigns: List, create, send, schedule, preview, and delete campaigns; retrieve detailed stats (opens, clicks, bounces, unsubscribes, spam complaints, email client usage).
Subscribers: Add, update, import in bulk, unsubscribe, delete, and view individual subscriber details and campaign history.
Lists: Create, update, and delete subscriber lists; manage custom fields, webhooks, and segments; query active, unsubscribed, unconfirmed, and deleted subscribers; get list statistics.
Journeys (Automations): List journeys, view per-email stats (recipients, opens, clicks, bounces, unsubscribes), publish trigger events, and copy journeys to other clients.
Transactional Emails: Send classic and smart transactional emails, list smart email templates, monitor stats and message timelines, and resend individual messages.
Clients: Create, manage, and delete clients; handle suppression lists, sending domains, billing configuration (pay-as-you-go or monthly), credit transfers, and client users.
Account: Manage administrators and primary contacts, retrieve billing details, get valid countries/timezones, get system date/time, and create external login sessions for iframe embedding.
Provides tools to manage Campaign Monitor email campaigns, subscriber lists, journeys, segments, transactional email, clients, and account settings.
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., "@Campaign Monitor MCP Create a new email campaign for the 'VIP Customers' list"
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.
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 | bashThe script will:
Check you have Node.js 18+ and Git (and tell you how to install them if not)
Download this repo to
~/claude-tools/cmon-mcpBuild the server
Ask for your Campaign Monitor API key
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
Node.js 18+
Manual installation
If you prefer to set things up yourself:
Clone this repo and install dependencies:
git clone https://github.com/pauliowest/cmon-mcp.git
cd cmon-mcp
npm install
npm run buildAdd to your
claude_desktop_config.json(found at~/Library/Application Support/Claude/claude_desktop_config.jsonon 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": ""
}
}
}
}Restart Claude Desktop.
Environment Variables
Variable | Required | Description |
| ✅ | Your Campaign Monitor API key |
| 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 testingArchitecture
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 emailLicense
MIT
Available Tools
113 toolsactivate_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
Scored across 113 tools
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.
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.
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.
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
Related MCP Connectors
Campaign Monitor MCP server for ChatGPT, Claude and any AI agent: get campaign report, list who did not open, create segment from campaign, create campaign draft, schedule campaign, add subscriber and turn journey on or off in your own Campaign Monitor account. Cotlet works in the account through your Cloud Browser, a real Chrome where you sign in to Campaign Monitor yourself; Cotlet does not store your password and you need no Campaign Monitor API key. About the official Campaign Monitor API: Campaign Monitor has a full public REST API, v3.3, for lists, subscribers, segments, campaigns, reports and transactional email, and no official MCP server (checked 22 Oct 2026). Any account holder can get an API key in account settings or register an OAuth app. Setup and FAQ: https://cotlet.dev/integrations/campaign-monitor-api-mcp-server
AI-controlled email ops for campaigns, contacts, segments, analytics, and sending.
AI-native email marketing. Campaigns, automations, transactional, contacts, and analytics.
Read lists, contacts, campaign stats; add contacts; draft, schedule and send campaigns and SMS.
Related MCP Servers
AlicenseBqualityCmaintenanceEnables 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.1002,940 npm3MIT- FlicenseNot gradedqualityDmaintenanceEnables interaction with the Mailchimp API for managing campaigns, lists, templates, reports, and automations through natural language.3-
- AlicenseNot gradedqualityBmaintenanceManage Mailchimp audiences, campaigns, and members via the Mailchimp Marketing API through natural language queries.156 npmMIT
- AlicenseBqualityDmaintenanceEnables to interact with Zoho Campaigns API v1.1, supporting OAuth2 authentication, contact and campaign management, bounced contact queries, and more, through natural language.11MIT