Sequenzy MCP

官方

面向SaaS的电子邮件营销工具

你可以用 Sequenzy MCP 做什么?

  • 管理订阅者和细分 — 让助手创建列表、应用标签、核对批量标签,或通过 create_list 等工具测试合成事件。
  • 构建并发送营销活动 — 使用 create_campaign 和 send_campaign 等工具起草、安排、预览或发送电子邮件营销活动,包括已解析的受众预览和转化目标。
  • 创建落地页和表单 — 设计列表范围的注册表单和具有响应式块布局的落地页,然后发布它们或通过 create_landing_page 获取静态站点嵌入代码。
  • 同步受众到 Meta — 将动态细分推送到 Meta 自定义受众,用于 Facebook 和 Instagram 再营销。
  • 管理序列和自动化 — 使用 create_sequence 等工具创建具有进入触发条件、停止条件和向审阅者发送测试邮件的多步骤电子邮件序列。
  • 监控送达率和发送状态 — 使用 get_sending_status 和 resume_sending 诊断暂停的发送、检查退信/投诉抑制,并恢复符合条件的硬退信暂停。

文档

Sequenzy MCP 服务器

适用于 Sequenzy 的官方 MCP 服务器,这是一个由 AI 驱动的电子邮件营销平台。

将 Sequenzy 连接到 Claude Desktop、Claude Code、Codex、Cursor、Windsurf、VS Code Copilot、OpenClaw 及其他 MCP 客户端,让您的 AI 助手能够通过结构化工具管理电子邮件运营,而无需手写 API 调用。

您可以做什么

  • 管理订阅者、标签、列表和动态细分,包括批量标签对账和合成事件测试。
  • 将细分同步到 Meta 自定义受众,用于 Facebook 和 Instagram 再营销。
  • 管理产品并为购买自动化附加数字交付文件。
  • 上传托管的电子邮件图片,支持替代文本和可复用的响应式裁剪设置。
  • 起草、更新、安排和检查营销活动,包括解析后的受众预览、持久化的转化目标和发件人、回复地址、抄送和密送身份。
  • 将营销活动、序列步骤和模板渲染为精确的电子邮件安全 HTML,无需实际发送。
  • 在电子邮件中添加一键式投票和 NPS 调查块,并检查营销活动响应摘要。
  • 创建和编辑电子邮件序列,包括多列表/标签触发器、进入受众和属性过滤的停止条件、发送身份覆盖、现有图谱重构,以及直接向内部审阅者发送步骤测试。
  • 取消、暂停、恢复、复制或删除营销活动,并将联系人纳入序列。
  • 管理事务性电子邮件模板,并向共享的收件人、抄送和密送收件人列表发送事务性电子邮件。
  • 提供本地化模板变体,或为已启用的语言环境排队 AI 翻译。
  • 创建、预览、编辑、发布、取消发布和删除落地页。
  • 创建列表范围的已保存注册表单,支持响应式堆叠、行、网格和单图片覆盖块组(包括前景间距控制),然后返回客户端安全的静态站点嵌入。
  • 创建、定位、发布、复制和部署已保存的注册弹窗,使用相同的递归块布局。
  • 为已发布的落地页连接和验证自定义域名。
  • 管理团队邀请、收件箱对话和出站 Webhook 端点。
  • 生成电子邮件文案、主题行和多步骤序列。
  • 检查分析、订阅者活动、送达健康状况、公司级发送暂停、集成、已发布事件负载模式、发送身份、跟踪设置和仪表板 URL。
  • 检查工作区是否显示“通过 Sequenzy 发送”,为什么所有者订阅会或不会移除该标记,并打开规范的订阅页面以进行升级或续订。权限变更适用于现有实时序列的未来发送,无需编辑其块。
  • 诊断发送暂停的原因,并在确认列表清理后恢复符合条件的硬退回暂停。
  • 检查精确收件人的退回、投诉和电子邮件卫生抑制,并清理符合条件的过期退回,而不会暴露共享的 SES 抑制列表。
  • 配置公司产品信息、账户范围的发送身份默认值、重命名单个发件人和回复配置文件、管理发件人域名,并检查常见框架的集成示例。

每个已发布的 MCP 工具都包含显式的 readOnlyHint、destructiveHint 和 openWorldHint 注解,以便兼容的客户端能够显示准确的工具使用提示。工具还发布 outputSchema 定义并返回 structuredContent,为客户端和模型提供机器可读的结果形状,以便进行后续调用。

快速设置

最简单的设置路径是 Sequenzy 向导:

npx @sequenzy/setup

该向导会打开浏览器登录流程,创建个人 API 密钥,检测支持的 AI 客户端,并在可能的情况下自动配置它们。

托管远程 MCP

对于支持 Streamable HTTP MCP 的客户端,请使用 Sequenzy 的托管端点,而不是运行本地 stdio 进程:

https://api.sequenzy.com/v1/mcp

ChatGPT 和 OpenAI 插件目录使用经过审核的托管界面:

https://api.sequenzy.com/v1/mcp/openai

该界面共享相同的实现,并保留标准工具集,但以下六个操作除外:connect_integration、create_api_key、create_webhook、list_webhook_deliveries、replay_webhook_delivery 和 rotate_sequence_inbound_webhook_secret。反馈功能仍然可用,但使用简化的模式,用于泛化的、明确请求的产品反馈。

远程客户端应在支持时通过 Sequenzy OAuth 流程进行身份验证。本地和自动化客户端仍可使用下面的 stdio 包,配合 SEQUENZY_API_KEY。

托管端点和 stdio 包支持 MCP 规范 2026-07-28,同时保持与 2025 时代客户端的兼容性。现代 HTTP 客户端使用按请求发现和方法头;现有客户端通过相同的端点和包命令继续工作。

机器可读的发现文件:

数据和隐私

Sequenzy 仅向 MCP 客户端发送用户要求运行的工具所需的数据,范围限定在所选工作区以及授予该客户端的密钥或 OAuth 权限范围内。根据所请求的工具,这可能包括工作区名称和 ID;订阅者联系信息、同意、受众、属性、事件、互动、回复、调查和商业数据;营销活动和自动化内容;送达分析;以及集成或 Webhook 状态。请参阅 Sequenzy 隐私政策 了解完整的类别、目的、接收方、保留期限和用户控制。

请勿使用开放式自定义属性、事件、备注、表单、Webhook 示例、电子邮件变量或反馈来提交支付卡数据、健康或医疗数据、政府标识符、生物识别或基因数据、身份验证凭据、敏感人口统计数据或精确地理位置。

OpenAI 审核的路径在相关的开放式输入上声明并强制执行这些限制,包括嵌套属性路径(如 profile.ssn)、坐标对(如 lat/lng)以及带标签的散文(如 Religion: ... 或 GPS coordinates: ...)。它会拒绝任何参数中包含凭据的 URL,无论凭据位于用户信息、路径、查询还是片段中,例如带有访问令牌或 URL 签名的表单或弹窗 redirectUrl。合并标签中的受限属性选择器会被拒绝,但不会阻止关于同一主题的普通创作文案。在此界面上,render_email 接受示例数据或经过策略检查的内联 subscriber,但不接受 subscriberId,因此无法解析未经检查的存储自定义属性。其结果会移除受限字段、原始 API 错误、调试负载、内部请求/跟踪/会话标识符、不必要的账户或凭据标识符、存储的带凭据 URL 以及入站 Webhook URL。标准远程 MCP 和本地 stdio 包保留面向受信任客户端的完整契约,包括基于凭据的集成设置、一次性 API 密钥和 Webhook 密钥、入站 Webhook URL 以及详细的 API 错误。当密钥应保持在 AI 对话之外时,请优先使用仪表板或本地 CLI。submit_feedback 仅在用户明确要求时运行;其 OpenAI 模式仅限于泛化消息、类别和可选的工作流上下文,并且该路径会拒绝包含电子邮件地址或资源 ID 的反馈文本。

审核界面所保证的内容是有边界的。它通过形状识别受限数据:任何嵌套深度下的英文字段名词语(如 passport_id、user.ssn 或 api_secret)、带标签的散文(如 Diagnosis: ...)、已知的凭据形状、十进制坐标对以及任何字符串(包括 HTML)中的带凭据 URL。它不解释未标记的散文、非英文字段名或客户端故意混淆的值;这些仍受上述使用限制的约束,而非过滤器的约束。

手动设置

所有 stdio MCP 客户端使用相同的命令:

  • 命令:npx
  • 参数:-y @sequenzy/mcp
  • 必需环境变量:SEQUENZY_API_KEY=seq_user_your_key_here

可选环境变量:

  • SEQUENZY_API_URL - Sequenzy API 基础 URL。默认为 https://api.sequenzy.com。
  • SEQUENZY_APP_URL - 应用 URL 辅助函数使用的 Sequenzy 仪表板基础 URL。默认为 https://sequenzy.com。

Claude Desktop

将此添加到您的 Claude Desktop 配置中:

  • 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"
      }
    }
  }
}

编辑配置后重启 Claude Desktop。

Claude Code

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

在原生 Windows 上,使用 cmd /c 包裹 npx:

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

对于共享项目配置,请使用 .mcp.json:

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

Codex

codex mcp add sequenzy --env SEQUENZY_API_KEY=seq_user_your_key_here -- npx -y @sequenzy/mcp
codex mcp list

在 ~/.codex/config.toml 中手动配置 Codex:

[mcp_servers.sequenzy]
command = "npx"
args = ["-y", "@sequenzy/mcp"]

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

Cursor

从 Cursor Marketplace 安装 Sequenzy,以通过 Sequenzy OAuth 建立托管连接。该插件连接到:

https://api.sequenzy.com/v1/mcp

安装后,完成浏览器登录流程。Cursor 的代理随后可以在聊天中使用 Sequenzy 工具,包括在选定 Grok 作为模型时。

如需手动本地 stdio 设置,请将其添加到 ~/.cursor/mcp.json:

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

Windsurf

使用与 Cursor 相同的 JSON 结构。

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

VS Code Copilot

VS Code 使用 servers 对象:

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

其他 MCP 客户端

对于 OpenClaw、Hermes 和其他兼容 MCP 的客户端,请将客户端指向 npx -y @sequenzy/mcp 并设置 SEQUENZY_API_KEY。

获取 API 密钥

  1. 打开 Sequenzy 仪表板。
  2. 使用 MCP 设置流程创建个人密钥,或打开 设置 -> API 密钥 创建公司密钥。
  3. 选择权限预设或集成所需的确切自定义范围。
  4. 将密钥添加到您的 MCP 客户端配置中。

个人密钥以 seq_user_ 开头。您可以随时在仪表板中撤销它们。

公司密钥也可以在不暴露密钥的情况下进行清理。调用 list_api_keys 比较密钥 ID、名称、非密钥前缀、权限、上次使用时间戳和 isCurrent 标记,然后将确切 ID 传递给 revoke_api_key。delete_api_key 是同一永久操作的兼容别名。列表和撤销响应永远不会包含明文密钥或存储的密钥哈希。

从缺失的 API 密钥权限中恢复

如果工具报告缺少范围(如 campaigns:read 或 templates:write),请调用 get_account。其 apiKeyPermissions 字段列出当前密钥身份和类型、范围、常见的缺失营销读取范围以及直接的 manageUrl。OpenAI 审核的路径返回相同的权限,但不包含用户的账户 ID 或活动密钥的身份。个人密钥打开账户 API 密钥;公司密钥打开所选工作区的 API 密钥设置。如果密钥不包含 account:read,请直接打开 Sequenzy 仪表板 并选择匹配的 API 密钥页面。

权限可以就地编辑,因此打开 manageUrl。对于公司密钥,请使用 list_api_keys 及其 isCurrent 标志在编辑前识别活动密钥,然后重试失败的工具,无需替换凭据或重启客户端。使用具有 api_keys:manage 的公司密钥的代理可以改为调用 update_api_key;个人密钥必须在账户级页面上编辑,因为该工具仅管理公司密钥。其 scopes 和 preset 输入会替换整个权限选择而不是合并,因此请保留仍然需要的每个现有范围。托管的 OAuth 连接也可以选择断开连接并以更广泛的权限重新授权。 当活动密钥本身缺少 api_keys:manage 时,请调用 request_api_key_handoff,而不是重试 update_api_key。该操作需要 account:read,并返回一个所有者审核 URL,其中预填了请求的密钥名称、权限以及可选的前任密钥。它绝不会创建或返回密钥;工作区所有者会审核表单、在浏览器中创建替换密钥,并将其复制到客户端中。传入 replaceApiKeyId: "current" 可在替换密钥创建后提供撤销活动密钥的选项。如果活动密钥也缺少 account:read,请直接使用仪表板。

默认的 更安全的代理访问 预设包含 lists:write 和 tags:write,因此代理可以创建和更新列表及标签定义,并且包含 subscribers:tag 以将标签应用于现有联系人。它还包含 ab_tests:read、ab_tests:write 和 sequences:write,因此代理可以审核和编辑序列 A/B 变体文案,包括购物车和浏览放弃消息。它不包含 subscribers:write,因此无法将联系人添加到列表或从列表中移除。删除列表或标签仍需要匹配的 lists:delete 或 tags:delete 权限。

AI 起草预设包含 subscribers:write,因此起草代理可以构建列表以及创建列表。应用 listIds 的导入还需要 lists:write;序列注册或双重选择加入投递额外需要 automations:trigger。

工具

标准界面当前公开了 243 个 MCP 工具。经 OpenAI 审核的界面公开了 237 个;仅省略了上面列出的六个操作。

工具会拒绝它们未声明的参数,而不是静默忽略。错误信息会指出不支持的字段、列出支持的参数,并为常见错误(如虚构的订阅者过滤器或排序选项)提供有针对性的指导。

账户、公司、设置

工具描述
get_account获取账户信息、可用公司、当前密钥权限以及 API 密钥管理 URL。
select_company为后续工具调用设置当前活跃公司。
get_app_urls为营销活动、落地页、自动化流程、邮件、设置、订阅管理、域名和已发送邮件详情构建仪表盘 URL。settingsTab: "billing" 解析为账户 -> 订阅。
create_company创建新公司或品牌。
get_company读取公司详情、产品信息、品牌上下文、本地化、回复跟踪设置、当前发件人/回复地址默认值,以及有效的只读 emailBranding 权限(含计划/状态原因和订阅 URL);STO 被明确标识为仅限营销活动。
update_company编辑产品信息、品牌上下文、邮件主题、回复跟踪以及账户级发件人/回复地址配置文件默认值或名称。
get_sync_rules读取公司的事件到标签规则,以及是否使用继承的平台预设。
update_sync_rules替换所有同步规则;传入 [] 以禁用它们,或传入 null 以选择 SaaS/电商平台预设。
get_shopify_automation_settings读取已连接 Shopify 商店的浏览放弃、购物车放弃和降价设置。
update_shopify_automation_settings部分更新 Shopify 自动化设置,或将单个部分重置为其平台默认值。
create_api_key创建公司 API 密钥,并在标准 MCP 上返回其一次性密钥;在 OpenAI 审核路由中省略。
request_api_key_handoff当活跃密钥无法自行管理 API 密钥时,准备一个需所有者审核的创建/轮换 URL。
list_api_keys将公司 API 密钥列为非机密元数据,以便安全识别和清理。
update_api_key重命名公司 API 密钥,或替换其权限预设或作用域,而不更改密钥值。
revoke_api_key在使用 list_api_keys 检查后,按 ID 永久撤销一个确切的公司 API 密钥。
delete_api_keyrevoke_api_key 的兼容别名。
list_websites列出发送域名及其存储的聚合、SPF、DKIM 和 MAIL FROM 状态。
add_sending_domain添加发送域名并返回其队列特定的 DNS 设置记录。
add_websiteadd_sending_domain 的兼容别名。
check_website读取发送域名存储的 SPF、DKIM、MAIL FROM 和聚合验证详情。
verify_sending_domain运行一次全新的发送域名 DNS/提供商验证,并返回当前状态和诊断信息。
list_integrations列出已连接的集成及其连接和同步健康状态,不返回凭据。
get_sending_status诊断活跃、暂停或挂起的发送状态,包括执行分母、审核门控和补救步骤。
resume_sending在明确确认列表已清理后,恢复符合条件的硬退信暂停。
get_tracking_settings读取账户级和事务性 API 的打开/点击默认值、退订、归因、UTM、点击域名、回复跟踪和双重选择加入设置。
update_tracking_settings更新账户级和事务性 API 的跟踪默认值、归因、UTM 和账户级双重选择加入。
get_integration_guide获取框架特定的集成示例。
get_integration检查一个已连接的集成、其事件接线、列表定向、近期活动和推荐。
list_integration_capabilities比较提供商能力,无论它们是否已连接。
connect_integration在标准 MCP 上连接受支持的 API 密钥或 Webhook 密钥提供商,包括托管的 Lemon Squeezy Webhook、仅出站的 Attio,以及可选的 PostHog/Segment 历史导入;在 OpenAI 审核路由中省略。
get_event_schema按提供商检查已发布的事件负载示例、属性路径、类型和合并标签。
list_integration_activity读取保留的集成特定 Webhook 和同步活动日志。
set_integration_sync_enabled启用或禁用批量导入和回填,同时保持实时 Webhook 连接。
set_integration_list_targeting选择由受支持集成创建的联系人,在未来的提供商写入时加入哪些列表。
sync_integration使用保存的集成配置,排队支付收入、Supabase 用户或 PostHog/Segment 事件历史导入。
get_integration_pixel读取 Shopify 的实时像素/配置状态,并区分已确认的暗事件与未知读取。
activate_integration_pixel安装或重新指向 Shopify 的店面像素;当它已是最新时,操作是幂等的。
list_web_tracking_keys列出可发布的网站跟踪密钥、来源限制、使用状态和安装代码片段。
get_web_tracking_key获取一个网站跟踪密钥及其精确的安装代码片段和接收端点。
create_web_tracking_key为非 Shopify 店面或网站创建可发布的跟踪密钥。
update_web_tracking_key重命名、限制、撤销或重新启用网站跟踪密钥。
delete_web_tracking_key在移除其代码片段后,永久删除网站跟踪密钥。
list_sender_profiles列出发件人和回复地址配置文件、默认设置以及发送域就绪状态。
update_sender_profile重命名一个发件人或回复地址配置文件,而不更改账户默认设置。
delete_sender_profile永久删除未使用的发件人配置文件,并针对活跃发送表面和最后一个剩余发件人提供保护。
get_notification_preferences读取当前用户按公司划分的账户通知设置和支持的模式,包括周一每周报告。
update_notification_preferences更新当前用户的账户通知投递模式,包括每周报告退出选项,而不影响团队成员。
render_email渲染最终电子邮件安全的 HTML 并诊断未解决的合并标签,包括被默认值隐藏的拼写错误。经 OpenAI 审核的路由接受示例数据或经策略检查的内联订阅者,而不接受存储的订阅者 ID。
get_sending_status 在发送方健康分析暂时不可用时,仍保留基于 Postgres 的暂停状态、审核门控和补救措施;在该降级场景下,senderHealth 为 null。

render_email 返回 unresolvedMergeTags,以便调用方能够区分未知名称与被识别但仅对被预览联系人而言为空的标签。即使 default 过滤器提供了文本,未知名称也会被报告:例如,{{ subscriber.frstName | default: "there" }} 会为每个联系人生成合理的问候语,同时绕过存储的名字。当某个被识别名称对某个联系人为空但使用了其默认值时,不会报告该名称。OpenAI 审核路由拒绝合并标签中受限的自定义属性选择器。它还省略了 subscriberId 参数;请使用经过策略检查的内联 subscriber,或在示例预览中省略订阅者数据。

要渲染一个 nodeType 为 action_ab_test 的序列步骤,请将该步骤的 sequenceId 和 nodeId 与来自 get_sequence.sequence.emails[].abTest.variants 的 variantId 一起传递。这些步骤没有自己的电子邮件,因此变体是必需的;读取和渲染其竞争文案也需要 ab_tests:read 作用域。

对于 Supabase,sync_integration 会复用仪表板中保存的项目、模式、表、列表选择和同意映射。它无法针对任意表。请在安装实时数据库触发器后运行它,以导入在触发器安装之前已存在的用户,然后轮询 get_integration 和 list_integration_activity 以获取进度和行级结果。

set_integration_sync_enabled 仅控制批量导入和回填;它不会阻止提供商的实时 Webhook 创建联系人。使用 set_integration_list_targeting 来选择他们未来的列表成员资格:null 遵循工作区默认值,[] 不加入任何列表,而填充的数组则针对这些列表。此更改不具有追溯性,也绝不会移除现有成员资格。它也不会停止默认的 any_contact 序列,这些序列会注册无列表联系人;显式的 any_list 和特定列表序列需要匹配的成员资格。当这些默认注册也必须停止时,请将列表定位与 pause_sequence_enrollments 结合使用。Supabase、Stripe、Shopify、Wix 和 Webflow 支持此控制。

对于 PostHog,sync_integration 会使用存储的个人 API 密钥从头重新启动事件历史导入。导入的事件会去重,因此重试失败的导入不会创建重复项。

对于 Segment,标准 MCP 上的 connect_integration 可以在实时 Webhook 连接后选择性地从 Unify 导入近期事件历史。该导入会通过 Profile API 遍历现有联系人,覆盖 API 最近的 14 天,跳过没有匹配配置文件的联系人,并安全地去重重试和实时 Webhook 重叠。新连接会跳过自动的页面/屏幕调用,除非这些名称被明确加入允许列表。Segment Webhook 密钥必须为 16-153 个 UTF-8 字节。在 OpenAI 审核路由上(该路由省略了 connect_integration),请在仪表板或本地 CLI 中连接 Segment。使用 sync_integration 使用保存的凭据重试。

对于 Lemon Squeezy,请传递 provider: "lemon_squeezy"、API 密钥和数字商店 ID 作为 providerAccountId。对于默认托管设置,请省略 webhookSecret;响应会报告 webhookProvisioning 和 testMode。仅对手动 Webhook 设置提供 16-40 个字符的签名密钥,使用返回的 webhookUrl。凭据永远不会被返回。

对于 Attio,标准 MCP 上的 connect_integration 接受不带 Webhook 密钥的工作区访问令牌,可选的 settings.listMap 作为 Sequenzy 列表 ID 到 Attio 人员列表 UUID 或 API 别名的映射,以及 syncCompanyFromDomain 来控制来自非免费邮件域的公司匹配。在 OpenAI 审核路由上,请在仪表板或本地 CLI 中连接 Attio,然后使用 update_attio_settings 进行相同设置。该集成仅限出站:新加入映射的 Sequenzy 列表的人员会被更新或添加,并加入 Attio 列表;列表移除不会从 Attio 中删除记录。

在写入 {{event.*}} 合并标签或事件属性过滤器之前,请调用 get_event_schema。省略 eventName 以列出文档化的内置事件;提供事件名称以接收提供商特定的示例负载和属性路径,并可选择按 provider 过滤。即使结果报告 documented: false,自定义事件名称仍然有效;这仅表示没有发布参考样本。请使用集成活动或序列注册来获取实际投递数据,因为此工具返回静态参考数据。

对于新的发送域,请调用 add_sending_domain,发布返回的 website.dnsRecords 中的 DNS 记录,等待 DNS 传播,然后调用 verify_sending_domain。发布每条返回的记录,而不是假设固定的提供商或记录数量:统一域包含必需的 DMARC,而旧域可能返回 Amazon SES MAIL FROM 和入站回复记录。如果在创建之前尝试验证,错误会指向带有请求域的 add_sending_domain。

对于 Shopify,在依赖产品视图、购物车活动或浏览放弃触发器之前,请调用 get_integration_pixel。结果是实时从 Shopify 读取的,因为商家可以独立移除像素。如果 pixel.healthy 为 false,dependentEvents 会命名无法到达的触发器;调用 activate_integration_pixel 来安装或重新指向像素。激活是幂等的,事件会在下一次店面访问时开始,而不是回填。

对于自定义、无头、票务或 SaaS 网站,在依赖产品视图或购物车触发器之前,请使用 list_web_tracking_keys。使用显式来源允许列表创建密钥,安装返回的 installSnippet,然后让客户经过身份验证的后端通过 POST /api/v1/web-tracking-identities 生成短期证明,并在登录或结账时调用 sequenzy.identify(email, identityToken)。仅发布密钥只能记录匿名活动,无法触发订阅者自动化。返回的代码片段会在异步加载器之前安装同步方法存根,因此在页面引导期间进行的身份和事件调用会排队,直到 SDK 就绪。优先使用 update_web_tracking_key 撤销密钥,然后再永久删除。

新公司没有同步规则。通过将 null 传递给 update_sync_rules,继承的预设仍可用于 SaaS/电子商务公司;服务和咨询公司通常应保留 [] 或定义显式规则。

使用 list_sender_profiles 查找配置文件 ID,然后调用 update_sender_profile 仅更改其显示名称。为回复配置文件传递 type: "reply";发送者是默认值。地址、发送域和账户范围的默认发件人/回复选择保持不变。重命名需要 companies:manage 作用域。

使用 delete_sender_profile 永久移除过时的发件人身份。它拒绝最后一个发送者以及任何被实时活动、活动序列(包括步骤覆盖)或事务性电子邮件使用的配置文件。符合条件的草稿和账户默认值会移至返回的 fallbackSenderProfileId;发送前请检查。此删除工具不支持回复配置文件。

Shopify 购物车放弃默认启用。它在购物车不活动一小时后触发 ecommerce.cart_abandoned,每个订阅者有 24 小时的冷却时间。使用 update_shopify_automation_settings 更改 cartAbandonment.enabled、delayHours 或 cooldownHours 字段;传递 cartAbandonment: null 以恢复这些默认值,而不更改浏览放弃或降价设置。时间值必须为正;delayHours 上限为 168,cooldownHours 上限为 720。

订阅者

工具描述
add_subscriber添加一个订阅者;状态仅为创建时设置,因此对现有联系人请使用 update_subscriber。
create_subscriber_import排队最多 5,000 条完整 CRM 记录,带有可选的防重试 idempotencyKey;启用的电子邮件健康检查在摄取后继续单独进行。
get_subscriber_import读取排队导入的进度、行结果计数和失败摘要。
update_subscriber更新原生配置文件和电话字段、SMS 同意、属性、标签或全局状态。
remove_subscriber取消订阅同时保留抑制历史,或仅使用 hardDelete: true 永久删除。
get_subscriber按电子邮件或外部 ID 获取订阅者详细信息。
search_subscribers按查询、标签、列表、状态、细分或一个自定义属性搜索,支持自动或可恢复分页。
trigger_subscriber_event完全像集成一样发出一个自定义事件,应用同步规则并匹配序列触发器。
trigger_subscriber_events为一个订阅者发出多个有序自定义事件。
import_subscriber_events跨联系人导入最多 25 个来源识别的事件;静默历史要求联系人的每一行都超过一小时。
bulk_add_subscriber_tags向最多 500 个现有订阅者添加标签;需要 subscribers:tag,也可能需要 tags:write。
bulk_remove_subscriber_tags从最多 500 个现有订阅者移除标签;需要 subscribers:tag 或 subscribers:write。

使用 create_subscriber_import 进行 CRM 入职,而不是循环调用 add_subscriber。一次调用接受 5,000 条完整记录并返回异步导入 ID;使用 get_subscriber_import 轮询它。completed 导入仍可能包含行失败,因此请检查 failedCount 和 failedReasons。每条排除的行都有说明:skippedReasons 总和为 skippedCount,failedReasons 总和为 failedCount。使用导入 ID 报告任何短缺,而不是猜测哪些行被省略。当启用电子邮件健康检查时,投递性检查在摄取后继续单独进行,结果出现在列表健康中;导入状态不会等待或包含这些判定。无效判定会从后续发送中抑制。仅当同意已验证时才使用 optInMode: "confirmed"。

对于 import_subscriber_events,当一行可能创建新联系人时,电子邮件是必需的;externalId 仅对现有联系人可以单独存在。在每一行上提供稳定的 eventId。重试会复用原始回执并幂等地重新尝试下游恢复。历史分类是按联系人进行的:如果联系人的任何一行是最近的,则该联系人的整个组使用实时副作用路径。

对于合规抑制,请使用 status: "unsubscribed" 调用 update_subscriber(或使用不带 hardDelete 的 remove_subscriber)。不要使用不同的状态重试 add_subscriber:该工具上的状态仅在联系人首次创建时适用,不匹配的跳过结果会报告为错误。 当 add_subscriber 省略 listIds 时,调用创建的联系人将遵循工作区默认列表,而现有联系人则保持其当前的列表成员资格。当现有联系人应加入特定列表时,请显式传递列表 ID;传递 [] 以不针对任何列表。

update_subscriber.phone 写入联系人上显示的原生电话字段,而非自定义属性。仅在验证明确的书面同意后传递 smsConsent: true,或传递 false 以选择让联系人退出。在未提供 smsConsent 的情况下更改电话号码会重置短信同意,因为同意归属于旧号码。

add_subscriber、update_subscriber 和 create_subscriber_import 接受 IANA timezone,例如 America/New_York。该值存储在原生的联系人资料上,并支持按收件人本地化的营销活动投递。向 update_subscriber 传递空时区以清除它;无效的导入行值将被忽略,而不会拒绝导入的其余部分。

产品与数字交付

工具描述
list_products列出从 Stripe、Shopify、WooCommerce、手动或 Commerce API 数据同步的产品。
upsert_products按您的产品 ID 创建或更新最多 100 个 Commerce API 产品。
delete_product删除先前通过 Commerce API 推送的产品。
attach_product_file将托管或本地上传的交付文件附加到产品。
remove_product_file移除已附加的产品交付文件。
sync_products排队执行 Stripe 产品目录同步,可选择按 ID 选择集成。

附加产品交付文件后,匹配的购买事件将包含 download.url 和 download.name,因此购买触发的电子邮件可以使用合并标签,例如 {{event.download.url}}。

对于 Stripe 产品,list_products 将每个有效价格作为变体返回,Stripe 价格 ID 位于 variantId 中。使用该 ID 可在购买序列中定位精确价格,即使它不是产品的默认价格。

图片资源

工具描述
upload_image_asset上传电子邮件图片并返回其托管的媒体记录以及可立即插入的图片块。

该工具接受最大 5MB 的 PNG、JPEG、GIF 和 WebP 图片。本地 stdio 客户端可以传递 filePath。可访问附件字节的托管/远程客户端可以传递 imageBase64 以及 filename。提供 altText 以支持无障碍访问,然后使用 displayWidthPercent、cropHeight、objectFit(cover 或 contain)和 align 来标准化截图展示。返回的 imageBlock 可以直接复制到营销活动、序列、模板和事务性电子邮件工具接受的块数组中。

经过身份验证的图片字节始终上传到由 SEQUENZY_API_URL 配置的来源,即使反向代理在另一个主机下返回等效的上传 URL。API 凭据绝不会转发到该备用来源。

{
  "filePath": "/Users/me/Desktop/product-results.png",
  "altText": "Product results dashboard",
  "displayWidthPercent": 100,
  "cropHeight": 320,
  "objectFit": "cover",
  "align": "center"
}

列表、标签、细分

工具描述
list_tags列出所有标签。
create_tag创建带有可选颜色的标签定义。
update_tag更新标签颜色。
delete_tag删除标签并将其从订阅者中移除。
list_lists列出订阅者列表。
create_list创建订阅者列表。
update_list重命名或描述订阅者列表。
delete_list删除订阅者列表。
add_subscribers_to_list从电子邮件数组向列表添加最多 500 个订阅者。
remove_subscribers_from_list从列表中移除最多 500 个订阅者。
list_segments列出已保存的细分和计数。
create_segment创建嵌套或同元素数组过滤的细分。
update_segment更新细分名称、过滤器、根组或连接运算符。
delete_segment删除细分(需要 segments:delete)。
get_segment_count预览细分的活跃订阅者计数。

对于订阅者导出,search_subscribers 接受 listId、精确的 listName 或 list(先 ID,后精确名称)。它还接受 attribute 加上 attributeValue,其中 attributeOperator 用于 contains、数值比较或 is_not_empty;组合的 "attributeName:value" 形式仍然受支持。过滤器使用 AND 组合;使用已保存的细分来实现 OR 逻辑、嵌套组、排除、参与度或事件条件。如果省略 limit,工具会自动获取每个匹配页面。对于分块读取,传递 limit 并跟随 pagination.nextCursor(或 pagination.nextOffset),同时 hasMore 为 true。offset 和 page 在跳过少于 1,000,000 个匹配项时受支持;对于更深的受众,请使用游标。

对于批量列表填充,使用 add_subscribers_to_list;底层 API 端点是 POST /api/v1/lists/{listId}/subscribers,没有 /bulk 后缀:

{
  "emails": ["ada@example.com", "grace@example.com"],
  "duplicateStrategy": "skip",
  "enrollInSequences": false,
  "optInMode": "default"
}

每个请求最多发送 500 封电子邮件。标准 API 速率限制仍然适用:每个 API 密钥每分钟 100 个请求,突发每秒 20 个请求。对于 CSV 驱动的 CLI 导入,接受的电子邮件标头包括 email、e-mail、email address 和 mail;如果没有可识别的标头,CLI 将读取第一列。

细分过滤器支持属性、事件、已保存的细分成员资格、参与度事件、Stripe 产品购买规则和商业产品购买规则。使用 filterJoinOperator: "or" 实现匹配任意细分,或传递 v2 root 组以实现嵌套逻辑。

对于对象数组属性,使用通配符路径,例如 history_events[].eventvenue_id:2103。当 AND 组也过滤 history_events[].showing_date 时,两个条件必须匹配一个共享的 history_events[] 元素;来自无关历史记录条目的值不会合并。删除细分需要 segments:delete;segments:write 不足够。

每个细分过滤器字段验证其自身的运算符:

  • 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、电子邮件参与度字段:is、is_not、at_least、less_than_count
  • emailBounced:还支持 is_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

Stripe 产品过滤器示例:

{ "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" }

商业产品过滤器匹配通过商业订单购买的产品。值可以是 provider:productId 用于提供商范围的 ID(shopify、woocommerce 或 api)、裸产品 ID 以匹配任何提供商,或 provider:productId:count 用于阈值运算符:

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

参与度字段(如 emailSent、emailDelivered、emailOpened、emailClicked、emailBounced 和 emailComplained)接受滚动窗口,例如 7d、30d、90d、180d 或 all。存在运算符可以通过 marketing:<timeRange>(营销策略营销活动、自动化和 Send API 流量)或 transactional:<timeRange>(事务性策略发送)按投递策略限定范围;策略范围需要发送时的策略快照,因此较模糊的旧版自动化和 Send API 事件仅可通过无范围过滤器使用。emailBounced 还支持带有 is_temporary_bounce 和 is_permanent_bounce 的范围值。对于 at_least 和 less_than_count,使用 count:timeRange,例如 10:30d 或 10:all。存在运算符可以改用营销活动范围,如 campaign:cmp_123;营销活动和电子邮件类型范围不能与计数运算符组合。

受众同步(Meta 广告)

工具描述
list_audience_syncs列出细分到受众的同步及其计划和上次同步状态。
list_ad_accounts列出可用于同步的 Meta 广告账户。
create_audience_sync按计划将细分推送到 Meta 自定义受众。
update_audience_sync更改同步频率(hourly、daily、weekly)或暂停/恢复。
delete_audience_sync移除同步映射;Meta 受众本身被保留。
sync_audience_now在常规计划之外触发立即上传。

需要在 Sequenzy 仪表板(设置 -> 集成)中连接 Meta Ads 集成。create_audience_sync 接受现有细分(segmentId)或现成的模板(predefinedSegmentId,例如 zero-ltv、no-purchase-1y、recent-buyers、high-spenders-ecom、non-buyers、engaged)——模板细分在首次使用时自动创建,首次上传立即运行。

受众是仅添加的:之后离开细分的订阅者仍保留在 Meta 受众中。Meta 要求 100 个以上匹配人员才能将受众用于广告投递。

模板

工具描述
list_templates列出模板及其本地化状态、标签和 isTemplate 筛选,并支持分页。
get_template读取模板详情、内容及本地化变体。
create_template从提示词、HTML 或 Sequenzy 块创建模板;使用 isTemplate: true 保存可复用的主设计。
update_template更新模板元数据、收件箱预览文本、标签、HTML 或块;使用 isTemplate 标记或取消标记主模板。
set_template_localization创建或替换调用方提供的本地化变体。
sync_template_localizations为所选或所有已启用的非主要语言环境排队 AI 翻译。
delete_template删除模板。

list_templates 默认按最新优先返回 50 封邮件正文,并接受 limit 最高为 100。在 pagination.hasMore 为 true 时,通过 pagination.count 推进 offset;pagination.total 报告完整匹配 计数,包括营销活动和事务性邮件正文。

在 list_templates 上设置 isTemplate: true 以仅返回已保存的主设计, 或设置 false 以返回普通邮件正文。已标记的主设计会作为 仪表板序列步骤和营销活动的起点提供;从主设计开始会创建 独立副本,因此编辑不会影响主设计。

独立/序列源设计复制以及所选布局内的 AI 重写目前仅限 仪表板操作。此版本有意将这些工作流保留在交互式 创作中,用户可以在保存序列步骤之前查看源、翻译及任何回退副本。REST、CLI 和 MCP 不提供等效的独立/序列源设计 操作。create_template 配合 prompt 生成新内容,而不保留 现有布局;提供的 HTML 或块会创建新正文,而不会自动 复制本地化变体。请参阅界面可用性文档。

营销活动副本已可通过 REST POST /api/v1/campaigns 和 MCP create_campaign 配合 templateId 使用;它不能与 prompt 组合用于 AI 重写。

对于以自然语言请求的全新内容,请传递 prompt,以便 Sequenzy 在服务端生成品牌原生块。仅对已完成且由调用方提供的 Sequenzy 内容使用 blocks,并且仅在保留提供的 或明确请求的标记时使用 html。prompt、blocks 和 html 互斥; style 和 tone 仅在 prompt 下有效。

当翻译副本来自您自己的本地化工作流时,请使用 set_template_localization。 它需要一个已启用的非主要 locale、一个本地化的 subject,以及 html 或 blocks 中的恰好一个。使用 sync_template_localizations 请求 Sequenzy 翻译所选语言环境; 省略 locales 以同步所有已启用的非主要语言环境。即使自动保存时本地化已禁用,显式同步仍然有效。

可复用邮件组件

工具描述
list_email_components列出已保存的区块和页脚,可选地限制为固定的默认项。
get_email_component读取一个组件的块、元数据、版本和默认槽位状态。
get_default_email_component读取当前固定到默认槽位(如 footer)的组件。
set_default_email_component创建或替换新构建的块邮件使用的公司默认页脚。
create_email_component从块列表保存可复用的区块或页脚。
update_email_component更新组件元数据或替换其块并递增其版本。
delete_email_component删除组件,而不更改已复制其块的邮件。

组件在邮件构建时被复制到邮件中,因此后续编辑 影响新构建的邮件,而不会重写现有内容。默认 页脚保持其退订链接启用,而事务性渲染隐藏 该链接。原始 HTML 邮件保留其自己的标记,不接收块 组件;其发送时退订处理保持不变。

A/B 测试

工具描述
list_ab_tests列出 A/B 测试和变体,可选地按序列限定范围。
get_ab_test获取有效设置、变体、本地化状态和序列步骤副本。
get_ab_test_stats获取汇总和每个变体的统计信息。
restart_ab_test重新启动已停止或已完成的 A/B 测试。
select_ab_test_winner选择营销活动测试获胜者并排队剩余投递。
update_ab_test更新营销活动或序列的获胜者选择设置。
update_ab_test_variant更新营销活动草稿或序列变体副本。
create_ab_test创建营销活动测试或将序列邮件步骤转换为测试。
add_ab_test_variant向现有 A/B 测试添加变体。
delete_ab_test_variant删除草稿 A/B 测试变体。
delete_ab_test删除 A/B 测试。

使用 get_sequence.sequence.emails[].abTest.variants 发现序列变体 ID、主题、预览文本和块数量;调用 get_ab_test 审计每个变体的完整 blocks、有效 settings、本地化状态或统计信息。营销活动设置使用 testPercentage、testDurationMinutes 和 winnerCriteria;序列设置使用 testType、winnerThreshold 和 winnerCriteria。旧版序列值 testPercentage: 100 和 testDurationMinutes: 0 是兼容性哨兵,不是运行时设置。select_ab_test_winner 仅适用于当前正在测试的营销活动测试,并立即为剩余受众排队获胜变体。update_ab_test 更改适当的设置模型,并且当序列设置影响活动或已使用的测试时,需要 confirmLiveChange: true。变体更新接受 html 或 blocks 中的任意一个,但不能同时接受两者。

create_ab_test 接受 campaignId 或 automationNodeId 中的恰好一个;后者需要一到四个额外变体,并将序列邮件节点转换为 action_ab_test。转换将步骤的主题、预览文本和块移动到独立的变体邮件上。从 get_sequence 获取测试和变体 ID,使用 get_ab_test 读取每个变体的副本,并使用 update_ab_test_variant 编辑每个变体;update_sequence_node 和 update_template 无法编辑变体副本,并且针对整个步骤的更改必须对每个变体重复。如果 update_ab_test_variant 不在 MCP 工具列表中,请在 Sequenzy 连接器上启用它,而不是通过其他邮件工具写入。完整工作流需要 ab_tests:read、ab_tests:write 和 sequences:write,所有这些都包含在 更安全的代理访问 中。仅使用 sequences:read 时,get_sequence 保持 A/B 步骤和控制副本可见,但会编辑测试记录字段并返回空变体列表。显式序列 winnerCriteria 覆盖 testType 默认值,因此内容变体仍可通过打开率进行评判。在活动序列中转换节点时传递 confirmLiveChange: true。与对照 A 一起,A/B 测试最多支持五个变体。序列变体接收独立的邮件模板,并且可以在创建后编辑;一旦序列处于活动状态或测试有活动,update_ab_test_variant 需要 confirmLiveChange: true。变体只能在测试为草稿时添加或移除,并且实时序列更改也需要确认,因为它们会立即更改轮换。

营销活动

工具描述
list_campaigns按状态或标签列出分页营销活动,包括审阅者反馈和投递节奏字段,用于账户级 STO 审计。
get_campaign获取营销活动的详细信息、统计、审阅者反馈以及记录的投递节奏。
get_campaign_audience解析已保存的定向、缺失引用、简明摘要和实时收件人数量。
list_campaign_goals列出一个电子邮件营销活动持久化的转化目标(不支持短信)。
create_campaign_goal添加事件、订阅者属性或标签应用的电子邮件营销活动转化目标。
update_campaign_goal更新持久化的电子邮件营销活动转化目标。
delete_campaign_goal删除持久化的电子邮件营销活动转化目标。
list_email_sends搜索最近的投递历史,包含资源 ID 和 URL,可选择限定到一个序列步骤。成功的实时测试发送会被省略。
get_email_send通过持久的电子邮件发送 ID 检查排队、测试、已发送、被抑制或失败的投递。
list_recipient_suppressions列出关联的被抑制收件人,包括受保护的全局无效地址和投诉。
get_recipient_suppression检查一个精确收件人的本地退信、投诉、电子邮件卫生和区域 SES 抑制状态。
remove_recipient_suppression移除工作区的软退信升级,同时保留全局、硬退信和投诉保护。
create_campaign创建包含内容、数据和可选发件人/回复身份覆盖的营销活动。
update_campaign更新草稿营销活动,包括内容、数据、身份、受众和持久化的 STO 配置。
schedule_campaign安排或重新安排营销活动,可选择覆盖 STO 及其 1-24 小时投递窗口。
send_test_email向一个地址发送测试电子邮件。
render_email渲染精确的电子邮件安全 HTML 并报告未解析的标签,包括被默认值隐藏的拼写错误。
cancel_campaign取消已安排或正在发送的营销活动。
pause_campaign暂停正在发送的营销活动。
resume_campaign恢复暂停的营销活动,可选择随时间分散投递。
delete_campaign删除营销活动。
duplicate_campaign将营销活动复制为新的草稿。
resend_campaign_to_non_openers为未打开已发送营销活动的原始受众成员创建草稿重发。

提示创建的营销活动在一次 API 请求中生成并持久化,并保持为草稿状态。仅在复制或保留现有内容而非让代理创作时,使用 templateId、blocks 或 html。省略所有内容字段以创建空草稿供后续编辑。

营销活动目标将功劳归于在配置的归因窗口内实际收到该营销活动的收件人;当存在打开或点击时,它仍然是更强的最后触点信号。事件目标需要 triggerEventName,订阅者属性目标需要 attributePath,标签应用目标需要 triggerTagName。营销活动归因窗口在省略时默认为 168 小时。

要在每个收件人自己的时区中同时投递,请调用 schedule_campaign 并传入 sendInRecipientTimezone: true 和一个 IANA scheduledTimezone,用于标识 scheduledAt 所代表的挂钟时间。没有存储时区的联系人会在 scheduledAt 时刻收到营销活动。此模式不能与重复或分散投递结合使用。

发送时间优化是按营销活动配置的,而非公司或序列级别。使用 list_campaigns 跨营销活动审计,或使用 get_campaign 检查单个营销活动。在草稿上使用 update_campaign 设置 sendTimeOptimization 和 sendTimeWindowHours(1-24,默认 12),或在安排时使用 schedule_campaign 覆盖它们。spreadOverHours 优先并禁用 STO,收件人时区投递也是如此。序列改用 sendingWindow,这是一个共享的允许小时/天门控,而非每个收件人的预测发送时间。

对于营销活动和序列级别的身份,fromEmail 加上 fromName 选择邮箱上具有该显示名称的发件人身份,在需要时创建它而不重命名其他同地址身份。回复地址则有一个公司范围的保存名称:当 replyToName 与该名称不同时,保留保存的名称,成功响应中包含 warnings 中的恢复指导。

send_email 和 send_test_email 返回持久的 emailSendId。使用 list_email_sends 按主题/标题、收件人、投递状态、类型、退信类型或来源发现最近的 ID;将 ID 传递给 get_email_send 以检查 status、errorMessage、存储的正文和投递事件。投递列表行保留 14 天。成功的实时测试和其他测试发送被省略,以免掩盖真实投递。对这些测试发送的回复仅在启用入站回复捕获时显示在 list_conversations 中。队列作业是内部执行细节,不通过 MCP 契约暴露。每个返回的投递都有直接的仪表板 url。使用 list_recipient_suppressions 区分受保护的全局无效收件人、受保护的公司硬退信和投诉行与可移除的公司软退信升级,并使用 get_recipient_suppression 获取精确的区域状态。remove_recipient_suppression 仅移除公司升级;全局和 Amazon SES 账户级抑制、投诉、退订和电子邮件卫生保护保持不变。本地卫生结果使用 bounced 原因,以 email_hygiene 作为其来源,而不更改订阅者的同意状态。

代理应在首次尝试前将调用方拥有的 idempotencyKey 传递给 send_email,并在同一逻辑电子邮件的每次重试中重复使用它。Sequenzy 在 14 天内返回原始 emailSendId,而不是创建另一个投递。使用不同发送参数重用该键会被拒绝,因此不要在重试循环内生成新键。

电子邮件块可以使用条件显示规则或 conditional-group 分支。条件支持渲染时变量和订阅者属性,以及实时订阅者数据,如段/列表成员资格、标签、事件、参与度、订阅/短信状态以及 Stripe 或商务购买。实时数据条件使用与段过滤器相同的字段值和运算符;没有存储订阅者匹配的收件人使用 OTHERWISE 分支。

核心块形状为 { "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 accept content 作为 text 的别名,并默认为 primary 变体。图片 widthType 接受 percent 或 px。

YouTube 视频块接受可选的自定义封面:{ "type": "video", "videoUrl": "https://www.youtube.com/watch?v=...", "thumbnailUrl": "https://cdn.example.com/cover.jpg", "alt": "Watch the product tour" }。 在没有 thumbnailUrl 的情况下替换块会恢复 YouTube 自己的静态图像,同时保持 videoUrl 作为点击目标。

原始 html 存储为单个不透明块。它保留提供的标记,但不添加公司徽标、原生品牌部分或主题驱动的块设计。使用 prompt 创建新的品牌草稿,或使用 blocks 进行编辑器原生设计;MCP 创作结果在使用原始 HTML 时包含警告。

使用 update_company 配合 fromEmail 和/或 replyTo 设置账户级默认值。fromEmail 必须使用已配置、已验证的发送域;replyTo 可以是任何有效的邮箱。create_campaign、update_campaign、create_sequence 和 update_sequence 接受相同的直接地址字段用于资源特定覆盖,并在需要时创建后备配置文件。单独发送 fromName 或 replyToName 以重命名现有默认配置文件而不更改其地址。当地址有多个显示名称时,使用 senderProfileId 或 replyProfileId 从 list_sender_profiles 中选择要设为默认并重命名的精确配置文件。

update_company 还通过 emailTheme(presetId、colors、typography、layout)管理公司的默认电子邮件主题。主题更新是部分的——省略的字段保持其当前值(或预设默认值),数值被限制在支持的范围内。传递 emailTheme: null 将公司重置为平台默认主题。布局设置可以控制共享的 baseRadius 和单独的 buttonRadius。在 colors 内,background 绘制外部画布,content 绘制内部内容卡片,surface 绘制嵌套卡片或着色瓷砖。省略 content 保留其当前值;当没有存储内容颜色时,卡片遵循 background。

回复跟踪可在相同的公司工具上使用。使用 replyTrackingEnabled、replyTrackingDomainMode(sequenzy 或 custom)和 forwardReplies 配合 update_company。公司读取还返回当前只读的 replyRetentionDays 值。

投票和 NPS 调查是原生电子邮件块,因此它们可以在任何电子邮件工具接受 blocks 的地方工作,包括营销活动、模板、A/B 变体、事务性模板和序列电子邮件步骤。事务性投票发送必须在抑制过滤和收件人去重后解析为恰好一个有效收件人,并且该收件人必须已作为订阅者存在;否则 Sequenzy 拒绝发送,因为答案链接无法安全归属。使用答案按钮投票:

{
  "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"
}

对于 NPS,请使用 "variant": "nps"、一个空的 options 数组,以及一个属性(例如 nps_score)。评分范围始终为 0-10;可选的 npsLowLabel 和 npsHighLabel 可自定义其标题。每个回答都会更新订阅者属性,并触发 poll.answered 以用于自动化和出站 Webhook。

在纯文本选项投票上设置 "allowMultiple": true,可打开一个托管页面,收件人可以在其中勾选多个答案并一次性保存整个选择。订阅者属性存储所选值列表,因此属性分段应使用 contains。多选投票不能使用选项图片,也不能使用编码签名链接超过投递安全大小限制的配置。活动投票摘要设置 allowMultiple: true,使用受访者数量作为 totalResponses,并且可以报告加起来超过 100% 的答案百分比。

投票块还支持品牌专属样式。accentColor 会重新着色所有外观,包括 "brutal";optionRadius 以像素为单位设置答案按钮的圆角(0 为直角),独立于容器的 styles.borderRadius;而 questionColor 仅重新着色问题文本。fontFamily 适用于投票。使用 optionFontSize、optionFontWeight、optionLetterSpacing 和 optionTextTransform 字段来设置答案,或使用对应的 question* 字段来设置问题。尺寸和间距以像素为单位,字重范围为 100 到 900,文本转换选项为 "none" 或 "uppercase"。

已保存表单

工具描述
list_forms列出已保存的表单及其服务器管理的受众设置、内容块和公开操作 URL。
create_form使用标准的电子邮件/姓名字段、受众设置、主题和成功行为创建并发布已保存的表单。
update_form更新已保存的表单,包括其完整的排序块数组和类型化自定义字段。
get_form_embed返回已保存表单的公开操作 URL、托管 JavaScript、最小原生表单和获取示例。

对于 Astro、Hugo、Jekyll、Cloudflare Pages、Netlify、GitHub Pages 或任何其他静态站点,请调用 list_forms,如果不存在合适的表单则使用 create_form,然后调用 get_form_embed。返回的不透明 formId 是公开能力:列表、标签、重复行为和成功处理均保留在服务器端,因此部署的浏览器代码永远不会包含 Sequenzy API 密钥。生成的原生和独立标记包含“Powered by Sequenzy”(适用于免费工作区);付费工作区会收到无品牌标记。API 在服务器端解析该权限,因此调用方应原样使用返回的代码片段。更新表单时,省略的字段保持不变,主题字段会合并到当前主题中。传递一个空的 tagIds 数组以清除标签,或传递一个空的 redirectUrl 以恢复确认消息行为。blocks 字段是完整替换,因此请先使用 list_forms 读取当前内容,并保留恰好一个必填电子邮件字段和一个提交按钮。将自定义输入添加为 form-field 块,并使用受支持的 fieldType;选择、单选和复选框字段需要选项,而隐藏默认值在服务器端强制执行。

已保存弹窗

工具描述
list_popups列出已保存的弹窗及其状态和互动统计,可选包含完整内容。
get_popup获取单个弹窗的块、触发条件、定向、计划、频率、主题和已发布的嵌入代码。
create_popup从起始模板创建弹窗,默认发布,并返回其部署脚本。
update_popup部分更新弹窗文案、受众、行为、主题、块或发布状态。
get_popup_embed返回无密钥的 HTML、React/Next.js、WordPress 和 Shopify 嵌入代码片段。
duplicate_popup将弹窗复制为草稿,并带有独立的互动计数器。
delete_popup永久删除弹窗及其互动计数器。

弹窗部署使用一个公共脚本标签;API 密钥、受众设置、触发条件、定向、计划和频率规则均保留在服务器端。除非提供了 listIds,否则弹窗默认捕获到每个列表中。更新块时,请先读取弹窗并发送完整的替换数组,保留恰好一个必填电子邮件字段和一个提交按钮。将 status 设置为 draft 可停止弹窗,而不会使其现有嵌入代码失效。

落地页

工具描述
list_landing_pages列出落地页及其状态、指标、内容和 URL。
get_landing_page获取落地页详情、构建器内容、指标和已发布的 URL。
render_landing_page返回一个签名的 24 小时访客预览,不发布、不计算浏览量、不收集注册。
create_landing_page从默认模板内容或 JSON 创建草稿落地页。
update_landing_page编辑落地页名称、别名或完整的编辑器兼容内容。
publish_landing_page发布落地页,可选先保存编辑内容。
unpublish_landing_page将落地页返回到草稿状态,可选先保存编辑内容。
duplicate_landing_page将落地页复制为新的草稿,并带有唯一别名。
delete_landing_page删除未发布的落地页。
connect_landing_page_domain连接自定义落地页域名并返回 DNS 设置详情。
update_landing_page_domain_settings替换或验证落地页自定义域名设置。

落地页内容使用 Sequenzy 的编辑器兼容 JSON 架构,包含 version、template、seo、theme 和 blocks。SEO 设置包括 faviconUrl 和 hideFromSearchEngines;隐藏页面会发布一个 noindex 指令。使用 render_landing_page 在发布前查看当前面向访客的页面。其签名的 previewUrl 在 24 小时后过期,未列入索引、不被搜索引擎收录,并且不会增加页面浏览量;表单仍然可见但不会收集联系人。块按槽位顺序渲染:top、hero、form、body,然后是 footer;使用 top 在 Hero 区域上方放置全宽公告或横幅。按钮和定价 CTA URL 接受外部 HTTPS 目标或页内锚点,例如 #form、#section-<sectionId>、#block-<blockId> 和 #top。将 theme.sectionAnimation 设置为 none、fade、slide-up 或 zoom-in,并将 theme.sectionAnimationSpeed 设置为 slow、normal 或 fast,以控制已发布页面的滚动显现效果。自定义落地页子域名需要一条指向 pages.sequenzydns.com 的 CNAME 记录;根域名使用指向 76.76.21.21 的 A 记录,并且其 www 主机在其 CNAME 指向 pages.sequenzydns.com 时重定向到根域名。DNS 更改传播后,调用 update_landing_page_domain_settings 并传入 verify: true。

序列

工具描述
list_sequences列出序列及其仪表盘状态,支持搜索、标签、限制和偏移量筛选。
get_sequence获取序列详情、A/B 变体 ID 和模块数量,包含 ab_tests:read、节点、边、关联文案以及序列发送窗口。
list_sequence_enrollments列出联系人注册记录,支持分页和准确的列表/标签/事件/时间触发来源归属。实时序列测试不会创建注册记录。
send_sequence_test_email将单个已保存的 action_email 步骤发送给 1-10 位审阅者;A/B 步骤按变体分别检查。
create_sequence创建空白仪表盘草稿,或创建 AI 生成/显式步骤的序列。
update_sequence更新身份、设置、注册规则、现有步骤、分支逻辑,或插入线性步骤。
update_sequence_node对单个现有序列节点进行类型感知的补丁更新。
update_sequence_nodes原子性地对多个现有序列节点进行补丁更新。
insert_sequence_step插入任意类型的仪表盘步骤,包括 AI 生成、出站 Webhook、等待和连线分支。
edit_sequence_graph移动、重新连接、删除或复制图节点;报告已移动或已完成的收件人。
simulate_sequence试运行当前匹配、激活就绪状态,以及可选联系人的分支路径,不进行注册或发送。
enable_sequence激活序列。
disable_sequence冻结序列,阻止新的注册并保持当前收件人。
duplicate_sequence创建图、邮件和序列 A/B 测试的独立草稿副本。
archive_sequence将序列移入仪表盘归档并停止新的注册。
unarchive_sequence将已归档序列恢复为禁用草稿。
list_sequence_goals列出为序列持久化的事件、订阅者属性和标签应用转化目标。
create_sequence_goal添加事件、订阅者属性或标签应用转化目标。
update_sequence_goal更新已持久化的序列转化目标。
delete_sequence_goal删除已持久化的序列转化目标。
get_sequence_inbound_webhook在标准 MCP 上读取入站 URL、设置状态、示例和映射;OpenAI 路由会移除包含凭据的 URL。
configure_sequence_inbound_webhook配置端点、字段映射和示例;OpenAI 路由会从其结果中移除包含凭据的 URL。
rotate_sequence_inbound_webhook_secret轮换入站序列端点的密钥并在标准 MCP 上返回其替换 URL;在 OpenAI 审核路由中省略。
pause_sequence_enrollments停止活动序列的新注册,同时当前收件人继续。
resume_sequence_enrollments重新开放活动序列的新注册,不改变当前收件人。
enroll_subscribers_in_sequence按电子邮件、订阅者 ID 或两者注册最多 500 名订阅者,具有重试安全的幂等性。
cancel_sequence_enrollments按订阅者或入口事件字段值停止活动或等待中的注册。
realign_sequence_enrollments预览或排队将实时等待提前到其发送窗口开启时。
get_sequence_enrollment_realignment轮询已应用的重排任务并读取其完成结果或继续游标。
delete_sequence删除序列。

序列创建支持:

  • 仅名称创建,用于与仪表盘匹配的空白、禁用、从触发到完成的草稿。
  • 仪表盘元数据和投递设置:description、labels、userCancellable、序列密送以及发件人/回复身份。
  • trigger: "contact_added" 配合 listId、多个 listIds 或 listScope: any_contact(默认)注册每个添加的联系人,包括 未加入任何列表的联系人,而 any_list 等待实际的列表成员资格。
  • trigger: "tag_added" 配合 tagName 或多个 tagNames;任何配置的 标签都会注册联系人。
  • trigger: "segment_entered" 加上 segmentId 用于已保存分段的入口自动化。
  • trigger: "event_received" 加上 {{event.*}} 在主题或正文内容中合并标签。
  • trigger: "inbound_webhook" 加上集成元数据,用于与仪表盘兼容的 Webhook 入口节点。
  • trigger: "inactivity" 加上 eventName、inactiveDays 和可选的 inactivityBaseline(sequence_created_at 或 subscriber_created_at)。
  • goal 用于 AI 生成的邮件内容。
  • emailStyle: "visual" 或 "plain" 用于选择基于目标的 AI 生成邮件的呈现方式;省略时使用公司保存的偏好。
  • 显式 steps 配合 Sequenzy blocks。
  • 显式 steps 配合 HTML,Sequenzy 会将其转换为可编辑模块。
  • 显式更新订阅者步骤,将触发事件属性复制到 个人资料字段或类型化自定义属性中。
  • 通过 delay / delayMs 固定等待、通过 waitUntil 动态日期字段等待,或通过 waitUntilWeekday 日历门控。诸如 { "day": "sunday", "startTime": "09:00", "endTime": "12:00", "timezone": "America/Los_Angeles" } 的工作日门控会保持流程直到下一个匹配窗口。将其紧放在邮件之前以保持该发送在窗口内;任何中间步骤都可能将投递移出窗口。队列恢复在释放延迟联系人之前会重新检查窗口。
  • 动态 Stripe 或 Shopify 折扣操作步骤。create_discount 步骤在每个订阅者到达时创建新的提供商代码;后续邮件可以使用诸如 {{discount.code}}、{{discount.percentOff}} 和 {{discount.expiresAt}} 的合并标签。
  • enrollmentMode: "matching_field" 和标量 enrollmentFieldPath 用于产品、变体、订单或订阅特定的事件自动化。使用 [] 的数组遍历属于 propertyFilters,而不是注册键。

对于自定义事件触发器,成功的 create_sequence 结果包括 eventTrackingCode 和结构化的 eventTracking 对象。该对象包含 事件端点、身份和负载契约、matching_field 注册所需的任何属性路径、 规范化触发 propertyFilters、示例负载、examplePayloadMatchesFilters、直接事件 API 文档 URL,以及 get_integration_guide 的即用参数。如果匹配状态为 false,使用 examplePayloadNote 和负载契约调整示例。 在启用草稿序列之前,添加此事件源并验证其必需属性。

list_sequence_enrollments 为每行返回 enteredVia。列表和分段 来源在 value 中保持其稳定 ID,并解析显示 name;标签和 事件来源在 value 中保留其名称。基于时间的触发器报告 inactivity 或 frequency,而不是被误识别为普通 收到事件的注册。实时序列测试不会创建注册记录; 它们发送隔离的测试邮件并将活动记录在序列测试运行中。

对于确认的手动注册批次,生成 idempotencyKey 一次,并且 仅对相同的有序目标和 targetNodeId 重用该确切键。 回执保留 14 天。重试返回原始的 enrolled、skipped、 notFound、targetNodeId 和 scheduledFor 值以及 idempotentReplay: true;它不会创建令牌或再次排队批次。

示例动态 Shopify 折扣步骤:

{
  "type": "create_discount",
  "discount": {
    "provider": "shopify",
    "discountType": "percent",
    "percentOff": 20,
    "duration": "once",
    "appliesToAllPlans": true,
    "maxRedemptions": 1,
    "codePrefix": "WINBACK"
  }
}

示例更新订阅者步骤:

{
  "type": "update_subscriber",
  "nodeType": "action_update_attributes",
  "config": {
    "firstName": "{{event.firstName}}",
    "customAttributeUpdates": [
      { "name": "plan", "value": "{{event.plan}}", "valueType": "text" },
      { "name": "mrr", "value": "{{event.amount}}", "valueType": "number" },
      { "name": "active", "value": "{{event.active}}", "valueType": "boolean" }
    ]
  }
}

数字和布尔值必须是字面量或一个独立的合并标签。使用 update_sequence.subscriberUpdateSteps 配合来自 get_sequence 的 action_update_attributes 节点 ID 来替换现有步骤的配置。 序列更新支持 insertSteps,用于在 nodeId 返回的 get_sequence 之后添加新的线性步骤。仅当追加到恰好具有一个线性尾部的序列时,才省略 afterNodeId。insertSteps 支持不需要伴随记录的可添加步骤,例如电子邮件、延迟、标签/列表操作、属性更新、折扣、条件、等待事件步骤、出站 Webhook 和 AI 步骤。action_ai 步骤需要合并标签 prompt、唯一的 resultKey 以及一个或多个 outputFields;后续步骤使用 {{ai.KEY.field}} 读取生成或回退文本。组合的输出字段限制必须适合该步骤的 2000 个令牌响应预算。使用 includeTags、includeEventProperties 或 includeAttributes 将特定联系人上下文纳入生成,并使用 onError(continue、exit 或 fail)选择失败行为。使用 branch 进行多路径 if/else 分支;提供 branch 或 insertSteps 之一,不能同时提供两者。分支条件支持使用 has_tag 和 does_not_have_tag 检查标签存在和不存在,以及列表、已保存的细分、事件、点击的链接和字段比较。每个分支路径可以提供新的 steps、现有的 targetNodeId 或两者;回退使用 elseSteps 和/或 elseTargetNodeId。目标可以是 get_sequence 返回的完成节点,因此一个原子请求可以将回复路由到完成节点,并将 Else 路由到现有的后续步骤。emails 和 steps 数组通过 nodeId、emailId 或数组顺序编辑普通的 action_email 步骤。get_sequence.sequence.emails 还包括 action_ab_test 条目;使用 ab_tests:read 时,每个 abTest.variants[] 条目包含变体 ID、主题、预览文本和块数。在审计或重写文案之前,调用 get_ab_test 获取完整的变体正文。落在变体上的位置更新会被拒绝,其文案必须使用 update_ab_test_variant 按变体更改;不要通过 update_template 或 update_sequence_node 重试。使用 insertSteps 创建新步骤,并在插入的电子邮件需要计时器时包含步骤级别的 delay、delayMs、waitUntil 或 waitUntilWeekday。waitUntil 接受触发事件中的日期字段以及可选的 offset、direction(before 或 after)和 missingAction(continue 或 exit)。waitUntilWeekday 接受 day 或 days、startTime、可选的 endTime(默认 24:00)以及 IANA timezone;已处于窗口内的联系人会立即继续。对于活动序列,仅在确认实时流程影响后,才传递带有 insertSteps 或 branch 的 confirmStructuralChange: true。

insert_sequence_step 直接公开每个无需伴随记录的仪表板步骤:电子邮件、短信、延迟、折扣、订阅者更新、标签/列表操作、出站 Webhook、AI 生成、条件、等待和分支。设置带有 prompt、resultKey 和 outputFields 的 type: "ai",为后续的 {{ai.KEY.field}} 合并标签生成每个联系人的文本。出站 Webhook 接受 url、method(POST 或 GET)和字符串值的 headers。电子邮件步骤支持事务模式、每步身份和抄送/密送投递设置。对于等待门控,设置 type: "logic_wait_for_event" 以及 eventName、可选的 timeoutDays(1-365) 和 timeoutAction(continue 或 exit)。对于分支,设置 type: "logic_branch",提供类型化的 branches,并连接其目标:

{
  "sequenceId": "seq_123",
  "type": "logic_branch",
  "afterNodeId": "node_email_1",
  "branches": [
    {
      "id": "replied",
      "conditionType": "event_received",
      "eventName": "email.replied",
      "activityScope": "this_sequence",
      "targetNodeId": "node_complete"
    }
  ],
  "elseTargetNodeId": "node_email_2"
}

get_sequence 返回的每个关联电子邮件都包含其有效的 emailPreset(branded 或 minimal),与仪表板中的 样式 > 格式 匹配。在 emails/steps 项目上设置 emailPreset,或在 action_email 节点的 changes 中设置,仅更改该关联电子邮件,而不 更改公司主题。这会将与仪表板相同的格式转换应用于原生 Sequenzy 块,包括包含受支持的 自定义 HTML 块的电子邮件。完全存储为单个独立原始 HTML 块的电子邮件 为 emailPreset 返回 null,并且不支持格式更改。 emailPreset 不能与 html 或 htmlContent 组合,因为这些 字段会用独立的原始 HTML 替换整个电子邮件。

对于序列位置,优先在关联电子邮件和 电子邮件节点的顶层使用 structuralStepNumber。它从当前图派生,并与 仪表板中显示的步骤徽章匹配。并行分支电子邮件有意共享 相同的结构深度,而不相等的分支合并从 较长的传入路径继续。关联电子邮件和节点 配置中较旧的 stepNumber 字段仍然是存储的序号,用于向后兼容,并且在图编辑后可能过时。

每个关联电子邮件还返回其存储的 emailTheme 覆盖,或者当 它遵循公司主题时返回 null。在 emails/steps 项目上或在 action_email 节点的 changes 中设置 emailTheme,仅重新样式化该步骤。主题更新是 部分补丁,因此 changes: { "emailTheme": { "colors": { "background": "#f3f4f6", "content": "#ffffff" } } } 为该电子邮件提供灰色 外部画布和白色内容卡片,同时保留其其他颜色、 排版和布局。省略任一颜色将保留其当前值。传递 emailTheme: null 以删除覆盖并再次遵循公司主题。仅当 账户范围的默认值应更改时,才使用 update_company。

使用 update_sequence_node 进行聚焦的就地编辑,或 当多个节点补丁必须原子提交时使用 update_sequence_nodes。首先调用 get_sequence:sequence.nodes 中的每个项目都包含节点 id、 nodeType、当前 config、updatedAt 和 updateHints,带有可编辑和 托管字段以及要返回的精确并发令牌。将该令牌作为 expectedUpdatedAt 传递以拒绝过时的写入。这些工具支持每种存储的节点 类型,包括延迟、电子邮件/短信内容、操作、条件、Webhook、 分支配置(无需拓扑更改)和触发器。要将 5 分钟延迟更改为 7 天,请为其 logic_delay 节点发送 changes: { "delay": { "days": 7 } }。要将多个创始人风格笔记设为 Minimal,请使用 changes: { "emailPreset": "minimal" } 修补其 action_email 节点。节点类型 转换和边/路径更改属于 edit_sequence_graph。活动 序列在用户确认影响后需要 confirmLiveChange: true; 已在等待的收件人保留其现有的计划时间戳。

现有和新插入的电子邮件步骤可以使用 senderProfileId 或 fromEmail 以及可选的 fromName 设置自己的发件人身份,并使用 replyProfileId 或 replyTo 以及可选的 replyToName 设置回复身份。单独的 fromName 仅更改该步骤的可见发件人名称。步骤级别的 replyToName 类似地覆盖该步骤的可见回复名称, 而不会重命名公司范围的回复配置文件。没有 显式身份字段的新电子邮件步骤继承最近的 序列电子邮件的有效身份。分支合并后,仅继承每个 传入路径共享的身份字段;冲突的字段使用序列或公司 默认值。

使用 edit_sequence_graph 以及来自 get_sequence 的最新 graphRevision 原子地重组现有序列。它可以在另一个节点之前或之后移动节点,重用规范化的 sequence.edges 数组进行显式重新连接或多节点重新排序,删除节点,或深拷贝节点。A/B 测试复制创建独立的测试、变体、电子邮件和本地化记录,并重置统计信息。在分支下方的共享节点之前移动节点会重新连接每个通过该节点汇聚的分支路径。删除节点会立即将暂停的收件人移动到其唯一的幸存后继节点,或者在没有后继节点时完成它们;检查结果中的 sequence.migratedRecipientCount 和 sequence.completedRecipientCount。当暂停的收件人会有多个幸存延续时,删除会被拒绝。过时的修订、无效的分支通道、循环和不可达节点也会被拒绝。活动序列需要 confirmStructuralChange: true。

在应用批量取消之前,使用 dryRun: true 运行 cancel_sequence_enrollments。

在更改活动序列的发送 窗口后,当现有的电子邮件绑定等待应提前移动到新的开始时间时,运行 realign_sequence_enrollments。 它默认为 dryRun: true。传递 dryRun: false 会排队后台作业 并返回 jobId;使用 get_sequence_enrollment_realignment 轮询它。当 完成的结果具有 hasMore: true 时,使用其 nextCursor 排队下一个有界应用。应用的对齐更改会改变实时投递时间,并且只应在 用户确认预览后使用。

电子邮件块

工具描述
get_email_block_schema列出每种电子邮件块类型,或检查一种类型的必填字段、枚举值、项目形状和示例。

在手工编写您之前未使用过的块类型之前,调用 get_email_block_schema。省略 blockType 以列出每种类型,传递诸如 list 或 steps 之类的类型以获取其完整参考,或传递 creatableOnly: true 以隐藏由编辑器管理的类型。持久化的 group 块是结构化的编辑器内容: 它们以递归方式在 Stack、Row、Grid 或单图像 Overlay 布局中包装子块,但 AI 生成和 creatableOnly 有意省略它们。请求 blockType: "group" 在读取或更新现有 分组内容时检查其字段。列表是它们自己的块类型,而不是 text 变体:list 项目使用 content,而 steps 项目使用 title 和可选的 description。

接受 blocks 的工具在块的 styles 对象下持久化每个块的视觉样式:

{
  "type": "card",
  "title": "Your update",
  "content": "Everything is ready.",
  "variant": "default",
  "styles": {
    "backgroundColor": "#f8fafc",
    "backgroundOpacity": 85,
    "borderColor": "#cbd5e1",
    "borderWidth": 1,
    "borderRadius": 12
  }
}

为了与较旧的代理提示兼容,诸如 backgroundColor、backgroundOpacity、borderColor、borderWidth 和 borderRadius 之类的顶层样式键也被接受并保存在 styles 下。

事务性电子邮件

工具描述
list_transactional_emails搜索/筛选模板并按投递指标排序;返回主题和仪表板 URL。
get_transactional_email按 ID 或 slug 读取事务性电子邮件。
create_transactional_email从提示、HTML 或块创建事务性模板。
update_transactional_email更新事务性元数据或正文内容。
send_email按模板或 HTML 向共享的收件人、抄送和密送收件人发送一封电子邮件。

提示创建的事务性模板在服务器端生成,默认 为禁用以供审查。显式 HTML 或块模板保留 启用的兼容性默认值;显式传递 enabled 以覆盖任一 默认值。 对于直接发送,请传入 to、subject 和 html;MCP 服务器会将 html 映射到事务性 API 的 body 字段。对于已保存的事务性邮件,请通过兼容命名的 templateId 字段传入其 API 别名。

对于事务性发送,to、cc 和 bcc 各自接受一个地址或最多 50 个地址的数组。API 会发送一封带有共享收件人列表的邮件,并按 to、cc、bcc 的优先级顺序移除跨字段重复项。营销发送仍然要求恰好一个被接受的 to 地址,且不支持额外收件人。

send_email 变量支持用于重复块的嵌套数组,例如 { "event": { "items": [...] } }。当收件人与存储的订阅者通过外部 ID 或电子邮件匹配时,已保存的名字和姓氏会自动填充省略的姓名变量。显式值(包括空白)优先。

可选的 attachments 数组最多接受 10 个文件,总计 7MB。每个项目需要 filename 以及 Base64 content 或公共 HTTP(S) path 中的恰好一个。设置 contentId 以嵌入从 HTML 引用的 CID 图像,并可选择设置 contentType 以覆盖 MIME 检测。

当省略 trackingSettings 时,应用公司的 Transactional API 跟踪默认值。使用 trackingSettings.clickTracking: false 或 trackingSettings.openTracking: false 为单次发送禁用链接重写或打开像素。这些按发送的选项仅用于退出;它们无法启用被账户级或 Transactional API 默认值禁用的跟踪。使用 get_tracking_settings 和 update_tracking_settings 来检查或更改这些默认值。

对于代理和工作流重试,请在 send_email 中包含一个稳定的 idempotencyKey(最多 255 个字符)。每个逻辑邮件使用一个键,并在重试时发送相同的参数;该键在 14 天内有效。

分析

工具描述
get_stats获取 7d、30d 或 90d 的概览统计;按结构性邮件类型筛选。
get_transactional_stats按 ID 或别名获取一个已保存事务性邮件的全时段或限时指标。
get_campaign_stats获取营销活动表现、回复指标、附加转化目标和 Poll/NPS 摘要。
list_poll_responses列出每个受访者每个区块的最新 Poll/NPS 答案,包含身份和响应时间。
get_sequence_stats获取总体和逐步序列表现,以及按当前节点的实时活跃/等待注册计数。
list_email_metrics比较营销活动和序列步骤的漏斗、回复、转化和收入,包括跨序列步骤。
list_campaign_events列出营销活动的分页原始邮件事件。
list_sequence_events列出序列的分页原始事件,可选择限定到一个邮件步骤。
get_subscriber_activity获取订阅者的邮件统计、活动和注册信息。

营销活动和序列事件过滤器接受 transport_failure 以及投递、退信、投诉、互动、退订和延迟事件。传输失败描述 MTA 基础设施或出口路径耗尽;它们不会将有效的收件人地址分类为退信。

分析工具默认排除检测到的机器人、扫描器、链接预览和跟踪资产的打开/点击。当您需要原始互动诊断时,请将 includeMachineEngagement: true 传递给 get_stats、get_campaign_stats、get_sequence_stats、get_ab_test_stats、get_subscriber 或 get_subscriber_activity;包含的打开/点击活动行在 API 返回事件级活动时暴露 machine、engagementQuality 和 classificationReasons 字段。

get_sequence_stats.enrollmentCounts 是活跃和等待注册运行的实时快照,按当前节点分组。它计算注册令牌而非必然不同的订阅者,并且不受历史 period、start 或 end 过滤器的限制。

使用 list_email_metrics 进行跨营销活动或序列步骤的比较。传递 step 及可选的 sequenceId 值以汇总跨序列的相同步骤;使用返回的 automationNodeId 配合 list_sequence_events 或 list_email_sends 检查收件人。campaignId 不能与 sequenceId 或 step 组合使用。显式的营销活动和序列范围保留配置的零活动邮件,因此表现不佳的邮件不会被静默省略。

将 emailType: "transactional" 传递给 get_stats 以获取 Send API 和事务性 SMTP 的投递、打开、点击和回复率。这包括直接和已保存模板的发送。使用 send_email 返回的 emailSendId 配合 get_email_send,当您需要一次投递的状态和事件时间线时。当您需要一个已保存事务性邮件的聚合率时,使用 get_transactional_stats。其响应包括热门点击链接、投诉、回复、最新的永久/临时退信分类,以及单独的人工和机器打开/点击计数。直接内容发送没有稳定的模板 ID,仍可通过账户事务性统计和投递搜索获得。

当营销活动收集 Poll 或 NPS 答案时,get_campaign_stats 包含一个顶层的 polls 数组。每个订阅者每个投票区块使用其最新答案计数一次。NPS 摘要包括分数、平均值和推荐者/被动者/贬损者计数。这些是终身响应摘要,即使互动指标使用时间过滤器。

使用 list_poll_responses 读取谁回答了什么以及何时回答。它返回每个订阅者每个投票区块的最新答案,最新的在前,包括电子邮件、存储值、属性键和响应时间。传递 blockId 以限定一个投票;对于序列邮件步骤,将其自动化节点 ID 作为 campaignId 传递。不要通过扫描订阅者属性来重建此历史记录:属性没有响应时间戳,并且可能已被稍后重用相同键的邮件覆盖。

要列出计数背后的确切历史受访者,请调用 create_segment,字段为 pollResponse,操作符为 is,JSON 值限定到营销活动和摘要的 blockId:

{
  "v": 1,
  "campaignId": "camp_123",
  "blockId": "poll_1",
  "match": { "kind": "answer", "value": "loved" }
}

对于 NPS,使用类似 {"kind":"npsBucket","bucket":"detractors"} 的匹配;有效桶为 promoters、passives 和 detractors。摘要的 attributeKey 存储订阅者的当前/最新响应,可能被稍后重用键的投票覆盖,因此它不是精确的历史钻取。

团队、收件箱、Webhooks

工具描述
list_team_members列出团队成员和待处理邀请。
invite_team_member邀请队友作为管理员或查看者,可选择计费访问权限。
cancel_team_invitation取消待处理的团队邀请。
list_conversations列出订阅者回复对话,包含状态和未读过滤器。
get_conversation读取对话及其消息历史。
reply_to_conversation排队外发回复或添加内部备注。
update_conversation_status打开或关闭对话。
mark_conversation_read将对话中的所有消息标记为已读。
list_webhooks列出外发 webhook 端点。
create_webhook创建端点并在标准 MCP 上返回其一次性签名密钥;在 OpenAI 审核的路由上省略。
update_webhook更新 webhook 名称、URL、事件或状态。
delete_webhook永久删除 webhook 端点和投递历史。
test_webhook向 webhook 端点发送测试事件。
list_webhook_deliveries列出 webhook 的最近投递尝试。
replay_webhook_delivery重放 webhook 投递。

按列表的同意变更是作为选择加入的外发事件可用的:subscriber.list_subscribed 和 subscriber.list_unsubscribed。它们的负载标识订阅者和列表,将 action 报告为 added 或 removed,并包含变更 source(例如 preferences_page、dashboard、api 或 automation)。

使用 email.failed 事件处理终端投递失败,例如 MTA 传输路径耗尽。收件人退信继续使用 email.bounced。

当工作流需要在邮件或 SMS 营销活动结算后收到一个终端通知(包括有效的零收件人发送)时,使用仅显式的 campaign.sent 事件。当 create_webhook 在标准 MCP 上省略 events 时,不会添加它;在 OpenAI 审核的路由上,在仪表板中创建或编辑 webhook 时添加它。

AI 生成

工具描述
generate_email从提示生成品牌邮件块。
generate_sequence已弃用的别名,持久化基于目标的序列草稿。
generate_subject_lines生成 A/B 主题行变体。

生成的邮件内容默认包含公司的徽标和页脚。generate_email 接受 applyBranding: false 用于原始内容块,以及 emailType: "transactional" 用于不带退订链接的页脚。基于提示的营销活动继承公司配置的邮件字体。生成的内容作为草稿内容返回以供审核。使用 create_sequence 生成并持久化一个禁用的序列草稿,该草稿出现在 list_sequences 中;已弃用的 generate_sequence 别名执行相同操作。

SMS

工具描述
generate_sms根据提示生成短信文案。
get_sms_settings读取短信附加功能的就绪状态、额度、默认设置和已配置的号码。
get_sms_usage按号码比较发送量、投递结果、已扣额度、最近活动和测试发送。
update_sms_number_label更新号码的标签或每个号码的品牌前缀覆盖。
release_sms_number将号码永久退还给运营商并释放其工作区槽位。
send_test_sms发送测试消息,可选择使用 fromNumberId 指定已配置的发送方。

release_sms_number 是不可逆的。固定到已发布号码的活动或序列步骤将跳过其短信发送,直到它们被重新指向一个活跃号码。get_sms_usage 单独报告生产总量,与 testSends 分开。当 send_test_sms 省略 fromNumberId 时,它使用与生产发送相同的“最旧活跃号码”默认值。测试发送是真实的、扣取额度的消息,会绕过静默时段,并且每个公司在滚动24小时内限制为100条。

产品反馈

仅在用户明确要求助手向 Sequenzy 团队发送反馈时使用 submit_feedback。标准 MCP 可以在需要时包含结构化复现字段 userIntent、toolCalls、expected、actual 和 resourceIds 用于该报告。经 OpenAI 审核的路径仅接受消息、类别和可选的通用工作流上下文。不要包含无关的订阅者数据、电子邮件内容、原始 API 负载、调试数据或机密信息。

资源

服务器还公开只读的 MCP 资源。

资源描述
sequenzy://dashboard最近7天的实时概览统计。
sequenzy://company当前公司和本地化设置。
sequenzy://campaigns/recent最近10个活动及其状态和基本统计。
sequenzy://subscribers/recent最近添加的订阅者。
sequenzy://subscribers/engaged最活跃或参与度最高的订阅者。
sequenzy://sequences所有序列及其状态。
sequenzy://templates模板及其本地化状态。
sequenzy://segments已保存的细分及其订阅者数量。
sequenzy://tags标签及其使用次数。
sequenzy://health投递率指标和健康状态。
sequenzy://email-blocks每种电子邮件块类型的字段参考。
sequenzy://app-routes仪表板路由模板和设置选项卡。

示例提示

Add john@example.com with tags "vip" and "developer", then put them on the beta list.
Create a 4-email churn prevention sequence for users whose subscription expires soon. Leave it in draft mode.
Create a segment for subscribers who bought Stripe product prod_pro at least 3 times.
Draft a campaign about our new analytics dashboard, target the Pro users segment, and send a test to me.
How did the last campaign perform compared with the one before it?

安全性

  • 使用个人 API 密钥,而非共享的团队机密。
  • 密钥只能访问你的 Sequenzy 用户可以访问的公司。
  • 当不再需要访问权限时,从“设置 -> API 密钥”中撤销密钥。
  • 保持客户端审批提示在发送、调度、删除和批量更改时启用。
  • 对于活动和序列,优先使用草稿工作流,然后在 Sequenzy 中启动前进行审查。

故障排除

SEQUENZY_API_KEY environment variable is required

在 MCP 客户端配置中设置 SEQUENZY_API_KEY,或运行:

npx @sequenzy/setup

无效的 API 密钥

在“设置 -> API 密钥”中创建新的个人密钥,更新你的 MCP 配置,然后重启客户端。

缺少 API 密钥范围

调用 get_account 并检查 apiKeyPermissions。本地连接应打开 apiKeyPermissions.manageUrl,将缺失的范围添加到已加载的密钥中,然后无需重启即可重试。update_api_key 只能对已持有 api_keys:manage 的公司密钥执行此操作;请在账户级 API 密钥页面编辑个人密钥。托管的 OAuth 连接也可以断开并重新授权以获得更广泛的权限。工具错误包含所需的确切范围。

重复资源

如果工具调用会创建重复的细分名称或发送域名,服务器将返回稳定的 code、对代理友好的 description、具体的 resolution 和 docsUrl。对于细分,调用 list_segments 并重用现有细分 ID 或选择不同的名称。对于网站,调用 list_websites;如果所选公司未列出该域名,则它属于另一家公司或账户,必须移除、重新分配或替换为不同的发送域名。

工具不显示

  • 确认客户端使用的环境中存在 npx。
  • 编辑配置后重启 MCP 客户端。
  • 检查配置是否位于正确的客户端特定位置。

网络或 API URL 问题

服务器默认使用 https://api.sequenzy.com。如果你覆盖它,请验证 SEQUENZY_API_URL 指向一个可访问的 Sequenzy API 基础 URL。

开发

bun install
bun test
bun run type-check
bun run build

MCP 工具模式必须保持与严格客户端的兼容性:

  • 工具 inputSchema 根必须是纯 type: "object" 模式。
  • 不要在工具模式中的任何位置发布 anyOf。
  • 不要在工具模式的根级别放置 oneOf、allOf、enum 或 not。
  • 在处理程序中强制执行条件要求,并用测试覆盖它们。

此独立仓库镜像了主 Sequenzy 单体仓库中维护的 MCP 包。有关同步规则,请参阅 AGENTS.md。

许可证

MIT

面向代理的原生发现

Sequenzy 为代理网络和 A2A 风格发现发布机器可读清单:

这些文件将 Sequenzy 描述为代理的授权电子邮件自动化能力。它们明确排除抓取、垃圾邮件和未经请求的冷外联用例。

工作区角色

账户密钥访问将密钥范围与你当前的工作区角色相结合。get_account 在 apiKeyPermissions.roleRestrictedScopes 中报告被阻止的范围;canSendLive 表示至少有一个允许的投递工作流可用,而不是每个发送工具都被允许。

你可以邀请 marketer 来管理订阅者、营销活动和序列,而无需授予事务性邮件、工作区设置、团队或计费的访问权限。营销人员选择现有的发件人/回复配置文件。事务性支持的活动、A/B 测试和序列源通过预览、共享、分析和发送历史保持保护。营销人员和受限成员无法获得计费访问权限。