Skip to main content

Klaviyo MCP Server community fork adding template listing, campaign cloning, template cloning, and campaign-message template traversal tools

Project description

klaviyo-mcp-server-extended

A community fork of Klaviyo's official klaviyo-mcp-server (v0.4.1) adding missing campaign/template traversal tools plus universal content support that the official server does not expose.

This is an unofficial, unsupported patch. It layers the missing tools onto the official code without changing any existing behavior — everything that works in the official server continues to work identically here.

Why this exists

As of April 2026, the official Klaviyo MCP server (v0.4.1) does not expose tools to:

  1. List email templates (only fetch by known ID)
  2. Traverse from a campaign or campaign message to its associated template
  3. Clone a campaign or a template

These gaps make it impossible to clone an email campaign end-to-end through the MCP server or safely manage Klaviyo's newer reusable universal content blocks, even though the underlying REST API fully supports all of these operations and the bundled klaviyo-api Python SDK already has the methods wired up. This fork simply exposes them.

Tools added

These tools are thin wrappers around methods that already exist in the official klaviyo-api SDK. They follow the same style conventions as the surrounding code (@mcp_tool, get_klaviyo_client(), clean_result()).

Tool Writes? REST endpoint
klaviyo_get_email_templates no GET /api/templates
klaviyo_clone_email_template yes POST /api/template-clone
klaviyo_get_messages_for_campaign no GET /api/campaigns/{id}/campaign-messages
klaviyo_get_template_for_campaign_message no GET /api/campaign-messages/{id}/template
klaviyo_get_template_id_for_campaign_message no GET /api/campaign-messages/{id}/relationships/template
klaviyo_clone_campaign yes POST /api/campaign-clone
klaviyo_get_universal_content_blocks no GET /api/template-universal-content
klaviyo_get_universal_content_block no GET /api/template-universal-content/{id}
klaviyo_create_universal_content_block yes POST /api/template-universal-content
klaviyo_update_universal_content_block yes PATCH /api/template-universal-content/{id}
klaviyo_delete_universal_content_block yes DELETE /api/template-universal-content/{id}
klaviyo_get_universal_content_block_html no GET /api/template-universal-content/{id}
klaviyo_get_universal_content_blocks_for_template no derived from template HTML + definition scan
klaviyo_get_universal_content_blocks_for_campaign no derived from campaign messages -> template traversal

All other tools from the official server are preserved unchanged.

Universal content workflow

For Klaviyo's newer reusable template blocks:

  1. discover blocks with klaviyo_get_universal_content_blocks
  2. inspect a block with klaviyo_get_universal_content_block
  3. create or update reusable blocks with the universal content write tools
  4. embed the returned block ID into template HTML with:
<div data-klaviyo-universal-block="block_id">&nbsp;<div>

Warning: updating or deleting a universal content block affects every template that uses it.

Relationship helpers are also available:

  • template -> universal content blocks
  • campaign -> universal content blocks

Authentication

Identical to the official local server: private API key via the PRIVATE_API_KEY environment variable. This fork does not provide OAuth or any remote hosting — OAuth is Klaviyo's own gateway at https://mcp.klaviyo.com/mcp and is not part of the open-source package.

The private API key needs the same scopes as the official server. For the new tools specifically:

  • templates:read — for get_email_templates, get_template_for_campaign_message, get_universal_content_blocks, get_universal_content_block, get_universal_content_block_html
  • templates:write — for clone_email_template, create_universal_content_block, update_universal_content_block, delete_universal_content_block
  • campaigns:read — for get_messages_for_campaign, get_template_id_for_campaign_message
  • campaigns:write — for clone_campaign

The full recommended scope set from Klaviyo's docs already covers all of these.

Installation

From PyPI

After this package is published, install and run the fork with:

uvx --from klaviyo-mcp-server-extended klaviyo-mcp-server

Pin the release version for reproducible MCP client configs:

uvx --from klaviyo-mcp-server-extended==0.4.6 klaviyo-mcp-server

From a local wheel

Build the wheel first:

uv build

Then run the generated wheel from dist/:

uvx --from ./dist/klaviyo_mcp_server_extended-0.4.6-py3-none-any.whl klaviyo-mcp-server

MCP client config (Claude Desktop, Cursor, VS Code)

Replace the official uvx klaviyo-mcp-server@latest invocation with uvx --from klaviyo-mcp-server-extended==0.4.6 klaviyo-mcp-server. For example, in Claude Desktop:

{
  "mcpServers": {
    "klaviyo": {
      "command": "uvx",
      "args": [
        "--from",
        "klaviyo-mcp-server-extended==0.4.6",
        "klaviyo-mcp-server"
      ],
      "env": {
        "PRIVATE_API_KEY": "YOUR_API_KEY",
        "READ_ONLY": "false",
        "ALLOW_USER_GENERATED_CONTENT": "false"
      }
    }
  }
}

The entry point command (klaviyo-mcp-server) is unchanged, so no downstream agent code needs to change — only the --from package is new.

Verifying the fork loaded

After restarting your MCP client, your tool list should include the six new tools alongside the existing ones. In Claude Desktop, click Search and tools → klaviyo to confirm.

Upstream relationship

  • Based on klaviyo-mcp-server==0.4.1 from PyPI (published 2026-03-05)
  • Version 0.4.8, based on the upstream 0.4.1 base plus added campaign/template traversal, universal content, and forward relationship support
  • No changes to existing tools, models, utilities, prompts, or scripts
  • The added tools are the only diff

If Klaviyo eventually ships equivalent tools upstream, uninstall this fork and revert to the official klaviyo-mcp-server@latest.

License

MIT, matching the upstream package. See LICENSE.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

klaviyo_mcp_server_extended-0.4.8.tar.gz (35.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

klaviyo_mcp_server_extended-0.4.8-py3-none-any.whl (52.9 kB view details)

Uploaded Python 3

File details

Details for the file klaviyo_mcp_server_extended-0.4.8.tar.gz.

File metadata

File hashes

Hashes for klaviyo_mcp_server_extended-0.4.8.tar.gz
Algorithm Hash digest
SHA256 a8b2960fa0918581cb5919ee04e73fbb794ae9d0b677715004a68312dbc5729a
MD5 95025ffe7c6b286c5d23790561c7f361
BLAKE2b-256 db8754ba7db1ad84a185ff1bd3b1b378c2a26cbb2e53a76a8672ba60d173b4b5

See more details on using hashes here.

Provenance

The following attestation bundles were made for klaviyo_mcp_server_extended-0.4.8.tar.gz:

Publisher: publish.yaml on MissionSquad/mcp-klaviyo

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file klaviyo_mcp_server_extended-0.4.8-py3-none-any.whl.

File metadata

File hashes

Hashes for klaviyo_mcp_server_extended-0.4.8-py3-none-any.whl
Algorithm Hash digest
SHA256 625ad8f500802c29b346b8cd635af01cac0fd6ce4bdebd5a2f5be6f5b355e6ba
MD5 75b3379180c5cd95ae7496099ce4667f
BLAKE2b-256 326bf7543032066c8b5b2464d7cc8dbfcd1c74da3190fba1d3366ef90fbe0ed6

See more details on using hashes here.

Provenance

The following attestation bundles were made for klaviyo_mcp_server_extended-0.4.8-py3-none-any.whl:

Publisher: publish.yaml on MissionSquad/mcp-klaviyo

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page