Mailchimp MCP by usefulapi

Read audiences, members, campaigns and reports; add, update, tag and archive subscribers.

Should I use this

Quality & Safety

A
Description quality
100%
Schema completeness
93%
Naming quality
80%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~3,513Tokens (tool definitions)
~1.5 KBTypical response size
Significant attention impact (2.74% of 128k context)

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-http

What it can do

Tool inventory

Tools (18)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢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

Rate this Server

Evidence

Recent observations

verifiedversion not recorded18 tools
verifiedversion not recorded18 tools
verifiedversion not recorded18 tools
failed observationversion not recorded—
failed observationversion not recorded—