Skip to main content

MCP Integration

Sequenzy supports the Model Context Protocol (MCP), allowing AI assistants like Claude.ai, Claude Desktop, Claude Code, Codex, Cursor, and other MCP clients to manage your email marketing directly.

What You Can Do

With Sequenzy MCP, AI assistants can:
  • Manage subscribers - Add, update, search, and remove subscribers
  • Manage your audience - Create, update, and delete lists, segments, and tags, and enroll subscribers in sequences
  • Create sequences - Generate and configure email automation sequences
  • Draft campaigns - Create and edit campaign drafts
  • Manage landing pages - Create, edit, publish, unpublish, and connect custom domains
  • Control campaign delivery - Cancel, pause, resume, duplicate, and delete campaigns, and run campaign A/B tests
  • Send transactional emails - Send single emails via template or HTML
  • Manage your team - List members, invite teammates, and cancel invitations
  • Triage your inbox - Read, reply to, and close subscriber conversations
  • Manage webhooks - Create, test, and replay outbound webhook deliveries
  • View analytics - Get stats for campaigns, sequences, and overall performance
  • Inspect localization - Read company localization settings and localized template variants
  • Generate content - AI-powered email and sequence generation

Remote Setup For Claude.ai And Mobile

Use the remote connector when you want Sequenzy tools in Claude.ai, Claude mobile, and other cloud-hosted MCP clients that cannot launch a local npx process. You can copy the connection details from the existing MCP button in the Sequenzy dashboard sidebar:
  1. Open your workspace dashboard
  2. Click the MCP button in the sidebar developer setup area
  3. Copy the Remote MCP server URL
  4. Paste it into your AI client’s custom connector settings
  5. Complete the Sequenzy OAuth approval flow
Remote MCP server URL:
https://api.sequenzy.com/v1/mcp
In Claude:
  1. Open Settings → Connectors
  2. Choose Add custom connector
  3. Enter a name such as Sequenzy
  4. Enter the remote MCP server URL above
  5. Complete the Sequenzy OAuth login flow
After connecting, Claude sends authenticated MCP requests to Sequenzy from Anthropic’s cloud infrastructure, so the connector is available from Claude web and mobile without keeping Claude Desktop open. Remote setup uses OAuth; you do not need to paste a Sequenzy API key into Claude.

Local Setup

Use local setup for desktop and IDE clients that support local stdio MCP servers, including Claude Desktop, Claude Code, Codex, Cursor, Windsurf, and VS Code. You can also use the sidebar MCP button in the Sequenzy dashboard to copy the local setup command, create a personal key for manual local configs, and jump to the full setup docs.

Quick Setup

The easiest way to set up MCP is using our setup wizard:
npx @sequenzy/setup
This will:
  1. Open your browser to log in
  2. Create a personal API key
  3. Auto-detect supported installed AI clients, including Codex, Claude Code, Claude Desktop, Cursor, Windsurf, and VS Code
  4. Configure those clients automatically using their native MCP CLI when available, with config-file fallback when needed

Manual Setup

Across most MCP clients, the core server config is the same:
  • Command: npx
  • Args: -y @sequenzy/mcp
  • Env: SEQUENZY_API_KEY=seq_user_your_key_here
If your client supports local stdio MCP servers, you can usually reuse that exact command and environment variable in its native config format.

Claude Desktop

  1. Open Claude Desktop settings file:
    • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
    • Windows: %APPDATA%\Claude\claude_desktop_config.json
  2. Add Sequenzy MCP:
{
  "mcpServers": {
    "sequenzy": {
      "command": "npx",
      "args": ["-y", "@sequenzy/mcp"],
      "env": {
        "SEQUENZY_API_KEY": "seq_user_your_key_here"
      }
    }
  }
}
  1. Restart Claude Desktop

Cursor

  1. Open ~/.cursor/mcp.json (create if it doesn’t exist)
  2. Add Sequenzy:
{
  "mcpServers": {
    "sequenzy": {
      "command": "npx",
      "args": ["-y", "@sequenzy/mcp"],
      "env": {
        "SEQUENZY_API_KEY": "seq_user_your_key_here"
      }
    }
  }
}
  1. Restart Cursor

Windsurf

Same format as Cursor, but the config is at:
  • macOS: ~/Library/Application Support/Windsurf/mcp.json
  • Windows: %APPDATA%\Windsurf\mcp.json

Claude Code

You can add Sequenzy to Claude Code directly from the CLI:
claude mcp add --scope user --env=SEQUENZY_API_KEY=seq_user_your_key_here sequenzy -- npx -y @sequenzy/mcp
If you prefer a shared project config, add the same server to .mcp.json:
{
  "mcpServers": {
    "sequenzy": {
      "command": "npx",
      "args": ["-y", "@sequenzy/mcp"],
      "env": {
        "SEQUENZY_API_KEY": "seq_user_your_key_here"
      }
    }
  }
}
On native Windows, wrap npx with cmd /c:
claude mcp add --scope user --env=SEQUENZY_API_KEY=seq_user_your_key_here sequenzy -- cmd /c npx -y @sequenzy/mcp

Codex

You can add Sequenzy to Codex from the CLI:
codex mcp add sequenzy --env SEQUENZY_API_KEY=seq_user_your_key_here -- npx -y @sequenzy/mcp
Verify that Codex can see the server:
codex mcp list
Or add it manually in ~/.codex/config.toml:
[mcp_servers.sequenzy]
command = "npx"
args = ["-y", "@sequenzy/mcp"]

[mcp_servers.sequenzy.env]
SEQUENZY_API_KEY = "seq_user_your_key_here"

VS Code Copilot

VS Code uses a servers object in its MCP config:
{
  "servers": {
    "sequenzy": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "@sequenzy/mcp"],
      "env": {
        "SEQUENZY_API_KEY": "seq_user_your_key_here"
      }
    }
  }
}

Other MCP Clients

For tools like OpenClaw, Hermes, and other MCP-compatible clients, use the same Sequenzy stdio server:
  • Command: npx
  • Args: -y @sequenzy/mcp
  • Env: SEQUENZY_API_KEY=seq_user_your_key_here
If a client asks for a JSON config, use the same mcpServers.sequenzy shape shown above unless its docs specify a different schema. If it provides a CLI helper, point it at npx -y @sequenzy/mcp and set the same environment variable.

Getting Your API Key

  1. Go to the Sequenzy dashboard
  2. Open Settings → API Keys
  3. Click “Create Personal Key”
  4. Copy the key (starts with seq_user_)
Or use the setup wizard: npx @sequenzy/setup

Available Tools

Subscribers

  • add_subscriber - Add a new subscriber
  • update_subscriber - Update subscriber attributes/tags
  • remove_subscriber - Unsubscribe or delete
  • get_subscriber - Get subscriber details
  • search_subscribers - Search by tags, lists, attributes, segments

Lists

  • list_lists - List subscriber lists
  • create_list - Create a subscriber list
  • update_list - Update a list’s name, description, or privacy
  • delete_list - Permanently delete a list and all of its memberships; subscribers themselves are kept
  • add_subscribers_to_list - Bulk add up to 500 subscribers to a list from an email array
  • remove_subscribers_from_list - Remove up to 500 subscribers from a list by email; subscribers stay in your audience and unmatched emails are returned in notFound

Campaigns

  • list_campaigns - List all campaigns
  • get_campaign - Get campaign details and stats
  • create_campaign - Create a draft campaign from raw HTML or Sequenzy blocks
  • update_campaign - Edit a draft, including reply-to settings, raw HTML, or Sequenzy blocks
  • schedule_campaign - Schedule a draft or already scheduled campaign
  • send_test_email - Send test to single address
  • cancel_campaign - Cancel a scheduled, paused, or sending campaign; remaining emails are not sent and the campaign cannot be restarted
  • pause_campaign - Pause a campaign that is currently sending
  • resume_campaign - Resume a paused campaign, optionally spreading the remaining delivery over 1-72 hours with spreadOverHours
  • duplicate_campaign - Duplicate a campaign as a new draft. mode: "campaign" (default) copies the campaign and its email, "ab_test" also copies the A/B test with all variants, and "variant" copies a single variant’s content (requires variantId)
  • delete_campaign - Permanently delete a campaign; sending, scheduled, or paused campaigns must be cancelled with cancel_campaign first

Landing Pages

  • list_landing_pages - List landing pages with status, metrics, content, and URLs
  • get_landing_page - Get landing page details, editor content, metrics, and public URLs
  • create_landing_page - Create a draft landing page from default template content or supplied JSON
  • update_landing_page - Edit landing page name, slug, or full editor-compatible content
  • publish_landing_page - Publish a landing page, optionally saving name, slug, or content first
  • unpublish_landing_page - Return a landing page to draft, optionally saving edits first
  • delete_landing_page - Delete a landing page
  • connect_landing_page_domain - Connect a custom landing page domain and return DNS setup details
  • update_landing_page_domain_settings - Replace or verify landing page custom domain settings
Landing page content uses Sequenzy’s editor-compatible JSON schema with version, template, seo, theme, and blocks. The API validates CTA, pricing, footer, and form redirect URLs before saving or publishing. Custom landing page domains require a CNAME record pointing to pages.sequenzydns.com; call update_landing_page_domain_settings with verify: true after DNS changes propagate.

Company

  • get_company - Get company details plus effective localization settings

Sequences

  • list_sequences - List all sequences
  • get_sequence - Get sequence details plus sequence.emails, which includes each step’s nodeId, linked emailId, subject, preview text, and blocks
  • create_sequence - Create a sequence with:
    • trigger: "segment_entered" plus segmentId for saved-segment entry automations
    • goal - AI generates email content
    • steps with blocks - Sequenzy JSON block format
    • steps with html - Any HTML (React Email, MJML, etc.) - auto-converted
    • enrollmentMode: "matching_field" for event-triggered product-, variant-, order-, or subscription-specific sequences that should block duplicate active runs only for the same resolved field
    • enrollmentFieldPath, such as order.id or product.providerVariantId, when you want matching_field to use a custom event property
    • propertyFilters for event_received triggers - only start the sequence when the event properties match, e.g. scope a purchase sequence to one product with { "path": "lineItems[].providerProductId", "operator": "equals", "value": "prod_123" } (or productIds for Stripe saas.purchase events)
    • For event_received sequences, step content can use {{event.amount}}, {{event.order.id}}, or other {{event.*}} merge tags from the event payload that enrolled the subscriber
  • update_sequence - Modify a sequence, targeting a specific step with the emailId or nodeId returned by get_sequence, or update enrollmentMode / enrollmentFieldPath
  • enable_sequence / disable_sequence - Control status
  • enroll_subscribers_in_sequence - Manually enroll up to 500 subscribers by email. Only active subscribers are enrolled: unknown emails are returned in notFound, and inactive or already enrolled subscribers are counted in skipped. Pass targetNodeId (a non-trigger nodeId from get_sequence) to start at a specific step instead of the first step after the trigger. The sequence must be accepting entrants.
  • cancel_sequence_enrollments - Stop active or waiting enrollments in a required sequence by either subscriberId or entry-event field values. Field-value cancellation can use fieldPath or the sequence’s configured enrollmentFieldPath, and should be run with dryRun: true before applying bulk changes.

Transactional

  • list_transactional_emails - List transactional templates and API slugs
  • get_transactional_email - Read a transactional email by ID or slug, including body blocks
  • update_transactional_email - Update transactional email metadata or body content
  • send_email - Send a single email (template or HTML). Its variables object supports nested arrays for repeat blocks, such as { "event": { "items": [...] } }.

Segments

  • list_segments - List saved segments
  • create_segment - Create a segment from explicit filters, including nested AND/OR groups, event filters, segment filters, Stripe product purchase filters, and optional filterJoinOperator
  • update_segment - Update a segment’s name and/or replace its filter rules using the same filters plus filterJoinOperator or nested root shapes as create_segment
  • delete_segment - Permanently delete a segment; subscribers are not affected
  • get_segment_count - Preview how many active subscribers match a segment
For Stripe product segments, use the product-specific Stripe fields. The supported shapes are:
  • {"id":"filter-1","field":"stripeProduct","operator":"is","value":"prod_pro"} for “bought product”
  • {"id":"filter-1","field":"stripeProduct","operator":"is_not","value":"prod_pro"} for “didn’t buy product”
  • {"id":"filter-1","field":"stripeProduct","operator":"at_least","value":"prod_pro:3"} for “at least 3 payments”
  • {"id":"filter-1","field":"stripeProduct","operator":"less_than_count","value":"prod_pro:3"} for “fewer than 3 payments”
  • {"id":"filter-1","field":"stripeCurrentProduct","operator":"is","value":"prod_pro"} for “currently has product”
  • {"id":"filter-1","field":"stripeTrialProduct","operator":"is","value":"prod_pro"} for “currently trialing product”
  • {"id":"filter-1","field":"stripeTrialProduct","operator":"is","value":"prod_pro:is_canceled"} for “trialing product is set to cancel”
  • {"id":"filter-1","field":"stripeTrialProduct","operator":"gte","value":"prod_pro:start_at:7 days ago"} for “trial started in the last 7 days”
  • {"id":"filter-1","field":"stripeTrialProduct","operator":"is","value":"prod_pro:end_at:2026-05-26"} for “trial ends on May 26, 2026”
For products purchased through commerce orders (Shopify, WooCommerce, or the Commerce API), use the commerceProduct field. The value is provider:productId - product IDs are provider-scoped, so the provider prefix (shopify, woocommerce, or api) tells the filter which catalog the ID belongs to. A bare product ID matches the ID on any provider:
  • {"id":"filter-1","field":"commerceProduct","operator":"is","value":"api:prod-starter-kit"} for “bought product”
  • {"id":"filter-1","field":"commerceProduct","operator":"is_not","value":"api:prod-starter-kit"} for “didn’t buy product”
  • {"id":"filter-1","field":"commerceProduct","operator":"at_least","value":"shopify:42:2"} for “placed at least 2 orders containing the product”
  • {"id":"filter-1","field":"commerceProduct","operator":"less_than_count","value":"shopify:42:2"} for “fewer than 2 orders containing the product”
For engagement filters (emailSent, emailOpened, emailClicked, emailBounced, emailComplained), the value can either be a rolling time window (7d, 30d, 90d, 180d, all) or a specific sent campaign via campaign:<campaign_id>. Combine two campaign-specific filters to express rules like “bounced campaign A but not campaign B”:
  • {"id":"filter-1","field":"emailBounced","operator":"is","value":"campaign:cmp_abc"}
  • {"id":"filter-2","field":"emailBounced","operator":"is_not","value":"campaign:cmp_xyz"}
Use list_campaigns to look up the campaign IDs. By default, segment filters use AND logic. To match any filter instead of all of them, pass filterJoinOperator: "or" when calling create_segment. For nested logic, pass a v2 root group instead of filters:
{
  "name": "Active non-buyers",
  "root": {
    "kind": "group",
    "id": "root",
    "joinOperator": "and",
    "children": [
      {
        "kind": "filter",
        "id": "filter-1",
        "field": "attribute",
        "operator": "lte",
        "value": "last_login_days_ago:90"
      },
      {
        "kind": "group",
        "id": "group-1",
        "joinOperator": "or",
        "children": [
          {
            "kind": "filter",
            "id": "filter-2",
            "field": "event",
            "operator": "is_not",
            "value": "saas.purchase:30d"
          },
          {
            "kind": "filter",
            "id": "filter-3",
            "field": "segment",
            "operator": "is_not",
            "value": "seg_paying_customers"
          }
        ]
      }
    ]
  }
}
Event filter values use eventName:range for is / is_not and eventName:count:range for at_least / less_than_count. Segment filter values are saved segment IDs. list_segments returns both:
  • subscriberCount - all matched contacts, including unsubscribed or bounced contacts
  • activeSubscriberCount - contacts eligible for campaigns
get_segment_count returns the active count, because campaigns and most send flows only target active subscribers.

Audience Syncs

Push segments to Meta custom audiences for Facebook and Instagram retargeting. Requires the Meta Ads integration to be connected in the dashboard (Settings → Integrations).
  • list_audience_syncs - List segment-to-audience syncs with schedule and last sync status
  • list_ad_accounts - List the Meta ad accounts available for syncing
  • create_audience_sync - Create a sync from an existing segment (segmentId) or a ready-made template (predefinedSegmentId, for example zero-ltv, no-purchase-1y, recent-buyers); the first upload runs immediately
  • update_audience_sync - Change the frequency (hourly, daily, weekly) or pause/resume via isActive
  • delete_audience_sync - Remove a sync; the Meta audience itself is kept
  • sync_audience_now - Trigger an immediate upload outside the schedule
Audiences are add-only: subscribers who leave the segment stay in the Meta audience. Meta requires 100+ matched people before an audience can be used for ad delivery.

Products & Digital Delivery

  • list_products - List synced products (Stripe, Shopify, WooCommerce, api) including any attached delivery file
  • upsert_products - Create or update products in the catalog (Commerce API, keyed by your productId, up to 100 per call)
  • delete_product - Delete a product previously pushed via upsert_products
  • attach_product_file - Attach a distributable file to a product, delivered after purchase. Pass url for a hosted file, or filePath to upload a local file (local MCP server only)
  • remove_product_file - Remove the attached file from a product
  • sync_products - Queue a sync of the Stripe product catalog
After a file is attached, purchases of the product enrich the saas.purchase event with download.url and download.name, so purchase sequences can deliver the file with {{event.download.url}}. See Digital Product Delivery.

Tags

  • list_tags - List all tags in the account
  • create_tag - Create a tag definition. Names are normalized to lowercase with hyphens (VIP Customer becomes vip-customer); color defaults to gray
  • update_tag - Update a tag’s color; system tags cannot be changed
  • delete_tag - Permanently delete a tag and remove it from all subscribers; system tags and tags used by sequences cannot be deleted

Templates

  • list_templates - List all email templates with localization status by locale
  • get_template - Get a template’s details, content, and localized variants
  • create_template - Create a template from raw HTML or Sequenzy blocks
  • update_template - Update a template with raw HTML or Sequenzy blocks

A/B Tests

  • list_ab_tests - List A/B tests and variants, optionally scoped by sequence
  • get_ab_test - Get variants, content, and localization status
  • get_ab_test_stats - Get aggregate and per-variant stats
  • create_ab_test - Create a campaign A/B test with testPercentage (5-50, default 20), testDurationMinutes (15-1440, default 240), winnerCriteria (open_rate or click_rate), and optional extra variants. Control variant A is created automatically from the campaign’s current email
  • add_ab_test_variant - Add a variant to a draft campaign A/B test
  • update_ab_test_variant - Update a draft variant’s subject, preview text, HTML, or blocks
  • delete_ab_test_variant - Permanently remove a variant from a draft campaign A/B test; variant A is the control and cannot be deleted
  • delete_ab_test - Permanently delete a campaign A/B test and all of its variants; running tests cannot be deleted
Use get_ab_test to discover variant IDs before editing. update_ab_test_variant accepts either html or blocks, not both, and only draft tests can be changed. create_ab_test requires a campaign in draft or rejected status that does not already have an A/B test, and variants can only be added or removed while the test is in draft status. When you need recipient-specific content, prefer Sequenzy blocks instead of raw HTML. Campaign and template MCP tools accept a blocks array where each block can include a condition, for example:
{
  "name": "Launch",
  "subject": "Big update",
  "blocks": [
    {
      "id": "intro",
      "type": "text",
      "content": "<p>Hello there</p>",
      "variant": "paragraph"
    },
    {
      "id": "pro-offer",
      "type": "text",
      "content": "<p>Your Pro upgrade is ready.</p>",
      "variant": "paragraph",
      "condition": {
        "variable": "plan",
        "operator": "equals",
        "value": "pro"
      }
    }
  ]
}
Use merge-tag variable names without {{ }} inside condition.variable.

Team

  • list_team_members - List the company owner, members with their roles, and pending or expired invitations
  • invite_team_member - Invite a teammate as admin or viewer. Existing Sequenzy users are added immediately; everyone else receives an email invitation. Billing access (canManageBilling) can only be granted by the company owner
  • cancel_team_invitation - Cancel a pending invitation; accepted invitations cannot be cancelled

Inbox

  • list_conversations - List subscriber reply conversations with status, search, unread, and pagination filters
  • get_conversation - Get a conversation with its full message history, subscriber details, and context
  • reply_to_conversation - Send an outbound reply (requires bodyText or bodyHtml) or add an internal team-only note with type: "note". Replying to a closed conversation reopens it
  • update_conversation_status - Open or close a conversation
  • mark_conversation_read - Mark all unread inbound messages in a conversation as read

Webhooks

  • list_webhooks - List outbound webhook endpoints and their subscribed event types
  • create_webhook - Create a webhook endpoint. The response includes a signingSecret that is returned only once - store it immediately to verify webhook signatures. If events is omitted, a default set of event types is subscribed
  • update_webhook - Update a webhook’s name, URL, subscribed events, or enabled/disabled status; providing events replaces the existing list
  • delete_webhook - Permanently delete a webhook endpoint and stop all deliveries to it
  • test_webhook - Send a test event to verify the endpoint is reachable and signatures validate
  • list_webhook_deliveries - List recent delivery attempts, including status and response codes
  • replay_webhook_delivery - Re-send a previous delivery’s event payload to the endpoint
Webhook event types cover email.*, subscriber.*, and sequence.* events.

Analytics

  • get_stats - Overview stats (7d/30d/90d)
  • get_campaign_stats - Campaign performance
  • get_sequence_stats - Sequence performance
  • get_subscriber_activity - Individual activity

AI Generation

  • generate_email - Create email from prompt
  • generate_sequence - Create multi-email sequence from goal
  • generate_subject_lines - Generate A/B subject variants
Generated content is returned as draft content for review. Sequence generation supports up to 10 emails.

Example Conversations

Set up email for a new SaaS

You: "Set up email sequences for my SaaS that has a 14-day trial"

Claude: I'll help set that up. First, let me check your current sequences...
[Uses list_sequences]

You don't have any sequences yet. I'll create three for you:
1. Welcome sequence (triggered on signup)
2. Trial nurture (days 1, 3, 7, 10, 13)
3. Trial ending reminder (day 12)

[Uses generate_sequence and create_sequence for each]

Done! I've created 3 sequences with 8 emails total.

Add a subscriber

You: "Add john@example.com as a VIP subscriber"

Claude: [Uses add_subscriber]
Added john@example.com with the VIP tag.

Publish a landing page

You: "Create a landing page for our product waitlist and publish it"

Claude: [Uses create_landing_page with template "waitlist", then publish_landing_page]
Done. I created and published the waitlist page. The public URL is ready, and I can connect pages.example.com if you want a branded domain.

Create a Stripe product segment

You: "Create a segment for subscribers who bought Stripe product prod_pro at least 3 times"

Claude: [Uses create_segment with filters:
{"id":"filter-1","field":"stripeProduct","operator":"at_least","value":"prod_pro:3"}]
Done. I created the segment and saved it for future campaigns.

Create a match-any segment

You: "Create a segment for VIP contacts or anyone on Gmail"

Claude: [Uses create_segment with:
{"filterJoinOperator":"or","filters":[{"id":"filter-1","field":"tag","operator":"contains","value":"vip"},{"id":"filter-2","field":"email","operator":"contains","value":"@gmail.com"}]}]
Done. I created a segment that matches either condition.

Check performance

You: "How did my last campaign perform?"

Claude: [Uses list_campaigns then get_campaign_stats]
Your "Product Launch" campaign sent yesterday had:
- 2,451 sent
- 67.2% open rate
- 12.3% click rate
That's above your average!

Create a sequence with specific content

You: "Create a 3-email welcome sequence with specific content.
Email 1 (immediate): Subject 'Welcome!' - 'Thanks for joining us.'
Email 2 (1 day later): Subject 'Getting Started' - 'Here's how to begin.'
Email 3 (3 days later): Subject 'Pro Tips' - 'Unlock advanced features.'"

Claude: [Uses create_sequence with steps]
Done! I've created the welcome sequence with 3 emails:
1. "Welcome!" - sends immediately
2. "Getting Started" - sends after 1 day
3. "Pro Tips" - sends after 3 days

The sequence is in draft mode. Would you like me to enable it?

Migrate a sequence from another platform

You: "I have these React Email templates for my onboarding sequence.
Can you create a sequence that sends them?"

[Pastes HTML content]

Claude: [Uses create_sequence with steps using html field]
Done! I've created your onboarding sequence with the HTML content
you provided. The HTML was automatically converted to Sequenzy's
block format so you can edit it in the visual editor later.

The sequence is ready in draft mode with 3 emails.

Event-Personalized Sequences

When your AI assistant creates a sequence with trigger: "event_received", it can place {{event.*}} merge tags directly into step subjects or body content. Those values come from the properties payload you send to POST /api/v1/subscribers/events. Example:
  • Trigger payload: {"event":"weather.wind_alert","properties":{"city":"Tel Aviv","alert":{"maxSpeed":75}}}
  • Sequence subject: Wind alert for {{event.city}}
  • Sequence body: Winds may reach {{event.alert.maxSpeed}} km/h.
Sequenzy stores that event snapshot on the sequence run, so delayed follow-up emails keep using the same original event values.

Resources

MCP also provides read-only resources that AI can access:
ResourceDescription
sequenzy://dashboardLive 7-day overview stats
sequenzy://companyCurrently selected company, including localization settings
sequenzy://campaigns/recentLast 10 campaigns
sequenzy://subscribers/recentRecently added subscribers
sequenzy://sequencesAll sequences with status
sequenzy://templatesAvailable email templates with localization status
sequenzy://segmentsDefined segments
sequenzy://tagsAll tags with counts

Security

  • Personal API keys are tied to your user account
  • Keys can only access companies you have access to
  • You can revoke keys anytime in Settings → API Keys
  • Keys are never shared between users

Troubleshooting

Sequenzy MCP failures now return a short explanation, a concrete recovery step, and a direct docs.sequenzy.com link so AI clients can self-correct more reliably.

Duplicate resources

If a tool call would create a duplicate segment name or sending domain, the error includes a stable code, an agent-friendly description, a concrete resolution, and a docsUrl. For segments, call list_segments and reuse the existing segment ID or choose a different name. For websites, call list_websites; if the domain is not listed for the selected company, it belongs to another company or account and must be removed, reassigned, or replaced with a different sending domain.

”SEQUENZY_API_KEY environment variable is required”

Make sure your API key is set in the MCP config. Run npx @sequenzy/setup to configure automatically.

”Invalid API key”

Your key may have been revoked. Create a new one in Settings → API Keys.

Changes not appearing

Restart your AI client after modifying the MCP config.