Skip to content

Connectors · Email & messaging

Iterable MCP server for AI agents.

actionlake is an MCP gateway: one remote MCP server that connects Claude and other MCP clients to Iterable and the rest of your systems. It gives your agent 149 Iterable actions (46 reads, 75 writes and 28 that wait for a confirmation) and holds the Iterable credential itself, so the agent never does. It paces Iterable's limits and records every call.

100,000 free calls a month. No card, no email, no password: press Start a free sandbox on the next screen and keep the key it shows you.

claude mcp add --transport http actionlake https://connect.actionlake.com/mcp
the first call
do {  action: "iterable.channels.list",  intent: "check which Iterable account is connected"}# Get channels · read · 1 upstream call
  • 149actionsin one signed file
  • 46readlook, never change
  • 75writecreate and update
  • 28wait for a yesdestructive, confirmed first

Set up

Connect Iterable in three steps.

  1. 01

    Add actionlake to Claude.

    Run the command once in Claude Code; its consent page can create a free sandbox: 100,000 calls a month, no card. In the Claude app, add a custom connector with the URL below and paste your key on the consent page. Creating a new sandbox from the Claude app is not yet tested by us.

    https://connect.actionlake.com/mcp
  2. 02

    Connect Iterable.

    API key. No consent screen: your agent can connect it for you, but the key then passes through your chat. To keep it out of the model's context, paste it in the console instead. actionlake stores what you paste write-only, sealed under your tenant's key.

    • api_keyIterable API key (project-scoped)
    • regionYour Iterable region
    account { op: "connections.requirements", service: "iterable" }
    # free: exactly what to paste, and what is found for you
  3. 03

    Make the first call. Check before a write.

    Ask in plain words; Claude picks the action. Before anything changes, check validates the call and prices it, for free.

    do    { action: "iterable.channels.list" }# get channels · read · 1 upstream callcheck { action: "iterable.lists.create", input: { … } }# free: inputs, permissions, cost and confirmations, nothing sent

Iterable at a glance

Sign-in
API key. No consent screen: your agent can connect it for you, but the key then passes through your chat. To keep it out of the model's context, paste it in the console instead.
You provide
api_key
Setup fields
region
Limits we pace to
10 calls a second, per connection
API covered
Iterable API (Swagger 2.0, 1.8), at your region's iterable.com address, set when you connect
Built from
Iterable's documentation, read 23 October 2026api.iterable.comapi.iterable.com
Service file
Version 1.0.0, signed (Ed25519)
Cached reads
46 of 46 reads, for up to 5 minutes; a write clears what it affects
Shared entities
2, so ask can line Iterable up with your other systems
Data
Processed and stored in Sydney, Australia. No US region yet

Capabilities

What an AI agent can do in Iterable.

149 actions in 34 areas. Every one carries its effect, so a key can allow the reads and hold the rest.

  • 46readlook, never change
  • 75writecreate and update
  • 28destructivewait for a confirmation
  1. Users

    21

    8 read · 9 write · 4 destructive

    Get a user by email (path parameter) · Delete a user by email · Register a device token for push · Update user data

  2. Campaigns

    12

    3 read · 7 write · 2 destructive

    List campaign metadata · Create a campaign · Get a campaign · Send existing campaign now

  3. Experiments

    12

    5 read · 5 write · 2 destructive

    Create an experiment · List experiments · Get an experiment · Delete an experiment

  4. Events

    11

    2 read · 9 write · 0 destructive

    Consume or delete an in-app message · Track an event · Bulk track events · Track an in-app message click

  5. Catalog items

    7

    2 read · 3 write · 2 destructive

    Get the catalog items for a catalog · Get a specific catalog item · Bulk delete catalog items · Delete a catalog item

  6. Lists

    6

    2 read · 2 write · 2 destructive

    Get lists · Create a static list · Delete a list · Add subscribers to list

  7. Subscriptions

    6

    0 read · 4 write · 2 destructive

    Trigger a double opt-in subscription flow · Bulk subscription action on a list of users · Subscribe a single user · Subscribe a single user by their userId

  8. Catalogs

    5

    2 read · 2 write · 1 destructive

    Create a catalog · Get catalog names · Get field mappings for a catalog · Set a catalog's field mappings (data types)

26 more areas · 69 actions
  • In app 5
  • Snippets 5
  • Email templates 4
  • Embedded messaging 4
  • Export jobs 4
  • In app templates 4
  • Metadata 4
  • Push templates 4
  • SMS templates 4
  • Embedded templates 3
  • Templates 3
  • Commerce 2
  • Email 2
  • Metadata tables 2
  • Push 2
  • RCS 2
  • SMS 2
  • SMS verification 2
  • Web push 2
  • Webhooks 2
  • Whatsapp 2
  • Auth 1
  • Channels 1
  • Journeys 1
  • Message types 1
  • Workflows 1

Top actions

The Iterable API, shaped for agents.

The ids your agent types, what each does, and the one name it shares with other systems. 32 of Iterable's 34 action names are shared with at least one other connector, so an agent learns them once.

ActionWhat it doesEffectSame name in
iterable.channels.listGet channelsGet channels.readcomm.channel.list27 connectors
iterable.lists.listGet listsGet lists.readcomm.audience.list26 connectors
iterable.lists.createCreate a static listCreate a static list.writecomm.audience.create24 connectors
iterable.lists.deleteDelete a listDelete a list.destructivecomm.audience.delete21 connectors
iterable.campaigns.listList campaign metadataList campaign metadata.readcomm.campaign.list41 connectors
iterable.campaigns.createCreate a campaignCreate a campaign.writecomm.campaign.create38 connectors
iterable.email.sendSend an email to an email addressSend an email to an email address.writecomm.email.send32 connectors
iterable.sms.sendSend SMS notification to userSend SMS notification to user.writecomm.sms.send26 connectors
iterable.email_templates.getGet an email template by templateIdGet an email template by templateId.readcomm.email_template.get38 connectors
iterable.email_templates.updateUpdate email templateUpdate email template.writecomm.email_template.update35 connectors
iterable.journeys.listGet journeys (workflows)Get journeys (workflows).readcomm.journey.list6 connectors
iterable.users.getGet a user by email (path parameter)Get a user by email (path parameter).readcrm.contact.get176 connectors

Try it

Prompts to paste into Claude.

Each one names the Iterable actions it will call, so you know what it reads and what it changes before you send it.

  1. Readread

    Get channels in Iterable and tell me what stands out.

    callsiterable.channels.list

  2. Writewrite

    Create a static list in Iterable. Show me exactly what you will send before you save it.

    callsiterable.lists.create

Governance for Iterable

Destructive actions wait for a yes.

28 Iterable actions are destructive. These are all of them:

  • Delete a listiterable.lists.delete
  • Remove users from a listiterable.lists.unsubscribe
  • Delete a user by emailiterable.users.delete
  • Cancel a scheduled or recurring campaigniterable.campaigns.cancel
  • Delete an experimentiterable.experiments.delete
  • Cancel exportiterable.export_jobs.cancel
  • Forget a user in compliance with GDPRiterable.users.forget
  • Delete a catalogiterable.catalogs.delete
  • Delete a single metadata key/valueiterable.metadata.delete
  • Delete a snippetiterable.snippets.delete
  • Invalidate all JWTs issued for a useriterable.auth.invalidate_jwts
  • Delete a catalog itemiterable.catalog_items.delete
  • Disable pushes to a mobile deviceiterable.users.disable_device
  • Bulk delete templatesiterable.templates.bulk_delete
  • Delete a tableiterable.metadata_tables.delete
  • Delete user by userIditerable.users.delete_by_user_id
  • Bulk delete catalog itemsiterable.catalog_items.bulk_delete
  • Unsubscribe a single useriterable.subscriptions.unsubscribe_user
  • Unsubscribe a single user by userIditerable.subscriptions.unsubscribe_user_by_user_id
  • Cancel a scheduled RCS messageiterable.rcs.cancel
  • Cancel an SMS to a useriterable.sms.cancel
  • Cancel a push notification to a useriterable.push.cancel
  • Cancel an email to a useriterable.email.cancel
  • Cancel a scheduled in-app messageiterable.in_app.cancel
  • Abort a campaigniterable.campaigns.abort
  • Cancel a web push notification to a useriterable.web_push.cancel
  • Cancel a scheduled WhatsApp messageiterable.whatsapp.cancel
  • Cancel an experimentiterable.experiments.cancel

A destructive action runs only with confirm: true. Under the human policy the agent cannot confirm for itself: the run stops until a named person approves, in the console or from a signed link in an email. The cap on a key is refused before the call is sent, never after.

doiterable.lists.deleteconfirm_policy: human

Delete a list?

intent: the user asked me to delete a list

run suspended · waiting for a named person · key iterable-agent cannot confirm itself
In the console, or from an emailed signed link.
a key for this connector
account {  op: "keys.create", name: "iterable-agent",  allowed_actions: ["iterable.*"], cap_calls: 2000,  confirm_policy: "human_for_writes",  approval_rules: [    { match: "iterable.lists.delete", approver: "[email protected]" },    { match: "iterable.lists.unsubscribe", approver: "[email protected]" },    { match: "iterable.users.delete", approver: "[email protected]" }  ]}
Illustrative. Scoped to Iterable only, capped at 2,000 upstream calls, every write confirmed, and the destructive ones approved by a named person.

Cost

What Iterable costs on actionlake.

Every Iterable action is one upstream call, the only thing actionlake bills. Searching, check, cost, account and any call Iterable refused with 401, 403, 429 or a 5xx are free. Paid plans start at US$49 a month for 250,000 calls, with overage from US$0.30 down to US$0.18 per 1,000.

  • 1upstream call per actionall 149 Iterable actions
  • 149actions pageeach page of a long list is one call
  • 46reads can be cacheda cache hit costs nothing
  • 100,000calls a month, freepaid plans from US$49 a month for 250,000

See pricing

Action index

Every Iterable action.

149 actions by area: the id your agent calls, what it does, and its effect.

Users21
  • iterable.users.bulk_updateBulk update user datawrite
  • iterable.users.bulk_update_subscriptionsBulk update user subscriptionswrite
  • iterable.users.deleteDelete a user by emaildestructive
  • iterable.users.delete_by_user_idDelete user by userIddestructive
  • iterable.users.disable_deviceDisable pushes to a mobile devicedestructive
  • iterable.users.forgetForget a user in compliance with GDPRdestructive
  • iterable.users.getGet a user by email (path parameter)read
  • iterable.users.get_by_email_queryGet a user by email (query parameter)read
  • iterable.users.get_by_user_idGet a user by userId (path parameter)read
  • iterable.users.get_by_user_id_queryGet a user by userId (query parameter)read
  • iterable.users.get_fieldsGet all user fieldsread
  • iterable.users.list_forgotten_emailsGet hashed forgotten users in compliance with GDPRread
  • iterable.users.list_forgotten_user_idsGet hashed forgotten userIds in compliance with GDPRread
  • iterable.users.list_sent_messagesGet messages sent to a userread
  • iterable.users.mergeMerge userswrite
  • iterable.users.register_browser_tokenRegister a browser token for web pushwrite
  • iterable.users.register_device_tokenRegister a device token for pushwrite
  • iterable.users.unforgetUnforget a user in compliance with GDPRwrite
  • iterable.users.update_emailUpdate user emailwrite
  • iterable.users.update_subscriptionsUpdate user subscriptionswrite
  • iterable.users.upsertUpdate user datawrite
Campaigns12
  • iterable.campaigns.abortAbort a campaigndestructive
  • iterable.campaigns.activate_triggeredActivate a triggered campaignwrite
  • iterable.campaigns.archiveArchive campaignswrite
  • iterable.campaigns.cancelCancel a scheduled or recurring campaigndestructive
  • iterable.campaigns.createCreate a campaignwrite
  • iterable.campaigns.deactivate_triggeredDeactivate a triggered campaignwrite
  • iterable.campaigns.getGet a campaignread
  • iterable.campaigns.listList campaign metadataread
  • iterable.campaigns.list_child_campaignsGet child campaigns of a recurring campaignread
  • iterable.campaigns.scheduleSchedule existing campaign to be sentwrite
  • iterable.campaigns.sendSend existing campaign nowwrite
  • iterable.campaigns.triggerTrigger a campaignwrite
Experiments12
  • iterable.experiments.cancelCancel an experimentdestructive
  • iterable.experiments.copy_variantCopy a template as a new variantwrite
  • iterable.experiments.createCreate an experimentwrite
  • iterable.experiments.declare_winnerDeclare a winner and end experimentwrite
  • iterable.experiments.deleteDelete an experimentdestructive
  • iterable.experiments.getGet an experimentread
  • iterable.experiments.get_totalsGet experiment totalsread
  • iterable.experiments.get_trendsGet experiment trendsread
  • iterable.experiments.listList experimentsread
  • iterable.experiments.list_variantsGet experiment variantsread
  • iterable.experiments.startStart an experimentwrite
  • iterable.experiments.update_settingsUpdate experiment settingswrite
Events11
  • iterable.events.in_app_consumeConsume or delete an in-app messagewrite
  • iterable.events.list_by_emailGet user eventsread
  • iterable.events.list_by_user_idGet user events by userIdread
  • iterable.events.trackTrack an eventwrite
  • iterable.events.track_bulkBulk track eventswrite
  • iterable.events.track_in_app_clickTrack an in-app message clickwrite
  • iterable.events.track_in_app_closeTrack the closing of an in-app messagewrite
  • iterable.events.track_in_app_deliveryTrack the delivery of an in-app messagewrite
  • iterable.events.track_in_app_openTrack an in-app message openwrite
  • iterable.events.track_push_openTrack a mobile push openwrite
  • iterable.events.track_web_push_clickTrack a web push clickwrite
Catalog items7
  • iterable.catalog_items.bulk_deleteBulk delete catalog itemsdestructive
  • iterable.catalog_items.bulk_upsertBulk create catalog itemswrite
  • iterable.catalog_items.deleteDelete a catalog itemdestructive
  • iterable.catalog_items.getGet a specific catalog itemread
  • iterable.catalog_items.listGet the catalog items for a catalogread
  • iterable.catalog_items.patchCreate or update a catalog itemwrite
  • iterable.catalog_items.replaceCreate or replace a catalog itemwrite
Lists6
  • iterable.lists.createCreate a static listwrite
  • iterable.lists.deleteDelete a listdestructive
  • iterable.lists.get_sizeGet count of users in listread
  • iterable.lists.listGet listsread
  • iterable.lists.subscribeAdd subscribers to listwrite
  • iterable.lists.unsubscribeRemove users from a listdestructive
Subscriptions6
  • iterable.subscriptions.bulk_actionBulk subscription action on a list of userswrite
  • iterable.subscriptions.subscribe_double_opt_inTrigger a double opt-in subscription flowwrite
  • iterable.subscriptions.subscribe_userSubscribe a single userwrite
  • iterable.subscriptions.subscribe_user_by_user_idSubscribe a single user by their userIdwrite
  • iterable.subscriptions.unsubscribe_userUnsubscribe a single userdestructive
  • iterable.subscriptions.unsubscribe_user_by_user_idUnsubscribe a single user by userIddestructive
Catalogs5
  • iterable.catalogs.createCreate a catalogwrite
  • iterable.catalogs.deleteDelete a catalogdestructive
  • iterable.catalogs.get_field_mappingsGet field mappings for a catalogread
  • iterable.catalogs.listGet catalog namesread
  • iterable.catalogs.update_field_mappingsSet a catalog's field mappings (data types)write
In app5
  • iterable.in_app.cancelCancel a scheduled in-app messagedestructive
  • iterable.in_app.get_priority_messageGet a user's most relevant in-app messageread
  • iterable.in_app.list_messagesGet a user's in-app messagesread
  • iterable.in_app.list_web_messagesGet a user's web in-app messagesread
  • iterable.in_app.sendSend an in-app notification to a userwrite
Snippets5
  • iterable.snippets.createCreate a snippetwrite
  • iterable.snippets.deleteDelete a snippetdestructive
  • iterable.snippets.getGet snippet by ID or nameread
  • iterable.snippets.listGet all snippetsread
  • iterable.snippets.updateCreate or update a snippetwrite
Email templates4
  • iterable.email_templates.getGet an email template by templateIdread
  • iterable.email_templates.send_proofSend a proof of an email templatewrite
  • iterable.email_templates.updateUpdate email templatewrite
  • iterable.email_templates.upsertCreate email templatewrite
Embedded messaging4
  • iterable.embedded_messaging.list_messagesGet a user's embedded messagesread
  • iterable.embedded_messaging.track_clickTrack an embedded message clickwrite
  • iterable.embedded_messaging.track_receivedTrack an embedded message received eventwrite
  • iterable.embedded_messaging.track_sessionTrack an embedded message session and related impressionswrite
Export jobs4
  • iterable.export_jobs.cancelCancel exportdestructive
  • iterable.export_jobs.get_filesGet export filesread
  • iterable.export_jobs.listGet export jobsread
  • iterable.export_jobs.startStart exportwrite
In app templates4
  • iterable.in_app_templates.getGet an in-app templateread
  • iterable.in_app_templates.send_proofSend a proof of an in-app templatewrite
  • iterable.in_app_templates.updateUpdate in-app templatewrite
  • iterable.in_app_templates.upsertCreate an in-app templatewrite
Metadata4
  • iterable.metadata.deleteDelete a single metadata key/valuedestructive
  • iterable.metadata.getGet the metadata value of a single keyread
  • iterable.metadata.listList keys in a tableread
  • iterable.metadata.putCreate or replace metadatawrite
Push templates4
  • iterable.push_templates.getGet a push templateread
  • iterable.push_templates.send_proofSend a proof of a push templatewrite
  • iterable.push_templates.updateUpdate push templatewrite
  • iterable.push_templates.upsertCreate a push templatewrite
SMS templates4
  • iterable.sms_templates.getGet an SMS templateread
  • iterable.sms_templates.send_proofSend a proof of an SMS templatewrite
  • iterable.sms_templates.updateUpdate SMS templatewrite
  • iterable.sms_templates.upsertCreate an SMS templatewrite
Embedded templates3
  • iterable.embedded_templates.getGet an embedded message templateread
  • iterable.embedded_templates.updateUpdate embedded message templatewrite
  • iterable.embedded_templates.upsertCreate an embedded message templatewrite
Templates3
  • iterable.templates.bulk_deleteBulk delete templatesdestructive
  • iterable.templates.get_by_client_template_idGet an email template by clientTemplateIdread
  • iterable.templates.listGet project templatesread
Commerce2
  • iterable.commerce.track_purchaseTrack a purchasewrite
  • iterable.commerce.update_cartUpdate a user's shopping cart itemswrite
Email2
  • iterable.email.cancelCancel an email to a userdestructive
  • iterable.email.sendSend an email to an email addresswrite
Metadata tables2
  • iterable.metadata_tables.deleteDelete a tabledestructive
  • iterable.metadata_tables.listList available tablesread
Push2
  • iterable.push.cancelCancel a push notification to a userdestructive
  • iterable.push.sendSend push notification to userwrite
RCS2
  • iterable.rcs.cancelCancel a scheduled RCS messagedestructive
  • iterable.rcs.sendSend an RCS message to a userwrite
SMS2
  • iterable.sms.cancelCancel an SMS to a userdestructive
  • iterable.sms.sendSend SMS notification to userwrite
SMS verification2
  • iterable.sms_verification.beginBegin SMS Verificationwrite
  • iterable.sms_verification.checkCheck SMS Verification Codewrite
Web push2
  • iterable.web_push.cancelCancel a web push notification to a userdestructive
  • iterable.web_push.sendSend web push notification to userwrite
Webhooks2
  • iterable.webhooks.listGet webhooksread
  • iterable.webhooks.updateUpdate webhookwrite
Whatsapp2
  • iterable.whatsapp.cancelCancel a scheduled WhatsApp messagedestructive
  • iterable.whatsapp.sendSend a WhatsApp message to a userwrite
Auth1
  • iterable.auth.invalidate_jwtsInvalidate all JWTs issued for a userdestructive
Channels1
  • iterable.channels.listGet channelsread
Journeys1
  • iterable.journeys.listGet journeys (workflows)read
Message types1
  • iterable.message_types.listList message typesread
Workflows1
  • iterable.workflows.triggerTrigger a journey (workflow)write

Questions

The Iterable MCP server, answered.

Is there an Iterable MCP server for Claude?

Yes. actionlake is an MCP gateway: a remote MCP server that gives Claude, or another MCP client, 149 Iterable actions across users, campaigns, experiments and events, through the same eight tools it uses for every other connector. actionlake is independent; it is not made or endorsed by Iterable.

What do I need to connect Iterable?

Iterable API key (project-scoped). Plus your region. The free call account { op: "connections.requirements", service: "iterable" } lists exactly what to paste.

Can an AI agent delete or change things in Iterable?

Only if its key allows it, and only with an explicit confirmation. 28 Iterable actions are destructive, including delete a list, remove users from a list and delete a user by email. Each runs only with confirm: true. Under the human confirm policy, or an approval rule on the key, the run waits until a named person approves it.

Will an AI agent use up my Iterable API limit?

actionlake paces every call to the limits in the Iterable service file: 10 calls a second per connection. Repeated reads are answered from cache (46 Iterable actions can be), which never reaches Iterable.

What does an Iterable action cost?

One upstream call, the only unit actionlake bills. A list that pages bills one call per page (149 Iterable actions page). Cache hits, searches, dry runs and calls Iterable refused with 401, 403, 429 or a 5xx are free. The Free plan includes 100,000 calls a month with no card. Paid plans start at US$49 a month for 250,000 calls, with overage from US$0.30 down to US$0.18 per 1,000.

Which Iterable API does it cover?

The Iterable API (Swagger 2.0, 1.8) at your region's iterable.com address, set when you connect. It is built from Iterable's documentation as read on 23 October 2026. 149 actions in 34 areas, each one in the signed service file (version 1.0.0).

Does actionlake keep my Iterable data, and where?

actionlake processes and stores data in Sydney, Australia; there is no US region yet. Reads may be cached for up to 5 minutes, and a write clears the reads it affects. Each run's request and response is kept, sealed, for your plan's trace window: 1 day on Free, 3 days on Starter, 7 days on Pro, 14 days on Team, 30 days on Business and 30 days on Enterprise. Your Iterable credential is sealed under your tenant's key, never logged and never returned. Your traffic is not used to train models.

Which AI clients can use it?

Claude Code, tested by us end to end, and the Claude app as a custom connector, tested by us with an existing key. Other MCP clients that support remote servers over Streamable HTTP (MCP revisions 2025-06-18 and 2025-11-25) and OAuth dynamic client registration, or a bearer header, should connect the same way; we have not tested them. Or plain REST, under the same action names.

Give your agent Iterable today.

Start free - 100,000 calls/month, no card. No signup. Hard caps on every key. Cached answers are free.