Skip the install. Get this working in under 2 minutes.
Start a free trial on cloud.anythingmcp.com, add the Iterable in one click, then point your AI client (Claude, ChatGPT, Copilot or Cursor) at the generated MCP endpoint. No Docker, no git clone, zero engineering experience required.
Summary
Let your AI work with Iterable: look up users, their events and messages, review lists, campaigns and campaign metrics, templates and catalogs, update profiles, track events, manage list membership and send a triggered email after you confirm.
Try asking
Example prompts for Iterable
Click any prompt to copy it. Paste into Claude, ChatGPT, Cursor, Gemini, Copilot or OpenClaw to run it against this connector.
Claude is AI and can make mistakes. Please double-check responses.
💡 No install? Use cloud.anythingmcp.com directly. Sign in, click Connectors → Iterable, paste your credentials, mint an MCP API key and you're done. No Docker, no
git clone, no local server.
Iterable
Let your AI work with Iterable: look up users, their events and messages, review lists, campaigns and campaign metrics, templates and catalogs, update profiles, track events, manage list membership and send a triggered email after you confirm.
Setup
Setting up takes about 3 minutes. You need an Iterable user who can create API keys in the project, and you need to know whether the project is hosted in the US or the EU.
- In Iterable, open Integrations → API Keys in the project settings and click New API Key. Choose a Server-side key if the AI should read and write, or a Read-only key if it should only read. JavaScript and Mobile keys do not work here.
- Copy the key and paste it into
ITERABLE_API_KEY. A key belongs to one project, so one connector works with one Iterable project. The key is sent only to Iterable, in theApi-Keyheader. - Set
ITERABLE_API_URLto the project's data center:https://api.iterable.comfor US projects,https://api.eu.iterable.comfor EU projects (the ones you sign in to at app.eu.iterable.com), without/apior any other path. - Install the connector and start with
iterable_list_channels: it checks the key and shows the project's marketing and transactional channels.
One key for the whole project: the key acts for the project, not for one person. Whoever uses this connector sees every user and campaign the key can read, so share the MCP server only with people allowed to see that.
What it covers: user profiles by email or userId with all their fields, their latest events (custom events, purchases, sends, opens, clicks, bounces, unsubscribes) and the messages sent to them; lists with their size and members; campaigns with their details and metrics; templates, channels, message types, catalogs and catalog items. Campaign metrics come back as a table, one row per campaign, with sends, deliveries, unique opens and clicks, bounces, complaints, unsubscribes, purchases and revenue.
Changes wait for your yes: the AI shows what it will write and waits for your confirmation before every change.
iterable_update_usermerges fields into a profile. Changed fields can move the user into dynamic lists and start journeys.iterable_track_eventrecords a custom event, such as a signup or a booking, which can also start a journey.iterable_subscribe_to_listanditerable_unsubscribe_from_listchange list membership. Unsubscribing with the channel option works like a global unsubscribe from that channel.iterable_send_emailsends a real email from a triggered campaign to one person, now or at a set time. Sending to many people stays a campaign in Iterable.
Switched off at install: iterable_delete_user_by_email and iterable_delete_user_by_user_id remove profiles and their data for good. An administrator turns them on only on purpose. With a Read-only key, every write answers 403; switch off the write tools for a read-only setup.
Email or userId: depending on whether the project is email-based, userID-based or hybrid, the AI identifies a user by email or by userId, never both in the same call. Times in answers are epoch milliseconds.
Limits per project: most reads 100 calls a second, campaign metrics 10 a minute, list size and list members 5 a minute, sent messages 3 a second. Members of large lists are cut at about 100 KB; the AI checks the list size first.
Common errors: 401 "Invalid API key" means the key is wrong or deleted, a JavaScript or Mobile key, or from the other data center; check ITERABLE_API_URL. 400 with a code such as BadParams or RequestFieldsTypesMismatched: a parameter or a field type is wrong, and the message says which. 404 or NotFound: the user, list or campaign does not exist in this project. 429: a rate limit is reached; wait and try again.
The connector does not run export jobs or bulk endpoints, edit templates or snippets, manage experiments or journeys, send in-app, push, SMS or web push messages, change subscriptions per message type or change catalogs.
Prerequisites: ITERABLE_API_URL, ITERABLE_API_KEY
Install the connector locally
curl -fsSL https://raw.githubusercontent.com/HelpCode-ai/anythingmcp/main/docker-compose.quickstart.yml -o docker-compose.yml
printf 'JWT_SECRET=%s\nENCRYPTION_KEY=%s\n' "$(openssl rand -hex 32)" "$(openssl rand -hex 32)" > .env
docker compose up -d
Open http://localhost:3000/connectors/store, pick Iterable and paste in the env vars listed under Prerequisites.
Available tools
| Tool | What it does |
|---|---|
iterable_list_lists | List the user lists of the Iterable project: id, name, type (Standard, Dynamic, Suppression, Internal), description and creation time… |
iterable_get_list_size | Count the users in one Iterable list |
iterable_list_list_users | Get the users of one Iterable list as plain text, one email (or userId) per line |
iterable_get_user_by_email | Get an Iterable user profile by email: email, userId and all dataFields (profile fields, subscription and channel settings, signup date and… |
iterable_get_user_by_id | Get an Iterable user profile by userId: email, userId and all dataFields |
iterable_get_user_events_by_email | Get the latest events of an Iterable user by email, newest first: custom events, purchases, email sends, opens, clicks, bounces… |
iterable_get_user_events_by_user_id | Get the latest events of an Iterable user by userId, newest first: custom events, purchases, message sends, opens, clicks, bounces and… |
iterable_get_sent_messages | List the messages Iterable sent to a user (by email or userId): message id, campaign id, template id and time, optionally filtered by… |
iterable_list_campaigns | List the campaigns of the Iterable project, a page at a time: id, name, type (Blast or Triggered), state, message medium, template, lists… |
iterable_get_campaign | Get one Iterable campaign by id: name, type, state, message medium, template id, send size, lists and suppression lists, labels, workflow… |
iterable_get_campaign_metrics | Get campaign metrics from Iterable as CSV text: one row per campaign with columns such as total sends, deliveries, unique opens and clicks… |
iterable_list_templates | List the message templates of the Iterable project, a page at a time: template id, name, message type, campaign, creator, created and… |
iterable_list_channels | List the message channels of the Iterable project: id, name, channel type (Marketing or Transactional) and medium (Email, Push, SMS) |
iterable_list_message_types | List the message types of the Iterable project: id, name, channel id, subscription policy (opt-in or opt-out), frequency cap and rate limit |
iterable_list_catalogs | List the catalog names of the Iterable project (catalogs hold products, articles or other items used for personalization) |
iterable_list_catalog_items | List the items of one Iterable catalog, a page at a time: item id, last modified time and the item's fields |
iterable_update_user | Create or update an Iterable user profile by email or userId: the dataFields given are merged into the profile, missing fields are kept |
iterable_track_event | Record a custom event for an Iterable user (by email or userId), such as a signup, a booking or a page view, with its data |
iterable_subscribe_to_list | Add users to a static Iterable list (by email or userId), creating profiles that do not exist unless update_existing_users_only is true |
iterable_unsubscribe_from_list | Remove users from a static Iterable list (by email or userId) |
iterable_send_email | Send the email of a triggered Iterable campaign to one user (by email or userId), now or at send_at, with dataFields for the template |
iterable_delete_user_by_email | Delete an Iterable user by email, asynchronously (email-based and hybrid projects) |
iterable_delete_user_by_user_id | Delete Iterable users by userId, asynchronously; every profile with that userId is removed for good |
Example prompts
- "Look up [email protected] in Iterable: her profile fields, her last 20 events and the campaigns that emailed her this month."
- "Compare sends, unique opens, unique clicks and unsubscribes of our last five blast campaigns in a table."
- "How many users are in the VIP Newsletter list, and which templates does the Welcome campaign use?"
- "Add [email protected] to the Beta testers list and record a beta_signup event for him, but show me what you will write first."
Next steps
Was this guide helpful?