Iterable MCP Server, Iterable's official MCP server (beta)
Lets your AI assistant look up Iterable campaigns, templates, journeys and users, and, if you allow it, build and send campaigns.
This is Iterable's own server, still in beta. It runs on your computer and lets Claude, Cursor and other desktop apps read your Iterable project: campaigns, metrics, templates, journeys, catalogs and lists. It starts read-only, with customer data, changes and sends all switched off. You can turn those on per API key, but sends reach real customers, so try them on a sandbox project first.
Good for
- Lifecycle marketers who want campaign and email stats by asking Claude
- CRM and email teams drafting templates and campaigns in a sandbox project
- Support and growth staff looking up a customer's events and list memberships
- Developers working with catalogs, lists and data exports from Claude Code or Cursor
Works in
5 supported · 7 should work
Tap an app to see how to set it up and any known problems.
Iterable's README covers it: the setup wizard adds it for you, or add it by hand. GitHub
Iterable's README covers it: the setup wizard edits the config, or paste the entry yourself. GitHub
Iterable's README covers it: the setup wizard edits your Cursor config for you. GitHub
Iterable's README covers it. With every permission on, it can pass Windsurf's limit of 100 tools. GitHub
Iterable's README covers it with the same config in ~/.gemini/settings.json. GitHub
Supports local MCP servers.
Supports local MCP servers.
Supports local MCP servers.
Supports local MCP servers.
Supports local MCP servers.
Supports local MCP servers.
Supports local MCP servers.
Iterable says web apps like chatgpt.com cannot connect, because the server only runs on your computer. support.iterable.com
Client does not support this transport.
Install mcp-server
Claude Code
- 1
Copy this prompt.
Add the mcp-server server to Claude Code. Run this command: npx @iterable/mcp setup --claude-code Then check that it loaded and tell me if I need to sign in or restart.
- 2
Paste it into Claude Code. It shows the change and asks before running it.
Requires Node.js 20 or later, Iterable API key.
Read-only mode: Read-only is the default. Skip --advanced during setup and do not set the writes or sends variables.
Run npx @iterable/mcp keys add once to store your API key and pick the US or EU region; the key manager entries then need no key in the config. Use the env-var entries only where the key manager is not available, such as CI. Restart your AI app after switching keys.
From the project README. Source.
Tools
Shows the details of one campaign
Get detailed information about a specific campaign. Available in the default read-only setup.
Try: “Get details on campaign 12345”
Read ·
get_campaignShows a campaign's results over a date range
Get campaign performance metrics. Requires a date range. Always use the narrowest window possible for performance. Available in the default read-only setup.
Try: “How did campaign 12345 do last week?”
Read ·
get_campaign_metricsLists your campaigns
Retrieve campaigns. Available in the default read-only setup.
Try: “List my campaigns from this month”
Read ·
get_campaignsLists the campaigns a recurring campaign has created
Get child campaigns generated by a recurring campaign. Available in the default read-only setup.
Try: “Show the sends created by my weekly digest campaign”
Read ·
get_child_campaignsStops a campaign that is sending right now
Abort a campaign that is currently running. Needs writes turned on for your key.
Try: “Abort campaign 12345”
Delete ·
abort_campaignArchives campaigns, cancelling or stopping any that are live
Archive one or more campaigns. Scheduled/recurring campaigns will be cancelled, running campaigns will be aborted. Needs writes turned on for your key.
Try: “Archive campaigns 101 and 102”
Delete ·
archive_campaignsCancels a scheduled or recurring campaign
Cancel a scheduled or recurring campaign. Needs writes turned on for your key.
Try: “Cancel the scheduled campaign 12345”
Delete ·
cancel_campaignCreates a one-off campaign from a template
Create a new one-off (blast) campaign from an existing template. Needs writes turned on for your key.
Try: “Create a campaign called 'Holiday Sale' using template 456”
Write ·
create_blast_campaignCreates a triggered campaign from a template, ready to activate
Create a new triggered campaign from an existing template. The campaign is created in Ready state and must be activated before it can send. Needs writes turned on for your key.
Try: “Create a triggered welcome campaign from template 789”
Write ·
create_triggered_campaignTurns off a triggered campaign
Deactivate a triggered campaign (requires API triggered campaign deactivation enabled). Needs writes turned on for your key.
Try: “Deactivate triggered campaign 789”
Write ·
deactivate_triggered_campaignTurns on a triggered campaign so it starts sending
Activate a triggered campaign (requires API triggered campaign activation enabled). Needs writes and sends turned on for your key.
Try: “Activate triggered campaign 789”
Write ·
activate_triggered_campaignSchedules a campaign to send at a set time
Schedule an existing campaign to be sent at a specific time. Needs writes and sends turned on for your key.
Try: “Schedule campaign 12345 for tomorrow at 9am”
Write ·
schedule_campaignSends a scheduled campaign right away
Send an existing scheduled campaign immediately. Needs writes and sends turned on for your key.
Try: “Send campaign 12345 now”
Write ·
send_campaignSends a campaign to the lists you name
Trigger a campaign to send to specified lists. Needs writes and sends turned on for your key.
Try: “Trigger campaign 12345 for the VIP list”
Write ·
trigger_campaignShows one email template
Get details for specific email template by ID. Available in the default read-only setup.
Try: “Show email template 456”
Read ·
get_email_templateShows one in-app template
Get details for specific in-app message template by ID. Available in the default read-only setup.
Try: “Show in-app template 987”
Read ·
get_inapp_templateShows one push template
Get details for specific push notification template by ID. Available in the default read-only setup.
Try: “Show push template 654”
Read ·
get_push_templateShows one SMS template
Get details for specific SMS template by ID. Available in the default read-only setup.
Try: “Show SMS template 321”
Read ·
get_sms_templateFinds a template by your own template ID
Get template by client template ID. Available in the default read-only setup.
Try: “Find the template with client ID welcome-v2”
Read ·
get_template_by_client_idLists your templates
Retrieve templates. Available in the default read-only setup.
Try: “What email templates are available?”
Read ·
get_templatesRenders an email template with sample data
Preview email template with custom data. Returns fully rendered HTML with user, event, and/or data feed data substituted. Available in the default read-only setup.
Try: “Preview template 456 for user@example.com”
Read ·
preview_email_templateRenders an in-app template with sample data
Preview in-app message template with custom data. Returns fully rendered HTML with user, event, and/or data feed data substituted. Available in the default read-only setup.
Try: “Preview in-app template 987 with this data”
Read ·
preview_inapp_templateDeletes one or more templates
Delete one or more templates by ID. Needs writes turned on for your key.
Try: “Delete templates 400 and 401”
Delete ·
delete_templatesEdits an existing email template
Update existing email template by templateId. Needs writes turned on for your key.
Try: “Change the subject of template 456”
Write ·
update_email_templateEdits an existing in-app template
Update existing in-app message template by templateId. Needs writes turned on for your key.
Try: “Update the button text in template 987”
Write ·
update_inapp_templateEdits an existing push template
Update existing push notification template by templateId. Needs writes turned on for your key.
Try: “Update the title of push template 654”
Write ·
update_push_templateEdits an existing SMS template
Update existing SMS template by templateId. Needs writes turned on for your key.
Try: “Shorten the text in SMS template 321”
Write ·
update_sms_templateCreates or updates an email template
Create or update email template. If a template with the specified clientTemplateId exists, it will be updated; otherwise, a new template will be created. Needs writes turned on for your key.
Try: “Build me an email template announcing our spring sale”
Write ·
upsert_email_templateCreates or updates an in-app template
Create or update in-app message template. If a template with the specified clientTemplateId exists, it will be updated; otherwise, a new template will be created. Needs writes turned on for your key.
Try: “Create an in-app template for the new feature”
Write ·
upsert_inapp_templateCreates or updates a push template
Create or update push notification template. If a template with the specified clientTemplateId exists, it will be updated; otherwise, a new template will be created. Needs writes turned on for your key.
Try: “Create a push template for cart reminders”
Write ·
upsert_push_templateCreates or updates an SMS template
Create or update SMS template. If a template with the specified clientTemplateId exists, it will be updated; otherwise, a new template will be created. Needs writes turned on for your key.
Try: “Create an SMS template for order shipped”
Write ·
upsert_sms_templateSends a test email of a template to one person
Send a proof of a email template to a specific user. Needs customer data (PII) access and writes and sends turned on for your key.
Try: “Send me a proof of template 456”
Write ·
send_email_template_proofSends a test in-app message of a template to one person
Send a proof of a in-app message template to a specific user. Needs customer data (PII) access and writes and sends turned on for your key.
Try: “Send me a proof of in-app template 987”
Write ·
send_inapp_template_proofSends a test push of a template to one person
Send a proof of a push notification template to a specific user. Needs customer data (PII) access and writes and sends turned on for your key.
Try: “Send me a proof of push template 654”
Write ·
send_push_template_proofSends a test text of a template to one person
Send a proof of a SMS template to a specific user. Needs customer data (PII) access and writes and sends turned on for your key.
Try: “Send me a proof of SMS template 321”
Write ·
send_sms_template_proofLists your journeys, filtered by state if you like
Get journeys (workflows) with optional pagination and state filtering. Available in the default read-only setup.
Try: “What journeys are currently active?”
Read ·
get_journeysStarts a journey for one user
Trigger a journey (workflow) for a user. Needs customer data (PII) access and writes and sends turned on for your key.
Try: “Start the onboarding journey for user@example.com”
Write ·
trigger_journeyPreviews up to 5,000 users in a list
Preview users in a list (up to 5000 users). Needs customer data (PII) access turned on for your key.
Try: “Preview who is on the trial list”
Read ·
get_list_preview_usersCounts the users in a list
Get the count of users in a specific list. Available in the default read-only setup.
Try: “How many people are on the VIP list?”
Read ·
get_list_sizeLists the users in a list
Get users in a specific list. Needs customer data (PII) access turned on for your key.
Try: “List users in my 'VIP Customers' list”
Read ·
get_list_usersLists your user lists
Retrieve user lists. Available in the default read-only setup.
Try: “Show all my lists”
Read ·
get_listsCreates a new user list
Create a new user list. Needs writes turned on for your key.
Try: “Create a list called Webinar Attendees”
Write ·
create_listDeletes a user list
Delete a user list. Needs writes turned on for your key.
Try: “Delete the old test list”
Delete ·
delete_listAdds users to a list
Subscribe users to a specific list. Needs customer data (PII) access and writes turned on for your key.
Try: “Add these 20 emails to the Webinar Attendees list”
Write ·
subscribe_to_listRemoves users from a list
Unsubscribe users from a specific list. Needs customer data (PII) access and writes turned on for your key.
Try: “Remove user@example.com from the VIP list”
Delete ·
unsubscribe_from_listLists the messages sent to one user
Get messages sent to a specific user with optional filtering. Needs customer data (PII) access turned on for your key.
Try: “What have we sent user@example.com this month?”
Read ·
get_sent_messagesShows a user's profile by email
Get user profile information by email address. Needs customer data (PII) access turned on for your key.
Try: “Look up user@example.com”
Read ·
get_user_by_emailShows a user's profile by user ID
Get user profile information by user ID. Needs customer data (PII) access turned on for your key.
Try: “Look up user 42”
Read ·
get_user_by_user_idLists all user profile fields and their types
Get all user profile field definitions and their types. Available in the default read-only setup.
Try: “What profile fields do we store?”
Read ·
get_user_fieldsUpdates many user profiles at once
Update multiple users at once. Needs customer data (PII) access and writes turned on for your key.
Try: “Set region to EU for these 100 users”
Write ·
bulk_update_usersDeletes a user by email
Delete a user by email address (asynchronous - does not prevent future data collection). Needs customer data (PII) access and writes turned on for your key.
Try: “Delete the user test@example.com”
Delete ·
delete_user_by_emailDeletes a user by user ID
Delete a user by user ID (asynchronous - does not prevent future data collection, deletes all users with same userId). Needs customer data (PII) access and writes turned on for your key.
Try: “Delete user 42”
Delete ·
delete_user_by_user_idChanges a user's email address
Update a user's email address (only use with email-based projects; for userId/hybrid projects, use update_user instead). Needs customer data (PII) access and writes turned on for your key.
Try: “Change user@example.com to new@example.com”
Write ·
update_emailUpdates a user's profile fields
Update user profile information (accepts email OR userId in params). Needs customer data (PII) access and writes turned on for your key.
Try: “Set plan to pro for user@example.com”
Write ·
update_userOverwrites a user's subscription settings
Update user subscriptions (IMPORTANT: overwrites existing data for any non-null fields specified). Needs customer data (PII) access and writes turned on for your key.
Try: “Set user 42's subscriptions to newsletter only”
Write ·
update_user_subscriptionsShows a user's event history by email
Get event history for a user by email address. Needs customer data (PII) access turned on for your key.
Try: “Show me events for user@example.com from the last 30 days”
Read ·
get_user_events_by_emailShows a user's event history by user ID
Get event history for a user by user ID. Needs customer data (PII) access turned on for your key.
Try: “Show events for user 42”
Read ·
get_user_events_by_user_idRecords many custom events at once
Track multiple events in a single request for better performance. Needs customer data (PII) access and writes and sends turned on for your key.
Try: “Track these 100 signup events”
Write ·
track_bulk_eventsRecords a custom event for a user
Track a custom event for a user. Needs customer data (PII) access and writes and sends turned on for your key.
Try: “Track a 'webinar_attended' event for user@example.com”
Write ·
track_eventShows one experiment and its variants
Get detailed information about a specific experiment by ID, including variants summary and constraints. Available in the default read-only setup.
Try: “Show experiment 77”
Read ·
get_experimentShows A/B test results for an email experiment
Get experiment metrics for A/B testing analysis (currently supports email experiments only). Available in the default read-only setup.
Try: “Which subject line is winning in experiment 77?”
Read ·
get_experiment_metricsShows lifetime sends and conversions for an experiment
Get lifetime send and conversion totals for a campaign experiment. Holdout is omitted, missing counts are 0, and lift and confidence are not included. Available in the default read-only setup.
Try: “Total sends and conversions for experiment 77”
Read ·
get_experiment_totalsShows an experiment's results over time
Get the performance time series for a campaign experiment. Provide both startDateTime and endDateTime, or omit both to use the run window. The span is at most 31 days; a longer default window is clipped to the last 31 days. Available in the default read-only setup.
Try: “Show the daily trend for experiment 77”
Read ·
get_experiment_trendsShows each variant's subject, preheader and content
Get variant content for an experiment, including subject lines, preheaders, HTML source, and plain text. Available in the default read-only setup.
Try: “Show me the variants in experiment 77”
Read ·
get_experiment_variantsLists your A/B experiments
List experiments with optional filtering by campaign, status, and date range. Supports pagination. Available in the default read-only setup.
Try: “List experiments running this month”
Read ·
list_experimentsCancels an experiment without picking a winner
Cancel a running or winner_found campaign experiment without declaring a winner. Needs writes turned on for your key.
Try: “Cancel experiment 77”
Delete ·
cancel_experimentAdds a template as a new variant to an experiment
Copy a template into a new variant on a draft or ready campaign experiment. Needs writes turned on for your key.
Try: “Add template 457 as a variant to experiment 77”
Write ·
copy_experiment_variantCreates a draft A/B experiment for a campaign
Create a draft campaign experiment. The campaign template becomes the control. Needs writes turned on for your key.
Try: “Set up a subject line test on campaign 12345”
Write ·
create_experimentDeletes a draft or unstarted experiment
Delete a draft, ready, or errored campaign experiment. Needs writes turned on for your key.
Try: “Delete draft experiment 78”
Delete ·
delete_experimentChanges settings on a draft experiment
Update settings on a draft or ready campaign experiment. Omit a field to leave it unchanged. Needs writes turned on for your key.
Try: “Change experiment 77 to a 50/50 split”
Write ·
update_experiment_settingsPicks the winning variant and ends the experiment
Declare a winning variant and end a running or winner_found campaign experiment. Needs writes and sends turned on for your key.
Try: “Declare variant B the winner of experiment 77”
Write ·
declare_experiment_winnerStarts an experiment
Start a draft or ready campaign experiment. Needs writes and sends turned on for your key.
Try: “Start experiment 77”
Write ·
start_experimentShows a catalog's fields and their data types
Get field mappings and data types for a catalog. Available in the default read-only setup.
Try: “What fields does the products catalog have?”
Read ·
get_catalog_field_mappingsShows one catalog item
Get a specific catalog item by ID. Available in the default read-only setup.
Try: “Show item sku-123 from the products catalog”
Read ·
get_catalog_itemLists the items in a catalog
Get items from a catalog with optional pagination and sorting. Available in the default read-only setup.
Try: “Show 10 items from demo-catalog”
Read ·
get_catalog_itemsLists your product catalogs
Get list of all catalogs with optional pagination. Available in the default read-only setup.
Try: “Show me all my product catalogs”
Read ·
get_catalogsDeletes many catalog items at once
Bulk delete catalog items by their IDs. Needs writes turned on for your key.
Try: “Delete these discontinued items”
Delete ·
bulk_delete_catalog_itemsCreates a new catalog
Create a new catalog. Needs writes turned on for your key.
Try: “Create a catalog called stores”
Write ·
create_catalogDeletes a whole catalog
Delete a catalog. Needs writes turned on for your key.
Try: “Delete the old-products catalog”
Delete ·
delete_catalogDeletes one catalog item
Delete a specific catalog item by ID. Needs writes turned on for your key.
Try: “Delete sku-123 from the products catalog”
Delete ·
delete_catalog_itemUpdates some fields of a catalog item
Partial update (PATCH) a catalog item - updates only specified fields. Needs writes turned on for your key.
Try: “Set the price of sku-123 to 19.99”
Write ·
partial_update_catalog_itemUpdates fields on up to 1,000 catalog items at once
Bulk partial update catalog items (up to 1000). Merges document fields per item ID. Needs writes turned on for your key.
Try: “Mark these 200 items as on sale”
Write ·
partial_update_catalog_itemsReplaces a whole catalog item
Replace (PUT) a catalog item - replaces the entire item with new value. Needs writes turned on for your key.
Try: “Replace item sku-123 with this data”
Write ·
replace_catalog_itemReplaces up to 1,000 catalog items at once
Bulk replace catalog items (up to 1000). Each item becomes only the document fields provided. Needs writes turned on for your key.
Try: “Replace these 50 catalog items”
Write ·
replace_catalog_itemsChanges the data types of catalog fields
Update catalog field mappings (data types). Valid types: boolean, date, geo_location, long, double, object, and string. Needs writes turned on for your key.
Try: “Make the price field a double”
Write ·
update_catalog_field_mappingsLists your messaging channels, such as email, SMS and push
Get all available communication channels (email, SMS, push, etc.). Available in the default read-only setup.
Try: “Which channels do we have set up?”
Read ·
get_channelsShows a user's embedded messages by placement
Get embedded messages for a user, grouped by placement ID. Needs customer data (PII) access turned on for your key.
Try: “Show embedded messages for user 42”
Read ·
get_embedded_messagesShows a user's in-app messages
Get in-app messages for a user. Needs customer data (PII) access turned on for your key.
Try: “What in-app messages does user@example.com have?”
Read ·
get_in_app_messagesLists the message types in your project
Get all message types within the project for use in templates. Available in the default read-only setup.
Try: “List our message types”
Read ·
get_message_typesCancels a scheduled email for one user
Cancel scheduled email for specific user. Needs customer data (PII) access and writes turned on for your key.
Try: “Cancel the scheduled email for user@example.com”
Delete ·
cancel_emailCancels a scheduled in-app message for one user
Cancel scheduled in-app message for specific user. Needs customer data (PII) access and writes turned on for your key.
Try: “Cancel the in-app message for user 42”
Delete ·
cancel_in_appCancels a scheduled push for one user
Cancel scheduled push notification for specific user. Needs customer data (PII) access and writes turned on for your key.
Try: “Cancel the scheduled push for user 42”
Delete ·
cancel_pushCancels a scheduled text for one user
Cancel scheduled SMS message for specific user. Needs customer data (PII) access and writes turned on for your key.
Try: “Cancel the scheduled SMS for user 42”
Delete ·
cancel_smsCancels a scheduled web push for one user
Cancel scheduled web push notification for specific user. Needs customer data (PII) access and writes turned on for your key.
Try: “Cancel the web push for user 42”
Delete ·
cancel_web_pushCancels a scheduled WhatsApp message for one user
Cancel scheduled WhatsApp message for specific user. Needs customer data (PII) access and writes turned on for your key.
Try: “Cancel the WhatsApp message for user 42”
Delete ·
cancel_whatsappSends an email to one user
Send email to user. Needs customer data (PII) access and writes and sends turned on for your key.
Try: “Send the receipt template to user@example.com”
Write ·
send_emailSends an in-app message to one user
Send in-app message to user. Needs customer data (PII) access and writes and sends turned on for your key.
Try: “Send the upgrade in-app message to user 42”
Write ·
send_in_appSends a push notification to one user
Send push notification to user. Needs customer data (PII) access and writes and sends turned on for your key.
Try: “Send the reminder push to user 42”
Write ·
send_pushSends a text message to one user
Send SMS message to user. Needs customer data (PII) access and writes and sends turned on for your key.
Try: “Text user 42 the reminder template”
Write ·
send_smsSends a web push notification to one user
Send web push notification to user. Needs customer data (PII) access and writes and sends turned on for your key.
Try: “Send the web push alert to user 42”
Write ·
send_web_pushSends a WhatsApp message to one user
Send WhatsApp message to user. Needs customer data (PII) access and writes and sends turned on for your key.
Try: “Send the WhatsApp reminder to user 42”
Write ·
send_whatsappShows one snippet
Get a snippet by ID (numeric) or name (string). Available in the default read-only setup.
Try: “Show the footer snippet”
Read ·
get_snippetLists your reusable content snippets
Get all snippets for the current project. Available in the default read-only setup.
Try: “List our snippets”
Read ·
get_snippetsCreates a reusable content snippet
Create a new snippet with Handlebars templating support. Needs writes turned on for your key.
Try: “Create a snippet for our legal footer”
Write ·
create_snippetDeletes a snippet
Delete a snippet by ID (numeric) or name (string). Needs writes turned on for your key.
Try: “Delete the old-footer snippet”
Delete ·
delete_snippetUpdates a snippet
Update a snippet by ID (numeric) or name (string). Needs writes turned on for your key.
Try: “Update the footer snippet with the new address”
Write ·
update_snippetSubscribes or unsubscribes many users at once
Subscribe or unsubscribe multiple users to/from a subscription group. Needs customer data (PII) access and writes turned on for your key.
Try: “Unsubscribe these 300 users from promotions”
Write ·
bulk_update_subscriptionsSubscribes a user to a subscription group by email
Subscribe a user to a subscription group by email. Needs customer data (PII) access and writes turned on for your key.
Try: “Subscribe user@example.com to the newsletter group”
Write ·
subscribe_user_by_emailSubscribes a user to a subscription group by user ID
Subscribe a user to a subscription group by userId. Needs customer data (PII) access and writes turned on for your key.
Try: “Subscribe user 42 to product updates”
Write ·
subscribe_user_by_useridUnsubscribes a user from a group by email
Unsubscribe a user from a subscription group by email. Needs customer data (PII) access and writes turned on for your key.
Try: “Unsubscribe user@example.com from promotions”
Delete ·
unsubscribe_user_by_emailUnsubscribes a user from a group by user ID
Unsubscribe a user from a subscription group by userId. Needs customer data (PII) access and writes turned on for your key.
Try: “Unsubscribe user 42 from promotions”
Delete ·
unsubscribe_user_by_useridLists the kinds of data you can export
Get the list of all available export data types that can be used with start_export_job. Returns an array of data type names that are supported by the Iterable API. Needs customer data (PII) access and writes turned on for your key.
Try: “Which data types can I export?”
Read ·
get_available_export_data_typesGets the status and download links of an export
Get the job status and download URLs for files from a completed export job. Files are added to the list as the export job runs. Use 'startAfter' parameter to paginate through files. Each file is up to 10MB, with exports limited to 100GB total size. Needs customer data (PII) access turned on for your key.
Try: “Is my export job done? Give me the files”
Read ·
get_export_filesLists recent data export jobs
Get a list of recent export jobs for the current project. Jobs can be filtered by state (enqueued, queued, running, completed, failed, cancelled, cancelling). Needs customer data (PII) access turned on for your key.
Try: “Show my recent export jobs”
Read ·
get_export_jobsCancels an export that is queued or running
Cancel a queued or running export job created with 'start_export_job'. Use the jobId returned from the start export endpoint. Needs customer data (PII) access and writes turned on for your key.
Try: “Cancel export job 555”
Delete ·
cancel_export_jobStarts a data export, such as email events or user data
Start a data export job that processes as a background job. Use 'get_export_files' to check status and obtain download links. Supports many data types including: email events (emailSend, emailOpen, emailClick, emailBounce, etc.), push events (pushSend, pushOpen, etc.), SMS events (smsSend, smsBounce, etc.), WhatsApp events, in-app message events, user data, purchase events, and more. Additional re
Try: “Export all user data from January 2024”
Write ·
start_export_jobLists your webhooks
Get all webhooks for the project. Available in the default read-only setup.
Try: “List our webhooks”
Read ·
get_webhooksChanges a webhook's settings
Update a webhook configuration. Needs writes turned on for your key.
Try: “Point the bounce webhook at the new URL”
Write ·
update_webhook
Read from the source code
Pros and cons
Good
- Made and maintained by Iterable, free and open source.
- Read-only by default, with customer data, changes and sends each switched on separately.
- Permissions are saved per API key, so a sandbox key can do more than a production key.
- A setup wizard stores the key and configures Claude Code, Claude Desktop or Cursor for you.
- Keys are kept in the system keychain on macOS and encrypted on Windows.
- Covers most of the Iterable API, including campaigns, journeys, catalogs and data exports.
Watch out
- Still in beta and may change or be withdrawn.
- Runs only on your computer; web apps cannot connect and there is no hosted version.
- Needs Node.js 20 or later.
- With every permission on it passes the 100-tool limit in Windsurf.
- Shares your project's API rate limits and does not retry when it hits them.
- No tool for a journey's full definition yet.
Permissions
medium risk · 4 things to watch
Medium risk
Out of the box it can only read, but a key with writes and sends turned on can delete data and message real customers. Keep those off for production and test them on a sandbox project.
What it can do
- Read your data
- Create and change things
- Delete things
- Read-only modeHow to turn it on
Watch out for
With sends on, it can message real customers
Sends let the agent trigger campaigns and send email, SMS and push. Only enable them on a sandbox project key. github.com
With writes on, it can delete users and data
Writes include deleting users, lists, catalogs and templates. Keep writes off for production keys. github.com
Risky tools are not flagged to your app
Send and delete tools are not marked as destructive, so your app may not warn you. Review each call before you allow it. github.com
PII tools expose customer profiles
With PII on, the assistant can read email addresses, phone numbers and custom fields. Leave it off unless you need it. github.com
Security advisories
No published security advisories as of Nov 1, 2026.
Technical details
| Turning on read-only | Default. Writes, sends and PII tools stay off unless enabled per key with setup --advanced or keys update --advanced, or with ITERABLE_ENABLE_WRITES, ITERABLE_ENABLE_SENDS and ITERABLE_USER_PII set to true. |
|---|---|
| Talks to | api.iterable.com (or your EU or custom endpoint) |
| Sign-in and keys | API keys in ~/.iterable-mcp/keys.json, with the values in the macOS Keychain, Windows DPAPI, or a 0600 file on Linux. |
| Scopes |
|
Alternatives
Use Iterable's own server; it starts read-only and you switch on changes and sends per key. The community alternative is an early project with no GitHub stars yet.
| Server | Official | Runs | Sign-in | Can change things | Tools | GitHub stars |
|---|---|---|---|---|---|---|
| For Iterable | ||||||
| Iterable MCP ServerThis page | Official | Local | API key | Yes | 118 | 15 |
| Other tools for the same job | ||||||
| iterable-mcp (jginorio) | Community | Local | – | – | – | 0 |
What people say
Users want a hosted version and clearer warnings on risky tools, and ask for more journey detail.
What people like
- Users ask for more tools, such as full journey definitions, which shows they use it for real journey work.
Common complaints
- Teams want a hosted version so each person does not keep an Iterable API key on their laptop.
- Users point out that send and delete tools are not flagged as risky to their AI app.
In their words
“With stdio only, every engineer has to install the package locally and keep an Iterable API key on disk”shpp-abelokonGitHub issueApr 2026
“Currently get_journeys lists journeys with pagination and state filtering, but there's no way to retrieve the full definition of a single journey”carlneves84
Questions
Is the Iterable MCP server free?
Yes. It is open source under the MIT licence. You need an Iterable account and an API key.
Is it read-only by default?
Yes. Setup starts with customer data, changes and sends all switched off. Run setup or keys update with --advanced to turn any of them on for a key.
Can it send emails to my customers?
Only if you turn on both writes and sends for that key. Then it can send email, SMS and push and trigger campaigns, so use that only on a sandbox project.
Can I use it in claude.ai or ChatGPT on the web?
No. It runs on your computer, so you need a desktop or command-line app such as Claude Desktop, Claude Code or Cursor.
Does it work with EU Iterable projects?
Yes. When you add a key you pick the US or EU region, or a custom endpoint, and the key remembers it.
Can I use different keys for sandbox and production?
Yes. Store several keys, each with its own permissions, and switch between them. Restart your AI app after switching so it picks up the new key.
Why do the Iterable tools not load in Windsurf?
Windsurf allows 100 tools per server, and with every permission on this server goes over. Turn off a permission you do not need, such as sends.
Does it count against my API rate limits?
Yes. It shares your project's limits with your other API traffic and does not retry when it is rate limited.
How do I add it to Claude Code?
Run the setup command in the box above and pick Claude Code. It stores your key and adds the server for you.
Examples
Summarize what is running right now
Summarize active campaigns right now.
SourceCheck last week's email performance
Show email performance (opens/clicks) for the last seven days.
SourceLook up one customer's recent activity
Show me events for user@example.com from the last 30 days
SourceBrowse a product catalog
List product catalogs and show 10 items from demo-catalog.
Source
Information
updated Nov 2, 2026
- Publisher
- Iterable (official)
- Package
@iterable/mcp- Registry
- npm
- Transport
- stdio
- Auth
- token in env
- Version
- 1.9.0
- License
- MIT
- Last commit
- Sep 30, 2026
- Open issues
- 4
Sources
Docs, issue trackers and discussions this page is built from. Issues, quotes and findings above link to their own source.
Show all 8Hide
- Iterable MCP Server README · github.com
- Overview of Iterable's MCP Server · support.iterable.com
- Available Iterable MCP Tools · github.com
- Tools are registered without title or annotations · github.com
- Setting up Iterable's MCP Server · support.iterable.com
- Feature Request: Native Streamable HTTP and/or SSE Transport Support · github.com
- Feature request: get_journey tool · github.com
- jginorio/iterable-mcp · github.com