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.
Guided setup
Connect Iterable to Microsoft Copilot in 2 minutes
Start a free trial on AnythingMCP Cloud, connect Iterable in the guided setup, then add your MCP URL to Microsoft Copilot. No code and no server to run.
No credit card · 7-day trial · Self-host alternative available
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 + Microsoft Copilot
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.
Prerequisites
See the full setup instructions baked into the connector (visible in the in-app store when you select the connector). The required environment variables for this connector are:
ITERABLE_API_URL, ITERABLE_API_KEY
Step 1 — Get credentials
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.
Step 2 — Install the adapter
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
Step 3 — Add the connector in Microsoft Copilot
Your server URL: in AnythingMCP, open MCP Servers → the server this connector is on, and copy its URL (
https://cloud.anythingmcp.com/mcp/…). Use it wherever this guide showsYOUR_SERVER_ID.
Microsoft Copilot uses MCP servers through agents built in Copilot Studio: you add AnythingMCP to an agent as a tool, then publish the agent to Microsoft 365 Copilot and Teams. Copilot Studio connects from Microsoft's cloud over Streamable HTTP, which AnythingMCP supports.
- In Copilot Studio, open your agent (or create one), go to Tools and choose Add a tool → New tool → Model Context Protocol.
- Enter a Server name (for example
AnythingMCP), a Server description that says what the connector does, and the Server URLhttps://cloud.anythingmcp.com/mcp/YOUR_SERVER_ID. Copilot Studio uses the description to decide when to call the server. - Under authentication, choose API key, set Type to Header and the header name to
X-API-Key, then select Create. - In Add tool, choose Create a new connection, paste an MCP API key from AnythingMCP (MCP Servers → your server → API keys) and select Add to agent.
- Try it in the agent's Test pane: ask for something that needs the
Iterabletools. - Select Publish, then Channels → Microsoft 365 and Microsoft Teams, keep Make agent available in Microsoft Copilot selected and choose Add channel. See agent in Teams installs it for you; in Microsoft 365 Copilot, type @ and pick the agent.
Prefer per-user sign-in? Choose OAuth 2.0 → Dynamic discovery instead of an API key: each user then signs in to AnythingMCP the first time the agent calls it.
Self-hosting? Use your instance's public HTTPS address instead of https://cloud.anythingmcp.com. Copilot Studio connects from Microsoft's cloud, so localhost does not work.
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."
FAQ
Which Copilot is this for? Microsoft 365 Copilot at work, through agents built in Copilot Studio. The Microsoft Copilot app for personal accounts has no option to add your own MCP server.
What do I need? A work account with access to Copilot Studio (a license or a trial) to build the agent. People who use it in Microsoft 365 Copilot or Teams need access to the agent: share it with them, or ask an admin to publish it to the organization. If your organization applies data policies to Power Platform connectors, they cover MCP servers too.
The agent doesn't call the tools. Check that the header name is exactly X-API-Key and that the key belongs to the same MCP server as the URL, and make the server description specific: Copilot Studio uses it to decide when to call the server. Publish the agent again after each change; in an open chat, type "start over" to get the new version.
Next steps
- Connector landing page
- Connect to Claude
- Connect to ChatGPT
- Connect to Cursor
- Connect to Gemini
- Connect to Meta Muse
Was this guide helpful?