← Back to search

io.github.cyanheads/mailchimp-mcp-server

cyanheads Scanned 20d ago

Mailchimp via MCP: draft, test, and send campaigns; manage audiences and subscribers; pull reports.

B
80.5 / 100

Versions

0.2.1latest
first seen Jun 5, 2026
0.3.4
first seen May 19, 2026
PermissionsTool SafetyAuthAnnotationsCode QualityStabilitySpecVuln HistoryAuthorTransparencyCommunity

Tools 20

mailchimp_import_subscribers
annotations: verified low

Batch add (and optionally update) subscribers in one call. Capped at ${MAX_ROWS} rows per request — chunk larger imports client-side. **Status defaults to \

openWorldHint true
mailchimp_reports
annotations: verified low

Campaign reports — generic slicer. Use `operation: list` for the report index, `get` for a single campaign's headline metrics, and `slice` with a `dimension` enum to pull one specific breakdown (click-details, open-details, locations, unsubscribed, abuse-reports, advice, domain-performance, eepurl, email-activity, sent-to). For the common 'summarize this campaign' question, prefer the `mailchimp_campaign_report` workflow tool — it parallelizes the top 5 slices into one response.

readOnlyHint true
mailchimp_audience_overview
annotations: verified low

One-call health digest for an audience: info, stats, N months of growth history, top email clients, and the full merge-field schema. Use this at the start of any session that will work with subscribers, segments, or campaigns — it answers 'what does this audience look like?' in a single request.

readOnlyHint true
mailchimp_replicate_campaign
annotations: verified low

Duplicate an existing campaign, optionally override subject/from/reply/audience/segment/content, then leave as draft (default), send a test, send, or schedule. **Send-capable — default to `mode: 'draft'`.** Only use `mode: 'send'` or `'schedule'` when the user has explicitly authorized dispatch; phrasing like 'clone this campaign and update the audience' or 'set up a v2' is NOT authorization to send — leave as `draft`, return the new `campaignId` and `webUrl`, and let the user run a follow-up send after reviewing. Send/schedule modes require `confirmSend: true`. Use for the common 'send v2 of last week's newsletter with an updated intro' pattern.

openWorldHint true destructiveHint true
mailchimp_search
annotations: verified low

Global search. Use `scope: members` to find subscribers by email/name fragment across all audiences (or pass `audienceId` to restrict). Use `scope: campaigns` to find campaigns by subject / title / preview text / archive. For subscriber detail + tags, prefer `mailchimp_find_subscriber` — this tool is for lightweight discovery.

readOnlyHint true
mailchimp_campaign_report
annotations: verified low

Post-send analytics digest for a campaign. One call returns headline delivery metrics (sent/bounce/abuse), engagement (opens, clicks, unsubscribes), top clicked links, top locations, recent unsubscribes, and industry benchmarks when available. For individual dimensions in detail, use the `mailchimp_reports` primitive tool with `operation: 'slice'`.

readOnlyHint true
mailchimp_campaigns
annotations: verified low

Campaign record management: list/get/create/update, replicate, content read/write, send-checklist, and RSS/resend controls. DELETE is intentionally not exposed — deleting a sent campaign destroys its historical reports; use `cancel-send` to abort an in-flight send, or delete via the Mailchimp UI if you truly need to. Use the `mailchimp_send_campaign` workflow tool to actually send a campaign (it chains create/content/checklist/send and requires explicit `confirmSend: true`).

openWorldHint true
mailchimp_segments
annotations: verified low

CRUD for audience segments (saved, static, fuzzy) plus member listing and batch member add/remove for static segments. Free plan supports static + basic saved segments; Premium is required for advanced dynamic filters. Use `batch-update-members` to add/remove many subscribers in a single call — the operation is NOT reversible in one shot.

openWorldHint true
mailchimp_playbook
annotations: verified low

Returns a structured procedural playbook merged with live account state. Call this at the start of a complex multi-step task (designing a campaign, sending a campaign, reviewing a send, diagnosing deliverability, cleaning a list, onboarding, triaging a subscriber) to get a tailored walkthrough. Advice-only — call the suggested follow-up tools to execute. Returns markdown instructions + a live-state snapshot + `nextToolSuggestions` with pre-filled arguments.

readOnlyHint true
mailchimp_account
annotations: verified low

Read-only view of the Mailchimp account. Use `operation: info` for profile, plan, data center, and total subscribers. Use `operation: activity-feed` for the Chimp Chatter stream (recent subscribes, unsubscribes, campaign sends across the whole account).

readOnlyHint true openWorldHint true
mailchimp_local_templates
annotations: verified low

Author and render local email templates. **Canonical write path for templates on free-tier Mailchimp accounts** — Mailchimp's upstream `/templates` API is read-only on free, so this tool is how you create reusable templates programmatically. Templates are `.eta` files in `MAILCHIMP_TEMPLATES_DIR`, with optional `<name>.meta.yaml` sidecars (subject, previewText, vars). Eta supports partials via `<%~ include('partials/header', it) %>`, conditionals (`<% if (it.x) { %>`), and loops. Use `seed-from-mailchimp` to bootstrap a template from a Mailchimp `base` or `user` starter. Once authored, reference a template from any campaign tool via `content.localTemplate: '<name>'` and `content.localTemplateVars: { … }`.

openWorldHint true
mailchimp_find_subscriber
annotations: verified low

Locate a subscriber by email across one audience (when `audienceId` is provided) or all audiences on the account. Returns exact and fuzzy matches from Mailchimp search, enriched with merge fields, stats, and active tags. Most free accounts have a single audience, so this is usually a fast one-call lookup.

readOnlyHint true
mailchimp_merge_fields
annotations: verified low

Read + create/update custom subscriber attributes (merge fields). Tags like `FNAME`, `LNAME`, `EMAIL` are baked into the audience schema and used by campaigns for personalization. This tool intentionally has no delete — removing a merge field drops a data column across every subscriber, which should happen in the Mailchimp UI with its confirmation dialog.

openWorldHint true
mailchimp_upsert_subscriber
annotations: verified low

Add or update a subscriber in one idempotent call. Skips merge-field revalidation on updates that don't touch merge fields, so a stored malformed value can't block other writes. Tags are synced declaratively — pass the desired active set and the tool computes the add/remove delta. **Important:** Mailchimp stores static-segment membership as a tag, so a declarative sync will remove the subscriber from any named segment not listed in `tags`; use `preserveTags` to protect them. Use `status: 'pending'` to trigger Mailchimp's double-opt-in email; `'subscribed'` for immediate opt-in (make sure you have consent).

openWorldHint true idempotentHint true
mailchimp_assets
annotations: verified low

Inspect and pre-warm the local-assets pipeline. Available only when `MAILCHIMP_ASSETS_DIR` is set on the server. Use `list` to see what's available, `info` to get a single file's hash + cache status, `sync` to upload everything ahead of a send (so the actual send is fast), and `clear-cache` to invalidate the local cache. Most workflows don't need this — auto-upload happens automatically when `@assets/<path>` references appear in campaign HTML via `mailchimp_send_campaign` or `mailchimp_campaigns set-content`.

openWorldHint true
mailchimp_templates
annotations: verified low

Mailchimp-hosted template surface. **For authoring new templates, prefer `mailchimp_local_templates` — that tool works on every plan tier (including free, where the writes here are forbidden) and templates live as `.eta` files under `MAILCHIMP_TEMPLATES_DIR`, git-versionable and composable via partials.** Use this tool for reading existing Mailchimp templates (`list`, `get`, `get-default-content` — work on free for `base`/`user` types) or, on paid plans, syncing changes upstream via `create`/`update`/`delete`. **All writes require a paid plan regardless of `type`** and return `Forbidden` with `requiresPlan: 'standard'`. `gallery` (paid drag-and-drop) is read-gated too. Deleting a template doesn't affect campaigns already built from it, so delete is safe to expose. **Per-section editing is not supported here** — Mailchimp's templates PATCH endpoint only accepts `name`, `html`, and `folderId`; to change one block, GET the template, edit its HTML, then `update` with the full new HTML. Per-section overrides (by edit-region ID) live on campaigns built from a template, via `mailchimp_campaigns` (`set-content`) or `mailchimp_send_campaign` with `templateSections`. **To bootstrap a local template from a Mailchimp `base`/`user` starter, use `mailchimp_local_templates` with `operation: seed-from-mailchimp`.**

openWorldHint true
mailchimp_audiences
annotations: verified low

Manage Mailchimp audiences (the UI term for "lists"). Supports read, create/update, per-audience analytics (activity, growth, email clients, abuse reports, top locations), and signup-form configuration. Does NOT support delete — on free plan the 1-audience cap makes it catastrophic, so humans do it in the UI.

openWorldHint true
mailchimp_subscribers
annotations: verified low

Manage subscribers (Mailchimp 'list members') — CRUD except permanent-delete, plus tags/notes/activity. Use `mailchimp_upsert_subscriber` to add a new subscriber (that tool handles tags and notes in one idempotent call). `archive` is the strongest removal available; it takes the subscriber out of the active audience but preserves the record, so they can resubscribe. GDPR-forget (`delete-permanent`) is NOT exposed — do it in the Mailchimp UI.

openWorldHint true
mailchimp_files
annotations: verified low

Upload, list, fetch, rename, and delete files in Mailchimp\'s File Manager (Content Studio). Use `upload` to push an image into Mailchimp — the response\'s `fullSizeUrl` is the public CDN URL to embed in campaign HTML (`<img src="…">`). Use `update` to rename a file or move it between folders (pass `folderId: 0` to move to root). Works on every plan tier (including free). **Size caps: 1 MB per image, 10 MB per non-image file.** For `upload`, encode the file bytes as base64 and pass via `fileData` along with a `name` that includes the extension — see `fileData` field for the allowed-extension list (note: WebP/AVIF are not allowed; convert first). Folder CRUD is not exposed; use the Mailchimp UI to create folders, or just upload to the root.

openWorldHint true
mailchimp_send_campaign
annotations: verified low

Compose a Mailchimp campaign and optionally test/send/schedule it in one call. Creates the draft, sets content, runs the send-checklist, then either leaves it as a draft (default) or dispatches per `mode`. **Send-capable — default to `mode: 'draft'`.** Only use `mode: 'send'` or `'schedule'` when the user has explicitly authorized dispatch; ambiguous phrasing like 'set up next week's newsletter', 'compose a draft', or 'the usual' does NOT authorize a send — leave as `draft`, return the `campaignId` and `webUrl`, and let the user run a follow-up send after reviewing. Send/schedule modes require `confirmSend: true`. Failed drafts are auto-deleted when `cleanupOnError: true` (default); declined confirmation leaves a reviewable draft.

openWorldHint true destructiveHint true

Permissions 3

network medium
Server uses network capabilities via: fetch()
shell high
Server uses shell capabilities via: child_process, spawn(), spawnSync()
env_vars low
Server uses env_vars capabilities via: process.env

Scan Findings 51

info
Tool 'mailchimp_import_subscribers' annotations are consistent annotation_checker · 80%
info
Tool 'mailchimp_reports' annotations are consistent annotation_checker · 80%
info
Tool 'mailchimp_audience_overview' annotations are consistent annotation_checker · 80%
info
Tool 'mailchimp_replicate_campaign' annotations are consistent annotation_checker · 80%
info
Tool 'mailchimp_search' annotations are consistent annotation_checker · 80%
info
Tool 'mailchimp_campaign_report' annotations are consistent annotation_checker · 80%
info
Tool 'mailchimp_campaigns' annotations are consistent annotation_checker · 80%
info
Tool 'mailchimp_segments' annotations are consistent annotation_checker · 80%
info
Tool 'mailchimp_playbook' annotations are consistent annotation_checker · 80%
info
Tool 'mailchimp_account' annotations are consistent annotation_checker · 80%
info
Tool 'mailchimp_local_templates' annotations are consistent annotation_checker · 80%
info
Tool 'mailchimp_find_subscriber' annotations are consistent annotation_checker · 80%
info
Tool 'mailchimp_merge_fields' annotations are consistent annotation_checker · 80%
info
Tool 'mailchimp_upsert_subscriber' annotations are consistent annotation_checker · 80%
info
Tool 'mailchimp_assets' annotations are consistent annotation_checker · 80%
info
Tool 'mailchimp_templates' annotations are consistent annotation_checker · 80%
info
Tool 'mailchimp_audiences' annotations are consistent annotation_checker · 80%
info
Tool 'mailchimp_subscribers' annotations are consistent annotation_checker · 80%
info
Tool 'mailchimp_files' annotations are consistent annotation_checker · 80%
info
Tool 'mailchimp_send_campaign' annotations are consistent annotation_checker · 80%
info
Sandbox failed to start for behavioral verification behavioral_verifier · 100%
info
package.json metadata manifest_parser · 100%
info
Tool: mailchimp_import_subscribers manifest_parser · 75%
info
Tool: mailchimp_reports manifest_parser · 75%
info
Tool: mailchimp_audience_overview manifest_parser · 75%
info
Tool: mailchimp_replicate_campaign manifest_parser · 75%
info
Tool: mailchimp_search manifest_parser · 75%
info
Tool: mailchimp_campaign_report manifest_parser · 75%
info
Tool: mailchimp_campaigns manifest_parser · 75%
info
Tool: mailchimp_segments manifest_parser · 75%
info
Tool: mailchimp_playbook manifest_parser · 75%
info
Tool: mailchimp_account manifest_parser · 75%
info
Tool: mailchimp_local_templates manifest_parser · 75%
info
Tool: mailchimp_find_subscriber manifest_parser · 75%
info
Tool: mailchimp_merge_fields manifest_parser · 75%
info
Tool: mailchimp_upsert_subscriber manifest_parser · 75%
info
Tool: mailchimp_assets manifest_parser · 75%
info
Tool: mailchimp_templates manifest_parser · 75%
info
Tool: mailchimp_audiences manifest_parser · 75%
info
Tool: mailchimp_subscribers manifest_parser · 75%
info
Tool: mailchimp_files manifest_parser · 75%
info
Tool: mailchimp_send_campaign manifest_parser · 75%
info
Required env vars (11) manifest_parser · 80%
info
Sandbox failed to start for output poisoning scan output_poisoning · 100%
medium
Permission: network access detected permission_analyzer · 70%
high
Permission: shell access detected permission_analyzer · 95%
low
Permission: env_vars access detected permission_analyzer · 90%
info
SBOM generated: 12 components sbom_generator · 100%
high
Generic API Key Assignment found in cyanheads-mailchimp-mcp-server-bf67fd8/docs/api-key.md secret_scanner · 75%
high
Hardcoded Password found in cyanheads-mailchimp-mcp-server-bf67fd8/framework-skills/api-utils/references/security.md secret_scanner · 65%
medium
No build provenance detected (SLSA L0) slsa_assessor · 90%