Run your Mailchimp marketing operations through AI.
A Model Context Protocol (MCP) server that exposes Mailchimp's Marketing API for reading and managing automations, audiences, campaigns, templates, landing pages, and e-commerce data.
Overview
The MewCP Mailchimp MCP Server provides authenticated access to the Mailchimp Marketing API:
Inspect classic automation workflows, their individual emails, and the subscribers queued in each email's send queue
List and read audiences (lists) and campaigns, including full campaign performance reports
Manage Classic templates and folders, and inspect landing pages and their published HTML content
Query connected e-commerce stores, products, and orders — including orders attributed to a specific campaign
Perfect for:
AI assistants that need to read or manage Mailchimp marketing data
Automating campaign and automation performance reporting
Building tools that connect Mailchimp audience, campaign, and e-commerce data to other systems
Tools
Automations
Get a summary of an account's classic automations with optional filtering and pagination
Inputs:
- `count` (int, optional, default: 10) — Number of records to return (max: 1000)- `offset` (int, optional, default: 0) — Number of records to skip for pagination- `fields` (string, optional, default: null) — Comma-separated list of fields to return- `exclude_fields` (string, optional, default: null) — Comma-separated list of fields to exclude- `before_create_time` (string, optional, default: null) — Restrict to automations created before this time (ISO 8601: 2015-10-21T15:41:36+00:00)- `since_create_time` (string, optional, default: null) — Restrict to automations created after this time (ISO 8601: 2015-10-21T15:41:36+00:00)- `before_start_time` (string, optional, default: null) — Restrict to automations started before this time (ISO 8601: 2015-10-21T15:41:36+00:00)- `since_start_time` (string, optional, default: null) — Restrict to automations started after this time (ISO 8601: 2015-10-21T15:41:36+00:00)- `status` (string, optional, default: null) — Filter by status: 'save', 'paused', or 'sending'
Get detailed information about a specific automation workflow by ID
Inputs:
- `workflow_id` (string, required) — The unique ID of the Automation workflow- `fields` (string, optional, default: null) — Comma-separated list of fields to return- `exclude_fields` (string, optional, default: null) — Comma-separated list of fields to exclude
output data schema:
{ id: string | null
Get a summary of the emails in a classic automation workflow
Inputs:
- `workflow_id` (string, required) — The unique ID of the Automation workflow
Get detailed information about a specific email in an automation workflow
Inputs:
- `workflow_id` (string, required) — The unique ID of the Automation workflow- `workflow_email_id` (string, required) — The unique ID of the Automation workflow email
output data schema:
{ id: string | null; workflow_id: string | null; position
Get information about subscribers queued to receive a specific automation email
Inputs:
- `workflow_id` (string, required) — The unique ID of the Automation workflow- `workflow_email_id` (string, required) — The unique ID of the Automation workflow email
Get detailed information about a specific subscriber to an automation email queue
Inputs:
- `workflow_id` (string, required) — The unique ID of the Automation workflow- `workflow_email_id` (string, required) — The unique ID of the Automation workflow email- `subscriber_hash` (string, required) — The MD5 hash of the lowercase version of the subscriber's email address
output data schema:
{ id: string | null;
Audiences
Get information about all lists (audiences) in the account
- `count` (int, optional, default: 10) — Number of reports to return (max: 1000)- `offset` (int, optional, default: 0) — Number of records to skip for pagination- `type` (string, optional, default: null) — Filter by campaign type: 'regular', 'plaintext', 'absplit', 'rss', or 'variate'
output data schema:
{ reports
Get detailed report for a specific sent campaign
Inputs:
- `campaign_id` (string, required) — The unique ID for the campaign
- `page_id` (string, required) — The unique ID for the landing page
output data schema:
{ html: string | null;}
Templates
Get all folders used to organize templates
Inputs:
- `count` (int, optional, default: 10) — Number of folders to return (max: 1000)- `offset` (int, optional, default: 0) — Number of records to skip for pagination
output data schema:
{ folders: { id: string | null;
Create a new template folder
Inputs:
- `name` (string, required) — The name of the folder
- `count` (int, optional, default: 10) — Number of templates to return (max: 1000)- `offset` (int, optional, default: 0) — Number of records to skip for pagination- `type` (string, optional, default: null) — Filter by type: 'user', 'base', or 'gallery'- `content_type` (string, optional, default: null) — Filter by content type: 'html', 'template', or 'multichannel'
output data schema:
Get detailed information about a specific template by ID
Inputs:
- `template_id` (string, required) — The unique ID for the template
Create a new Classic template for the account. It supports Mailchimp Template Language
Inputs:
- `name` (string, required) — The name of the template- `html` (string, required) — The raw HTML for the template. Supports Mailchimp Template Language- `folder_id` (string, optional, default: null) — The ID of the folder to place the template in
output data schema:
{ id: number | null; type: string
Updates the name, HTML, or folder of an existing Classic template. This overwrites the current name and HTML with the values you provide (folder_id is only changed if given) — the original state is not stored by the API after the call. The response includes both the before and after state so you have a full record of what changed.
Inputs:
- `template_id` (string, required) — The unique ID for the template- `name` (string, required) — The name of the template- `html` (string, required) — The raw HTML for the template. Supports Mailchimp Template Language- `folder_id` (string, optional, default: null) — The ID of the folder to move the template to
output data schema:
{
E-commerce
Get information about all e-commerce stores in the account
Inputs:
- `count` (int, optional, default: 10) — Number of stores to return (max: 1000)- `offset` (int, optional, default: 0) — Number of records to skip for pagination
output data schema:
{ stores: { id: string | null;
Get detailed information about a specific e-commerce store
Inputs:
- `store_id` (string, required) — The unique ID for the store
Get information about all products in a specific e-commerce store
Inputs:
- `store_id` (string, required) — The unique ID for the store- `count` (int, optional, default: 10) — Number of products to return (max: 1000)- `offset` (int, optional, default: 0) — Number of records to skip for pagination
output data schema:
{ products: { id: string
Get detailed information about a specific product in an e-commerce store
Inputs:
- `store_id` (string, required) — The unique ID for the store- `product_id` (string, required) — The unique ID for the product
Get information about all orders in a specific e-commerce store
Inputs:
- `store_id` (string, required) — The unique ID for the store- `count` (int, optional, default: 10) — Number of orders to return (max: 1000)- `offset` (int, optional, default: 0) — Number of records to skip for pagination- `customer_id` (string, optional, default: null) — Restrict results to orders made by a specific customer- `campaign_id` (string, optional, default: null) — Restrict results to orders with a specific campaign ID
output data schema:
Get detailed information about a specific order in an e-commerce store
Inputs:
- `store_id` (string, required) — The unique ID for the store- `order_id` (string, required) — The unique ID for the order
Every request is signed with your Mailchimp OAuth access token plus a server_prefix credential extra (e.g. us21) — the data center your Mailchimp account lives on. This is not part of any tool's inputs; it is stored on the credential itself and read automatically for every call.
Find it in the URL you use to log in to Mailchimp: https://usXX.admin.mailchimp.com — usXX is your server_prefix.
Troubleshooting
Cause: OAuth token not provided in request headers, or the linked credential is missing its server_prefix extra
Solution:
Verify Authorization: Bearer YOUR_TOKEN and X-Mewcp-Credential-Id: CREDENTIAL-ID headers are present
Check that the credential's extras include a valid server_prefix matching your Mailchimp account's data center
Check the OAuth token has not expired — reconnect in your MewCP account if needed
Cause: API calls have exceeded your request limits
Solution:
Check credit usage in your Curious Layer dashboard
Upgrade to a paid plan or add credits for higher limits
Contact support for credit adjustments
Cause: No Mailchimp credential linked to your account, or the credential has no server_prefix stored
Solution:
Go to Credentials in your MewCP dashboard
Connect your Mailchimp account via OAuth — this stores both the access token and your account's server_prefix
Retry the request with the correct X-Mewcp-Credential-Id header
Cause: JSON payload is invalid or missing required fields
Solution:
Validate JSON syntax before sending
Ensure all required tool parameters are included
Check parameter types match expected values (e.g. count must be an integer)