Sequenzy Mcp

by Sequenzy

334 downloads
Not rated
GitHub

About

Sequenzy MCP enables AI assistants like Claude to manage your email marketing directly. Add subscribers, create AI-generated email sequences, send campaigns, and track analytics—all through natural conversation. Perfect for SaaS founders who want to automate email workflows witho

Details

Author
Sequenzy
Downloads
334
Categories
Communication, Automation, Other, AI, Marketing

- Manage subscribers (add, update, search, tag, segment)
- Create and activate AI-generated email sequences
- Draft, update, and send test email campaigns
- Create and manage email templates
- Retrieve campaign and sequence analytics
- Generate emails, sequences, and subject lines with AI
- Send one-off transactional emails
- Manage companies and API keys

Setting up with Highlight

This MCP is not yet compatible with Highlight’s one-click setup. However, you can still use it with Highlight by following these steps:

  1. Download and install Highlight from highlightai.com/download
  2. Navigate to the plugins tab and select "Add Custom Plugin"
  3. Configure the plugin with the settings below
    Plugin Name Sequenzy Mcp
    Command (node, npx, python, etc.)

    Please refer to the README for specific instructions on how to obtain API keys or other required environment variables.

  4. Enable "Start Automatically" if you want the plugin to start when Highlight launches

From the repository

Install via npx with the command npx @sequenzy/mcp and set the SEQUENZY_API_KEY environment variable with your API key from sequenzy.com/settings/api-keys. For Claude Desktop, add the configuration to your claude_desktop_config.json. Other MCP clients can run the package directly after setting the environment variable.

Claude Desktop / Cursor

Paste into your MCP client config file to install this server.

{
    "mcpServers": {
        "sequenzy mcp": {
            "sequenzy": {
                "command": "npx",
                "args": [
                    "-y",
                    "@sequenzy/mcp"
                ],
                "env": {
                    "SEQUENZY_API_KEY": "<YOUR_API_KEY>"
                }
            }
        }
    }
}

McpServers

{
    "sequenzy": {
        "command": "npx",
        "args": [
            "-y",
            "@sequenzy/mcp"
        ],
        "env": {
            "SEQUENZY_API_KEY": "<YOUR_API_KEY>"
        }
    }
}

Connect Sequenzy to Claude Desktop, Claude Code, Codex, Cursor, Windsurf, VS Code Copilot, OpenClaw, and other MCP clients so your AI assistant can manage email operations with structured tools instead of hand-written API calls.

Every published MCP tool includes explicitreadOnlyHint,destructiveHint, andopenWorldHintannotations so compatible clients can display accurate tool-use affordances. Tools also publishoutputSchemadefinitions and returnstructuredContent, giving clients and models machine-readable result shapes for follow-up calls.

The easiest setup path is the Sequenzy wizard:

The wizard opens the browser login flow, creates a personal API key, detects supported AI clients, and configures them automatically when possible.

For clients that support Streamable HTTP MCP, use Sequenzy's hosted endpoint instead of running a local stdio process:

Remote clients should authenticate with the Sequenzy OAuth flow when supported. Local and automation clients can still use the stdio package below withSEQUENZY_API_KEY.

- MCP server manifest:server.json
- Agent card:
.well-known/agent-card.json
- Agent capability manifest:
agent-capability.json
- OpenClaw skill metadata:
openclaw/skill.json

All stdio MCP clients use the same command:

- Command:npx
- Args:-y @sequenzy/mcp
- Required env:SEQUENZY_API_KEY=seq_user_your_key_here

- SEQUENZY_API_URL- Sequenzy API base URL. Defaults tohttps://api.sequenzy.com.
- SEQUENZY_APP_URL- Sequenzy dashboard base URL used by app URL helpers. Defaults tohttps://sequenzy.com.

- macOS:~/Library/Application Support/Claude/claude_desktop_config.json
- Windows:%APPDATA%\Claude\claude_desktop_config.json

{ "mcpServers": { "sequenzy": { "command": "npx", "args": ["-y", "@sequenzy/mcp"], "env": { "SEQUENZY_API_KEY": "seq_user_your_key_here" } } } }

Restart Claude Desktop after editing the config.

claude mcp add --scope user --env=SEQUENZY_API_KEY=seq_user_your_key_here sequenzy -- npx -y @sequenzy/mcp

On native Windows, wrapnpxwithcmd /c:

claude mcp add --scope user --env=SEQUENZY_API_KEY=seq_user_your_key_here sequenzy -- cmd /c npx -y @sequenzy/mcp

For a shared project config, use.mcp.json:

{ "mcpServers": { "sequenzy": { "command": "npx", "args": ["-y", "@sequenzy/mcp"], "env": { "SEQUENZY_API_KEY": "seq_user_your_key_here" } } } }
codex mcp add sequenzy --env SEQUENZY_API_KEY=seq_user_your_key_here -- npx -y @sequenzy/mcp codex mcp list

Manual Codex config 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"
{ "mcpServers": { "sequenzy": { "command": "npx", "args": ["-y", "@sequenzy/mcp"], "env": { "SEQUENZY_API_KEY": "seq_user_your_key_here" } } } }

- macOS:~/Library/Application Support/Windsurf/mcp.json
- Windows:%APPDATA%\Windsurf\mcp.json

{ "servers": { "sequenzy": { "type": "stdio", "command": "npx", "args": ["-y", "@sequenzy/mcp"], "env": { "SEQUENZY_API_KEY": "seq_user_your_key_here" } } } }

For OpenClaw, Hermes, and other MCP-compatible clients, point the client atnpx -y @sequenzy/mcpand setSEQUENZY_API_KEY.
- Openthe Sequenzy dashboard.
- Use theMCPsetup flow to create a personal key, or openSettings -> API Keysto create a company key.
- Choose a permission preset or the exact custom scopes the integration needs.
- Add the key to your MCP client config.

Personal keys start withseq_user_. You can revoke them any time in the dashboard.

Company keys can also be cleaned up without exposing secrets. Calllist_api_keysto compare the key ID, name, non-secret prefix, permissions, last-use timestamp, andisCurrentmarker, then pass the exact ID torevoke_api_key.delete_api_keyis a compatibility alias for the same permanent operation. List and revoke responses never contain the plain key or stored key hash.

Recover from missing API key permissions

If a tool reports a missing scope such ascampaigns:readortemplates:write, callget_account. ItsapiKeyPermissionsfield lists the current key identity and type, scopes, common missing marketing read scopes, and a directmanageUrl. Personal keys open Account API Keys; company keys open the selected workspace's API Keys settings. If the key does not includeaccount:read, open theSequenzy dashboarddirectly and choose the matching API Keys page.

Permissions are editable in place, so openmanageUrl, update the active key, and retry the failed tool without replacing the credential or restarting the client. An agent using a company key withapi_keys:managecan instead callupdate_api_key; personal keys must be edited on the account-level page because that tool only manages company keys. Itsscopesandpresetinputs replace the whole permission selection rather than merging, so preserve every existing scope that is still needed. Hosted OAuth connections can alternatively disconnect and reauthorize with broader permissions.

When the active key itself lacksapi_keys:manage, callrequest_api_key_handoffinstead of retryingupdate_api_key. It requiresaccount:readand returns an owner-review URL with the requested key name, permissions, and optional predecessor prefilled. It never creates or returns a key; the workspace owner reviews the form, creates the replacement in the browser, and copies it into the client. PassreplaceApiKeyId: "current"to offer revocation of the active key after the replacement is created. If the active key also lacksaccount:read, use the dashboard directly.

This server currently exposes 224 MCP tools.

get_sending_statuskeeps the Postgres-backed pause state, review gates, and remediation available when sender-health analytics are temporarily unavailable; in that degraded casesenderHealthisnull.

For Supabase,sync_integrationreuses the project, schema, table, list selection, and consent mappings saved in the dashboard. It cannot target an arbitrary table. Run it after installing the live database trigger to import users who existed before the trigger was installed, then pollget_integrationandlist_integration_activityfor progress and row-level outcomes.

set_integration_sync_enabledcontrols bulk imports and backfills only; it does not stop a provider's live webhook from creating contacts. Useset_integration_list_targetingto choose their future list memberships:nullfollows workspace defaults,[]joins no list, and a populated array targets those lists. The change is not retroactive and never removes existing memberships. Supabase, Stripe, Shopify, Wix, and Webflow support this control.

For PostHog,sync_integrationrestarts the event-history import from the beginning with the stored personal API key. Imported events are deduplicated, so retrying a failed import does not create duplicates.

For Segment,connect_integrationcan optionally import recent event history from Unify after the live webhook is connected. The import walks existing contacts through the Profile API, covers the API's most recent 14 days, skips contacts without a matching profile, and safely deduplicates retries and live webhook overlap. New connections skip automatic page/screen calls unless those names are explicitly allowlisted. Segment webhook secrets must be 16-153 UTF-8 bytes. Usesync_integrationto retry with the saved credentials.

Callget_event_schemabefore writing an{{event.}}merge tag or an event property filter. OmiteventNameto list documented built-in events; provide an event name to receive provider-specific example payloads and property paths, and optionally filter byprovider. Custom event names remain valid even when the result reportsdocumented: false; that only means no reference sample is published. Use integration activity or sequence enrollments for actual delivery data because this tool returns static reference data.

For a new sending domain, calladd_sending_domain, publish the DNS records in the returnedwebsite.dnsRecords, wait for DNS propagation, and then callverify_sending_domain. Publish every returned record instead of assuming a fixed provider or record count: unified domains include required DMARC, while legacy domains can return Amazon SES MAIL FROM and inbound-reply records. If verification is attempted before creation, the error points back toadd_sending_domainwith the requested domain.

For Shopify, callget_integration_pixelbefore relying on product views, cart activity, or browse-abandonment triggers. The result is read live from Shopify because merchants can remove the pixel independently. Ifpixel.healthyis false,dependentEventsnames the triggers that cannot arrive; callactivate_integration_pixelto install or repoint the pixel. Activation is idempotent, and events begin on the next storefront visit rather than being backfilled.

New companies start with no sync rules. The inherited preset remains available for SaaS/ecommerce companies by passingnulltoupdate_sync_rules; services and consulting companies should normally keep[]or define explicit rules.

Uselist_sender_profilesto find the profile ID, then callupdate_sender_profileto change only its display name. Passtype: "reply"for a reply-to profile; sender is the default. The address, sending domain, and account-wide default From/Reply-To selections remain unchanged. Renaming requires thecompanies:managescope.

After a product delivery file is attached, matching purchase events includedownload.urlanddownload.name, so purchase-triggered emails can use merge tags like{{event.download.url}}.

For Stripe products,list_productsreturns every active price as a variant, with the Stripe price ID invariantId. Use that ID to target an exact price in a purchase sequence even when it is not the product's default price.

The tool accepts PNG, JPEG, GIF, and WebP images up to 5MB. Local stdio clients can passfilePath. Hosted/remote clients that can access attachment bytes can passimageBase64withfilename. ProvidealtTextfor accessibility, then usedisplayWidthPercent,cropHeight,objectFit(coverorcontain), andalignto standardize screenshot presentation. The returnedimageBlockcan be copied directly into the block array accepted by campaign, sequence, template, and transactional-email tools.

Authenticated image bytes are always uploaded to the origin configured bySEQUENZY_API_URL, even if a reverse proxy returns an equivalent upload URL under another host. API credentials are never forwarded to that alternate origin.

{ "filePath": "/Users/me/Desktop/product-results.png", "altText": "Product results dashboard", "displayWidthPercent": 100, "cropHeight": 320, "objectFit": "cover", "align": "center" }
{ "emails": ["ada@example.com", "grace@example.com"], "duplicateStrategy": "skip", "enrollInSequences": false, "optInMode": "default" }

Send at most 500 emails per request. Standard API rate limits still apply: 100 requests per minute per API key and 20 requests per second burst. For CSV-driven CLI imports, accepted email headers includeemail,e-mail,email address, andmail; if no recognized header exists, the CLI reads the first column.

Segment filters support attributes, events, saved segment membership, engagement events, Stripe product purchase rules, and commerce product purchase rules. UsefilterJoinOperator: "or"for match-any segments, or pass a v2rootgroup for nested logic.

Each segment filter field validates its own operators:

- status,segment:is,is_not
- tag:contains,not_contains,is_empty,is_not_empty
- email:contains,not_contains
- emailProvider,list:is,is_not,is_empty,is_not_empty
- firstName,lastName:contains,not_contains,is_empty,is_not_empty
- added:less_than,more_than
- attribute:is,is_not,is_empty,is_not_empty,gte,lte,gt,lt,contains,not_contains
- event, email engagement fields:is,is_not,at_least,less_than_count
- emailBounced: also supportsis_temporary_bounce,is_permanent_bounce
- stripeProduct:is,is_not,at_least,less_than_count
- stripeCurrentProduct,stripeTrialProduct:is,is_not,gte,lte,gt,lt
- commerceProduct:is,is_not,at_least,less_than_count

{ "field": "stripeProduct", "operator": "is", "value": "prod_pro" } { "field": "stripeProduct", "operator": "is_not", "value": "prod_pro" } { "field": "stripeProduct", "operator": "at_least", "value": "prod_pro:3" } { "field": "stripeProduct", "operator": "less_than_count", "value": "prod_pro:3" }

Commerce product filters match products purchased through commerce orders. Values can beprovider:productIdfor provider-scoped IDs (shopify,woocommerce, orapi), a bare product ID to match any provider, orprovider:productId:countfor threshold operators:

{ "field": "commerceProduct", "operator": "is", "value": "api:starter-kit" } { "field": "commerceProduct", "operator": "at_least", "value": "shopify:42:2" }

Engagement fields such asemailSent,emailDelivered,emailOpened,emailClicked,emailBounced, andemailComplainedaccept rolling windows like7d,30d,90d,180d, orall. Withat_leastandless_than_count, usecount:timeRange, such as10:30dor10:all. Presence operators can instead use a campaign scope likecampaign:cmp_123; campaign scopes cannot be combined with count operators.

Requires the Meta Ads integration to be connected in the Sequenzy dashboard (Settings -> Integrations).create_audience_syncaccepts an existing segment (segmentId) or a ready-made template (predefinedSegmentId, for examplezero-ltv,no-purchase-1y,recent-buyers,high-spenders-ecom,non-buyers,engaged) - the template segment is created automatically on first use, and the first upload runs immediately.

list_templatesreturns 50 email bodies newest first by default and accepts alimitup to 100. Advanceoffsetbypagination.countwhilepagination.hasMoreis true;pagination.totalreports the full matching count, including campaign and transactional-email bodies.

For net-new content requested in natural language, passpromptso Sequenzy generates branded native blocks server-side. Useblocksonly for finished caller-supplied Sequenzy content, and usehtmlonly when preserving supplied or explicitly requested markup.prompt,blocks, andhtmlare mutually exclusive;styleandtoneare valid only withprompt.

Useset_template_localizationwhen translated copy comes from your own localization workflow. It requires an enabled non-primarylocale, a localizedsubject, and exactly one ofhtmlorblocks. Usesync_template_localizationsto ask Sequenzy to translate selected locales; omitlocalesto sync every enabled non-primary locale. Explicit sync works even when automatic on-save localization is disabled.

Useget_ab_testto copy the effectivesettingsobject and discover variant IDs before editing. Campaign settings usetestPercentage,testDurationMinutes, andwinnerCriteria; sequence settings usetestType,winnerThreshold, andwinnerCriteria. The legacy sequence valuestestPercentage: 100andtestDurationMinutes: 0are compatibility sentinels, not runtime settings.select_ab_test_winnerapplies only to a campaign test that is currently testing and immediately queues the winning variant for the remaining audience.update_ab_testchanges the appropriate settings model and requiresconfirmLiveChange: truewhen sequence settings affect an active or already-used test. Variant updates accept eitherhtmlorblocks, not both.

create_ab_testaccepts exactly one ofcampaignIdorautomationNodeId; the latter requires one to four extra variants and converts a sequence email node intoaction_ab_test. An explicit sequencewinnerCriteriaoverrides thetestTypedefault, so content variants can still be judged by opens. PassconfirmLiveChange: truewhen converting a node in an active sequence. Together with control A, an A/B test supports at most five variants. Sequence variants receive independent email templates and can be edited, added, or removed while the test is a draft; when the parent sequence is active,update_ab_test_variant,add_ab_test_variant, anddelete_ab_test_variantalso requireconfirmLiveChange: truebecause they immediately change the live rotation.

Prompt-created campaigns are generated and persisted in one API request and remain drafts. UsetemplateId,blocks, orhtmlonly when copying or preserving existing content rather than asking the agent to author it. Omit all content fields to create an empty draft for later editing.

To deliver at the same wall-clock time in every recipient's own timezone, callschedule_campaignwithsendInRecipientTimezone: trueand an IANAscheduledTimezonethat identifies the wall clock represented byscheduledAt. Contacts without a stored timezone receive the campaign at thescheduledAtinstant. This mode cannot be combined with recurring or spread delivery.

For campaign- and sequence-level identities,fromEmailplusfromNameselects the sender identity with that display name on the mailbox, creating it when needed without renaming other same-address identities. A Reply-To address instead has one company-wide saved name: whenreplyToNamediffers from that name, the saved name is kept and the successful response includes recovery guidance inwarnings.

Agents should pass a caller-ownedidempotencyKeytosend_emailbefore the first attempt and reuse it for every retry of that same logical email. Sequenzy returns the originalemailSendIdfor 14 days instead of creating another delivery. Reusing the key with different send arguments is rejected, so do not generate a fresh key inside a retry loop.

Core block shapes are{ "type": "heading", "content": "Title", "level": 1 },{ "type": "text", "content": "<p>Copy</p>" },{ "type": "button", "text": "Book a call", "url": "https://example.com", "variant": "primary" }, and{ "type": "image", "src": "https://...", "alt": "Description", "width": 100, "widthType": "percent" }. Buttons also acceptcontentas an alias fortextand default to theprimaryvariant. ImagewidthTypeacceptspercentorpx.

Rawhtmlis stored as one opaque block. It preserves supplied markup but does not add a company logo, native branded sections, or theme-driven block design. Usepromptfor a new branded draft orblocksfor editor-native design; MCP authoring results include a warning when raw HTML is used.

Useupdate_companywithfromEmailand/orreplyToto set account-wide defaults.fromEmailmust use a configured, verified sending domain;replyTomay be any valid mailbox.create_campaign,update_campaign,create_sequence, andupdate_sequenceaccept the same direct-address fields for resource-specific overrides and create the backing profile when needed. SendfromNameorreplyToNamealone to rename the existing default profile without changing its address. When an address has multiple display names, usesenderProfileIdorreplyProfileIdfromlist_sender_profilesto select the exact profile to make default and rename.

update_companyalso manages the company's default email theme throughemailTheme(presetId,colors,typography,layout). Theme updates are partial - omitted fields keep their current value (or the preset default) and numeric values are clamped to supported ranges. PassemailTheme: nullto reset the company to the platform default theme. Layout settings can control the sharedbaseRadiusand a separatebuttonRadius.

Reply tracking is available on the same company tools. UsereplyTrackingEnabled,replyTrackingDomainMode(sequenzyorcustom), andforwardReplieswithupdate_company. Company reads also return the current read-onlyreplyRetentionDaysvalue.

{ "type": "poll", "variant": "options", "question": "What did you think of this email?", "options": [ { "label": "Loved it", "value": "loved" }, { "label": "Not for me", "value": "not_for_me" } ], "attributeKey": "email_feedback" }

Poll blocks also support brand-specific styling.accentColorrecolors every appearance, including"brutal";optionRadiussets answer-button corners in pixels (0is square), independently of the container'sstyles.borderRadius; andquestionColorrecolors only the question.fontFamilyapplies to the poll. Use theoptionFontSize,optionFontWeight,optionLetterSpacing, andoptionTextTransformfields for answers, or the matchingquestionfields for the question. Sizes and spacing are pixels, weights range from 100 to 900, and text transforms are"none"or"uppercase".

For Astro, Hugo, Jekyll, Cloudflare Pages, Netlify, GitHub Pages, or any other static site, calllist_forms, usecreate_formif a suitable form does not exist, then callget_form_embed. The returned opaqueformIdis the public capability: lists, tags, duplicate behavior, and success handling remain server-side, so the deployed browser code never contains a Sequenzy API key. Generated native and standalone markup includes "Powered by Sequenzy" for free workspaces; paid workspaces receive unbranded markup. The API resolves that entitlement server-side, so callers should use the returned snippet unchanged. When updating a form, omitted fields remain unchanged and theme fields merge into the current theme. Pass an emptytagIdsarray to clear tags or an emptyredirectUrlto restore confirmation-message behavior. Theblocksfield is a complete replacement, so read the current content withlist_formsfirst and retain exactly one required email field and one submit button. Add custom inputs asform-fieldblocks with a supportedfieldType; select, radio, and checkbox fields require options, while hidden defaults are enforced server-side.

Popup deployment uses one public script tag; API keys, audience settings, triggering, targeting, scheduling, and frequency rules remain server-side. Popups capture into every list by default unlesslistIdsis provided. When updating blocks, read the popup first and send the complete replacement array, retaining exactly one required email field and one submit button. Settingstatustodraftstops a popup without invalidating its existing embed code.

Landing page content uses Sequenzy's editor-compatible JSON schema withversion,template,seo,theme, andblocks. SEO settings includefaviconUrlandhideFromSearchEngines; hidden pages publish anoindexdirective. Blocks render in slot order:top,hero,form,body, thenfooter; usetopfor a full-width announcement or banner above the hero. Button and pricing CTA URLs accept external HTTPS destinations or in-page anchors such as#form,#section-<sectionId>,#block-<blockId>, and#top. Settheme.sectionAnimationtonone,fade,slide-up, orzoom-in, withtheme.sectionAnimationSpeedset toslow,normal, orfast, to control published scroll reveals. Custom landing page domains require a CNAME record pointing topages.sequenzydns.com; callupdate_landing_page_domain_settingswithverify: trueafter DNS changes propagate.

For a custom event trigger, the successfulcreate_sequenceresult includeseventTrackingCodeand a structuredeventTrackingobject. The object contains the event endpoint, identity and payload contract, any property path required bymatching_fieldenrollment, normalized triggerpropertyFilters, an example payload,examplePayloadMatchesFilters, the direct event API docs URL, and ready-to-use arguments forget_integration_guide. If the match status is false, adapt the example usingexamplePayloadNoteand the payload contract. Add this event feed and verify its required properties before enabling the draft sequence.

{ "type": "create_discount", "discount": { "provider": "shopify", "discountType": "percent", "percentOff": 20, "duration": "once", "appliesToAllPlans": true, "maxRedemptions": 1, "codePrefix": "WINBACK" } }
No reviews yet — be the first

Sign in to leave a review

Use Google, GitHub, or an email account so ratings stay tied to real people.

Email sign in

No reviews posted yet.