| name | klaviyo-automation |
| description | Automate Klaviyo tasks via Rube MCP (Composio): manage email/SMS campaigns, inspect campaign messages, track tags, and monitor send jobs. Always search tools first for current schemas. |
| type | skill |
| created | 2026-02-27T00:00:00.000Z |
| domain | productivity |
| category | automation |
| risk | safe |
| source | community |
| tags | ["skill","productivity","automation","klaviyo"] |
Klaviyo Automation via Rube MCP
Automate Klaviyo email and SMS marketing operations through Composio's Klaviyo toolkit via Rube MCP.
Prerequisites
- Rube MCP must be connected (RUBE_SEARCH_TOOLS available)
- Active Klaviyo connection via
RUBE_MANAGE_CONNECTIONS with toolkit klaviyo
- Always call
RUBE_SEARCH_TOOLS first to get current tool schemas
Setup
Get Rube MCP: Add https://rube.app/mcp as an MCP server in your client configuration. No API keys needed — just add the endpoint and it works.
- Verify Rube MCP is available by confirming
RUBE_SEARCH_TOOLS responds
- Call
RUBE_MANAGE_CONNECTIONS with toolkit klaviyo
- If connection is not ACTIVE, follow the returned auth link to complete Klaviyo authentication
- Confirm connection status shows ACTIVE before running any workflows
Core Workflows
1. List and Filter Campaigns
When to use: User wants to browse, search, or filter marketing campaigns
Tool sequence:
KLAVIYO_GET_CAMPAIGNS - List campaigns with channel and status filters [Required]
Key parameters:
channel: Campaign channel - 'email' or 'sms' (required by Klaviyo API)
filter: Additional filter string (e.g., equals(status,"draft"))
sort: Sort field with optional - prefix for descending (e.g., '-created_at', 'name')
page_cursor: Pagination cursor for next page
include_archived: Include archived campaigns (default: false)
Pitfalls:
channel is required; omitting it can produce incomplete or unexpected results
- Pagination is mandatory for full coverage; a single call returns only one page (default ~10)
- Follow
page_cursor until exhausted to get all campaigns
- Status filtering via
filter (e.g., equals(status,"draft")) can return mixed statuses; always validate data[].attributes.status client-side
- Status strings are case-sensitive and can be compound (e.g., 'Cancelled: No Recipients')