cli-anything-mailchimp
Identity
An agent-native CLI for the Mailchimp Marketing API v3.0, built on the CLI-Anything framework.
What This CLI Does
- Manage audiences (lists) — create, update, delete lists; add/update/archive members; manage merge fields, segments, tags, and webhooks.
- Run campaigns — create, schedule, send, pause, replicate, and analyse email campaigns.
- Read reports — open rates, click rates, bounce stats, unsubscribes, email activity, geographic data.
- Control automations — create and manage automated email workflows.
- Manage e-commerce — stores, orders, customers, products, carts, and promo codes.
- Use templates, file manager, landing pages, SMS campaigns, surveys, and all other Marketing API resources.
Prerequisites
- Python 3.10+
MAILCHIMP_API_KEY environment variable set to your API key (including datacenter suffix, e.g. abc123-us8)
Installation
# From the CLI-Anything repo (once merged):
pip install git+https://github.com/HKUDS/CLI-Anything.git#subdirectory=mailchimp/agent-harness
# During development:
cd mailchimp/agent-harness && pip install -e .
Command Reference
Root
| Command |
Description |
cli-anything-mailchimp ping |
Health check — confirms API connectivity |
cli-anything-mailchimp root list |
Get account info |
cli-anything-mailchimp --json <cmd> |
Output any command as JSON |
cli-anything-mailchimp |
Launch interactive REPL |
Lists (Audiences)
| Command |
Description |
lists list |
List all audiences |
lists get <LIST_ID> |
Get audience info |
lists create --data '<json>' |
Create audience |
lists update <LIST_ID> --data '<json>' |
Update audience |
lists delete <LIST_ID> |
Delete audience |
lists list-lists-id-members <LIST_ID> |
List members |
lists get-lists-id-members-id <LIST_ID> <SUBSCRIBER_HASH> |
Get member by MD5 hash |
lists create-lists-id-members <LIST_ID> --data '<json>' |
Add member |
lists list-lists-id-merge-fields <LIST_ID> |
List merge fields |
lists create-lists-id-merge-fields <LIST_ID> --data '<json>' |
Add merge field |
lists list-lists-id-segments <LIST_ID> |
List segments |
lists list-list-member-tags <LIST_ID> <SUBSCRIBER_HASH> |
List member tags |
lists create-list-member-tags <LIST_ID> <SUBSCRIBER_HASH> --data '<json>' |
Add/remove member tags |
lists list-lists-id-webhooks <LIST_ID> |
List webhooks |
lists create-lists-id-webhooks <LIST_ID> --data '<json>' |
Add webhook |
Campaigns
| Command |
Description |
campaigns list |
List campaigns |
campaigns get <CAMPAIGN_ID> |
Get campaign info |
campaigns create --data '<json>' |
Create campaign |
campaigns update <CAMPAIGN_ID> --data '<json>' |
Update campaign settings |
campaigns delete <CAMPAIGN_ID> |
Delete campaign |
campaigns send <CAMPAIGN_ID> |
Send campaign immediately |
campaigns schedule <CAMPAIGN_ID> --data '<json>' |
Schedule campaign |
campaigns cancel-send <CAMPAIGN_ID> |
Cancel scheduled send |
campaigns pause <CAMPAIGN_ID> |
Pause RSS campaign |
campaigns resume <CAMPAIGN_ID> |
Resume RSS campaign |
campaigns replicate <CAMPAIGN_ID> |
Duplicate campaign |
campaigns list-content <CAMPAIGN_ID> |
Get campaign content |
campaigns list-send-checklist <CAMPAIGN_ID> |
Pre-send checklist |
Reports
| Command |
Description |
reports list |
List all campaign reports |
reports get <CAMPAIGN_ID> |
Get campaign summary report |
reports list-email-activity <CAMPAIGN_ID> |
Per-subscriber open/click activity |
reports list-click-details <CAMPAIGN_ID> |
Link click breakdown |
reports list-open-details <CAMPAIGN_ID> |
Per-subscriber opens |
reports list-unsubscribed <CAMPAIGN_ID> |
Unsubscribers |
reports list-locations <CAMPAIGN_ID> |
Geographic breakdown |
reports list-domain-performance <CAMPAIGN_ID> |
Per-domain stats |
Automations
| Command |
Description |
automations list |
List automations |
automations get <WORKFLOW_ID> |
Get automation info |
automations create --data '<json>' |
Create automation |
automations pause <WORKFLOW_ID> |
Pause automation |
automations start <WORKFLOW_ID> |
Start automation |
automations archive <WORKFLOW_ID> |
Archive automation |
automations list-emails <WORKFLOW_ID> |
List automation emails |
E-commerce
| Command |
Description |
ecommerce list-ecommerce-stores |
List stores |
ecommerce get <STORE_ID> |
Get store info |
ecommerce create --data '<json>' |
Add store |
ecommerce list-ecommerce-stores-id-orders <STORE_ID> |
List orders |
ecommerce list-ecommerce-stores-id-products <STORE_ID> |
List products |
ecommerce list-ecommerce-stores-id-customers <STORE_ID> |
List customers |
ecommerce list-ecommerce-stores-id-carts <STORE_ID> |
List carts |
ecommerce list-ecommerce-stores-id-promocodes <PROMO_RULE_ID> <STORE_ID> |
List promo codes |
Other Resources
| Group |
Description |
templates |
Email templates (list, get, create, update, delete) |
template-folders |
Template folders |
campaign-folders |
Campaign folders |
file-manager |
Files and folders in the file manager |
landing-pages |
Landing pages (list, create, publish, unpublish) |
sms-campaigns |
SMS campaigns (10 operations) |
surveys |
Surveys (list, get, publish) |
reporting |
Facebook ad and landing page reporting |
search-campaigns |
Search campaigns by query |
search-members |
Search members across all audiences |
batches |
Batch API operations |
batch-webhooks |
Batch operation webhooks |
verified-domains |
Email domain verification |
authorized-apps |
OAuth connected apps |
connected-sites |
Connected site integrations |
conversations |
Inbox conversations |
activity-feed |
Account activity feed |
account-exports |
Account data exports |
JSON Output
All commands support --json at the root level:
# List all audiences as JSON
cli-anything-mailchimp --json lists list
# Get a campaign report as JSON
cli-anything-mailchimp --json reports get abc123def
# Pipe to jq — use the native Mailchimp field name for the resource
cli-anything-mailchimp --json lists list | jq '.lists[].name'
cli-anything-mailchimp --json campaigns list | jq '.campaigns[].id'
Envelope shapes (native Mailchimp API response — use the resource-specific key):
// List endpoints — key matches the resource name (lists, campaigns, members, etc.)
{"lists": [...], "total_items": 42, "_links": [...]}
{"campaigns": [...], "total_items": 10, "_links": [...]}
// Single resource GET / POST / PATCH
{"id": "abc123", "name": "My List", ...}
// DELETE
{"ok": true, "message": "Deleted."}
// Error
{"ok": false, "message": "Resource Not Found: ...", "data": {...}}
Common Agent Patterns
# Get account health
cli-anything-mailchimp --json ping | jq '.health_status'
# List all audience IDs and names
cli-anything-mailchimp --json lists list | jq '.lists[] | {id, name}'
# Find all subscribed members in an audience
cli-anything-mailchimp --json lists list-lists-id-members <list_id> --status subscribed | jq '.members[].email_address'
# Create a campaign and get its send checklist
cli-anything-mailchimp --json campaigns create --data '{"type":"regular","settings":{"subject_line":"Hello","from_name":"Me","reply_to":"me@example.com"}}' | jq '.id'
cli-anything-mailchimp --json campaigns list-send-checklist <campaign_id> | jq '.items[] | select(.result == false)'
# Get unsubscribes for a sent campaign
cli-anything-mailchimp --json reports list-unsubscribed <campaign_id> | jq '.unsubscribes[].email_address'
# Add a member to an audience (subscriber hash = MD5 of lowercased email)
cli-anything-mailchimp --json lists create-members <list_id> --data '{"email_address":"user@example.com","status":"subscribed"}'
# Search for a member across all audiences
cli-anything-mailchimp --json search-members list --query "user@example.com" | jq '.exact_matches.members[]'
Interactive REPL
Run cli-anything-mailchimp with no arguments to enter the REPL:
◆ cli-anything · Mailchimp
v0.1.0
Type help for commands, quit to exit
◆ mailchimp ❯ ping
✓ {"health_status": "Everything's Chimpy!"}
◆ mailchimp ❯ --json lists list
{"lists": [...], "total_items": 3, "_links": [...]}
◆ mailchimp ❯ quit
Notes
- Subscriber hash: Mailchimp identifies members by the MD5 hash of their lowercased email. Compute with
python -c "import hashlib; email='email@example.com'; print(hashlib.md5(email.strip().lower().encode()).hexdigest())".
- Body payloads: All POST/PATCH/PUT commands accept
--data '<json>'. See Mailchimp API docs for the schema of each endpoint.
- Datacenter: Your API key ends in
-us8, -eu2, etc. The CLI extracts this automatically — include it in MAILCHIMP_API_KEY.
- Rate limits: The Marketing API rate-limits at 10 concurrent connections and a rolling per-account limit. For bulk operations, use the
batches group.
1---2name: cli-anything-mailchimp3description: CLI harness for the Mailchimp Marketing API v3.0 — 303 commands across 30 resource groups (lists, campaigns, reports, automations, ecommerce, templates, and more). Supports JSON output and interactive REPL mode.4---5
6# cli-anything-mailchimp
7
8## Identity
9
10An agent-native CLI for the [Mailchimp Marketing API v3.0](https://mailchimp.com/developer/marketing/docs/fundamentals/), built on the [CLI-Anything](https://github.com/HKUDS/CLI-Anything) framework.
11
12## What This CLI Does
13
14- Manage **audiences (lists)** — create, update, delete lists; add/update/archive members; manage merge fields, segments, tags, and webhooks.
15- Run **campaigns** — create, schedule, send, pause, replicate, and analyse email campaigns.
16- Read **reports** — open rates, click rates, bounce stats, unsubscribes, email activity, geographic data.
17- Control **automations** — create and manage automated email workflows.
18- Manage **e-commerce** — stores, orders, customers, products, carts, and promo codes.
19- Use **templates, file manager, landing pages, SMS campaigns, surveys**, and all other Marketing API resources.
20
21## Prerequisites
22
23- Python 3.10+
24- `MAILCHIMP_API_KEY` environment variable set to your API key (including datacenter suffix, e.g. `abc123-us8`)
25
26## Installation
27
28```bash
29# From the CLI-Anything repo (once merged):
30pip install git+https://github.com/HKUDS/CLI-Anything.git#subdirectory=mailchimp/agent-harness
31
32# During development:
33cd mailchimp/agent-harness && pip install -e .
34```
35
36## Command Reference
37
38### Root
39
40| Command | Description |
41|---|---|
42| `cli-anything-mailchimp ping` | Health check — confirms API connectivity |
43| `cli-anything-mailchimp root list` | Get account info |
44| `cli-anything-mailchimp --json <cmd>` | Output any command as JSON |
45| `cli-anything-mailchimp` | Launch interactive REPL |
46
47### Lists (Audiences)
48
49| Command | Description |
50|---|---|
51| `lists list` | List all audiences |
52| `lists get <LIST_ID>` | Get audience info |
53| `lists create --data '<json>'` | Create audience |
54| `lists update <LIST_ID> --data '<json>'` | Update audience |
55| `lists delete <LIST_ID>` | Delete audience |
56| `lists list-lists-id-members <LIST_ID>` | List members |
57| `lists get-lists-id-members-id <LIST_ID> <SUBSCRIBER_HASH>` | Get member by MD5 hash |
58| `lists create-lists-id-members <LIST_ID> --data '<json>'` | Add member |
59| `lists list-lists-id-merge-fields <LIST_ID>` | List merge fields |
60| `lists create-lists-id-merge-fields <LIST_ID> --data '<json>'` | Add merge field |
61| `lists list-lists-id-segments <LIST_ID>` | List segments |
62| `lists list-list-member-tags <LIST_ID> <SUBSCRIBER_HASH>` | List member tags |
63| `lists create-list-member-tags <LIST_ID> <SUBSCRIBER_HASH> --data '<json>'` | Add/remove member tags |
64| `lists list-lists-id-webhooks <LIST_ID>` | List webhooks |
65| `lists create-lists-id-webhooks <LIST_ID> --data '<json>'` | Add webhook |
66
67### Campaigns
68
69| Command | Description |
70|---|---|
71| `campaigns list` | List campaigns |
72| `campaigns get <CAMPAIGN_ID>` | Get campaign info |
73| `campaigns create --data '<json>'` | Create campaign |
74| `campaigns update <CAMPAIGN_ID> --data '<json>'` | Update campaign settings |
75| `campaigns delete <CAMPAIGN_ID>` | Delete campaign |
76| `campaigns send <CAMPAIGN_ID>` | Send campaign immediately |
77| `campaigns schedule <CAMPAIGN_ID> --data '<json>'` | Schedule campaign |
78| `campaigns cancel-send <CAMPAIGN_ID>` | Cancel scheduled send |
79| `campaigns pause <CAMPAIGN_ID>` | Pause RSS campaign |
80| `campaigns resume <CAMPAIGN_ID>` | Resume RSS campaign |
81| `campaigns replicate <CAMPAIGN_ID>` | Duplicate campaign |
82| `campaigns list-content <CAMPAIGN_ID>` | Get campaign content |
83| `campaigns list-send-checklist <CAMPAIGN_ID>` | Pre-send checklist |
84
85### Reports
86
87| Command | Description |
88|---|---|
89| `reports list` | List all campaign reports |
90| `reports get <CAMPAIGN_ID>` | Get campaign summary report |
91| `reports list-email-activity <CAMPAIGN_ID>` | Per-subscriber open/click activity |
92| `reports list-click-details <CAMPAIGN_ID>` | Link click breakdown |
93| `reports list-open-details <CAMPAIGN_ID>` | Per-subscriber opens |
94| `reports list-unsubscribed <CAMPAIGN_ID>` | Unsubscribers |
95| `reports list-locations <CAMPAIGN_ID>` | Geographic breakdown |
96| `reports list-domain-performance <CAMPAIGN_ID>` | Per-domain stats |
97
98### Automations
99
100| Command | Description |
101|---|---|
102| `automations list` | List automations |
103| `automations get <WORKFLOW_ID>` | Get automation info |
104| `automations create --data '<json>'` | Create automation |
105| `automations pause <WORKFLOW_ID>` | Pause automation |
106| `automations start <WORKFLOW_ID>` | Start automation |
107| `automations archive <WORKFLOW_ID>` | Archive automation |
108| `automations list-emails <WORKFLOW_ID>` | List automation emails |
109
110### E-commerce
111
112| Command | Description |
113|---|---|
114| `ecommerce list-ecommerce-stores` | List stores |
115| `ecommerce get <STORE_ID>` | Get store info |
116| `ecommerce create --data '<json>'` | Add store |
117| `ecommerce list-ecommerce-stores-id-orders <STORE_ID>` | List orders |
118| `ecommerce list-ecommerce-stores-id-products <STORE_ID>` | List products |
119| `ecommerce list-ecommerce-stores-id-customers <STORE_ID>` | List customers |
120| `ecommerce list-ecommerce-stores-id-carts <STORE_ID>` | List carts |
121| `ecommerce list-ecommerce-stores-id-promocodes <PROMO_RULE_ID> <STORE_ID>` | List promo codes |
122
123### Other Resources
124
125| Group | Description |
126|---|---|
127| `templates` | Email templates (list, get, create, update, delete) |
128| `template-folders` | Template folders |
129| `campaign-folders` | Campaign folders |
130| `file-manager` | Files and folders in the file manager |
131| `landing-pages` | Landing pages (list, create, publish, unpublish) |
132| `sms-campaigns` | SMS campaigns (10 operations) |
133| `surveys` | Surveys (list, get, publish) |
134| `reporting` | Facebook ad and landing page reporting |
135| `search-campaigns` | Search campaigns by query |
136| `search-members` | Search members across all audiences |
137| `batches` | Batch API operations |
138| `batch-webhooks` | Batch operation webhooks |
139| `verified-domains` | Email domain verification |
140| `authorized-apps` | OAuth connected apps |
141| `connected-sites` | Connected site integrations |
142| `conversations` | Inbox conversations |
143| `activity-feed` | Account activity feed |
144| `account-exports` | Account data exports |
145
146## JSON Output
147
148All commands support `--json` at the root level:
149
150```bash
151# List all audiences as JSON
152cli-anything-mailchimp --json lists list
153
154# Get a campaign report as JSON
155cli-anything-mailchimp --json reports get abc123def
156
157# Pipe to jq — use the native Mailchimp field name for the resource
158cli-anything-mailchimp --json lists list | jq '.lists[].name'
159cli-anything-mailchimp --json campaigns list | jq '.campaigns[].id'
160```
161
162**Envelope shapes** (native Mailchimp API response — use the resource-specific key):
163
164```json
165// List endpoints — key matches the resource name (lists, campaigns, members, etc.)
166{"lists": [...], "total_items": 42, "_links": [...]}
167{"campaigns": [...], "total_items": 10, "_links": [...]}
168
169// Single resource GET / POST / PATCH
170{"id": "abc123", "name": "My List", ...}
171
172// DELETE
173{"ok": true, "message": "Deleted."}
174
175// Error
176{"ok": false, "message": "Resource Not Found: ...", "data": {...}}
177```
178
179## Common Agent Patterns
180
181```bash
182# Get account health
183cli-anything-mailchimp --json ping | jq '.health_status'
184
185# List all audience IDs and names
186cli-anything-mailchimp --json lists list | jq '.lists[] | {id, name}'
187
188# Find all subscribed members in an audience
189cli-anything-mailchimp --json lists list-lists-id-members <list_id> --status subscribed | jq '.members[].email_address'
190
191# Create a campaign and get its send checklist
192cli-anything-mailchimp --json campaigns create --data '{"type":"regular","settings":{"subject_line":"Hello","from_name":"Me","reply_to":"me@example.com"}}' | jq '.id'
193cli-anything-mailchimp --json campaigns list-send-checklist <campaign_id> | jq '.items[] | select(.result == false)'
194
195# Get unsubscribes for a sent campaign
196cli-anything-mailchimp --json reports list-unsubscribed <campaign_id> | jq '.unsubscribes[].email_address'
197
198# Add a member to an audience (subscriber hash = MD5 of lowercased email)
199cli-anything-mailchimp --json lists create-members <list_id> --data '{"email_address":"user@example.com","status":"subscribed"}'
200
201# Search for a member across all audiences
202cli-anything-mailchimp --json search-members list --query "user@example.com" | jq '.exact_matches.members[]'
203```
204
205## Interactive REPL
206
207Run `cli-anything-mailchimp` with no arguments to enter the REPL:
208
209```
210◆ cli-anything · Mailchimp
211 v0.1.0
212 Type help for commands, quit to exit
213
214◆ mailchimp ❯ ping
215 ✓ {"health_status": "Everything's Chimpy!"}
216
217◆ mailchimp ❯ --json lists list
218{"lists": [...], "total_items": 3, "_links": [...]}
219
220◆ mailchimp ❯ quit
221```
222
223## Notes
224
225- **Subscriber hash**: Mailchimp identifies members by the MD5 hash of their lowercased email. Compute with `python -c "import hashlib; email='email@example.com'; print(hashlib.md5(email.strip().lower().encode()).hexdigest())"`.
226- **Body payloads**: All POST/PATCH/PUT commands accept `--data '<json>'`. See [Mailchimp API docs](https://mailchimp.com/developer/marketing/api/) for the schema of each endpoint.
227- **Datacenter**: Your API key ends in `-us8`, `-eu2`, etc. The CLI extracts this automatically — include it in `MAILCHIMP_API_KEY`.
228- **Rate limits**: The Marketing API rate-limits at 10 concurrent connections and a rolling per-account limit. For bulk operations, use the `batches` group.