MCP-operable email automation

Email automation your agents operate.

Cadence is a deterministic infrastructure layer. Claude Code or Codex spin up a team, author emails, build linear sequences, wire triggers, and read stats — entirely over an MCP server. No journey-builder UI.

mcp · cadence
agent › operating cadence over mcp
create_team"Advanced Pest Mgmt"↳ apm
upsert_templatewelcome · day-3 · day-93 stored
create_sequenceevent:lead.createdactive
add_stepwait 0m → welcomestep 1
add_stepwait 3d → day-3step 2
lead.createdjane@charlotte · interest=siding→ enrolled ×2
the model

One door in. A scheduler that never stops.

No durable run per enrollment — always-latest content, no wait-for ceilings, trivially indefinite.

01

A lead arrives

Any source → Zapier or a direct webhook hits one authenticated endpoint. The source's stable id is the idempotency key.

02

Triggers match

Every active sequence whose trigger + equality filter passes enrolls the contact independently. Roofing and siding, never branching.

03

The sweep sends

A scheduled task claims due enrollments under a lease, renders the currently-stored template, sends once, advances on cadence.

04

It runs forever

Reach the last email and park. Append email 13 and parked contacts wake to receive it. Only compliance stops a send.

primitives

Deterministic parts. Agents supply the content.

The app guarantees correctness — idempotency, leasing, tenant isolation, compliance. Agents bring the copy and the config.

teams

Isolated workspaces with their own contacts, sending identity, and API key. RLS from day one.

templates-as-data

Authored in React/MJML, rendered to inert HTML, pushed per team. No deploy, public-safe, previewable.

linear sequences

Strictly linear and open-ended. Agents append emails over time; contacts park and resume.

triggers + filters

contact_added · audience_added · event, each with an optional equality/in filter. No OR, no negation.

events + audiences

Idempotent named events and static audiences — the other two ways a contact enters a cadence.

stats spine

Sends, opens, bounces, unsubscribes on one table. Per-email, over time. No clicks, no cron.

control plane

The onboarding path is a sequence of tool calls.

new client → create_team → wire the webhook → author emails → create_sequence → live. The same API a public tier would expose.

create_teamupsert_templatecreate_sequenceadd_stepsend_eventget_sequence_stats

A contact who reaches the latest email parks. Write email 13 and they wake and receive it on cadence. The only stops are unsubscribe, hard bounce, and complaint — enforced at ingest and re-checked before every send.

deliveredparked · awaiting step 13unsubscribe → stopped

Spin up a team in one MCP call.

Nurture inbound leads indefinitely — authored in code, operated by your agent, observed here.