A focused, production-oriented Model Context Protocol (MCP) server for the Mailchimp Marketing API, with a safer read-first tool surface, bounded responses, and no destructive campaign operations.
Strong foundation with 12 well-named tools following verb_noun convention (list_*, get_*, add_*, update_*). All tools have substantive descriptions (100-250 chars, well above 20-char minimum). Input schemas are complete with types and descriptions for all parameters. Pagination is properly implemented (count, offset). However, output schemas are not documented, LLMs cannot see what fields to expect from responses. Error handling is minimal; no recovery guidance or actionable error messages visible. Tool descriptions excel at explaining prerequisites and dependencies (e.g., 'Use list_audiences first to find valid audience IDs'), which is excellent for composition. Missing: per-tool output schema documentation, error classification, and confirmation patterns for write operations.
WRITE OPERATION: creates a new member in a Mailchimp audience. This does NOT overwrite an existing member -- Mailchimp rejects the request if the email address is already on the audience (use update_member for existing members instead). Requires an explicit subscription status; there is no implicit default.
Gets full details for one Mailchimp audience (contact list) by ID, including its stats, contact information, and campaign defaults. Read-only. Use list_audiences first to find valid audience IDs.
Gets full details for a single Mailchimp campaign by ID, including its settings, recipient audience, and send status. Read-only. Use list_campaigns first to find valid campaign IDs.
Retrieves performance data (opens, clicks, bounces, unsubscribes) for a single sent Mailchimp campaign. Read-only. Only available for campaigns that have already been sent -- draft or scheduled campaigns will return a not-found error. Returns a compact summary rather than the full raw report to avoid bloating the response.
Gets a single audience member by email address (preferred) or by a pre-computed Mailchimp subscriber_hash. Read-only. When given an email address, the server computes the required MD5 subscriber hash automatically.
Output schemas not documented. LLMs cannot see what fields responses contain, forcing them to guess downstream field names and risking broken tool chains.
No error handling guidance. Tools lack actionable error messages (e.g., 'Invalid status: got X, must be one of Y'). Errors do not classify as retryable vs. user-fixable.
Write operations (add_member, update_member) lack confirmation or dry-run patterns. Agents cannot preview changes before committing, risking accidental data corruption.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 65 | <=2025-11-25 | v2 |
Lists the audience members belonging to a specific saved segment. Read-only. Returns up to 50 members per call (default 10); use "offset" to page through the rest. Use list_segments first to find a valid segment_id.
Lists the Mailchimp audiences (contact lists) available to the authenticated account, including member counts and engagement stats. Read-only. Returns up to 50 audiences per call; use "offset" to page through results. Use this before get_audience, list_members, list_campaigns, or list_segments to discover valid audience IDs.
Lists Mailchimp campaigns across the account, optionally filtered by type, status, or audience. Read-only. Returns up to 50 campaigns per call; use "offset" to page through results, most recent first.
Retrieves the tags currently applied to a single audience member. Read-only. Accepts an email address or a pre-computed subscriber_hash.
Lists members (contacts) of a Mailchimp audience. Read-only. Returns up to 50 members per call (default 10); use "offset" to page through the rest. Never fetches an entire audience automatically -- call repeatedly with increasing offsets if you need more.
Lists the saved segments (and tags exposed as segments) defined on a Mailchimp audience. Read-only. Returns up to 50 segments per call; use "offset" to page through results. Use this before get_segment_members to find valid segment IDs.
WRITE OPERATION: updates selected fields (status, merge_fields) for an existing audience member using partial-update (PATCH) semantics -- fields you omit are left unchanged. Only a controlled subset of fields can be set; arbitrary request bodies are not accepted. Accepts an email address or a pre-computed subscriber_hash to identify the member.
Pagination limits not enforced in descriptions. Tools state 'max 50' but do not explain what happens if an LLM requests 100 or 1000 items.
Tool descriptions do not state what data is returned or how to use results. E.g., get_campaign_report says 'compact summary' but does not list fields (opens, clicks, bounces, unsubscribes).