Mailchimp’s Marketing API v3.0 has been stable since 2018, ships four official SDKs, and covers the full campaign and audience lifecycle. What it does not cover, as of August 2026, is Model Context Protocol. The Transactional side (Mandrill) has an official MCP server. The Marketing side does not. That gap has been filled by a growing set of community wrappers, some free on GitHub and some commercial with managed authentication. This tab inventories the API surface and the MCP landscape a buyer needs to evaluate before committing.
Model Context Protocol is the emerging standard for connecting LLM agents to external tools. If you want an AI agent (Claude, ChatGPT, Cursor, custom OpenAI Agents SDK deployment) to read from or write to Mailchimp, MCP is now the connection layer of choice. Here is where Mailchimp stands.
Mailchimp ships an official MCP server for the Transactional API only, at mandrillapp.com/mcp. For the Marketing API (audiences, campaigns, automations, reports) there is no first-party MCP server as of August 2026. Buyers who want AI-agent access to Marketing data currently pick from community-maintained wrappers or commercial managed MCP servers listed below.
Seven options as of August 2026, ordered by maturity and coverage. Only the first is official Mailchimp. The rest are community or commercial third parties. Tap any card to open its documentation.
The only official MCP server from Mailchimp. Mirrors the Transactional (Mandrill) API. Server URL: mandrillapp.com/mcp. Marketing API not covered.
Most complete community wrapper. 115 tools for Marketing API. Read-only and dry-run safety modes. Uses raw HTTP, not the official Python SDK.
Full Marketing API integration for campaigns, audiences, subscribers. Released April 2026. Open source.
Read-only Marketing API v3 access. npm install @agentx-ai/mailchimp-mcp-server. Focused on safe data retrieval for AI agents.
91 pre-built actions. Managed authentication, prompt injection defense, observability. Extensible via Connector Builder.
56 tools covering audiences, campaigns, automations, templates, reports. Pay-per-use pricing. Works with Claude, ChatGPT, Cursor.
Bridge access via Zapier’s ecosystem (9,000+ integrations). One MCP tool call uses 2 tasks from your Zapier quota. Scoped action selection.
The Marketing API follows REST conventions with a few Mailchimp-specific quirks worth internalizing before writing your first request.
| Base URL | https://<dc>.api.mailchimp.com/3.0/ |
|---|---|
| Data center suffix | Extracted from your API key suffix (e.g. -us19). Not configurable per request. |
| Response format | JSON only |
| Request timeout | 120 seconds per call |
| Pagination | count (max 1000, default 10) + offset (default 0) |
| Partial responses | fields=foo,bar or exclude_fields=baz query params to shrink payload |
| Bulk operations | POST /3.0/batches (async, bypasses concurrent-connection limit) |
| Subscriber lookup key | MD5 hash of the lowercase email address |
The API generally follows REST: resources are nouns (/lists, /campaigns, /reports), actions map to HTTP methods, and anything that does not map cleanly ends up under an /actions/ subresource (for example POST /campaigns/{campaign_id}/actions/send). Subresources can nest several levels deep: /lists/{list_id}/members/{subscriber_hash}/notes/{id} is a valid path.
Two mechanisms, both operating on the same permission model.
Simplest. Use any string as the username and your API key as the password. The Authorization header is base64-encoded automatically by every HTTP client. The API key has full account access and no scope restriction. Rotate keys through the Mailchimp UI (Account → Extras → API keys). Alternate form: Authorization: Bearer YOUR_API_KEY is also accepted.
Required if you are building a third-party app that acts on behalf of Mailchimp users. Standard three-leg OAuth 2.0 flow: authorization code exchange for a bearer token. The resulting token inherits the authorizing user’s role and permissions. Also gives you the data center prefix through the OAuth metadata endpoint, which you must resolve before constructing any request URL.
Mailchimp’s rate-limiting model is simpler than most competitors: no daily quota, no per-endpoint budget, one hard constraint on concurrency.
| Limit | Value | Notes |
|---|---|---|
| Simultaneous connections | 10 per user | Enforced across all API keys and integrations sharing the account. Applies to third-party tools (Airbyte, Zapier, dltHub) too. |
| Response on exceed | HTTP 429 | Too Many Requests. No standard Retry-After header. Implement exponential backoff. |
| Request timeout | 120 seconds | Long-running operations should use the Batch endpoint instead of blocking. |
| Message search | Rate-limited | The /search-members and /search-campaigns endpoints have a separate rate limit that was tightened per July 2025 release notes. |
| Webhook response | 15 seconds | Your endpoint must return HTTP 200 within 15 seconds or Mailchimp retries the delivery. |
The 10-connection ceiling is the number one thing that surprises developers coming from SendGrid or Postmark, both of which have more generous concurrent limits. Working around it: batch async operations through POST /3.0/batches, cache aggressively on your side, and coordinate multiple integrations on the same account so they do not compete for the same 10 slots.
Four official client libraries for the Marketing API. All auto-generated from a single OpenAPI-derived codegen tool (mailchimp-client-lib-codegen).
| Language | Package | Install | Repo |
|---|---|---|---|
| Node.js | @mailchimp/mailchimp_marketing | npm install | GitHub |
| PHP | mailchimp/marketing | composer require | GitHub |
| Ruby | MailchimpMarketing | gem install | GitHub |
| Python | mailchimp-marketing | pip install | GitHub |
Mailchimp does not ship official SDKs for .NET, Java, Go, Rust, Kotlin, or Swift. Community wrappers fill the gap for .NET (MailChimp.Net.V3 by Brandon Seydel, MIT license, actively maintained, requires TLS 1.2) and to a lesser extent for Kotlin and Swift. For Go, Rust, or Java projects, most teams call the API directly with the standard HTTP client of their language.
The 15 endpoint groups you will actually use. Full reference at mailchimp.com/developer/marketing/api covers over 250 individual operations across all subresources.
| Resource | HTTP methods | Description |
|---|---|---|
| Lists / Audiences /lists | GET, POST | Create and list audiences. Foundation for all subscriber operations. |
| List members /lists/{list_id}/members | GET, POST, PUT, DELETE | Add, update, remove subscribers. Subscriber lookup uses MD5 hash of lowercase email. |
| Segments /lists/{list_id}/segments | GET, POST | Static and saved segments for targeted campaigns. |
| Merge fields /lists/{list_id}/merge-fields | GET, POST | Custom fields for subscriber data. Required before importing enriched contacts. |
| Tags /lists/{list_id}/segments (type=static) | GET, POST | Tag operations expose through the static segments resource. Not a first-class endpoint. |
| Campaigns /campaigns | GET, POST | Create, list, schedule regular and plaintext campaigns. Full CRUD. |
| Campaign send /campaigns/{campaign_id}/actions/send | POST | Trigger a campaign send. No payload needed once the campaign is set up. |
| Automations /automations | GET, POST | Classic Automations only. Customer Journey Builder is not exposed through the API. |
| Reports /reports/{campaign_id} | GET | Aggregate campaign performance. Nested subresources for open-details, click-details, unsubscribes, bounces. |
| Templates /templates | GET, POST, PATCH, DELETE | Full CRUD on custom email templates. Also read-only access to Mailchimp gallery templates. |
| Ecommerce stores /ecommerce/stores/{store_id} | GET, POST, PATCH | Ecommerce integration primitives: stores, customers, products, orders, carts, promo rules. |
| File manager /file-manager/files | GET, POST, DELETE | Upload and organize images and files used in campaigns. |
| Batches /batches | GET, POST, DELETE | Async batch endpoint. Bypasses the 10-concurrent-connections limit. Recommended for bulk imports. |
| Search members /search-members | GET | Search subscribers by email or field value across all lists. Now rate-limited per July 2025 release notes. |
| Webhooks /lists/{list_id}/webhooks | GET, POST | List-level webhooks. Fire on subscribe, unsubscribe, profile update, email change, cleaned address, campaign send. |
Two representative snippets covering the most common first-day tasks: ping the API to verify auth, then add a subscriber to a list.
import mailchimp_marketing as MailchimpMarketing
from mailchimp_marketing.api_client import ApiClientError
import hashlib
client = MailchimpMarketing.Client()
client.set_config({
"api_key": "YOUR_API_KEY-us19",
"server": "us19"
})
try:
response = client.ping.get()
print(response)
except ApiClientError as e:
print(f"error: {e.text}")
# Add a subscriber (email lowercase, then MD5)
email = "user@example.com".lower()
subscriber_hash = hashlib.md5(email.encode()).hexdigest()
client.lists.set_list_member(
list_id="abc123",
subscriber_hash=subscriber_hash,
body={
"email_address": email,
"status_if_new": "subscribed",
"merge_fields": {"FNAME": "Alaa", "LNAME": "Touil"}
}
)const mailchimp = require('@mailchimp/mailchimp_marketing');
mailchimp.setConfig({
apiKey: 'YOUR_API_KEY-us19',
server: 'us19',
});
async function sendCampaign(listId) {
// 1. Create the campaign
const campaign = await mailchimp.campaigns.create({
type: 'regular',
recipients: { list_id: listId },
settings: {
subject_line: 'Test from the API',
from_name: 'SMTPedia',
reply_to: 'hello@smtpedia.com'
}
});
// 2. Set the HTML content
await mailchimp.campaigns.setContent(campaign.id, {
html: 'Hello
This is a test.
'
});
// 3. Send it
await mailchimp.campaigns.send(campaign.id);
console.log(`Sent campaign ${campaign.id}`);
}
sendCampaign('abc123').catch(console.error);The -us19 at the end of your API key IS the data center. Strip it and your requests hit the wrong host. Always parse it out and use it as the server prefix in the base URL. Every official SDK requires you to pass it separately.
Subscriber lookup uses the MD5 hash of the email address. If you hash User@Example.com directly you get a different hash than the Mailchimp server generated on subscribe time (which lowercased first). Always lowercase before hashing. This is the single most common cause of 404s on subscriber endpoints.
Creating multiple API keys under the same account does not multiply your concurrent capacity. All keys owned by the same user share the 10-connection budget. Third-party integrations (Airbyte, Zapier, custom apps) all draw from the same pool. Symptom: intermittent 429s in an app that “should not” be hitting the limit.
The /automations endpoints only cover Classic Automations. If you are trying to programmatically create or manage a Customer Journey (the new visual builder), there is no API for it. Confirmed by every community MCP wrapper documentation, and by Mailchimp’s own docs. Plan around it: for new automations, either use Classic Automations from the API or accept UI-only workflow creation.
The Batch endpoint (POST /3.0/batches) returns a batch ID immediately, not results. You either poll GET /3.0/batches/{batch_id} until status is finished, or register a webhook to be notified. First-time Batch users often assume the response is synchronous and end up with empty result sets.
Mailchimp maintains a public release notes feed at mailchimp.com/developer/release-notes. Key deprecations to know:
/search-members or /search-campaigns, add backoff.mailchimp-client-lib-codegen) still exists but has not published updates.Only for the Transactional API (Mandrill), at mandrillapp.com/mcp. The Marketing API has no official MCP server as of 2026. Coverage for Marketing comes from community-maintained wrappers on GitHub (cyanheads, AgentX-ai, damientilman, mattcoatsworth), from commercial managed MCP servers (StackOne, Apify), or from the Zapier MCP layer as a bridge.
Four languages: Node.js, PHP, Ruby, and Python. Both Marketing and Transactional APIs ship official clients for these four. There is no official .NET, Java, Go, or Rust SDK. The community MailChimp.Net.V3 NuGet package (maintained by Brandon Seydel) is the de facto choice for C# projects. Note: the official Marketing SDKs have not been updated since November 2022.
Ten simultaneous connections per user, enforced across the entire account (all API keys and integrations combined). Exceeding this returns HTTP 429 Too Many Requests. There is no standard Retry-After header, so exponential backoff is your responsibility. For high-volume operations, use the Batch endpoint (POST /3.0/batches) to bypass the concurrent-connection limit.
Two methods: HTTP Basic Auth (any string as username, your API key as password) or OAuth 2.0 for third-party apps. The API key suffix (for example -us19) tells you the data center prefix that must go in your base URL: https://us19.api.mailchimp.com/3.0/. Access is scoped to the role of the user who created the key or authorized the OAuth app.
No. The /automations endpoints only cover Classic Automations, which Mailchimp is gradually deprecating in favor of Customer Journey Builder. The Journey Builder is currently UI-only with no programmatic access. This is a documented API gap and one of the most common reasons developers hit walls when replicating the Mailchimp UI experience programmatically.
The Marketing API (v3.0) handles bulk campaigns, audiences, automations, ecommerce, and reports. The Transactional API (Mandrill) handles single-recipient triggered emails: password resets, receipts, order confirmations. They are separate services with separate billing, separate API keys, separate SDKs, and, crucially, separate MCP support. Mandrill has an official MCP server; Marketing does not.
This review follows our email infrastructure testing methodology. We disclose affiliate relationships in our editorial independence policy.