Connect your AI Agents to Klaviyo in minutes

Available tools
create_campaign
Create a new Klaviyo email or SMS campaign. Requires a name, channel (email/sms), and audiences with included list IDs. Use list_lists to find valid list IDs.
get_campaign
Get a Klaviyo campaign by ID. Returns campaign details including name, status, and channel. Use list_campaigns to find valid campaign IDs.
update_campaign
Update a Klaviyo campaign's name or audiences. Only provided fields are updated. Use get_campaign to verify current state first.
delete_campaign
Delete a Klaviyo campaign. Only draft campaigns can be deleted. Use list_campaigns to find valid campaign IDs.
list_campaigns
List Klaviyo campaigns, optionally filtered by channel (email or sms). Returns campaign IDs, names, statuses, and channels.
send_campaign
Send a Klaviyo campaign immediately. The campaign must be in a sendable state (not draft). Use get_campaign to check status first.
create_event
Create a new Klaviyo event (e.g. Placed Order, Viewed Product) for a profile. Events are used to track actions and trigger flows. Use list_profiles to find profile IDs.
get_event
Get a Klaviyo event by ID. Returns event details including metric, profile, properties, and timestamp.
list_events
List Klaviyo events with optional filters by metric ID or profile ID, and pagination. Use list_metrics to find metric IDs. Use cursor from page_info for next page.
get_flow
Get a Klaviyo flow by ID. Returns flow details including name and status (live, draft, manual). Use list_flows to find valid flow IDs.
list_flows
List all Klaviyo flows. Flows are automated sequences triggered by events or conditions. Returns flow IDs, names, and statuses.
update_flow_status
Update a Klaviyo flow's status to live, draft, or manual. Use get_flow to check current status first.
get_flow_actions
Get all actions in a Klaviyo flow. Returns action IDs, types, and statuses for a given flow. Use list_flows to find valid flow IDs.
create_list
Create a new Klaviyo list. Lists are used to organize profiles for targeting in campaigns and flows.
get_list
Get a Klaviyo list by ID. Returns list details including name and timestamps.
update_list
Update a Klaviyo list name. Use get_list or list_lists to find valid list IDs.
delete_list
Delete a Klaviyo list. This does not delete the profiles in the list. Use list_lists to find valid list IDs.
list_lists
List all Klaviyo lists. Returns list IDs and names for targeting in campaigns.
get_list_profiles
Get profiles in a Klaviyo list with pagination. Returns up to 100 profiles per page. Use cursor from page_info for next page.
add_profiles_to_list
Add one or more profiles to a Klaviyo list. Use create_profile to create profiles first, then use their IDs here.
remove_profiles_from_list
Remove one or more profiles from a Klaviyo list. This does not delete the profiles, only removes the list membership.
get_metric
Get a Klaviyo metric by ID. Metrics represent event types like 'Placed Order' or 'Viewed Product'. Use list_metrics to find valid metric IDs.
list_metrics
List all Klaviyo metrics. Metrics represent event types that are tracked (e.g. 'Placed Order', 'Opened Email'). Returns metric IDs and names.
query_metric_aggregates
Query aggregate data for a Klaviyo metric (e.g. count, sum, unique over time). Use list_metrics to find metric IDs. Specify measurements like 'count' or 'sum' and optional time interval.
create_profile
Create a new Klaviyo profile with email, phone number, name, and custom properties. At least one of email or phone_number is required.
get_profile
Get a Klaviyo profile by ID. Returns profile details including email, phone, name, and custom properties.
update_profile
Update a Klaviyo profile's email, phone number, name, or custom properties. Only provided fields are updated.
list_profiles
List Klaviyo profiles with pagination. Returns up to 100 profiles per page. Use cursor from page_info for next page.
get_profile_lists
Get all lists a Klaviyo profile belongs to. Returns list IDs and names.
get_profile_segments
Get all segments a Klaviyo profile belongs to. Returns segment IDs and names.
get_segment
Get a Klaviyo segment by ID. Segments are dynamic groups of profiles based on conditions. Use list_segments to find valid segment IDs.
list_segments
List all Klaviyo segments. Segments are dynamic groups of profiles that update automatically based on conditions.
get_segment_profiles
Get profiles in a Klaviyo segment with pagination. Returns up to 100 profiles per page. Use cursor from page_info for next page.
create_tag
Create a new Klaviyo tag within a tag group. Tags are used to organize campaigns, flows, lists, and segments. Use list_tag_groups to find valid tag group IDs.
get_tag
Get a Klaviyo tag by ID. Use list_tags to find valid tag IDs.
update_tag
Update a Klaviyo tag's name. Use list_tags to find valid tag IDs.
delete_tag
Delete a Klaviyo tag. This cannot be undone. Use list_tags to find valid tag IDs.
list_tags
List all Klaviyo tags. Tags are used to organize and categorize campaigns, flows, lists, and segments.
create_tag_group
Create a new Klaviyo tag group. Tag groups organize related tags. Set exclusive=true if tags in the group should be mutually exclusive.
list_tag_groups
List all Klaviyo tag groups. Tag groups organize related tags together. Returns group IDs, names, and exclusivity settings.
create_template
Create a new Klaviyo email template with a name and optional HTML/text content. Templates can be used in campaigns and flows.
get_template
Get a Klaviyo template by ID. Returns template details including name, HTML, and text content. Use list_templates to find valid template IDs.
update_template
Update a Klaviyo template's name, HTML, or text content. Only provided fields are updated. Use get_template to check current content.
delete_template
Delete a Klaviyo template. This cannot be undone. Use list_templates to find valid template IDs.
list_templates
List all Klaviyo email templates. Returns template IDs, names, and content for use in campaigns and flows.
render_template
Render a Klaviyo template with context variables. Returns the rendered HTML and text content with variables replaced.
clone_template
Clone a Klaviyo template with a new name. Creates an exact copy of the template. Use list_templates to find valid template IDs.
validate_credential
Validate Klaviyo credentials by fetching account info. Returns {success, message}.

How to set up Merge Agent Handler
In an mcp.json file, add the configuration below, and restart Cursor.
Learn more in the official documentation ↗
1{
2 "mcpServers": {
3 "agent-handler": {
4 "url": "https://ah-api-develop.merge.dev/api/v1/tool-packs/{TOOL_PACK_ID}/registered-users/{REGISTERED_USER_ID}/mcp",
5 "headers": {
6 "Authorization": "Bearer yMt*****"
7 }
8 }
9 }
10}
11Open your Claude Desktop configuration file and add the server configuration below. You'll also need to restart the application for the changes to take effect.
Make sure Claude is using the Node v20+.
Learn more in the official documentation ↗
1{
2 "mcpServers": {
3 "agent-handler": {
4 "command": "npx",
5 "args": [
6 "-y",
7 "mcp-remote@latest",
8 "https://ah-api-develop.merge.dev/api/v1/tool-packs/{TOOL_PACK_ID}/registered-users/{REGISTERED_USER_ID}/mcp",
9 "--header",
10 "Authorization: Bearer ${AUTH_TOKEN}"
11 ],
12 "env": {
13 "AUTH_TOKEN": "yMt*****"
14 }
15 }
16 }
17}Open your Windsurf MCP configuration file and add the server configuration below.
Click on the refresh button in the top right of the Manage MCP server page or in the top right of the chat box in the box icon.
Learn more in the official documentation ↗
1{
2 "mcpServers": {
3 "agent-handler": {
4 "command": "npx",
5 "args": [
6 "-y",
7 "mcp-remote@latest",
8 "https://ah-api.merge.dev/api/v1/tool-packs/<tool-pack-id>/registered-users/<registered-user-id>/mcp",
9 "--header",
10 "Authorization: Bearer ${AUTH_TOKEN}"
11 ],
12 "env": {
13 "AUTH_TOKEN": "<ah-production-access-key>"
14 }
15 }
16 }
17 }In Command Palette (Cmd+Shift+P on macOS, Ctrl+Shift+P on Windows), run "MCP: Open User Configuration".
You can then add the configuration below and press "start" right under servers. Enter the auth token when prompted.
Learn more in the official documentation ↗
1{
2 "inputs": [
3 {
4 "type": "promptString",
5 "id": "agent-handler-auth",
6 "description": "Agent Handler AUTH_TOKEN", // "yMt*****" when prompt
7 "password": true
8 }
9 ],
10 "servers": {
11 "agent-handler": {
12 "type": "stdio",
13 "command": "npx",
14 "args": [
15 "-y",
16 "mcp-remote@latest",
17 "https://ah-api-develop.merge.dev/api/v1/tool-packs/{TOOL_PACK_ID}/registered-users/{REGISTERED_USER_ID}/mcp",
18 "--header",
19 "Authorization: Bearer ${input:agent-handler-auth}"
20 ]
21 }
22 }
23}FAQs on using Merge's Klaviyo MCP server
FAQs on using Merge's Klaviyo MCP server
Explore other MCP servers built and managed by Merge
























Ready to try it out?
Whether you're an engineer experimenting with agents or a product manager looking to add tools, you can get started for free now

