Klaviyo MCP server
Klaviyo's official MCP server lets agents read and manage profiles, campaigns, flows, lists, segments, events, metrics, and templates with reporting built in.
The Klaviyo MCP server is Klaviyo's official integration that connects an AI client directly to your Klaviyo account so it can both analyze and act on your marketing data. It covers the major Klaviyo objects end to end: list and inspect profiles, campaigns, flows, lists, segments, catalog items, events, and metrics; create and update profiles; subscribe or unsubscribe people from marketing on a given channel and list; create campaigns and assign templates; and author, clone, render, and manage HTML and drag-and-drop email templates. Reporting tools return campaign and flow performance so an agent can summarize results, and an aggregation tool lets it query event data behind a metric. There is also a translations surface for localizing campaigns, flows, and templates.
Klaviyo ships two ways to run it. The local stdio server is published to PyPI and launched with uvx klaviyo-mcp-server@latest, authenticated with a Klaviyo private API key via the PRIVATE_API_KEY environment variable, with optional READ_ONLY and ALLOW_USER_GENERATED_CONTENT toggles. A hosted remote endpoint at https://mcp.klaviyo.com/mcp uses OAuth with dynamic client registration for broader, browser-based access. It is available to all Klaviyo customers.
Quick install
Copy-paste configs are provided for all 8 supported clients. Pick your client below.
Add to ~/.claude.json
{
"mcpServers": {
"klaviyo": {
"type": "http",
"url": "https://mcp.klaviyo.com/mcp"
}
}
}claude mcp add --transport http klaviyo https://mcp.klaviyo.com/mcpHeads up
- First tool call opens a browser to authorize.
Available tools
| Tool | Description |
|---|---|
| get_account_details | Gets details of your Klaviyo account. |
| get_campaigns | Lists your campaigns. |
| get_campaign | Gets details of a campaign. |
| create_campaign | Creates a campaign. |
| assign_template_to_campaign_message | Assigns an email template to a campaign message. |
| get_catalog_items | Lists your catalog items. |
| get_events | Lists events. |
| create_event | Creates an event for a profile. |
| get_metrics | Lists event metrics. |
| get_metric | Gets details of an event metric. |
| query_metric_aggregates | Queries and aggregates event data associated with a metric. |
| get_flows | Lists your flows. |
| get_flow | Gets details of a flow. |
| get_lists | Lists your lists. |
| get_list | Gets details of a list. |
| get_segments | Lists your segments. |
| get_segment | Gets details of a segment. |
| upload_image_from_file | Uploads an image from a local file. |
| upload_image_from_url | Uploads an image from a URL. |
| get_profiles | Lists your profiles. |
| get_profile | Gets details of a profile. |
| create_profile | Creates a profile. |
| update_profile | Updates a profile. |
| subscribe_profile_to_marketing | Subscribes a profile to marketing for a given channel and list. |
| unsubscribe_profile_from_marketing | Unsubscribes a profile from marketing for a given channel and list. |
| get_campaign_report | Gets a report of your campaign performance. |
| get_flow_report | Gets a report of your flow performance. |
| create_email_template | Creates an HTML email template. |
| get_email_template | Gets the details of an email template. |
| create_dnd_email_template | Creates a drag-and-drop (DND) email template from a structured definition. |
| update_dnd_email_template | Updates an existing drag-and-drop (DND) email template. |
| list_email_templates | Lists your email templates. |
| update_email_template | Updates an HTML email template. |
| clone_email_template | Clones an email template. |
| delete_email_template | Deletes an email template. |
| render_email_template | Renders an email template with provided context. |
| get_translations | Lists all translation collections. |
| get_translation | Gets a translation collection by ID. |
| create_translation | Creates a translation collection for campaigns, flows, or templates. |
| update_translation | Updates translation settings (locales) and/or imports translated values. |
| delete_translation | Deletes a translation collection and all its localized values. |
Required configuration
- PRIVATE_API_KEYOptional
Klaviyo private API key for the local stdio server. Not needed when using OAuth on the remote endpoint.
- READ_ONLYOptional
Set to true to expose only read tools on the local server. Defaults to false.
- ALLOW_USER_GENERATED_CONTENTOptional
Set to false to block tools that render user-generated content on the local server. Defaults to true.
What you can do with it
Build and analyze a campaign in one place
An agent creates a campaign, assigns an email template, and after it sends pulls the campaign report to summarize open, click, and revenue performance — no dashboard hopping.
Segment and message the right audience
The agent inspects profiles, lists, and segments, queries metric aggregates to find high-intent customers, and subscribes the right people to a marketing channel before launching a flow.
FAQ
- Is it free?
- Yes. The MCP server is free and available to all Klaviyo customers; you connect it to your existing account. Usage is governed by your Klaviyo plan and API limits.
- Does it support remote/OAuth?
- Yes. A hosted remote endpoint at https://mcp.klaviyo.com/mcp uses OAuth with dynamic client registration. A local stdio server (uvx klaviyo-mcp-server@latest) authenticates with a private API key instead.
- Can I run it read-only?
- Yes. The local server honors a READ_ONLY environment variable; set it to true to expose only the read tools and prevent any writes to your Klaviyo account.