Connectors · Email & messaging
Customer.io MCP server for AI agents.
actionlake is an MCP gateway: one remote MCP server that connects Claude and other MCP clients to Customer.io and the rest of your systems. It gives your agent 184 Customer.io actions (113 reads, 56 writes and 15 that wait for a confirmation) and holds the Customer.io credential itself, so the agent never does. It paces Customer.io'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/mcpdo { action: "customerio.segments_list", intent: "check which Customer.io account is connected"}# List segments · read · 1 upstream call- 184actionsin one signed file
- 113readlook, never change
- 56writecreate and update
- 15wait for a yesdestructive, confirmed first
Set up
Connect Customer.io in three steps.
- 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 - 02
Connect Customer.io.
Bearer token. 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.
app_api_keyCustomer.io App API Keyapi_baseWhere your Customer.io lives: your api base
account { op: "connections.requirements", service: "customerio" } # free: exactly what to paste, and what is found for you - 03
Make the first call. Check before a write.
Ask in plain words; Claude picks the action. Before anything changes,
checkvalidates the call and prices it, for free.do { action: "customerio.segments_list" }# list segments · read · 1 upstream callcheck { action: "customerio.segments_delete", input: { … } }# free: inputs, permissions, cost and confirmations, nothing sent
Customer.io at a glance
- Sign-in
- Bearer token. 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
app_api_key- Setup fields
api_base- Limits we pace to
- 10 calls a second, per connection
- API covered
- Customer.io API v1
api.customer.io - Built from
- Customer.io's documentation, read 19 September 2026docs.customer.io
- Service file
- Version 1.0.0, signed (Ed25519)
- Cached reads
- 112 of 113 reads, for up to an hour; a write clears what it affects
- Ready-made plans
- 8 in the store
- Shared entities
- 4, so ask can line Customer.io up with your other systems
- Data
- Processed and stored in Sydney, Australia. No US region yet
Capabilities
What an AI agent can do in Customer.io.
184 actions in 23 areas. Every one carries its effect, so a key can allow the reads and hold the rest.
- 113readlook, never change
- 56writecreate and update
- 15destructivewait for a confirmation
Design
3719 read · 13 write · 5 destructive
List email versions · List emails · Save an email version · Create an email
Newsletter
2311 read · 9 write · 3 destructive
List a one-time send's A/B test groups · List one-time send variants · List one-time sends · Create an A/B test group for a one-time send
Broadcast
1512 read · 3 write · 0 destructive
List broadcast actions · List broadcasts · Get a broadcast action · Get a broadcast
Transactional
157 read · 8 write · 0 destructive
List all variants of a transactional message · List transactional messages · Send a transactional email · Send a transactional SMS
Campaign
1210 read · 2 write · 0 destructive
List automation actions · Get an automation action · Update an automation action · List automations
Asset
94 read · 3 write · 2 destructive
List file assets · Create a folder · List folders · Get a file asset
Person
98 read · 1 write · 0 destructive
List opt-outs in the workspace · Get customers by email · Lookup a customer's opt-outs · Lookup a customer's subscription preferences
Message
88 read · 0 write · 0 destructive
List messages · Get messages for a broadcast · Get automation message metadata · Get delivery data for a one-time send
15 more areas · 56 actions
- Segment 8
- Collection 7
- Export 5
- Reporting webhook 5
- Suppression 5
- Live notification 4
- Object 4
- Snippet 4
- Sender identity 3
- Subscription 3
- Activity 2
- Data index 2
- Import 2
- Info 1
- Workspace 1
Top actions
The Customer.io API, shaped for agents.
The ids your agent types, what each does, and the one name it shares with other systems. 89 of Customer.io's 91 action names are shared with at least one other connector, so an agent learns them once.
| Action | What it does | Effect | Same name in |
|---|---|---|---|
customerio.segments_listList segments | List segments | read | comm.audience_segment.list22 connectors |
customerio.messages_listList messages | List messages | read | comm.delivery_event.list16 connectors |
customerio.person_segments_listLookup a customer's segments | Lookup a customer's segments | read | comm.audience_segment.list22 connectors |
customerio.sender_identities_listList sender identities | List sender identities | read | comm.sending_domain.list18 connectors |
customerio.person_messages_listLookup messages sent to a customer | Lookup messages sent to a customer | read | comm.delivery_event.list16 connectors |
customerio.broadcasts_listList broadcasts | List broadcasts | read | comm.campaign.list41 connectors |
customerio.newsletters_listList one-time sends | List one-time sends | read | comm.campaign.list41 connectors |
customerio.transactional_contents_listList all variants of a transactional message | List all variants of a transactional message | read | comm.email_template.list40 connectors |
customerio.segments_deleteDelete a segment | Delete a segment | destructive | comm.audience_segment.delete15 connectors |
customerio.transactional_emails_createSend a transactional email | Send a transactional email | write | comm.email.send32 connectors |
customerio.transactional_sms_createSend a transactional SMS | Send a transactional SMS | write | comm.sms.send26 connectors |
customerio.transactional_whatsapps_createSend a transactional WhatsApp message | Send a transactional WhatsApp message | write | comm.sms.send26 connectors |
Try it
Prompts to paste into Claude.
Each one names the Customer.io actions it will call, so you know what it reads and what it changes before you send it.
- Readread
List segments in Customer.io and tell me what stands out.
calls
customerio.segments_list - Planwrite
Trigger a broadcast and watch its first hour in Customer.io. Ask me before anything is sent or changed.
calls
customerio.broadcasts_getcustomerio.broadcast_actions_listcustomerio.broadcast_triggers_createcustomerio.broadcast_trigger_errors_listcustomerio.broadcast_metrics_get+1 more - Planread
Sweep recent opt-outs and confirm each person's state in Customer.io.
calls
customerio.optouts_listcustomerio.subscription_channels_listcustomerio.people_getcustomerio.person_optouts_getcustomerio.person_subscription_preferences_get - Writewrite
Send a transactional email in Customer.io. Show me exactly what you will send before you save it.
calls
customerio.transactional_emails_create
The plan store
Ready-made plans for Customer.io.
8 plans in the store. Install one and your agent runs it by name; the reply says which connections are still missing. A schedule can run a plan on a timetable. There are no triggers or webhooks, by design.
Report on every live campaign and its worst action
Use it when Someone asks how the Customer.io campaigns are performing, or which step of a campaign is underperforming.
Sweep recent opt-outs and confirm each person's state
Use it when Someone needs to verify that recent opt-outs were honoured across channels.
Export customers and wait for the download link
Use it when Someone needs a CSV of customers matching a filter and wants the download link, not just the job id.
Review a domain's bounces and suppress the worst addresses
Use it when A domain is bouncing badly and someone wants one address suppressed after a human signs off.
A person decides
Suppress email address (suppression type) so Customer.io stops sending to it.
Review an email design, get approval and publish it
Use it when An email design has unpublished edits and someone must approve before it goes live in campaigns.
A person decides
Publish email design id (design name) so live campaigns start using it.
Trigger a broadcast and watch its first hour
Use it when A broadcast is ready to fire and someone wants sign-off plus an automatic check on how it landed.
A person decides
Trigger broadcast broadcast id (name) to its audience now.
Prove a segment is unused, then delete it
Use it when Someone wants to clean up an old Customer.io segment but must not break a campaign that still uses it.
A person decides
Delete segment segment id (name) holding count people. Dependencies were listed above.
account { op: "plans.install", slug: "customerio-campaign-performance-report" }
# then ask for it by name; a schedule can run it on a timetableGovernance for Customer.io
Destructive actions wait for a yes.
15 Customer.io actions are destructive. These are all of them:
- Delete a segment
customerio.segments_delete - Delete a one-time send
customerio.newsletters_delete - Delete an email
customerio.design_emails_delete - Delete an email version
customerio.design_email_versions_delete - Delete a file asset
customerio.assets_delete - Un-suppress an ESP-suppressed address
customerio.esp_suppressions_delete - Delete a folder
customerio.asset_folders_delete - Delete a folder
customerio.design_folders_delete - Delete a collection
customerio.collections_delete - Delete a snippet
customerio.snippets_delete - Delete a component
customerio.design_components_delete - Delete a reporting webhook
customerio.reporting_webhooks_delete - Delete a translation of a one-time send
customerio.newsletter_languages_delete - Delete a translation in a one-time send test group
customerio.newsletter_test_group_languages_delete - Delete an email translation
customerio.design_email_languages_delete
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.
Delete a segment?
intent: the user asked me to delete a segment
account { op: "keys.create", name: "customerio-agent", allowed_actions: ["customerio.*"], cap_calls: 2000, confirm_policy: "human_for_writes", approval_rules: [ { match: "customerio.segments_delete", approver: "[email protected]" }, { match: "customerio.newsletters_delete", approver: "[email protected]" }, { match: "customerio.design_emails_delete", approver: "[email protected]" } ]}Cost
What Customer.io costs on actionlake.
Every Customer.io action is one upstream call, the only thing actionlake bills. Searching, check, cost, account and any call Customer.io 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 184 Customer.io actions
- 184actions pageeach page of a long list is one call
- 112reads can be cacheda cache hit costs nothing
- 100,000calls a month, freepaid plans from US$49 a month for 250,000
Action index
Every Customer.io action.
184 actions by area: the id your agent calls, what it does, and its effect.
Design37
customerio.design_components_createCreate a componentwritecustomerio.design_components_deleteDelete a componentdestructivecustomerio.design_components_getGet a componentreadcustomerio.design_components_listList componentsreadcustomerio.design_components_updateUpdate a componentwritecustomerio.design_email_languages_createCreate an email translationwritecustomerio.design_email_languages_deleteDelete an email translationdestructivecustomerio.design_email_languages_getGet an email translationreadcustomerio.design_email_languages_listList email translationsreadcustomerio.design_email_languages_updateUpdate an email translationwritecustomerio.design_email_links_createLink an email to a workflowwritecustomerio.design_email_previews_getPreview an emailreadcustomerio.design_email_publish_status_getGet publish statusreadcustomerio.design_email_publishes_createPublish an emailwritecustomerio.design_email_renders_getRender an emailreadcustomerio.design_email_reviews_getReview an emailreadcustomerio.design_email_unpublished_changes_getCheck for unpublished changesreadcustomerio.design_email_version_restores_createRestore an email versionwritecustomerio.design_email_versions_createSave an email versionwritecustomerio.design_email_versions_deleteDelete an email versiondestructivecustomerio.design_email_versions_getGet an email versionreadcustomerio.design_email_versions_listList email versionsreadcustomerio.design_emails_createCreate an emailwritecustomerio.design_emails_deleteDelete an emaildestructivecustomerio.design_emails_getGet an emailreadcustomerio.design_emails_listList emailsreadcustomerio.design_emails_updateUpdate an emailwritecustomerio.design_folders_createCreate a folderwritecustomerio.design_folders_deleteDelete a folderdestructivecustomerio.design_folders_getGet a folderreadcustomerio.design_folders_listList foldersreadcustomerio.design_folders_updateUpdate a folderwritecustomerio.design_inbox_preview_clients_listList inbox preview optionsreadcustomerio.design_inbox_preview_credits_getGet preview credit balancereadcustomerio.design_inbox_preview_jobs_getGet an inbox preview jobreadcustomerio.design_inbox_preview_jobs_listList inbox preview historyreadcustomerio.design_inbox_previews_createSend for inbox previewswrite
Newsletter23
customerio.newsletter_languages_createAdd a translation to a one-time sendwritecustomerio.newsletter_languages_deleteDelete a translation of a one-time senddestructivecustomerio.newsletter_languages_getGet a one-time send translationreadcustomerio.newsletter_languages_updateUpdate a translation of a one-time sendwritecustomerio.newsletter_link_metrics_getGet click metrics for one-time send linksreadcustomerio.newsletter_metrics_getGet one-time send metricsreadcustomerio.newsletter_schedules_createSchedule a one-time sendwritecustomerio.newsletter_sends_createTrigger a one-time sendwritecustomerio.newsletter_test_group_languages_createAdd a translation to a one-time send test groupwritecustomerio.newsletter_test_group_languages_deleteDelete a translation in a one-time send test groupdestructivecustomerio.newsletter_test_group_languages_getGet a translation in a one-time send test groupreadcustomerio.newsletter_test_group_languages_updateUpdate a translation in a one-time send test groupwritecustomerio.newsletter_test_groups_createCreate an A/B test group for a one-time sendwritecustomerio.newsletter_test_groups_listList a one-time send's A/B test groupsreadcustomerio.newsletter_variant_link_metrics_getGet click metrics for links in one-time send variantsreadcustomerio.newsletter_variant_metrics_getGet metrics for a test or translation variant of a one-time sendreadcustomerio.newsletter_variants_getGet a one-time send variantreadcustomerio.newsletter_variants_listList one-time send variantsreadcustomerio.newsletter_variants_updateUpdate a one-time send variantwritecustomerio.newsletters_createCreate and send a one-time sendwritecustomerio.newsletters_deleteDelete a one-time senddestructivecustomerio.newsletters_getGet a one-time sendreadcustomerio.newsletters_listList one-time sendsread
Broadcast15
customerio.broadcast_action_languages_getGet a translation of a broadcast messagereadcustomerio.broadcast_action_languages_updateUpdate a translation of a broadcast messagewritecustomerio.broadcast_action_link_metrics_getGet broadcast action link metricsreadcustomerio.broadcast_action_metrics_getGet broadcast action metricsreadcustomerio.broadcast_actions_getGet a broadcast actionreadcustomerio.broadcast_actions_listList broadcast actionsreadcustomerio.broadcast_actions_updateUpdate a broadcast actionwritecustomerio.broadcast_link_metrics_getGet broadcast link metricsreadcustomerio.broadcast_metrics_getGet broadcast metricsreadcustomerio.broadcast_trigger_errors_listGet broadcast error descriptionsreadcustomerio.broadcast_triggers_createSend an API-triggered broadcastwritecustomerio.broadcast_triggers_getGet the status of a broadcastreadcustomerio.broadcast_triggers_listGet broadcast triggersreadcustomerio.broadcasts_getGet a broadcastreadcustomerio.broadcasts_listList broadcastsread
Transactional15
customerio.transactional_contents_getGet a translation of a transactional by IDreadcustomerio.transactional_contents_listList all variants of a transactional messagereadcustomerio.transactional_contents_updateUpdate a transactional messagewritecustomerio.transactional_emails_createSend a transactional emailwritecustomerio.transactional_in_apps_createSend a transactional in-app messagewritecustomerio.transactional_inbox_messages_createSend a transactional inbox messagewritecustomerio.transactional_languages_getGet a translation of a transactional messagereadcustomerio.transactional_languages_updateUpdate a translation of a transactional messagewritecustomerio.transactional_link_metrics_getGet transactional message link metricsreadcustomerio.transactional_messages_getGet a transactional messagereadcustomerio.transactional_messages_listList transactional messagesreadcustomerio.transactional_metrics_getGet transactional message metricsreadcustomerio.transactional_pushes_createSend a transactional pushwritecustomerio.transactional_sms_createSend a transactional SMSwritecustomerio.transactional_whatsapps_createSend a transactional WhatsApp messagewrite
Campaign12
customerio.campaign_action_languages_getGet a translation of an automation messagereadcustomerio.campaign_action_languages_updateUpdate a translation of an automation messagewritecustomerio.campaign_action_link_metrics_getGet link metrics for an actionreadcustomerio.campaign_action_metrics_getGet automation action metricsreadcustomerio.campaign_actions_getGet an automation actionreadcustomerio.campaign_actions_listList automation actionsreadcustomerio.campaign_actions_updateUpdate an automation actionwritecustomerio.campaign_journey_metrics_getGet automation journey metricsreadcustomerio.campaign_link_metrics_getGet automation link metricsreadcustomerio.campaign_metrics_getGet automation metricsreadcustomerio.campaigns_getGet an automationreadcustomerio.campaigns_listList automationsread
Asset9
customerio.asset_folders_createCreate a folderwritecustomerio.asset_folders_deleteDelete a folderdestructivecustomerio.asset_folders_getGet a folderreadcustomerio.asset_folders_listList foldersreadcustomerio.asset_folders_updateUpdate a folderwritecustomerio.assets_deleteDelete a file assetdestructivecustomerio.assets_getGet a file assetreadcustomerio.assets_listList file assetsreadcustomerio.assets_updateUpdate a file assetwrite
Person9
customerio.optouts_listList opt-outs in the workspacereadcustomerio.people_attributes_listList customers, attributes, and devicesreadcustomerio.people_by_email_listGet customers by emailreadcustomerio.people_getLookup a customer's attributesreadcustomerio.people_searchSearch for customersreadcustomerio.person_optouts_getLookup a customer's opt-outsreadcustomerio.person_optouts_updateUpdate a customer's opt-outswritecustomerio.person_relationships_listLookup a customer's relationshipsreadcustomerio.person_subscription_preferences_getLookup a customer's subscription preferencesread
Message8
customerio.archived_messages_getGet an archived messagereadcustomerio.broadcast_messages_listGet messages for a broadcastreadcustomerio.campaign_messages_listGet automation message metadatareadcustomerio.messages_getGet a messagereadcustomerio.messages_listList messagesreadcustomerio.newsletter_messages_listGet delivery data for a one-time sendreadcustomerio.person_messages_listLookup messages sent to a customerreadcustomerio.transactional_deliveries_listGet transactional message deliveriesread
Segment8
customerio.person_segments_listLookup a customer's segmentsreadcustomerio.segment_customer_counts_getGet a segment customer countreadcustomerio.segment_dependencies_getGet a segment's dependenciesreadcustomerio.segment_memberships_listList customers in a segmentreadcustomerio.segments_createCreate a manual segmentwritecustomerio.segments_deleteDelete a segmentdestructivecustomerio.segments_getGet a segmentreadcustomerio.segments_listList segmentsread
Collection7
customerio.collection_contents_getLookup collection contentsreadcustomerio.collection_contents_updateUpdate the contents of a collectionwritecustomerio.collections_createCreate a collectionwritecustomerio.collections_deleteDelete a collectiondestructivecustomerio.collections_getLookup a collectionreadcustomerio.collections_listList your collectionsreadcustomerio.collections_updateUpdate a collectionwrite
Export5
customerio.export_customers_createExport customer datawritecustomerio.export_deliveries_createExport information about deliverieswritecustomerio.export_downloads_getDownload an exportreadcustomerio.exports_getGet an exportreadcustomerio.exports_listList exportsread
Reporting webhook5
customerio.reporting_webhooks_createCreate a reporting webhookwritecustomerio.reporting_webhooks_deleteDelete a reporting webhookdestructivecustomerio.reporting_webhooks_getGet a reporting webhookreadcustomerio.reporting_webhooks_listList reporting webhooksreadcustomerio.reporting_webhooks_updateUpdate a webhook configurationwrite
Suppression5
customerio.esp_domain_suppressions_listGet ESP-suppressed emails by domainreadcustomerio.esp_suppressions_createSuppress an email at the ESPwritecustomerio.esp_suppressions_deleteUn-suppress an ESP-suppressed addressdestructivecustomerio.esp_suppressions_listGet ESP-suppressed emails by typereadcustomerio.esp_suppressions_lookup_getLook up an ESP-suppressed addressread
Live notification4
customerio.live_notification_ends_createEnd a live notificationwritecustomerio.live_notification_starts_createStart a live notificationwritecustomerio.live_notification_updates_createUpdate a live notificationwritecustomerio.live_notifications_getGet a live notification's statusread
Object4
customerio.object_relationships_listGet Object Relationshipsreadcustomerio.object_types_listList object typesreadcustomerio.objects_getGet Object Attributesreadcustomerio.objects_searchFind objectsread
Snippet4
customerio.snippets_createCreate a snippetwritecustomerio.snippets_deleteDelete a snippetdestructivecustomerio.snippets_listList snippetsreadcustomerio.snippets_updateUpdate snippetswrite
Sender identity3
customerio.sender_identities_getGet a senderreadcustomerio.sender_identities_listList sender identitiesreadcustomerio.sender_identity_usage_getGet sender usage dataread
Subscription3
customerio.subscription_center_tokens_getGenerate a subscription center tokenreadcustomerio.subscription_channels_listList subscription channelsreadcustomerio.subscription_topics_listList subscription topicsread
Activity2
customerio.activities_listList activitiesreadcustomerio.person_activities_listLookup a customer's activitiesread
Data index2
customerio.data_index_attributes_updateAdd or update attributeswritecustomerio.data_index_events_updateAdd or update eventswrite
Import2
customerio.imports_createImport items in bulkwritecustomerio.imports_getRetrieve a bulk importread
Info1
customerio.info_ip_addresses_listList IP addressesread
Workspace1
customerio.workspaces_listList workspacesread
Questions
The Customer.io MCP server, answered.
Is there a Customer.io MCP server for Claude?
Yes. actionlake is an MCP gateway: a remote MCP server that gives Claude, or another MCP client, 184 Customer.io actions across design, newsletter, broadcast and transactional, through the same eight tools it uses for every other connector. actionlake is independent; it is not made or endorsed by Customer.io.
What do I need to connect Customer.io?
Customer.io App API Key. Plus your api base. The free call account { op: "connections.requirements", service: "customerio" } lists exactly what to paste.
Can an AI agent delete or change things in Customer.io?
Only if its key allows it, and only with an explicit confirmation. 15 Customer.io actions are destructive, including delete a segment, delete a one-time send and delete an 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 Customer.io API limit?
actionlake paces every call to the limits in the Customer.io service file: 10 calls a second per connection. Repeated reads are answered from cache (112 Customer.io actions can be), which never reaches Customer.io.
What does a Customer.io action cost?
One upstream call, the only unit actionlake bills. A list that pages bills one call per page (184 Customer.io actions page). Cache hits, searches, dry runs and calls Customer.io 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 Customer.io API does it cover?
The Customer.io API v1 at api.customer.io by default, or the base URL set when you connect. It is built from Customer.io's documentation as read on 19 September 2026. 184 actions in 23 areas, each one in the signed service file (version 1.0.0).
Does actionlake keep my Customer.io data, and where?
actionlake processes and stores data in Sydney, Australia; there is no US region yet. Reads may be cached for up to an hour, 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 Customer.io 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 Customer.io today.
Start free - 100,000 calls/month, no card. No signup. Hard caps on every key. Cached answers are free.