Klaviyo MCP Server

Klaviyo's own MCP server for reading and editing campaigns, profiles, flows and reports in a Klaviyo account

Official · Klaviyo Developer Experience Team Python Remote (hosted) · Streamable HTTPLocal · stdio CRM and salesData and analytics

40 popularity score ↓ 9.3k/mo

Connect your client

Remote (hosted)

Add in one click

Opens the app, which asks before it adds the server.

Or add it by command or config

Claude (desktop and web)Settings > Connectors: Browse Connectors and pick Klaviyo, or Add custom connector with the URL
https://mcp.klaviyo.com/mcp
ChatGPTSettings > Apps: Klaviyo app, or Create app with Developer mode on and OAuth selected
https://mcp.klaviyo.com/mcp
CursorSettings > Cursor Settings > MCP > New MCP Server
{
  "mcpServers": {
    "klaviyo": {
      "url": "https://mcp.klaviyo.com/mcp"
    }
  }
}
VS CodeMCP: Open User Configuration
{
  "servers": {
    "klaviyo": {
      "url": "https://mcp.klaviyo.com/mcp"
    }
  }
}
Local (PyPI)

Add in one click

Opens the app, which asks before it adds the server. Then replace each <NAME> in its settings with your value.

Or add it by command or config

It needs PRIVATE_API_KEY. Replace each <NAME> with your value.

Claude CodeTerminal
claude mcp add klaviyo -e PRIVATE_API_KEY=<PRIVATE_API_KEY> -- uvx klaviyo-mcp-server@latest
Claude Desktopclaude_desktop_config.json
{
  "mcpServers": {
    "klaviyo": {
      "command": "uvx",
      "args": [
        "klaviyo-mcp-server@latest"
      ],
      "env": {
        "PRIVATE_API_KEY": "<PRIVATE_API_KEY>"
      }
    }
  }
}
Cursor~/.cursor/mcp.json
{
  "mcpServers": {
    "klaviyo": {
      "command": "uvx",
      "args": [
        "klaviyo-mcp-server@latest"
      ],
      "env": {
        "PRIVATE_API_KEY": "<PRIVATE_API_KEY>"
      }
    }
  }
}
VS Code.vscode/mcp.json
{
  "servers": {
    "klaviyo": {
      "type": "stdio",
      "command": "uvx",
      "args": [
        "klaviyo-mcp-server@latest"
      ],
      "env": {
        "PRIVATE_API_KEY": "<PRIVATE_API_KEY>"
      }
    }
  }
}
Codex~/.codex/config.toml
[mcp_servers.klaviyo]
command = "uvx"
args = ["klaviyo-mcp-server@latest"]

[mcp_servers.klaviyo.env]
PRIVATE_API_KEY = "<PRIVATE_API_KEY>"
Gemini CLITerminal
gemini mcp add --scope user -e PRIVATE_API_KEY=<PRIVATE_API_KEY> klaviyo uvx -- klaviyo-mcp-server@latest

Settings 3

PRIVATE_API_KEY Required: Klaviyo private API key; the server starts without it but every tool call fails.
READ_ONLY Optional: Set to true to hide every tool that writes; default false.
ALLOW_USER_GENERATED_CONTENT Optional: Set to false to hide tools that read profile and event data written by others; default true.

What it does

Klaviyo publishes this server itself and labels it beta. It connects an MCP client to the Klaviyo marketing platform so the assistant can look up account details, campaigns, flows, lists, segments, catalog items, events and metrics, pull campaign and flow performance reports, and make changes such as creating campaigns, email templates, events and profiles or subscribing and unsubscribing profiles from marketing.

It comes in two forms that are not the same size. The PyPI package klaviyo-mcp-server runs on your own machine over stdio and signs in with a Klaviyo private API key; version 0.4.1 registers 28 tools (counted in that release's tools folder), the same set its README lists. The hosted endpoint at https://mcp.klaviyo.com/mcp signs in with OAuth and, per Klaviyo's tools page, exposes more than 260 tools, including ones the local package lacks such as send_campaign, delete_campaign and catalog, coupon and translation tools. By default it loads a core set of about 40; query parameters such as read-only=true, toolsets=profiles:read,campaigns:read and beta=true change what it offers.

Both forms have a read-only switch (READ_ONLY=true locally, read-only=true on the hosted URL) and a switch that hides the tools which read user-generated content such as profile properties and event data, which Klaviyo flags as a prompt-injection risk.

What it needs

To run it yourselfPython

Local: uv (the command is uvx), a Klaviyo account and a private API key with the scopes the docs list (Campaigns, Events, Images, Profiles, Segments, Subscriptions and Templates at Full; the rest Read). Hosted: a Klaviyo user with the Owner, Admin or Manager role; Claude custom connectors need a Pro, Max, Team or Enterprise plan; ChatGPT custom servers need Developer mode turned on in Settings > Apps.

Limits

Beta and subject to change, per its README. The local package does not work with web clients such as ChatGPT. Version 0.4.1 has 28 tools: the larger set, beta tools and local beta setting on Klaviyo's tools page are not in that release's code, and it cannot send or delete a campaign. Its code registers each tool with a klaviyo_ prefix (klaviyo_get_profiles) and adds a required model argument (claude, gpt, gemini or other) that it puts in the User-Agent sent to Klaviyo. The run-claude and run-cursor launchers, which prompt for the key instead of storing it, work on macOS and Windows only. Query parameters cannot be set on the listed Claude connector or ChatGPT app.

Who it suits

Klaviyo marketers and developers who want an assistant to report on campaign and flow results or draft campaigns, templates and profile changes. The hosted endpoint suits most people: it has far more tools, OAuth sign-in and works in web clients, but needs an Owner, Admin or Manager role. The local package suits those who must use a scoped private key or a client without remote-server support, and accept a 28-tool set. For read-only reporting, turn on the read-only switch.

Tools 28

get_account_details
Shows details of the connected Klaviyo account
get_campaigns
Lists campaigns
get_campaign
Fetches one campaign
create_campaign
Creates a new campaign
assign_template_to_campaign_message
Attaches an email template to a campaign message
get_catalog_items
Lists catalog items
get_events
Lists events
create_event
Records an event against a profile
get_metrics
Lists event metrics
get_metric
Fetches one event metric
get_flows
Lists flows
get_flow
Fetches one flow
get_lists
Lists subscriber lists
get_list
Fetches one list
get_segments
Lists segments
get_segment
Fetches one segment
upload_image_from_file
Uploads an image from a file on your machine (local server only)
upload_image_from_url
Uploads an image from a web address
get_profiles
Lists profiles
get_profile
Fetches one profile
create_profile
Creates a profile
update_profile
Changes a profile's fields
subscribe_profile_to_marketing
Opts a profile in to marketing on a channel and list
unsubscribe_profile_from_marketing
Opts a profile out of marketing on a channel and list
get_campaign_report
Returns campaign performance figures
get_flow_report
Returns flow performance figures
create_email_template
Creates an HTML email template
get_email_template
Fetches one email template

Similar servers