100+ integrations are ready to connect to your AI.Connect your first MCP

Iterable MCP server for your AI

See how recent campaigns performed, look up a customer's profile, events and messages in one call, add people to a list, send a proof of a template, start a journey, and export data of any size.

PopMCPIterable

How did our last five campaigns do? Compare sends, opens, clicks, unsubscribes and revenue

Supported Iterable tools

Every endpoint in Iterable's API that a server-side key can call, with the everyday tools loaded by default, the rest one search away, and report and export answers returned as JSON an AI can read.

151 tools in the full catalog: 59 read and 92 write. 43 load by default, and the rest are found with tool search.

iterable_get_email_template

Get one email template: subject, html, plainText, sender, messageTypeId.

iterable_list_templates

List templates (templateId, name, type, medium, timestamps), filtered by templateType and messageMedium.

iterable_send_email_template_proof

Send a proof of an email template to one person (templateId, recipientEmail or recipientUserId).

iterable_upsert_email_template

Create an email template, or update the one with the same clientTemplateId.

iterable_bulk_update_users

Bulk update user data.

iterable_get_sent_messages

List messages sent to an user (messageId, campaignId, templateId, createdAt).

iterable_get_user_by_email

Get one user's profile by email: dataFields, signup date, updates, devices, subscriptions.

iterable_get_user_by_user_id

Get one user's profile by userId.

iterable_get_user_fields

List every user profile field in the project and its type (date, string, long, double, boolean, object).

iterable_get_user_overview

Everything about one user in one call: profile and data fields, recent events and recent messages.

iterable_update_user

Create or update one user.

iterable_update_user_subscriptions

Update user subscriptions.

iterable_abort_campaign

Stop a running campaign.

iterable_cancel_campaign

Cancel a scheduled or recurring campaign before it sends.

iterable_create_campaign

Create a blast or triggered campaign from an existing template.

iterable_get_campaign

Get a campaign.

iterable_get_campaign_metrics

Get performance metrics for campaigns by id, returned as one JSON object per campaign (sends, opens, clicks, purchases, revenue and more).

iterable_get_campaign_report

How campaigns performed: name, state, type and audience joined with their metrics, as JSON.

iterable_list_campaigns

List campaigns (id, name, state, type, medium, templateId, listIds, timestamps), newest pages via page.

iterable_schedule_campaign

Schedule an existing blast campaign (state Ready) for up to 7 days ahead.

iterable_send_campaign

Send an existing blast campaign (state Ready) to its lists now.

iterable_trigger_campaign

Send a triggered campaign (type Triggered, activated) to one or more lists now.

iterable_list_catalog_items

List items in a catalog.

iterable_list_catalogs

List the project's catalogs.

iterable_create_list

Create a static list.

iterable_get_list_size

Count the users in a list.

iterable_list_lists

List all lists: id, name, type (Standard, Dynamic, Suppression, Internal), createdAt.

iterable_preview_list_users

Get a random sample of users in a list as a JSON list (size up to 5000, default 1000).

iterable_subscribe_to_list

Add users to a Standard list: {"listId":123,"subscribers":[{"email":"a@example.com"}]}.

iterable_unsubscribe_from_list

Remove users from a Standard list: {"listId":123,"subscribers":[{"email":"a@example.com"}]}.

iterable_get_export_files

Get an export job's state and, once Completed, its files with download links (valid 30 minutes).

iterable_start_export

Start a bulk export job for any size of data.

iterable_get_user_events

Get an user's recent events by email: custom events, sends, opens, clicks, purchases.

iterable_track_event

Record a custom event for an user (eventName, email or userId, dataFields).

iterable_get_project_overview

A map of this Iterable project: channels, message types, lists, journeys, the newest campaigns and how many templates.

iterable_list_channels

List the project's message channels.

iterable_list_message_types

List message types.

iterable_send_email

Send one person an email from an activated triggered email campaign.

iterable_list_journeys

List journeys (workflows): id, name, enabled, trigger event names, archived.

iterable_send_push

Send one person a push notification from an activated triggered push campaign.

iterable_send_sms

Send one person a text from an activated triggered SMS campaign.

iterable_track_purchase

Record a purchase: user (email or userId), items (id, name, price, quantity) and total.

iterable_trigger_journey

Start a journey for one user (email or userId) or a whole list (listId).

iterable_bulk_delete_templates

Bulk delete templates.

iterable_get_embedded_template

Get an embedded message template.

iterable_get_in_app_template

Get an in-app template.

iterable_get_push_template

Get a push template.

iterable_get_sms_template

Get an SMS template.

iterable_get_templates_by_client_id

Get an email template by clientTemplateId.

iterable_preview_email_template

Preview email template with custom data.

iterable_preview_in_app_template

Preview in-app template with custom data.

iterable_send_in_app_template_proof

Send a proof of an in-app template.

iterable_send_push_template_proof

Send a proof of a push template.

iterable_send_sms_template_proof

Send a proof of an SMS template.

iterable_update_email_template

Change an existing email template by templateId.

iterable_update_embedded_template

Update embedded message template.

iterable_update_in_app_template

Update in-app template.

iterable_update_push_template

Update push template.

iterable_update_sms_template

Update SMS template.

iterable_upsert_embedded_template

Create an embedded message template.

iterable_upsert_in_app_template

Create an in-app template.

iterable_upsert_push_template

Create a push template.

iterable_upsert_sms_template

Create an SMS template.

iterable_bulk_update_user_subscriptions

Bulk update user subscriptions.

iterable_delete_user_by_email

Delete an user by email, with their history.

iterable_delete_user_by_user_id

Delete an user by userId, with their history.

iterable_forget_user

Forget an user under GDPR: their data is deleted and they can no longer be messaged or re-created.

iterable_get_user_by_email_query

Get an user by email (query parameter).

iterable_get_user_by_user_id_query

Get an user by userId (query parameter).

iterable_invalidate_user_jwts

Invalidate all JWTs issued for an user.

iterable_list_forgotten_user_ids

Get hashed forgotten userIds in compliance with GDPR.

iterable_list_forgotten_users

Get hashed forgotten users in compliance with GDPR.

iterable_merge_users

Merge one user into another (source into destination by email or userId).

iterable_unforget_user

Allow a forgotten user to be stored again.

iterable_update_user_email

Update user email.

iterable_activate_triggered_campaign

Activate a triggered campaign.

iterable_archive_campaigns

Archive campaigns.

iterable_deactivate_triggered_campaign

Deactivate a triggered campaign.

iterable_list_recurring_child_campaigns

Get child campaigns of a recurring campaign.

iterable_cancel_experiment

Cancel an experiment.

iterable_copy_experiment_variant

Copy a template as a new variant.

iterable_create_experiment

Create an experiment.

iterable_declare_experiment_winner

Declare a winner and end experiment.

iterable_delete_experiment

Delete an experiment.

iterable_get_experiment

Get an experiment.

iterable_get_experiment_metrics

Get metrics for experiments.

iterable_get_experiment_totals

Get experiment totals.

iterable_get_experiment_trends

Get experiment trends.

iterable_list_experiment_variants

Get experiment variants.

iterable_list_experiments

List experiments.

iterable_start_experiment

Start an experiment.

iterable_update_experiment_settings

Update experiment settings.

iterable_bulk_delete_catalog_items

Bulk delete catalog items.

iterable_bulk_upsert_catalog_items

Create or replace up to 1,000 items in one call: {"documents":{"item-id":{"price":10}},"replaceUploadedFieldsOnly":false}.

iterable_create_catalog

Create a catalog.

iterable_delete_catalog

Delete a catalog and all its items.

iterable_delete_catalog_item

Delete a catalog item.

iterable_get_catalog_field_mappings

Get field mappings for a catalog.

iterable_get_catalog_item

Get a specific catalog item.

iterable_replace_catalog_item

Create or fully replace one catalog item: fields you leave out are removed.

iterable_update_catalog_field_mappings

Set field types for a catalog so they can be sorted and filtered: {"mappingsUpdates":[{"fieldName":"price","fieldType":"double"}]}.

iterable_update_catalog_item

Change some fields of one catalog item, creating it if missing: send only the fields to change.

iterable_delete_list

Delete a list.

iterable_get_list_users

Get the users in a list as a JSON list, stopping at maxRows.

iterable_cancel_export

Cancel export.

iterable_export_data_csv

Read the first rows of an analytics export directly, as JSON objects, stopping at maxRows.

iterable_export_data_json

Read the first rows of an analytics export directly, as JSON, stopping at maxRows.

iterable_export_user_events

Read one user's full event history (email or userId), stopping at maxRows.

iterable_list_export_jobs

Get export jobs.

iterable_bulk_update_subscription_group

Bulk subscription action on a list of users.

iterable_delete_metadata_key

Delete a single metadata key/value.

iterable_delete_metadata_table

Delete a metadata table and everything in it.

iterable_get_metadata_value

Get the metadata value of a single key.

iterable_list_metadata_keys

List keys in a table.

iterable_list_metadata_tables

List available tables.

iterable_put_metadata_value

Create or replace metadata.

iterable_start_double_opt_in

Trigger a double opt-in subscription flow.

iterable_subscribe_user_by_email

Subscribe a single user.

iterable_subscribe_user_by_user_id

Subscribe a single user by their userId.

iterable_unsubscribe_user_by_email

Unsubscribe a single user.

iterable_unsubscribe_user_by_user_id

Unsubscribe a single user by userId.

iterable_create_snippet

Create a snippet.

iterable_delete_snippet

Delete a snippet.

iterable_get_snippet

Get snippet by ID or name.

iterable_list_snippets

Get all snippets.

iterable_update_snippet

Create or update a snippet.

iterable_cancel_in_app_message

Cancel a scheduled in-app message.

iterable_get_embedded_messages

Get an user's embedded messages.

iterable_get_in_app_messages

Get an user's in-app messages.

iterable_get_user_events_by_user_id

Get user events by userId.

iterable_get_web_in_app_messages

Get an user's web in-app messages.

iterable_send_in_app_message

Send one person an in-app message from an activated triggered in-app campaign.

iterable_track_embedded_click

Track an embedded message click.

iterable_track_embedded_received

Track an embedded message received event.

iterable_track_embedded_session

Track an embedded message session and related impressions.

iterable_track_events_bulk

Bulk track events.

iterable_cancel_email

Cancel an email to an user.

iterable_view_sent_email

View a previously sent email.

iterable_begin_sms_verification

Begin SMS Verification.

iterable_cancel_push

Cancel a push notification to an user.

iterable_cancel_rcs

Cancel a scheduled RCS message.

iterable_cancel_sms

Cancel an SMS to an user.

iterable_cancel_web_push

Cancel a web push notification to an user.

iterable_cancel_whatsapp

Cancel a scheduled WhatsApp message.

iterable_check_sms_verification

Check SMS Verification Code.

iterable_list_webhooks

List the project's system webhooks: id, endpoint, auth type, enabled, channels and message types.

iterable_send_rcs

Send one person an RCS message from an activated triggered RCS campaign.

iterable_send_web_push

Send one person a web push notification from an activated triggered web push campaign.

iterable_send_whatsapp

Send one person a WhatsApp message from an activated triggered WhatsApp campaign.

iterable_update_cart

Replace an user's shopping cart with items.

iterable_update_webhook

Change an existing system webhook by id (endpoint, enabled, which sends it fires for).

Connect Iterable to Claude, ChatGPT and Claude Code

Credentials off one Iterable screen, then an endpoint your client signs into. Nothing to deploy, and nothing to install.

In Iterable open Integrations, API Keys and choose New API Key. Name it, pick the Server-side type, create it and copy the key into PopMCP. Iterable shows it once. PopMCP works out whether your project is in the US or the EU, so there is nothing else to fill in.

Iterable API key••••••••••••3f7a
Project name (optional)Acme production
ConnectionVerified

Then just ask for the work

  • “How did our last five campaigns do? Compare sends, opens, clicks, unsubscribes and revenue”

    • list_campaigns
    • get_campaign_report
  • “Why did jane@northwind.co stop getting our emails? Show her profile, recent events and what we last sent her”

    • get_user_overview
    • get_sent_messages
  • “Build a Black Friday blast from the holiday template for the VIP list, send me a proof, and don't send it to anyone else yet”

    • list_templates
    • list_lists
    • send_email_template_proof
    • create_campaign
  • “Add these customers to the VIP list and start the welcome journey for each of them”

    • subscribe_to_list
    • list_journeys
    • trigger_journey
  • “Export last week's email bounces and give me the download links”

    • start_export
    • get_export_files

Use Iterable from the assistant you already open

One hosted endpoint, registered once per client. The same tools and the same permissions, whichever window the request comes from.

Claude DesktopCustom connector

Add the PopMCP URL under Customize → Connectors and the tools appear in every chat.

Claude WebCustom connector

The same endpoint, registered in the browser. Nothing to install on the machine you are working from.

ChatGPTCustom connector

Register PopMCP as a custom connector, then let ChatGPT read and update the account.

CodexDesktop & CLI

Wire the endpoint into Codex or the Codex CLI when a task needs live business context, not a fixture.

OpenCodeCoding agent

Register the remote MCP server in OpenCode's config for terminal-first and scripted agent runs.

ZCodeDesktop app

Add PopMCP as an MCP server in Z.ai's desktop app and work the account from the same window.

Iterable MCP server questions

What teams ask before putting Iterable behind an AI client.

What does PopMCP need to connect Iterable?

One API key. In Iterable open Integrations, then API Keys, and choose New API Key. Give it a name, select the Server-side type, click Create and copy the key. Iterable shows it once. You need to be an org admin or have the Manage Integrations permission on the project.

Which key type should I pick, Server-side or Read-only?

Server-side reaches everything, including users, events, catalogs, exports and sending. Read-only is limited by Iterable to campaigns, templates, lists, journeys, experiments, snippets, metadata and reports: it cannot see user profiles or events. PopMCP detects which you pasted and says so. JavaScript, Mobile and Web keys only work inside apps and sites, so PopMCP refuses them and tells you why.

Do I have to say whether my project is in the US or the EU?

No. A key works in only one of Iterable's data centers, so PopMCP tries it and remembers where it worked. Every call then goes to the right place.

Can one key connect several Iterable projects?

No. An Iterable key belongs to one project. To work with another project, connect it with its own key in another PopMCP workspace. You can give each connection a project name under More options, since Iterable's API does not share project names.

Will the AI send a campaign by accident?

Iterable's API schedules a new blast campaign by default, and PopMCP turns that off: a blast stays unsent unless the AI gives a send time or says to send it. New connections also start read-only, and sending needs an owner or admin to allow writes.

Can it handle exports with millions of rows?

Yes. Reading an export directly stops at a row limit and says there is more. For all of the data, the AI starts an export job and hands you the download links once the files are ready. Iterable keeps those links valid for 30 minutes.

Do I have to run or host the Iterable MCP server myself?

No. PopMCP hosts it and gives you a Streamable HTTP MCP URL. There is nothing to deploy, no callback URL to register, and no infrastructure to keep running or patch.

Which AI clients can use this MCP server?

Any client that supports a remote Streamable HTTP MCP server: Claude Desktop, Claude Web, Claude Code, ChatGPT custom connectors, Codex and the Codex CLI, OpenCode and Z.ai's ZCode, as well as editors such as Cursor, Windsurf and Zed. Your client signs in to PopMCP with OAuth; the provider credential never leaves the server.

How do I connect Iterable to Claude Code?

Connect Iterable in PopMCP first, then run claude mcp add --transport http popmcp https://app.popmcp.com/mcp in a terminal. Inside Claude Code, run /mcp and sign in to PopMCP in the browser window it opens, ticking Iterable on the consent screen. The Iterable tools are then available in that session, and no Iterable credential is stored on your machine.

Why do only 43 of the 151 tools load by default?

Loading 151 tool definitions into every conversation burns context before the work starts. PopMCP loads a curated 43-tool set covering the everyday workflows and keeps the rest searchable, so your AI pulls a specialist tool only when a task needs it. Every tool stays searchable, and on Scale the owner can load the full catalog for a teammate's connection.

What is the difference between a tool and a trigger?

A tool is something your AI calls, and there are 151 here. A trigger is something PopMCP watches for you: 17 Iterable events that can start work on the PopMCP side. Triggers never enter your AI client's context, and none of them ask you to paste a callback URL into Iterable.

Connect Iterable to your AI in minutes

Launch a hosted MCP endpoint for Iterable, keep tool access under control, and start testing real workflow prompts right away.

Connect your first MCP