Klaviyo MCP: campaigns, flows, segments, metrics, reports, profiles across many accounts. 24 tools.
23 read-only tools with consistent naming (verb_noun pattern: get_*, list_*) and complete input schemas. Descriptions are present but generic (avg ~80 chars, below 194-char baseline). All parameters have type definitions and descriptions. No output schemas documented. Error handling exists but lacks recovery guidance. Security is sound (API keys injected server-side via env vars). Composition is clean, each tool has one responsibility. Main gaps: output schemas missing, descriptions could be more LLM-optimized, no pagination guidance despite potential large result sets.
Get account-level metrics summary (total subscribers, revenue, etc.).
Get details of a specific campaign.
Get performance report for a campaign (opens, clicks, conversions, etc.) over a time range.
List campaigns in an account, optionally filtered by status.
Get details of a specific flow.
Get performance report for a flow (opens, clicks, conversions, etc.) over a time range.
List flows in an account, optionally filtered by status.
Output schemas not documented. LLMs cannot infer what fields to expect from responses (e.g., campaign report structure, profile fields). This forces agents to guess downstream field names and risks broken tool chains.
Descriptions are generic and brief (~70 chars avg). They lack context on WHEN to use each tool vs. similar ones (e.g., get_campaign vs. get_campaign_report). LLM-optimized descriptions should be 50-200 chars and answer: what does it do, when to use it, what does it return?
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 60 | 2026-07-28+ | v2 |
Get details of a specific form.
Get performance report for a form over a time range.
List forms in an account.
List integrations configured in an account.
Get details of a specific list.
List email lists in an account.
Get aggregated metric data over a time range.
List metrics available in an account.
Get details of a specific profile (contact).
List profiles (contacts) in an account, optionally filtered by email or phone.
Get details of a specific segment.
Get performance report for a segment over a time range.
List segments in an account.
Get details of a specific email template.
List email templates in an account.
List all configured Klaviyo accounts from environment variables (KLAVIYO_KEY_*).
No pagination guidance. Tools like get_profiles, get_campaigns, get_flows accept no limit/offset/cursor parameters. If Klaviyo returns 500+ items, responses will blow context windows. Implement pagination with limit (default 20-50) and cursor/offset.
Error responses lack recovery guidance. Code shows errors return {error: string} but no actionable next steps. E.g., 'Account not found' should suggest 'Call list_accounts() to see available accounts.' Agents need to know: retry? Ask user? Or dead-end?
Date parameters (start, end in reporting tools) lack format constraints in descriptions. Should specify 'ISO 8601 (YYYY-MM-DD or RFC 3339)' and note the reporting floor (2023-06-01). LLMs frequently miscalculate date formats on the fly.