Mailchimp MCP by usefulapi
Read audiences, members, campaigns and reports; add, update, tag and archive subscribers.
Should I use this
Quality & Safety
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"mailchimp": {
"url": "https://mailchimp.usefulapi.io/mcp"
}
}
}Remote endpoints
https://mailchimp.usefulapi.io/mcpstreamable-httpWhat it can do
Tool inventory
Tools (18)
🟢mailchimp_get_account
Get the API Root — the authenticated Mailchimp account: account name, total subscribers, contact info, plan and industry stats. REST: GET /.
Input Schema
{
"type": "object",
"properties": {},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢mailchimp_list_audiences(count, offset, sortField, sortDir)
List the account's audiences — Mailchimp's `/lists` resource (an audience is a list of subscribers). Paginated, with optional sort. REST: GET /lists.
Input Schema
{
"type": "object",
"properties": {
"count": {
"description": "Records to return (Mailchimp `count`; default 10, max 1000).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 1000
},
"offset": {
"description": "Number of records to skip (Mailchimp `offset`, for pagination).",
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"sortField": {
"description": "Field to sort by (Mailchimp `sort_field`, e.g. date_created / create_time).",
"type": "string"
},
"sortDir": {
"description": "Sort direction ASC/DESC (Mailchimp `sort_dir`).",
"type": "string",
"enum": [
"ASC",
"DESC"
]
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢mailchimp_get_audience(list_id)
Get a single audience (list) by id, including subscriber stats, default from-name/email and settings. REST: GET /lists/{list_id}.
Input Schema
{
"type": "object",
"properties": {
"list_id": {
"type": "string",
"description": "The audience (list) id."
}
},
"required": [
"list_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢mailchimp_list_members(list_id, status, count, offset, sortField, ...)
List members of an audience (list). Paginated, with an optional status filter and sort. REST: GET /lists/{list_id}/members.
Input Schema
{
"type": "object",
"properties": {
"list_id": {
"type": "string",
"description": "The audience (list) id to list members from."
},
"status": {
"description": "Filter by member status (Mailchimp `status`).",
"type": "string",
"enum": [
"subscribed",
"unsubscribed",
"cleaned",
"pending",
"transactional",
"archived"
]
},
"count": {
"description": "Records to return (Mailchimp `count`; default 10, max 1000).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 1000
},
"offset": {
"description": "Number of records to skip (Mailchimp `offset`, for pagination).",
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"sortField": {
"description": "Field to sort by (Mailchimp `sort_field`, e.g. date_created / create_time).",
"type": "string"
},
"sortDir": {
"description": "Sort direction ASC/DESC (Mailchimp `sort_dir`).",
"type": "string",
"enum": [
"ASC",
"DESC"
]
}
},
"required": [
"list_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢mailchimp_get_member(list_id, email, subscriberHash)
Get a single audience member (subscriber) by email or subscriber_hash, including status, merge fields, tags and stats. REST: GET /lists/{list_id}/members/{subscriber_hash} (email → MD5 hash).
Input Schema
{
"type": "object",
"properties": {
"list_id": {
"type": "string",
"description": "The audience (list) id."
},
"email": {
"description": "Member email address — MD5-hashed (lowercased) into the subscriber_hash for you.",
"type": "string"
},
"subscriberHash": {
"description": "The subscriber_hash (MD5 of lowercased email) or contact id, if you have it instead of `email`.",
"type": "string"
}
},
"required": [
"list_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢mailchimp_search_members(query, list_id)
Search for members across the account (or one audience) by email, name or other fields. Returns exact + full-text matches. REST: GET /search-members.
Input Schema
{
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "The search query (email, name, etc.)."
},
"list_id": {
"description": "Restrict the search to this audience (list) id.",
"type": "string"
}
},
"required": [
"query"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢mailchimp_list_campaigns(type, status, list_id, count, offset, ...)
List the account's campaigns (email sends). Paginated, with optional type/status/audience filters and sort. REST: GET /campaigns.
Input Schema
{
"type": "object",
"properties": {
"type": {
"description": "Filter by campaign type (Mailchimp `type`).",
"type": "string",
"enum": [
"regular",
"plaintext",
"absplit",
"rss",
"variate"
]
},
"status": {
"description": "Filter by campaign status (Mailchimp `status`).",
"type": "string",
"enum": [
"save",
"paused",
"schedule",
"sending",
"sent"
]
},
"list_id": {
"description": "Restrict to campaigns sent to this audience (list) id.",
"type": "string"
},
"count": {
"description": "Records to return (Mailchimp `count`; default 10, max 1000).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 1000
},
"offset": {
"description": "Number of records to skip (Mailchimp `offset`, for pagination).",
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"sortField": {
"description": "Field to sort by (Mailchimp `sort_field`, e.g. date_created / create_time).",
"type": "string"
},
"sortDir": {
"description": "Sort direction ASC/DESC (Mailchimp `sort_dir`).",
"type": "string",
"enum": [
"ASC",
"DESC"
]
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢mailchimp_get_campaign(campaign_id)
Get a single campaign by id, including its settings, recipients and send status. REST: GET /campaigns/{campaign_id}.
Input Schema
{
"type": "object",
"properties": {
"campaign_id": {
"type": "string",
"description": "The campaign id."
}
},
"required": [
"campaign_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢mailchimp_list_reports(type, count, offset)
List campaign reports (aggregate performance for sent campaigns). Paginated, with an optional type filter. REST: GET /reports.
Input Schema
{
"type": "object",
"properties": {
"type": {
"description": "Filter reports by campaign type (Mailchimp `type`).",
"type": "string",
"enum": [
"regular",
"plaintext",
"absplit",
"rss",
"variate"
]
},
"count": {
"description": "Records to return (Mailchimp `count`; default 10, max 1000).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 1000
},
"offset": {
"description": "Number of records to skip (Mailchimp `offset`, for pagination).",
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢mailchimp_get_campaign_report(campaign_id)
Get the report for one campaign — opens, clicks, bounces, unsubscribes and other engagement summary stats. REST: GET /reports/{campaign_id}.
Input Schema
{
"type": "object",
"properties": {
"campaign_id": {
"type": "string",
"description": "The campaign id to fetch the report for."
}
},
"required": [
"campaign_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢mailchimp_list_automations(count, offset)
List the account's classic automations (automated email workflows). Paginated. REST: GET /automations.
Input Schema
{
"type": "object",
"properties": {
"count": {
"description": "Records to return (Mailchimp `count`; default 10, max 1000).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 1000
},
"offset": {
"description": "Number of records to skip (Mailchimp `offset`, for pagination).",
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢mailchimp_list_templates(type, count, offset, sortField, sortDir)
List the account's email templates (saved and pre-built layouts). Paginated, with optional type filter and sort. REST: GET /templates.
Input Schema
{
"type": "object",
"properties": {
"type": {
"description": "Filter by template type (Mailchimp `type`: user / base / gallery).",
"type": "string",
"enum": [
"user",
"base",
"gallery"
]
},
"count": {
"description": "Records to return (Mailchimp `count`; default 10, max 1000).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 1000
},
"offset": {
"description": "Number of records to skip (Mailchimp `offset`, for pagination).",
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"sortField": {
"description": "Field to sort by (Mailchimp `sort_field`, e.g. date_created / create_time).",
"type": "string"
},
"sortDir": {
"description": "Sort direction ASC/DESC (Mailchimp `sort_dir`).",
"type": "string",
"enum": [
"ASC",
"DESC"
]
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢mailchimp_list_segments(list_id, count, offset)
List an audience's segments and tags (saved segments include static tags). Paginated. REST: GET /lists/{list_id}/segments.
Input Schema
{
"type": "object",
"properties": {
"list_id": {
"type": "string",
"description": "The audience (list) id."
},
"count": {
"description": "Records to return (Mailchimp `count`; default 10, max 1000).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 1000
},
"offset": {
"description": "Number of records to skip (Mailchimp `offset`, for pagination).",
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
}
},
"required": [
"list_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢mailchimp_list_member_tags(list_id, email, subscriberHash, count, offset)
List the tags applied to a single audience member (by email or subscriber_hash). Paginated. REST: GET /lists/{list_id}/members/{subscriber_hash}/tags (email → MD5 hash).
Input Schema
{
"type": "object",
"properties": {
"list_id": {
"type": "string",
"description": "The audience (list) id."
},
"email": {
"description": "Member email address — MD5-hashed (lowercased) into the subscriber_hash for you.",
"type": "string"
},
"subscriberHash": {
"description": "The subscriber_hash (MD5 of lowercased email) or contact id, if you have it instead of `email`.",
"type": "string"
},
"count": {
"description": "Records to return (Mailchimp `count`; default 10, max 1000).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 1000
},
"offset": {
"description": "Number of records to skip (Mailchimp `offset`, for pagination).",
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
}
},
"required": [
"list_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴mailchimp_add_member(list_id, email_address, status, merge_fields, tags)
Add a new member (subscriber) to an audience (list). Note: status "pending" triggers a double-opt-in confirmation email. REST: POST /lists/{list_id}/members.
Input Schema
{
"type": "object",
"properties": {
"list_id": {
"type": "string",
"description": "The audience (list) id to add the member to."
},
"email_address": {
"type": "string",
"description": "The member's email address (required)."
},
"status": {
"description": "Subscription status (default \"subscribed\"; \"pending\" sends a double-opt-in email).",
"type": "string",
"enum": [
"subscribed",
"pending",
"unsubscribed",
"cleaned"
]
},
"merge_fields": {
"description": "Merge-field values, e.g. { FNAME: \"Ada\", LNAME: \"Lovelace\" }.",
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"tags": {
"description": "Array of tag-name strings to apply to the new member.",
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"list_id",
"email_address"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴mailchimp_update_member(list_id, email, subscriberHash, status, merge_fields)
Update an existing audience member (by email or subscriber_hash). Only the fields you supply change. REST: PATCH /lists/{list_id}/members/{subscriber_hash} (email → MD5 hash).
Input Schema
{
"type": "object",
"properties": {
"list_id": {
"type": "string",
"description": "The audience (list) id."
},
"email": {
"description": "Member email address — MD5-hashed (lowercased) into the subscriber_hash for you.",
"type": "string"
},
"subscriberHash": {
"description": "The subscriber_hash (MD5 of lowercased email) or contact id, if you have it instead of `email`.",
"type": "string"
},
"status": {
"description": "New subscription status.",
"type": "string",
"enum": [
"subscribed",
"pending",
"unsubscribed",
"cleaned"
]
},
"merge_fields": {
"description": "Merge-field values to set, e.g. { FNAME: \"Ada\" }.",
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
}
},
"required": [
"list_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴mailchimp_add_member_tags(list_id, email, subscriberHash, tags, removeTags)
Add and/or remove tags on an audience member (by email or subscriber_hash). `tags` are added (status active); `removeTags` are removed (status inactive). Mailchimp returns HTTP 204 (no body). REST: POST /lists/{list_id}/members/{subscriber_hash}/tags (email → MD5 hash).
Input Schema
{
"type": "object",
"properties": {
"list_id": {
"type": "string",
"description": "The audience (list) id."
},
"email": {
"description": "Member email address — MD5-hashed (lowercased) into the subscriber_hash for you.",
"type": "string"
},
"subscriberHash": {
"description": "The subscriber_hash (MD5 of lowercased email) or contact id, if you have it instead of `email`.",
"type": "string"
},
"tags": {
"description": "Tag names to ADD to the member (mapped to status \"active\").",
"type": "array",
"items": {
"type": "string"
}
},
"removeTags": {
"description": "Tag names to REMOVE from the member (mapped to status \"inactive\").",
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"list_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴mailchimp_archive_member(list_id, email, subscriberHash)
Archive (soft-remove) an audience member — reversible; this is NOT the permanent-delete action. REST: DELETE /lists/{list_id}/members/{subscriber_hash} (email → MD5 hash). Returns HTTP 204 (no body).
Input Schema
{
"type": "object",
"properties": {
"list_id": {
"type": "string",
"description": "The audience (list) id."
},
"email": {
"description": "Member email address — MD5-hashed (lowercased) into the subscriber_hash for you.",
"type": "string"
},
"subscriberHash": {
"description": "The subscriber_hash (MD5 of lowercased email) or contact id, if you have it instead of `email`.",
"type": "string"
}
},
"required": [
"list_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}Community
Evidence