100+ integrations are ready to connect to your AI.Connect your first MCP

Campaign Monitor MCP server for your AI

Import subscribers, trace why someone stopped getting email, build a segment, draft a campaign from a template, send a test, schedule it in the client's time zone, then read opens, clicks and bounces.

PopMCPCampaign Monitor

Why has priya@lumenlabs.io stopped getting our newsletter

Supported Campaign Monitor tools

Every Campaign Monitor operation the agent can call, from subscribers and segments to campaign reports and transactional email, plus the events PopMCP can watch.

campaignmonitor_add_subscriber

Add a subscriber to a list, or update them if they're already on it.

campaignmonitor_get_lists_for_email

Every list an email address is on, with its state there: [{ ListID, ListName, SubscriberState (Active | Unconfirmed | Unsubscribed | Bounced | Deleted), DateSubscriberAdded }].

campaignmonitor_get_subscriber

One subscriber on a list: { EmailAddress, Name, MobileNumber, ListJoinedDate, Date, State (Active | Unconfirmed | Unsubscribed | Bounced | Deleted), CustomFields, ReadsEmailWith, ConsentToTrack, ConsentToSendSms }.

campaignmonitor_get_subscriber_history

Everything a subscriber did with the campaigns and journey emails sent to them: [{ ID, Type (Campaign | Automation), Name, Actions [{ Event (Open | Click | Bounce …), Date, IPAddress, Detail }] }].

campaignmonitor_import_subscribers

Add or update up to 1,000 subscribers in one call.

campaignmonitor_list_active_subscribers

Active (subscribed) subscribers on a list: Results [{ EmailAddress, Name, MobileNumber, ListJoinedDate, Date, State, CustomFields [{ Key, Value }], ReadsEmailWith, ConsentToTrack?, ConsentToSendSms? }].

campaignmonitor_unsubscribe_subscriber

Unsubscribe someone from a list (and from all the client's lists when the list's UnsubscribeSetting is AllClientLists).

campaignmonitor_update_subscriber

Update a subscriber's email address, name, mobile number, custom fields or consent.

campaignmonitor_get_client

The connected client's details: BasicDetails { ClientID, CompanyName, Country, TimeZone, PrimaryContactName, PrimaryContactEmail } and BillingDetails.

campaignmonitor_create_campaign

Create a DRAFT campaign from HTML hosted at a public URL.

campaignmonitor_create_campaign_from_template

Create a DRAFT campaign by filling a template's editable regions.

campaignmonitor_list_draft_campaigns

Draft (unsent) campaigns: [{ CampaignID, Name, Subject, FromName, FromEmail, ReplyTo, DateCreated, PreviewURL, PreviewTextURL, Tags }].

campaignmonitor_list_sent_campaigns

Sent campaigns, newest first: Results [{ CampaignID, Name, Subject, FromName, FromEmail, ReplyTo, SentDate, TotalRecipients, WebVersionURL, WebVersionTextURL, Tags }].

campaignmonitor_send_campaign

Send or schedule a DRAFT campaign to its lists/segments.

campaignmonitor_send_campaign_preview

Send a test copy of a draft campaign to up to 15 addresses (240 preview addresses per 24 hours).

campaignmonitor_create_segment

Create a segment (a saved filter) on a list.

campaignmonitor_list_segments

Every segment across the client's lists: [{ ListID, SegmentID, Title }].

campaignmonitor_list_smart_emails

The client's smart transactional emails (templates designed in Campaign Monitor for receipts, password resets…): [{ ID, Name, CreatedAt, Status }].

campaignmonitor_list_transactional_messages

Recently sent transactional messages, newest first: [{ MessageID, Status, SentAt, Recipient, From, Subject, TotalOpens, TotalClicks, CanBeResent, Group | SmartEmailID, BounceType?, BounceCategory? }].

campaignmonitor_send_classic_email

Send an one-off transactional email with your own subject and HTML (no template).

campaignmonitor_send_smart_email

Send a smart transactional email to specific people, filling its variables from Data.

campaignmonitor_get_campaign_summary

Headline results of a sent campaign: { Name, Recipients, TotalOpened, UniqueOpened, Clicks, Unsubscribed, Bounced, SpamComplaints, Forwards, Likes, Mentions, WebVersionURL, WebVersionTextURL, WorldviewURL }.

campaignmonitor_get_journey

A journey's summary and per-email results: { JourneyID, Name, TriggerType, Status, Emails [{ EmailID, Name, Sent, Opened, UniqueOpened, Clicked, Unsubscribed, Bounced }] }.

campaignmonitor_list_campaign_bounces

A campaign's bounces: Results [{ EmailAddress, ListID, BounceType (Hard | Soft), Date, Reason }].

campaignmonitor_list_campaign_clicks

Every link click in a campaign: Results [{ EmailAddress, URL, ListID, Date, IPAddress, Latitude, Longitude, City, Region, CountryCode, CountryName }].

campaignmonitor_list_campaign_opens

Every open of a campaign (one row per open): Results [{ EmailAddress, ListID, Date, IPAddress, Latitude, Longitude, City, Region, CountryCode, CountryName }].

campaignmonitor_list_journeys

The client's journeys (automations): [{ JourneyID, ListID, Name, Status }].

campaignmonitor_create_list

Create a subscriber list.

campaignmonitor_get_list_stats

A list's size and growth: TotalActiveSubscribers, TotalUnsubscribes, TotalDeleted, TotalBounces, plus New/Unsubscribes/Deleted/Bounces for Today, Yesterday, ThisWeek, ThisMonth and ThisYear.

campaignmonitor_list_lists

Every subscriber list in the client: [{ ListID, Name }].

campaignmonitor_list_templates

The client's email templates: [{ TemplateID, Name, PreviewURL, ScreenshotURL }].

campaignmonitor_list_custom_fields

A list's custom fields: [{ FieldName, Key (e.g. "[City]"), DataType, FieldOptions, VisibleInPreferenceCenter }].

campaignmonitor_list_suppressions

The client's suppression list (addresses nothing will be sent to): Results [{ EmailAddress, Date, State, SuppressionReason }].

campaignmonitor_add_administrator

Invite a new account administrator (they get an email invitation).

campaignmonitor_create_client

Create a new client (agency accounts only; 403 Code 403 otherwise).

campaignmonitor_create_embedded_session

Create a single-use login URL that opens Campaign Monitor (e.g. in an iframe) as a given user: { SessionUrl }.

campaignmonitor_delete_administrator

Remove an administrator from the account.

campaignmonitor_delete_subscriber

Move a subscriber to the list's Deleted state.

campaignmonitor_get_billing_details

The account's remaining credits: { Credits }.

campaignmonitor_get_primary_contact

The account's primary contact: { EmailAddress }.

campaignmonitor_get_system_date

Campaign Monitor's current server date and time: { SystemDate: "YYYY-MM-DD HH:MM:SS" }.

campaignmonitor_list_administrators

Account administrators: [{ EmailAddress, Name, Status }].

campaignmonitor_list_bounced_subscribers

Subscribers removed after bouncing on a list: Results [{ EmailAddress, Name, MobileNumber, ListJoinedDate, Date, State, CustomFields [{ Key, Value }], ReadsEmailWith, ConsentToTrack?, ConsentToSendSms? }].

campaignmonitor_list_clients

Every client in the Campaign Monitor account: [{ ClientID, Name }].

campaignmonitor_list_countries

Every country name Campaign Monitor accepts (for clients' Country field and Country custom fields).

campaignmonitor_list_deleted_subscribers

Subscribers deleted from the list on a list: Results [{ EmailAddress, Name, MobileNumber, ListJoinedDate, Date, State, CustomFields [{ Key, Value }], ReadsEmailWith, ConsentToTrack?, ConsentToSendSms? }].

campaignmonitor_list_timezones

Every time zone string Campaign Monitor accepts, e.g. "(GMT+10:00) Canberra, Melbourne, Sydney".

campaignmonitor_list_unconfirmed_subscribers

Subscribers who haven't confirmed yet (double opt-in lists) on a list: Results [{ EmailAddress, Name, MobileNumber, ListJoinedDate, Date, State, CustomFields [{ Key, Value }], ReadsEmailWith, ConsentToTrack?, ConsentToSendSms? }].

campaignmonitor_list_unsubscribed_subscribers

Subscribers who unsubscribed on a list: Results [{ EmailAddress, Name, MobileNumber, ListJoinedDate, Date, State, CustomFields [{ Key, Value }], ReadsEmailWith, ConsentToTrack?, ConsentToSendSms? }].

campaignmonitor_set_primary_contact

Make an existing administrator the account's primary contact.

campaignmonitor_update_administrator

Change an administrator's email address or name.

campaignmonitor_add_person

Give someone access to the client.

campaignmonitor_delete_client

Permanently delete the connected client and ALL its lists, subscribers, campaigns and reports.

campaignmonitor_delete_person

Remove a person's access to the client.

campaignmonitor_get_client_primary_contact

The client's primary contact: { EmailAddress }.

campaignmonitor_list_people

People (users) with access to the client: [{ EmailAddress, Name, AccessLevel, Status }].

campaignmonitor_set_client_basics

Update the client's company name, country and time zone.

campaignmonitor_set_client_monthly_billing

Put the client on monthly billing.

campaignmonitor_set_client_payg_billing

Put the client on pay-as-you-go billing with your markup.

campaignmonitor_set_client_primary_contact

Make an existing person (campaignmonitor_list_people) the client's primary contact.

campaignmonitor_transfer_client_credits

Move email credits between the account and the client (positive Credits gives the client credits, negative takes them back).

campaignmonitor_update_person

Change a person's email, name, access level or password.

campaignmonitor_delete_campaign

Delete a campaign (a draft or scheduled one will never send; a sent one loses its reports).

campaignmonitor_get_campaign_lists_and_segments

The lists and segments a campaign was (or will be) sent to: { Lists: [{ ListID, Name }], Segments: [{ ListID, SegmentID, Title }] }.

campaignmonitor_list_scheduled_campaigns

Campaigns scheduled to send: [{ CampaignID, Name, Subject, DateScheduled, ScheduledTimeZone, FromName, FromEmail, ReplyTo, DateCreated, PreviewURL, PreviewTextURL, Tags }].

campaignmonitor_list_tags

Campaign tags in use: [{ Name, NumberOfCampaigns }].

campaignmonitor_unschedule_campaign

Cancel a scheduled send; the campaign goes back to being a draft (Code 341 if it isn't scheduled).

campaignmonitor_add_segment_rule_group

Add one more rule group to a segment (AND-ed with the existing groups).

campaignmonitor_clear_segment_rules

Remove every rule from a segment (it then matches the whole list).

campaignmonitor_delete_segment

Delete a segment (subscribers are not affected).

campaignmonitor_get_segment

A segment's definition and size: { SegmentID, ListID, Title, ActiveSubscribers, RuleGroups }.

campaignmonitor_get_smart_email

A smart email's details, including Properties.Content.EmailVariables: the variable names to pass as Data when sending it.

campaignmonitor_get_transactional_message

One transactional message: status, recipient, the message itself (From, Subject, To, CC, BCC, Body, Data, attachment names) and, with statistics=true, every open and click.

campaignmonitor_get_transactional_statistics

Delivery totals for transactional email: { Sent, Bounces, Delivered, Opened, Clicked, Query }.

campaignmonitor_list_classic_email_groups

The Group labels used on classic transactional emails: [{ Group, CreatedAt }].

campaignmonitor_list_list_segments

The segments defined on one list: [{ ListID, SegmentID, Title }].

campaignmonitor_list_segment_subscribers

Active subscribers matching a segment: Results [{ EmailAddress, Name, ListJoinedDate, Date, State, CustomFields, ReadsEmailWith }].

campaignmonitor_resend_transactional_message

Send a transactional message again (only when its CanBeResent is true).

campaignmonitor_update_segment

Rename a segment and/or replace ALL its rules (RuleGroups, when given, replaces every existing group).

campaignmonitor_copy_journey

Copy a journey to a list in another (or the same) client.

campaignmonitor_get_campaign_email_client_usage

Which email clients opened a sent campaign: [{ Client, Version, Percentage, Subscribers }].

campaignmonitor_list_campaign_recipients

Everyone a campaign was sent to: Results [{ EmailAddress, ListID }].

campaignmonitor_list_campaign_spam_complaints

Who marked a campaign as spam: Results [{ EmailAddress, ListID, Date }].

campaignmonitor_list_campaign_unsubscribes

Who unsubscribed from a campaign: Results [{ EmailAddress, ListID, Date, IPAddress }].

campaignmonitor_list_journey_email_bounces

Bounces of a journey email: Results [{ EmailAddress, BounceType (Hard | Soft), Date, Reason }].

campaignmonitor_list_journey_email_clicks

Clicks in a journey email: Results [{ EmailAddress, URL, Date, IPAddress, Latitude, Longitude, City, Region, CountryCode, CountryName }].

campaignmonitor_list_journey_email_opens

Opens of a journey email: Results [{ EmailAddress, Date, IPAddress, Latitude, Longitude, City, Region, CountryCode, CountryName }].

campaignmonitor_list_journey_email_recipients

Who a journey email was sent to, by send date: Results [{ EmailAddress, SentDate }].

campaignmonitor_list_journey_email_unsubscribes

Unsubscribes from a journey email: Results [{ EmailAddress, Date, IPAddress }].

campaignmonitor_activate_webhook

Turn a deactivated webhook back on (webhooks are deactivated automatically after a week of failures).

campaignmonitor_copy_template

Copy a template to another client in the account.

campaignmonitor_create_template

Create an email template from hosted HTML.

campaignmonitor_create_webhook

Have Campaign Monitor POST subscriber changes on a list to a URL.

campaignmonitor_deactivate_webhook

Pause a webhook without deleting it.

campaignmonitor_delete_list

Permanently delete a list and all its subscribers, segments and custom fields.

campaignmonitor_delete_template

Delete a template.

campaignmonitor_delete_webhook

Delete a list webhook.

campaignmonitor_get_list

A list's settings: { ListID, Title, ConfirmedOptIn, UnsubscribeSetting, UnsubscribePage, ConfirmationSuccessPage }.

campaignmonitor_get_template

A template: { TemplateID, Name, PreviewURL, ScreenshotURL }.

campaignmonitor_list_webhooks

A list's webhooks: [{ WebhookID, Events, Url, Status, PayloadFormat }].

campaignmonitor_test_webhook

Send a sample payload to a webhook's URL to check it responds (an error here means the URL failed).

campaignmonitor_update_list

Change a list's settings.

campaignmonitor_update_template

Replace a template's name and HTML.

campaignmonitor_add_sending_domain

Add a domain to send from.

campaignmonitor_copy_sending_domain

Copy a VERIFIED sending domain from the connected client to another client in the same account.

campaignmonitor_create_custom_field

Add a custom field to a list.

campaignmonitor_delete_custom_field

Delete a custom field, its values on every subscriber, and segment rules that use it.

campaignmonitor_delete_sending_domain

Remove a sending domain + DKIM selector from the client.

campaignmonitor_list_sending_domains

The client's sending domains and their DNS authentication status: [{ SendingDomain, Selector, PublicKey, DNSRecords { DKIM, DMARC, SPF } } where each record has { Validation, Key, Value } to add at the DNS host].

campaignmonitor_update_custom_field

Rename a custom field and/or change its preference-center visibility.

campaignmonitor_update_custom_field_options

Set the options of a MultiSelectOne / MultiSelectMany custom field.

campaignmonitor_verify_sending_domain

Re-check a sending domain's DNS records now and update its verification status.

campaignmonitor_suppress_emails

Add email addresses to the client's suppression list so no campaign or journey email reaches them.

campaignmonitor_unsuppress_email

Remove one address from the client's suppression list (it does NOT resubscribe them to any list).

campaignmonitor_publish_event

Fire a custom event for a subscriber (e.g. "Purchased") to start journeys whose trigger is "Subscriber activity" with that event name.

Connect Campaign Monitor to your AI

Credentials off one Campaign Monitor screen, then an endpoint your client signs into. Nothing to deploy, and nothing to install.

Paste your account API key from profile picture → Account settings → API keys → Show API key, then pick the client. Using one client's own API key instead? Add its Client ID from the same page. No app to register, and the key doesn't expire.

Campaign Monitor API key••••••••••••3f7a
Client ID (only for a client API key)Leave blank for the account API key
ConnectionVerified

Then just ask for the work

  • “Why has priya@lumenlabs.io stopped getting our newsletter”

    • get_lists_for_email
    • get_subscriber_history
    • list_suppressions
  • “Import these 800 webinar attendees into the Events list with their company as a custom field”

    • list_lists
    • list_custom_fields
    • import_subscribers
  • “How did Tuesday's spring sale campaign do, and which links got the most clicks”

    • list_sent_campaigns
    • get_campaign_summary
    • list_campaign_clicks
  • “Draft the October newsletter from our Monthly template for the VIP segment and send me a test”

    • list_templates
    • list_segments
    • create_campaign_from_template
    • send_campaign_preview

Use Campaign Monitor from the assistant you already open

One hosted endpoint, registered once per client. The same tools and the same permissions, whichever window the request comes from.

Claude DesktopCustom connector

Add the PopMCP URL under Settings → Connectors and the tools appear in every chat.

Claude WebCustom connector

The same endpoint, registered in the browser. Nothing to install on the machine you are working from.

ChatGPTCustom connector

Register PopMCP as a custom connector, then let ChatGPT read and update the account.

CodexDesktop & CLI

Wire the endpoint into Codex or the Codex CLI when a task needs live business context, not a fixture.

OpenCodeCoding agent

Register the remote MCP server in OpenCode's config for terminal-first and scripted agent runs.

ZCodeDesktop app

Add PopMCP as an MCP server in Z.ai's desktop app and work the account from the same window.

Campaign Monitor MCP server questions

What teams ask before putting Campaign Monitor behind an AI client.

Where do I find the Campaign Monitor API key PopMCP asks for?

Under Account settings → API keys. In Campaign Monitor, click your profile picture (top right), choose Account settings, then API keys, then Show API key (or Generate API key if none exists yet); you need full access to see it. The key doesn't expire, there is no app or redirect URL to set up, and PopMCP stores it encrypted server-side so your AI client never sees it.

Can I connect a Campaign Monitor client API key instead of the account key?

Yes, with its Client ID. A client's own API key reaches only that client and can't list clients, so fill in the optional Client ID field as well; the ID is on the same API keys page. On a client key the account-level tools (listing or creating clients, administrators, billing details, the primary contact and embedded sessions) are not available.

How does PopMCP handle a Campaign Monitor agency account with several clients?

One client per PopMCP workspace. An account API key lists every client in the account, and in the same connect step an agency can pick several clients and assign each one to its own PopMCP workspace. Each connection is pinned to its client: the ClientID is filled in from the connection on every call, so a workspace can't reach another client's lists, subscribers or campaigns.

What time zone does Campaign Monitor use when the AI schedules a campaign?

The client's own time zone. PopMCP records it when you connect, and send_campaign takes SendDate as "Immediately" or "YYYY-MM-DD HH:MM" in that local time. A timestamp with a UTC offset is refused with the time zone named instead of being silently shifted, and a send with no SendDate is refused rather than going out now. The client's primary contact is the default confirmation email.

Does the AI need to know Campaign Monitor API quirks like ConsentToTrack and PascalCase fields?

No. PopMCP maps camelCase or snake_case field names onto Campaign Monitor's PascalCase, defaults ConsentToTrack to Unchanged, and accepts custom fields as a plain object. Updates the API demands in full (list, segment, template, subscriber, custom field) read the current record first, so a rename can't blank the other settings. Limits are checked before the call: 1,000 subscribers per import, 25 transactional recipients, 15 preview addresses.

Which Campaign Monitor events can PopMCP watch?

23 of them. Subscriber joined, updated and deactivated arrive by list webhook, while unsubscribes, bounces, unconfirmed sign-ups, campaign sends, opens, clicks, campaign bounces, campaign unsubscribes and spam complaints are polled. Change detection covers new drafts, scheduled campaigns, new lists, segments and templates, journey status, suppressed addresses and transactional bounces, and three thresholds fire on stalled list growth, a high transactional bounce rate or low credits.

Do I have to run or host the Campaign Monitor MCP server myself?

No. PopMCP hosts it and gives you a Streamable HTTP MCP URL. There is nothing to deploy, no callback URL to register, and no infrastructure to keep running or patch.

Which AI clients can use this MCP server?

Any client that supports a remote Streamable HTTP MCP server: Claude Desktop, Claude Web, ChatGPT custom connectors, Codex and the Codex CLI, OpenCode and Z.ai's ZCode, as well as editors such as Cursor, Windsurf and Zed. Your client signs in to PopMCP with OAuth; the provider credential never leaves the server.

Why do only 33 of the 115 tools load by default?

Loading 115 tool definitions into every conversation burns context before the work starts. PopMCP loads a curated 33-tool set covering the everyday workflows and keeps the rest searchable, so your AI pulls a specialist tool only when a task needs it. Every tool stays searchable, and on Scale the owner can load the full catalog for a teammate's connection.

What is the difference between a tool and a trigger?

A tool is something your AI calls, and there are 115 here. A trigger is something PopMCP watches for you: 23 Campaign Monitor events that can start work on the PopMCP side. Triggers never enter your AI client's context, and none of them ask you to paste a callback URL into Campaign Monitor.

Connect Campaign Monitor to your AI in minutes

Launch a hosted MCP endpoint for Campaign Monitor, keep tool access under control, and start testing real workflow prompts right away.

Connect your first MCP