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_CONNECTIONSwith toolkitklaviyo - •Always call
RUBE_SEARCH_TOOLSfirst 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_TOOLSresponds - •Call
RUBE_MANAGE_CONNECTIONSwith toolkitklaviyo - •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:
- •
channelis 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_cursoruntil exhausted to get all campaigns - •Status filtering via
filter(e.g.,equals(status,"draft")) can return mixed statuses; always validatedata[].attributes.statusclient-side - •Status strings are case-sensitive and can be compound (e.g., 'Cancelled: No Recipients')
- •Response shape is nested:
response.data.datawith status atdata[].attributes.status
2. Get Campaign Details
When to use: User wants detailed information about a specific campaign
Tool sequence:
- •
KLAVIYO_GET_CAMPAIGNS- Find campaign to get its ID [Prerequisite] - •
KLAVIYO_GET_CAMPAIGN- Retrieve full campaign details [Required]
Key parameters:
- •
campaign_id: Campaign ID string (e.g., '01GDDKASAP8TKDDA2GRZDSVP4H') - •
include_messages: Include campaign messages in response - •
include_tags: Include tags in response
Pitfalls:
- •Campaign IDs are alphanumeric strings, not numeric
- •
include_messagesandinclude_tagsadd related data to the response via Klaviyo's include mechanism - •Campaign details include audiences, send strategy, tracking options, and scheduling info
3. Inspect Campaign Messages
When to use: User wants to view the email/SMS content of a campaign
Tool sequence:
- •
KLAVIYO_GET_CAMPAIGN- Find campaign and its message IDs [Prerequisite] - •
KLAVIYO_GET_CAMPAIGN_MESSAGE- Get message content details [Required]
Key parameters:
- •
id: Message ID string - •
fields__campaign__message: Sparse fieldset for message attributes (e.g., 'content.subject', 'content.from_email', 'content.body') - •
fields__campaign: Sparse fieldset for campaign attributes - •
fields__template: Sparse fieldset for template attributes - •
include: Related resources to include ('campaign', 'template')
Pitfalls:
- •Message IDs are separate from campaign IDs; extract from campaign response
- •Sparse fieldset syntax uses dot notation for nested fields: 'content.subject', 'content.from_email'
- •Email messages have content fields: subject, preview_text, from_email, from_label, reply_to_email
- •SMS messages have content fields: body
- •Including 'template' provides the HTML/text content of the email
4. Manage Campaign Tags
When to use: User wants to view tags associated with campaigns for organization
Tool sequence:
- •
KLAVIYO_GET_CAMPAIGN_RELATIONSHIPS_TAGS- Get tag IDs for a campaign [Required]
Key parameters:
- •
id: Campaign ID string
Pitfalls:
- •Returns only tag IDs, not tag names/details
- •Tag IDs can be used with Klaviyo's tag endpoints for full details
- •Rate limit: 3/s burst, 60/m steady (stricter than other endpoints)
5. Monitor Campaign Send Jobs
When to use: User wants to check the status of a campaign send operation
Tool sequence:
- •
KLAVIYO_GET_CAMPAIGN_SEND_JOB- Check send job status [Required]
Key parameters:
- •
id: Send job ID
Pitfalls:
- •Send job IDs are returned when a campaign send is initiated
- •Job statuses indicate whether the send is queued, in progress, complete, or failed
- •Rate limit: 10/s burst, 150/m steady
Common Patterns
Campaign Discovery Pattern
1. Call KLAVIYO_GET_CAMPAIGNS with channel='email' 2. Paginate through all results via page_cursor 3. Filter by status client-side for accuracy 4. Extract campaign IDs for detailed inspection
Sparse Fieldset Pattern
Klaviyo supports sparse fieldsets to reduce response size:
fields__campaign__message=['content.subject', 'content.from_email', 'send_times'] fields__campaign=['name', 'status', 'send_time'] fields__template=['name', 'html', 'text']
Pagination
- •Klaviyo uses cursor-based pagination
- •Check response for
page_cursorin the pagination metadata - •Pass cursor as
page_cursorin next request - •Default page size is ~10 campaigns
- •Continue until no more cursor is returned
Filter Syntax
- equals(status,"draft") - Campaigns in draft status - equals(name,"Newsletter") - Campaign named "Newsletter" - greater-than(created_at,"2024-01-01T00:00:00Z") - Created after date
Known Pitfalls
API Version:
- •Klaviyo API uses versioned endpoints (e.g., v2024-07-15)
- •Response schemas may change between API versions
- •Tool responses follow the version configured in the Composio integration
Response Nesting:
- •Data is nested:
response.data.data[].attributes - •Campaign status at
data[].attributes.status - •Mis-parsing the nesting yields empty or incorrect results
- •Always navigate through the full path defensively
Rate Limits:
- •Burst: 10/s (3/s for tag endpoints)
- •Steady: 150/m (60/m for tag endpoints)
- •Required scope: campaigns:read
- •Implement backoff on 429 responses
Status Values:
- •Status strings are case-sensitive
- •Compound statuses exist (e.g., 'Cancelled: No Recipients')
- •Server-side filtering may return mixed statuses; always validate client-side
Quick Reference
| Task | Tool Slug | Key Params |
|---|---|---|
| List campaigns | KLAVIYO_GET_CAMPAIGNS | channel, filter, sort, page_cursor |
| Get campaign details | KLAVIYO_GET_CAMPAIGN | campaign_id, include_messages, include_tags |
| Get campaign message | KLAVIYO_GET_CAMPAIGN_MESSAGE | id, fields__campaign__message |
| Get campaign tags | KLAVIYO_GET_CAMPAIGN_RELATIONSHIPS_TAGS | id |
| Get send job status | KLAVIYO_GET_CAMPAIGN_SEND_JOB | id |
When to Use
This skill is applicable to execute the workflow or actions described in the overview.
🏰 Rei Skills — Curated by Rootcastle Engineering & Innovation | Batuhan Ayrıbaş
Engineering Beyond Boundaries | admin@rootcastle.com