
A full-featured Mailchimp integration that surfaces 18 core tools plus conditional asset and template management. You get campaign CRUD with single-call send workflows that request human confirmation before firing, subscriber upsert with declarative tag sync, batch imports capped at 500 rows, audience and segment management, merge field config, and post-send analytics sliced ten ways. The two workflow helpers handle the common "draft content, run checklist, send or schedule" and "clone last week's campaign with tweaks" patterns end-to-end. Local asset references in HTML auto-upload to Mailchimp's CDN. Local template authoring via Eta gives you a proper write path on free-tier accounts where the upstream templates API is read-only.
Public tool metadata for what this MCP can expose to an agent.
MAILCHIMP_ADD_AUTOMATIONCreate a new classic automation in your Mailchimp account.5 paramsCreate a new classic automation in your Mailchimp account.
recipients__list__idstringrecipients__store__idstringsettings__from__namestringsettings__reply__tostringtrigger__settings__workflow__typestringMAILCHIMP_ADD_BATCH_WEBHOOKConfigure a webhook that will fire whenever any batch request completes processing. You may only have a maximum of 20 batch webhooks.2 paramsConfigure a webhook that will fire whenever any batch request completes processing. You may only have a maximum of 20 batch webhooks.
enabledbooleanurlstringMAILCHIMP_ADD_CAMPAIGNCreate a new Mailchimp campaign.54 paramsCreate a new Mailchimp campaign.
content_typestringtemplate · multichannelrecipients__list__idstringrecipients__segment__opts__conditionsarrayrecipients__segment__opts__matchstringany · allrecipients__segment__opts__saved__segment__idintegerrss__opts__constrain__rss__imgbooleanrss__opts__feed__urlstringrss__opts__frequencystringdaily · weekly · monthlyrss__opts__schedule__daily__send__fridaybooleanrss__opts__schedule__daily__send__mondaybooleanrss__opts__schedule__daily__send__saturdaybooleanrss__opts__schedule__daily__send__sundaybooleanrss__opts__schedule__daily__send__thursdaybooleanrss__opts__schedule__daily__send__tuesdaybooleanrss__opts__schedule__daily__send__wednesdaybooleanrss__opts__schedule__hourintegerrss__opts__schedule__monthly__send__dateintegerrss__opts__schedule__weekly__send__daystringsunday · monday · tuesday · wednesday · thursday · fridaysettings__authenticatebooleansettings__auto__fb__postarray+34 more parameters. See the server's own documentation for the full schema.
MAILCHIMP_ADD_CAMPAIGN_FEEDBACKAdd feedback on a specific campaign.4 paramsAdd feedback on a specific campaign.
block_idintegercampaign_idstringis_completebooleanmessagestringMAILCHIMP_ADD_CAMPAIGN_FOLDERCreate a new campaign folder.1 paramsCreate a new campaign folder.
namestringMAILCHIMP_ADD_CARTAdd a new cart to a store.22 paramsAdd a new cart to a store.
campaign_idstringcheckout_urlstringcurrency_codestringcustomer__address__address1stringcustomer__address__address2stringcustomer__address__citystringcustomer__address__countrystringcustomer__address__country__codestringcustomer__address__postal__codestringcustomer__address__provincestringcustomer__address__province__codestringcustomer__companystringcustomer__email__addressstringcustomer__first__namestringcustomer__idstringcustomer__last__namestringcustomer__opt__in__statusbooleanidstringlinesarrayorder_totalinteger+2 more parameters. See the server's own documentation for the full schema.
MAILCHIMP_ADD_CART_LINE_ITEMAdd a new line item to an existing cart.7 paramsAdd a new line item to an existing cart.
cart_idstringidstringpriceintegerproduct_idstringproduct_variant_idstringquantityintegerstore_idstringMAILCHIMP_ADD_CONNECTED_SITECreate a new Mailchimp connected site.2 paramsCreate a new Mailchimp connected site.
domainstringforeign_idstringMAILCHIMP_ADD_CUSTOMERAdd a new customer to a store.15 paramsAdd a new customer to a store.
address__address1stringaddress__address2stringaddress__citystringaddress__countrystringaddress__country__codestringaddress__postal__codestringaddress__provincestringaddress__province__codestringcompanystringemail_addressstringfirst_namestringidstringlast_namestringopt_in_statusbooleanstore_idstringMAILCHIMP_ADD_DOMAIN_TO_ACCOUNTAdd a domain to the account.1 paramsAdd a domain to the account.
verification_emailstringMAILCHIMP_ADD_EVENTAdd an event for a list member.6 paramsAdd an event for a list member.
is_syncingbooleanlist_idstringnamestringoccurred_atstringpropertiesobjectsubscriber_hashstringMAILCHIMP_ADD_EXPORTCreate a new account export in your Mailchimp account.2 paramsCreate a new account export in your Mailchimp account.
include_stagesarraysince_timestampstringMAILCHIMP_ADD_FILEUpload a new image or file to the File Manager.3 paramsUpload a new image or file to the File Manager.
file_datastringfolder_idintegernamestringMAILCHIMP_ADD_FOLDERCreate a new folder in the File Manager.1 paramsCreate a new folder in the File Manager.
namestringMAILCHIMP_ADD_INTEREST_CATEGORYCreate a new interest category.4 paramsCreate a new interest category.
display_orderintegerlist_idstringtitlestringtypestringcheckboxes · dropdown · radio · hiddenMAILCHIMP_ADD_INTEREST_IN_CATEGORYCreate a new interest or 'group name' for a specific category.4 paramsCreate a new interest or 'group name' for a specific category.
display_orderintegerinterest_category_idstringlist_idstringnamestringMAILCHIMP_ADD_LANDING_PAGECreate a new Mailchimp landing page.10 paramsCreate a new Mailchimp landing page.
descriptionstringlist_idstringnamestringstore_idstringtemplate_idintegertitlestringtracking__enable__restricted__data__processingbooleantracking__track__with__mailchimpbooleantypestringsignup · productuse_default_listbooleanMAILCHIMP_ADD_LISTCreate a new list in your Mailchimp account.20 paramsCreate a new list in your Mailchimp account.
campaign__defaults__from__emailstringcampaign__defaults__from__namestringcampaign__defaults__languagestringcampaign__defaults__subjectstringcontact__address1stringcontact__address2stringcontact__citystringcontact__companystringcontact__countrystringcontact__phonestringcontact__statestringcontact__zipstringdouble_optinbooleanemail_type_optionbooleanmarketing_permissionsbooleannamestringnotify_on_subscribestringnotify_on_unsubscribestringpermission_reminderstringuse_archive_barbooleanMAILCHIMP_ADD_MEMBER_NOTEAdd a new note for a specific subscriber.3 paramsAdd a new note for a specific subscriber.
list_idstringnotestringsubscriber_hashstringMAILCHIMP_ADD_MEMBER_TO_LISTAdd a new member to the list.17 paramsAdd a new member to the list.
email_addressstringemail_typestringinterestsobjectip_optstringip_signupstringlanguagestringlist_idstringlocation__latitudeintegerlocation__longitudeintegermarketing_permissionsarraymerge_fieldsobjectskip_merge_validationbooleanstatusstringsubscribed · unsubscribed · cleaned · pending · transactionaltagsarraytimestamp_optstringtimestamp_signupstringvipbooleanMAILCHIMP_ADD_MEMBER_TO_SEGMENTAdd a member to a static segment.3 paramsAdd a member to a static segment.
email_addressstringlist_idstringsegment_idstringMAILCHIMP_ADD_MERGE_FIELDAdd a new merge field for a specific audience.14 paramsAdd a new merge field for a specific audience.
default_valuestringdisplay_orderintegerhelp_textstringlist_idstringnamestringoptions__choicesarrayoptions__date__formatstringoptions__default__countryintegeroptions__phone__formatstringoptions__sizeintegerpublicbooleanrequiredbooleantagstringtypestringtext · number · address · phone · date · urlMAILCHIMP_ADD_ORDERAdd a new order to a store.62 paramsAdd a new order to a store.
billing__address__address1stringbilling__address__address2stringbilling__address__citystringbilling__address__companystringbilling__address__countrystringbilling__address__country__codestringbilling__address__latitudeintegerbilling__address__longitudeintegerbilling__address__namestringbilling__address__phonestringbilling__address__postal__codestringbilling__address__provincestringbilling__address__province__codestringcampaign_idstringcancelled_at_foreignstringcurrency_codestringcustomer__address__address1stringcustomer__address__address2stringcustomer__address__citystringcustomer__address__countrystring+42 more parameters. See the server's own documentation for the full schema.
MAILCHIMP_ADD_ORDER_LINE_ITEMAdd a new line item to an existing order.8 paramsAdd a new line item to an existing order.
discountintegeridstringorder_idstringpriceintegerproduct_idstringproduct_variant_idstringquantityintegerstore_idstringMAILCHIMP_ADD_OR_REMOVE_MEMBER_TAGSAdd or remove tags from a list member. If a tag that does not exist is passed in and set as 'active', a new tag will be created.4 paramsAdd or remove tags from a list member. If a tag that does not exist is passed in and set as 'active', a new tag will be created.
is_syncingbooleanlist_idstringsubscriber_hashstringtagsarrayMAILCHIMP_ADD_OR_UPDATE_CUSTOMERAdd or update a customer.16 paramsAdd or update a customer.
address__address1stringaddress__address2stringaddress__citystringaddress__countrystringaddress__country__codestringaddress__postal__codestringaddress__provincestringaddress__province__codestringcompanystringcustomer_idstringemail_addressstringfirst_namestringidstringlast_namestringopt_in_statusbooleanstore_idstringMAILCHIMP_ADD_OR_UPDATE_LIST_MEMBERAdd or update a list member.18 paramsAdd or update a list member.
email_addressstringemail_typestringinterestsobjectip_optstringip_signupstringlanguagestringlist_idstringlocation__latitudeintegerlocation__longitudeintegermarketing_permissionsarraymerge_fieldsobjectskip_merge_validationbooleanstatusstringsubscribed · unsubscribed · cleaned · pending · transactionalstatus_if_newstringsubscribed · unsubscribed · cleaned · pending · transactionalsubscriber_hashstringtimestamp_optstringtimestamp_signupstringvipbooleanMAILCHIMP_ADD_OR_UPDATE_PRODUCT_VARIANTAdd or update a product variant.12 paramsAdd or update a product variant.
backordersstringidstringimage_urlstringinventory_quantityintegerpriceintegerproduct_idstringskustringstore_idstringtitlestringurlstringvariant_idstringvisibilitystringMAILCHIMP_ADD_PRODUCTAdd a new product to a store.12 paramsAdd a new product to a store.
descriptionstringhandlestringidstringimage_urlstringimagesarraypublished_at_foreignstringstore_idstringtitlestringtypestringurlstringvariantsarrayvendorstringMAILCHIMP_ADD_PRODUCT_IMAGEAdd a new image to the product.5 paramsAdd a new image to the product.
idstringproduct_idstringstore_idstringurlstringvariant_idsarrayMAILCHIMP_ADD_PRODUCT_VARIANTAdd a new variant to the product.11 paramsAdd a new variant to the product.
backordersstringidstringimage_urlstringinventory_quantityintegerpriceintegerproduct_idstringskustringstore_idstringtitlestringurlstringvisibilitystringMAILCHIMP_ADD_PROMO_CODEAdd a new promo code to a store.9 paramsAdd a new promo code to a store.
codestringcreated_at_foreignstringenabledbooleanidstringpromo_rule_idstringredemption_urlstringstore_idstringupdated_at_foreignstringusage_countintegerMAILCHIMP_ADD_PROMO_RULEAdd a new promo rule to a store.12 paramsAdd a new promo rule to a store.
amountintegercreated_at_foreignstringdescriptionstringenabledbooleanends_atstringidstringstarts_atstringstore_idstringtargetstringper_item · total · shippingtitlestringtypestringfixed · percentageupdated_at_foreignstringMAILCHIMP_ADD_SEGMENTCreate a new segment in a specific list.5 paramsCreate a new segment in a specific list.
list_idstringnamestringoptions__conditionsarrayoptions__matchstringany · allstatic_segmentarrayMAILCHIMP_ADD_STOREAdd a new store to your Mailchimp account.22 paramsAdd a new store to your Mailchimp account.
address__address1stringaddress__address2stringaddress__citystringaddress__countrystringaddress__country__codestringaddress__latitudeintegeraddress__longitudeintegeraddress__postal__codestringaddress__provincestringaddress__province__codestringcurrency_codestringdomainstringemail_addressstringidstringis_syncingbooleanlist_idstringmoney_formatstringnamestringphonestringplatformstring+2 more parameters. See the server's own documentation for the full schema.
MAILCHIMP_ADD_SUBSCRIBER_TO_WORKFLOW_EMAILManually add a subscriber to a workflow, bypassing the default trigger settings. You can also use this endpoint to trigger a series of automated emails in an API 3.0 workflow type.3 paramsManually add a subscriber to a workflow, bypassing the default trigger settings. You can also use this endpoint to trigger a series of automated emails in an API 3.0 workflow type.
email_addressstringworkflow_email_idstringworkflow_idstringMAILCHIMP_ADD_TEMPLATECreate a new template for the account. Only Classic templates are supported.3 paramsCreate a new template for the account. Only Classic templates are supported.
folder_idstringhtmlstringnamestringMAILCHIMP_ADD_TEMPLATE_FOLDERCreate a new template folder.1 paramsCreate a new template folder.
namestringMAILCHIMP_ADD_WEBHOOKCreate a new webhook for a specific list.11 paramsCreate a new webhook for a specific list.
events__campaignbooleanevents__cleanedbooleanevents__profilebooleanevents__subscribebooleanevents__unsubscribebooleanevents__upemailbooleanlist_idstringsources__adminbooleansources__apibooleansources__userbooleanurlstringMAILCHIMP_ARCHIVE_AUTOMATIONArchiving will permanently end your automation and keep the report data. You’ll be able to replicate your archived automation, but you can’t restart it.1 paramsArchiving will permanently end your automation and keep the report data. You’ll be able to replicate your archived automation, but you can’t restart it.
workflow_idstringMAILCHIMP_ARCHIVE_LIST_MEMBERArchive a list member. To permanently delete, use the delete-permanent action.2 paramsArchive a list member. To permanently delete, use the delete-permanent action.
list_idstringsubscriber_hashstringMAILCHIMP_BATCH_ADD_OR_REMOVE_MEMBERSBatch add/remove list members to static segment4 paramsBatch add/remove list members to static segment
list_idstringmembers_to_addarraymembers_to_removearraysegment_idstringMAILCHIMP_BATCH_SUBSCRIBE_OR_UNSUBSCRIBEBatch subscribe or unsubscribe list members.6 paramsBatch subscribe or unsubscribe list members.
list_idstringmembersarrayskip_duplicate_checkbooleanskip_merge_validationbooleansync_tagsbooleanupdate_existingbooleanMAILCHIMP_CAMPAIGN_ABUSE_REPORT_DETAILSGet information about a specific abuse report for a campaign.4 paramsGet information about a specific abuse report for a campaign.
campaign_idstringexclude_fieldsarrayfieldsarrayreport_idstringMAILCHIMP_CAMPAIGN_STATISTICS_FEEDBACKGet feedback based on a campaign's statistics. Advice feedback is based on campaign stats like opens, clicks, unsubscribes, bounces, and more.3 paramsGet feedback based on a campaign's statistics. Advice feedback is based on campaign stats like opens, clicks, unsubscribes, bounces, and more.
campaign_idstringexclude_fieldsarrayfieldsarrayMAILCHIMP_CANCEL_CAMPAIGNCancel a Regular or Plain-Text Campaign after you send, before all of your recipients receive it. This feature is included with Mailchimp Pro.1 paramsCancel a Regular or Plain-Text Campaign after you send, before all of your recipients receive it. This feature is included with Mailchimp Pro.
campaign_idstringMAILCHIMP_CREATE_A_SURVEY_CAMPAIGNUtilize the List ID and Survey ID to generate a Campaign that links to your survey.2 paramsUtilize the List ID and Survey ID to generate a Campaign that links to your survey.
list_idstringsurvey_idstringMAILCHIMP_CUSTOMER_JOURNEYS_API_TRIGGER_FOR_A_CONTACTCreate a trigger step in the Customer Journey builder via the API. Use the provided URL with {journey_id} and {step_id} to activate conditions for a contact.3 paramsCreate a trigger step in the Customer Journey builder via the API. Use the provided URL with {journey_id} and {step_id} to activate conditions for a contact.
email_addressstringjourney_idintegerstep_idintegerMAILCHIMP_CUSTOMIZE_SIGNUP_FORMCustomize a list's default signup form.14 paramsCustomize a list's default signup form.
contentsarrayheader__image__alignstringnone · left · center · rightheader__image__altstringheader__image__border__colorstringheader__image__border__stylestringnone · solid · dotted · dashed · double · grooveheader__image__border__widthstringheader__image__heightstringheader__image__linkstringheader__image__targetstring_blank · nullheader__image__urlstringheader__image__widthstringheader__textstringlist_idstringstylesarrayMAILCHIMP_DELETE_BATCH_REQUESTStops a batch request from running. Since only one batch request is run at a time, this can be used to cancel a long running request. The results of any completed operations will not be available after this call.1 paramsStops a batch request from running. Since only one batch request is run at a time, this can be used to cancel a long running request. The results of any completed operations will not be available after this call.
batch_idstringMAILCHIMP_DELETE_BATCH_WEBHOOKRemove a batch webhook. Webhooks will no longer be sent to the given URL.1 paramsRemove a batch webhook. Webhooks will no longer be sent to the given URL.
batch_webhook_idstringMAILCHIMP_DELETE_CAMPAIGNRemove a campaign from your Mailchimp account.1 paramsRemove a campaign from your Mailchimp account.
campaign_idstringMAILCHIMP_DELETE_CAMPAIGN_FEEDBACK_MESSAGERemove a specific feedback message for a campaign.2 paramsRemove a specific feedback message for a campaign.
campaign_idstringfeedback_idstringMAILCHIMP_DELETE_CAMPAIGN_FOLDERDelete a specific campaign folder, and mark all the campaigns in the folder as 'unfiled'.1 paramsDelete a specific campaign folder, and mark all the campaigns in the folder as 'unfiled'.
folder_idstringMAILCHIMP_DELETE_CARTDelete a cart.2 paramsDelete a cart.
cart_idstringstore_idstringMAILCHIMP_DELETE_CART_LINE_ITEMDelete a specific cart line item.3 paramsDelete a specific cart line item.
cart_idstringline_idstringstore_idstringMAILCHIMP_DELETE_CONNECTED_SITERemove a connected site from your Mailchimp account.1 paramsRemove a connected site from your Mailchimp account.
connected_site_idstringMAILCHIMP_DELETE_CUSTOMERDelete a customer from a store.2 paramsDelete a customer from a store.
customer_idstringstore_idstringMAILCHIMP_DELETE_DOMAINDelete a verified domain from the account.1 paramsDelete a verified domain from the account.
domain_namestringMAILCHIMP_DELETE_FILERemove a specific file from the File Manager.1 paramsRemove a specific file from the File Manager.
file_idstringMAILCHIMP_DELETE_FOLDERDelete a specific folder in the File Manager.1 paramsDelete a specific folder in the File Manager.
folder_idstringMAILCHIMP_DELETE_INTEREST_CATEGORYDelete a specific interest category.2 paramsDelete a specific interest category.
interest_category_idstringlist_idstringMAILCHIMP_DELETE_INTEREST_IN_CATEGORYDelete interests or group names in a specific category.3 paramsDelete interests or group names in a specific category.
interest_category_idstringinterest_idstringlist_idstringMAILCHIMP_DELETE_LANDING_PAGEDelete a landing page.1 paramsDelete a landing page.
page_idstringMAILCHIMP_DELETE_LISTDelete a list from your Mailchimp account. If you delete a list, you'll lose the list history—including subscriber activity, unsubscribes, complaints, and bounces. You’ll also lose subscribers’ email addresses, unless you exported and backed up your list.1 paramsDelete a list from your Mailchimp account. If you delete a list, you'll lose the list history—including subscriber activity, unsubscribes, complaints, and bounces. You’ll also lose subscribers’ email addresses, unless you exported and backed up your list.
list_idstringMAILCHIMP_DELETE_LIST_MEMBERDelete all personally identifiable information related to a list member, and remove them from a list. This will make it impossible to re-import the list member.2 paramsDelete all personally identifiable information related to a list member, and remove them from a list. This will make it impossible to re-import the list member.
list_idstringsubscriber_hashstringMAILCHIMP_DELETE_MERGE_FIELDDelete a specific merge field.2 paramsDelete a specific merge field.
list_idstringmerge_idstringMAILCHIMP_DELETE_NOTEDelete a specific note for a specific list member.3 paramsDelete a specific note for a specific list member.
list_idstringnote_idstringsubscriber_hashstringMAILCHIMP_DELETE_ORDERDelete an order.2 paramsDelete an order.
order_idstringstore_idstringMAILCHIMP_DELETE_ORDER_LINE_ITEMDelete a specific order line item.3 paramsDelete a specific order line item.
line_idstringorder_idstringstore_idstringMAILCHIMP_DELETE_PRODUCTDelete a product.2 paramsDelete a product.
product_idstringstore_idstringMAILCHIMP_DELETE_PRODUCT_IMAGEDelete a product image.3 paramsDelete a product image.
image_idstringproduct_idstringstore_idstringMAILCHIMP_DELETE_PRODUCT_VARIANTDelete a product variant.3 paramsDelete a product variant.
product_idstringstore_idstringvariant_idstringMAILCHIMP_DELETE_PROMO_CODEDelete a promo code from a store.3 paramsDelete a promo code from a store.
promo_code_idstringpromo_rule_idstringstore_idstringMAILCHIMP_DELETE_PROMO_RULEDelete a promo rule from a store.2 paramsDelete a promo rule from a store.
promo_rule_idstringstore_idstringMAILCHIMP_DELETE_SEGMENTDelete a specific segment in a list.2 paramsDelete a specific segment in a list.
list_idstringsegment_idstringMAILCHIMP_DELETE_STOREDelete a store. Deleting a store will also delete any associated subresources, including Customers, Orders, Products, and Carts.1 paramsDelete a store. Deleting a store will also delete any associated subresources, including Customers, Orders, Products, and Carts.
store_idstringMAILCHIMP_DELETE_TEMPLATEDelete a specific template.1 paramsDelete a specific template.
template_idstringMAILCHIMP_DELETE_TEMPLATE_FOLDERDelete a specific template folder, and mark all the templates in the folder as 'unfiled'.1 paramsDelete a specific template folder, and mark all the templates in the folder as 'unfiled'.
folder_idstringMAILCHIMP_DELETE_WEBHOOKDelete a specific webhook in a list.2 paramsDelete a specific webhook in a list.
list_idstringwebhook_idstringDraft, test, and send Mailchimp campaigns straight from your MCP client — with audience management, subscriber CRUD, and post-send analytics behind safe-by-default send gates. STDIO or Streamable HTTP.
Mailchimp campaign management over the Mailchimp Marketing API v3. Draft, test, and send email campaigns, manage audiences and subscribers, and review post-send analytics from any MCP client, with optional local image and template directories for authoring. Runs as a stdio process or a local Streamable HTTP server.
| Tool | Description |
|---|---|
mailchimp_account | Account profile, plan, data center, and the Chimp Chatter activity feed |
mailchimp_audiences | Read, create, and update audiences (lists), with per-audience analytics and signup-form config |
mailchimp_audience_overview | One-call audience digest: info, stats, growth history, top email clients, merge-field schema |
mailchimp_subscribers | Subscriber reads, updates, archive, tags, notes, and engagement history |
mailchimp_upsert_subscriber | Add or update one subscriber idempotently, with status, merge fields, tags, and a note |
mailchimp_find_subscriber | Locate a subscriber by email in one audience or across the account |
mailchimp_import_subscribers | Batch add or update up to 500 subscribers per call, pending by default |
mailchimp_segments | Segment CRUD (saved, static, fuzzy), member listing, and batch add/remove |
mailchimp_merge_fields | Read, create, and update custom subscriber attributes |
mailchimp_campaigns | Campaign records, content, send checklist, and RSS/resend controls |
mailchimp_send_campaign | Compose a campaign and leave it as a draft, test it, send it, or schedule it in one call |
mailchimp_replicate_campaign | Duplicate a campaign with overrides, then draft, test, send, or schedule |
mailchimp_reports | Campaign reports: the index, one report, or one of ten report dimensions |
mailchimp_campaign_report | Post-send digest: headline metrics plus top links, locations, and unsubscribes |
mailchimp_templates | Mailchimp-hosted templates; reads work on free plans, writes need a paid plan |
mailchimp_files | File Manager uploads, listing, renames, and deletes on Mailchimp's CDN |
mailchimp_search | Search members or campaigns across the account |
mailchimp_assets (conditional: MAILCHIMP_ASSETS_DIR) | Inspect and pre-warm uploads for @assets/<path> references in campaign HTML |
mailchimp_local_templates (conditional: MAILCHIMP_TEMPLATES_DIR) | Author and render local .eta templates, the template write path on free plans |
mailchimp_playbook | Procedural playbooks merged with live account state; advice only |
| Resource | Description |
|---|---|
mailchimp://account | Account snapshot: profile, plan, data center, total subscribers |
mailchimp://audiences/{audienceId} | Audience snapshot: name, contact, stats, double opt-in status |
mailchimp://campaigns/{campaignId} | Campaign snapshot: status, settings, recipients |
mailchimp://campaigns/{campaignId}/report | Post-send headline metrics for a campaign |
All resource data is also reachable through tools; audiences and campaigns are listed with each tool's list operation.
| Prompt | Description |
|---|---|
newsletter_from_source | Compose an editorial newsletter from a URL or brief, then walk it through draft, test, and send |
Design reference: docs/email-design-playbook.md.
mailchimp_account tooloperation: info returns profile, plan, data center, total subscribers, and industry benchmarks; operation: activity-feed returns Chimp Chatter events, paged by count (max 100, default 20) and offsetnote naming the likely causesmailchimp_audiences toollist, get, create, update, the analytics reads list-activity, list-growth, list-clients, list-abuse-reports, list-locations, and get-signup-forms / customize-signup-forms (takes signupFormConfig); every operation except list and create needs audienceIdcreate requires name, contact (company, address1, city, state, zip, country), permissionReminder, and campaignDefaults (fromName, fromEmail, language)mailchimp_audience_overview toolaudienceId plus growthMonths (1–36, default 12); returns info, stats, contact, campaign defaults, growth history, top email clients, and the merge-field schemanotes[] explains empty growth or email-client arrays, separating "no data yet" from zero engagementmailchimp_subscribers toolaudienceId on every call and email on every operation except list (filterable by status); operations: list, get, update, archive, list-tags, set-tags, list-notes / add-note / update-note / delete-note (by noteId), and list-activity / list-events / list-goalslist email remains unfiltered. update to subscribed confirms resumed subscriptions before any write; already-subscribed members need no new confirmation and their status is not rewritten.set-tags is declarative: tags becomes the full active set and every other tag is removed unless named in preserveTags. Mailchimp stores static-segment membership as a tag, so an unguarded sync drops it. Returns tagsAdded, tagsRemoved, and tagsActivemailchimp_upsert_subscriber toolaudienceId, email, and status required; optional mergeFields, tags + preserveTags (same declarative sync as set-tags), note, vip, language; updateExistingStatus: false applies status to new records onlyisNew, the resulting status, tagsAdded / tagsRemoved / tagsFinal, noteAttached, and webUrlstatus: "pending" uses Mailchimp's double opt-in flow. New or resumed subscribed status requires a confirmation of documented consent before any write, including tags and notes. Decline/cancel writes nothing. Already-subscribed updates and updateExistingStatus: false preserve existing status without new confirmation.mailchimp_find_subscriber toolemail accepts an address or free-form search fragment, including a fragment without @, scoped to one audienceId or, when omitted, every audience on the account (echoed as searchedAcross)exactMatches and fuzzyMatches with merge fields and stats; includeTags (default true) adds each match's tags at one extra call per matchmailchimp_import_subscribers toolaudienceId and 1–500 subscribers rows per call; status defaults to pending (double opt-in) and a per-row status overrides it; updateExisting defaults to false, so existing records are skippedsubscribed row requires one confirmation before the whole batch writes; decline/cancel writes nothing. Pending-only imports require no new confirmation. Approval is single-use and bound to the caller, audience, resolved rows, and write options.totalCreated, totalUpdated, errorCount, and per-row succeeded and failed entries. Incomplete addresses return invalid_email failures; remaining valid rows preserve Mailchimp's per-row errors. An all-invalid batch makes no upstream request. Only successful rows returned as pending await double opt-in.mailchimp_segments toolaudienceId on every call and segmentId on every operation except list (filterable by type: saved, static, fuzzy) and create; create / update take name, staticEmails, or saved-segment optionsbatch-update-members applies membersToAdd / membersToRemove to a static segment and returns added, removed, and per-email errorsmailchimp_forbiddenmailchimp_merge_fields toollist, get, create, update; create requires name, tag (10 characters max), and type; get / update take mergeIdoptions carries type-specific config: choices for dropdown / radio, date_format for date / birthday, phone_format for phonemailchimp_campaigns toollist (filter by status, listId, sinceSendTime / beforeSendTime), get, create (type of regular / plaintext / rss, plus recipients and settings), update, replicate, get-content, set-content, get-checklist, cancel-send, create-resend, pause-rss, resume-rss; all but list and create take campaignIdset-content accepts html, plainText, templateId + templateSections, archiveContent, url, or localTemplate (exclusive with html and templateId); get-checklist returns isReady and typed itemsget-content accepts variant: html | plainText | archiveHtml | all (default all). A single variant returns only that populated representation and preview; absent or empty bodies are omitted. Content bytes, including footer/legal markup, are preserved.mailchimp_send_campaign or mailchimp_replicate_campaignmailchimp_send_campaign toolaudienceId, subject, fromName, replyTo, and content (at least one of html, plainText, templateId, localTemplate) required; mode is draft (default), test (needs testEmails, max 50), send, or schedule (needs scheduleTime at least 15 minutes out)campaignId, the effective mode, status, recipientCount, webUrl, and non-blocking checklistWarnings; blocking checklist errors throw pre_send_checklist_failed outside draft, and cleanupOnError (default true) deletes the draft after a mid-flow failuresend and schedule require confirmSend: true, then a confirmation prompt before any campaign is created; declining leaves a draft and sets cancelledByUsermailchimp_replicate_campaign toolsourceCampaignId plus optional subjectOverride, previewTextOverride, fromNameOverride, replyToOverride, titleOverride, audienceOverride, segmentOverride, and contentOverride; mode, testEmails, scheduleTime, and cleanupOnError work as in mailchimp_send_campaigncampaignId, overridesApplied[], and the same status, checklist, and cancelledByUser fieldsconfirmSend: true plus confirmation-prompt gate for send and schedulemailchimp_reports toollist (filter by type, sinceSendTime / beforeSendTime), get, or slice with a campaignId and a dimension: abuse-reports, advice, click-details (one URL via linkId), open-details (one member via subscriberHash), domain-performance, eepurl, email-activity, locations, sent-to, unsubscribedslice returns rows shaped by the dimension plus totalItems; get throws campaign_not_sent for a campaign with no sendmailchimp_campaign_report toolcampaignId plus includeTopN (1–100, default 10) rows per slicedelivery (delivered, bounces by type, abuse reports), engagement (opens, clicks, unsubscribes), topClickedLinks, topLocations, recentUnsubscribes, and industryBenchmarks when Mailchimp has them; throws campaign_not_sent for a campaign with no sendmailchimp_templates toollist (filter by type of user / base / gallery, category, folderId), get, get-default-content, create, update, and delete; update accepts only name, html, and folderId, so per-section edits go through a campaign's templateSectionsbase and user templates work on free plans; writes and gallery reads need a paid plan and fail as mailchimp_forbidden. mailchimp_local_templates is the authoring path on every planmailchimp_files toollist (filter by type, folderId, sinceCreatedAt / beforeCreatedAt), get, upload (name with extension plus base64 fileData, no data: prefix), update (rename, or move with folderId, 0 for root), delete, and read-only list-folders / get-folder; uploads cap at 1 MB per image and 10 MB per other file, and .webp / .avif are not acceptedupload and get return fullSizeUrl, the public CDN URL to embed in campaign HTML; list adds totalFileSizeInBytesmailchimp_search toolscope (members or campaigns) and query; audienceId narrows a member search; includeTopN (1–100, default 10) caps each result arrayexact and fuzzy with upstream totalExact / totalFuzzy; campaigns as matches with a snippet and totalMatches; an empty result carries a notemailchimp_assets toollist, info (by relPath; returns sha256 and any cached upload), sync (uploads uncached files ahead of a send; returns uploaded, cached, and skipped with reasons), and clear-cache@assets/<path> references in content passed to mailchimp_send_campaign, mailchimp_replicate_campaign, or mailchimp_campaigns set-content upload to File Manager and are rewritten to CDN URLs. Uploads are cached by SHA-256 in <assetsDir>/.mailchimp-cache.json; oversize files and paths outside the directory are rejected before uploadMAILCHIMP_ASSETS_DIR is setmailchimp_local_templates toollist, get (source plus parsed metadata), render-preview (name plus vars; returns HTML, sends nothing), and seed-from-mailchimp (writes Mailchimp template mailchimpTemplateId to disk as name).eta files with optional YAML frontmatter for subject, previewText, and vars; a declared var left unsupplied fails the render. Campaign tools render one via content.localTemplate + content.localTemplateVars, exclusive with html and templateId. Example templatesMAILCHIMP_TEMPLATES_DIR is setmailchimp_playbook tooltopic: send, post-send-review, deliverability, list-hygiene, onboarding, subscriber-triage, or design-campaign; audienceId for send / list-hygiene / design-campaign, campaignId for post-send-review, email for subscriber-triageinstructions tuned to live numbers, a liveState snapshot, and nextToolSuggestions with pre-filled inputs; makes no writesmailchimp://account resourceapplication/json with profile, plan, data center, total subscribers, and fetchedAtmailchimp_account operation: infomailchimp://audiences/{audienceId} resourceaudienceId comes from mailchimp_audiences operation: listmailchimp://campaigns/{campaignId} resourcecampaignId comes from mailchimp_campaigns operation: listmailchimp://campaigns/{campaignId}/report resourcenewsletter_from_source promptsource (URL or free-form brief) required; audienceId and seasonalContext optionalmailchimp_playbook (topic: design-campaign) into an HTML draft, then draft, test, and send via mailchimp_send_campaignBuilt on @cyanheads/mcp-ts-core: stdio and Streamable HTTP transports, pluggable auth (none / jwt / oauth), swappable storage (in-memory, filesystem, Supabase, Cloudflare KV/R2/D1), structured logging with optional OpenTelemetry tracing.
Mailchimp-specific:
-<dc> suffix, with retries, a process-wide concurrency limit (MAILCHIMP_CONCURRENCY_LIMIT), and a cooldown after a 429draft, send / schedule need confirmSend: true plus a confirmation prompt. New/resumed single subscriptions and imports with valid effective subscribed rows require single-use confirmation; bulk imports default to pending without that extra round.archive is the strongest subscriber removal@assets/<path> files upload and rewrite at send time, and .eta templates render locally, which covers free plans where the Templates API is read-onlycount (max 1000) and offsetAgent-friendly output:
note / notes[] on empty activity feeds, audience overviews, and searches say whether data is missing or genuinely zeromailchimp_import_subscribers and mailchimp_segments batch-update-members return per-row successes and errors instead of failing the batchoperation, dimension, and mode say which fields are populated; isNew and cancelledByUser report what actually happenedcampaign_not_sent, pre_send_checklist_failed, mailchimp_forbidden, …) carries a recovery hint for the caller's next moveAdd the following to your MCP client configuration file. See docs/api-key.md for how to generate a Mailchimp API key.
{
"mcpServers": {
"mailchimp-mcp-server": {
"type": "stdio",
"command": "bunx",
"args": ["@cyanheads/mailchimp-mcp-server@latest"],
"env": {
"MCP_TRANSPORT_TYPE": "stdio",
"MCP_LOG_LEVEL": "info",
"MAILCHIMP_API_KEY": "your-key-with-dc-suffix-e.g.-us22"
}
}
}
}
Or with npx (no Bun required):
{
"mcpServers": {
"mailchimp-mcp-server": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@cyanheads/mailchimp-mcp-server@latest"],
"env": {
"MCP_TRANSPORT_TYPE": "stdio",
"MCP_LOG_LEVEL": "info",
"MAILCHIMP_API_KEY": "your-key-with-dc-suffix-e.g.-us22"
}
}
}
}
Or with Docker:
{
"mcpServers": {
"mailchimp-mcp-server": {
"type": "stdio",
"command": "docker",
"args": [
"run", "-i", "--rm",
"-e", "MCP_TRANSPORT_TYPE=stdio",
"-e", "MAILCHIMP_API_KEY=your-key-with-dc-suffix-e.g.-us22",
"ghcr.io/cyanheads/mailchimp-mcp-server:latest"
]
}
}
}
For Streamable HTTP, set the transport and start the server:
MCP_TRANSPORT_TYPE=http MCP_HTTP_PORT=3010 MAILCHIMP_API_KEY=... bun run start:http
# Server listens at http://localhost:3010/mcp
-dc suffix (e.g. -us22) identifies your data center and is parsed at startup.git clone https://github.com/cyanheads/mailchimp-mcp-server.git
cd mailchimp-mcp-server
bun install
cp .env.example .env
# edit .env and set MAILCHIMP_API_KEY
| Variable | Description | Default |
|---|---|---|
MAILCHIMP_API_KEY | Required. Marketing API key, including the -dc suffix (e.g. abc…-us22). | none |
MAILCHIMP_BASE_URL | API base URL override, for mock servers or tests. | https://{dc}.api.mailchimp.com/3.0 |
MAILCHIMP_TIMEOUT_MS | Per-request timeout, in ms. | 60000 |
MAILCHIMP_MAX_RETRIES | Retry attempts for transient upstream failures (0–10). | 3 |
MAILCHIMP_CONCURRENCY_LIMIT | Max in-flight upstream requests across the process (1–10). | 4 |
MAILCHIMP_ASSETS_DIR | Absolute path to a local assets directory. Enables mailchimp_assets and @assets/<path> uploads in campaign HTML. | none |
MAILCHIMP_TEMPLATES_DIR | Absolute path to a local templates directory. Enables mailchimp_local_templates and content.localTemplate on campaign tools. | none |
MCP_TRANSPORT_TYPE | Transport: stdio or http. | stdio |
MCP_HTTP_PORT | HTTP server port. | 3010 |
MCP_SESSION_MODE | Explicitly stateful for campaign and subscription confirmation. The framework schema default, auto, resolves to stateful. stateless refuses HTTP startup; stdio is unaffected. | stateful |
MCP_REQUEST_STATE_KEY | Optional sealing key of at least 32 bytes. Consent records remain single-use and process-bound; a restart or a retry reaching another instance requires fresh confirmation. | none |
MCP_AUTH_MODE | Authentication: none, jwt, or oauth. | none |
MCP_LOG_LEVEL | Log level (debug, info, warning, error, etc.). | info |
LOGS_DIR | Directory for log files (Node.js only). | <app-root>/logs |
OTEL_ENABLED | Enable OpenTelemetry. | false |
OTEL_EXPORTER_OTLP_ENDPOINT | Base URL for traces and metrics; appends /v1/traces and /v1/metrics. Signal-specific endpoint overrides are listed in .env.example. | none |
OTEL_EXPORTER_OTLP_LOGS_ENDPOINT | Opt-in OTLP log endpoint, used as-is. The base endpoint does not enable log export. | none |
LOG_TOOL_FAILURE_PAYLOADS | Log failed-call arguments and results, redacted by key name and capped at LOG_TOOL_FAILURE_PAYLOAD_MAX_BYTES (default 16384). Secrets inside free-form values remain visible. | false |
See .env.example for the full list of optional overrides.
Watch mode (transport via MCP_TRANSPORT_TYPE):
bun run dev # stdio (default)
MCP_TRANSPORT_TYPE=http bun run dev # http
Build and run:
bun run rebuild
bun run start:stdio
# or
bun run start:http
Run checks and tests:
bun run devcheck # Lint, format, typecheck, security
bun run test # Vitest test suite
bun run lint:mcp # Validate MCP definitions against spec
docker build -t mailchimp-mcp-server .
docker run --rm -e MAILCHIMP_API_KEY=your-key-us22 -p 3010:3010 mailchimp-mcp-server
The Dockerfile defaults to HTTP transport, stateful session mode, and logs to /var/log/mailchimp-mcp-server. OpenTelemetry peer dependencies are installed by default; build with --build-arg OTEL_ENABLED=false to omit them.
| Directory | Purpose |
|---|---|
src/index.ts | createApp() entry point: registers tools, resources, and the prompt, and initializes services. |
src/config | MAILCHIMP_* environment variable parsing and validation with Zod. |
src/mcp-server/tools | Tool definitions (*.tool.ts) plus shared helpers for template rendering, asset rewriting, and send confirmation. |
src/mcp-server/resources | Resource definitions (*.resource.ts). |
src/mcp-server/prompts | Prompt definitions (*.prompt.ts). |
src/services/mailchimp | Mailchimp API client: HTTP, request pacing, retries, response normalization. |
src/services/assets | Local assets: discovery, hashing, upload cache, @assets/ rewriting. |
src/services/templates | Local templates: Eta rendering, frontmatter parsing, seeding from Mailchimp. |
templates/ | Example .eta templates; point MAILCHIMP_TEMPLATES_DIR here to try them. |
docs/ | API key guide and the email design playbook. |
tests/ | Vitest suites for config, services, tools, and the prompt. |
See CLAUDE.md for development guidelines and architectural rules. The short version:
try/catch in tool logicctx.log for request-scoped loggingsrc/mcp-server/*/definitions/index.tsIssues are welcome. Run checks and tests before submitting:
bun run devcheck
bun run test
Apache-2.0 — see LICENSE for details.
MAILCHIMP_API_KEY*Mailchimp Marketing API key, including the '-dc' data-center suffix (e.g. 'abc...-us22'). Generate at Mailchimp → Account → Extras → API keys.
MAILCHIMP_BASE_URLOverride the API base URL (for mock servers or testing). Defaults to 'https://{dc}.api.mailchimp.com/3.0' derived from the API key suffix.
MAILCHIMP_TIMEOUT_MSdefault: 60000Per-request timeout in milliseconds.
MAILCHIMP_MAX_RETRIESdefault: 3Max retry attempts for transient upstream failures (0-10).
MAILCHIMP_CONCURRENCY_LIMITdefault: 4Max in-flight upstream requests per workflow tool (1-10).
MAILCHIMP_ASSETS_DIRAbsolute path to a local assets directory. When set (Node-only — Workers ignored), enables the `mailchimp_assets` tool and auto-uploads `@assets/<path>` references in campaign HTML to Mailchimp File Manager at send time. Cache at <dir>/.mailchimp-cache.json.
MAILCHIMP_TEMPLATES_DIRAbsolute path to a local templates directory. When set (Node-only), enables the `mailchimp_local_templates` tool and support for `content.localTemplate` on campaign tools. Templates are `.eta` files with optional `<name>.meta.yaml` sidecars. Canonical write path on free-tier Mail
MCP_LOG_LEVELdefault: infoSets the minimum log level for output (e.g., 'debug', 'info', 'warn').
MCP_HTTP_HOSTdefault: 127.0.0.1The hostname for the HTTP server.
MCP_HTTP_PORTdefault: 3010The port to run the HTTP server on.
MCP_HTTP_ENDPOINT_PATHdefault: /mcpThe endpoint path for the MCP server.
MCP_AUTH_MODEdefault: noneAuthentication mode to use: 'none', 'jwt', or 'oauth'.