reflow
OfficialSends email through Resend, using configured templates and workflows to deliver messages to contacts.
Provides durable workflow execution for email enrollments, keeping them alive across restarts, long waits, and retries.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@reflowCreate a welcome email workflow, then enroll a new contact."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.

Reflow
Reflow runs email workflows that survive restarts, long waits, and retries.
You describe the flow. An MCP agent (or you, via CLI) creates templates, saves a graph, publishes it, and enrolls contacts. Temporal keeps each enrollment alive. Resend sends the mail.
There is no operator dashboard. CLI and MCP use the same operations.
What you need
Node.js 22+
pnpm 11+
Docker Compose (Postgres + Temporal)
A Resend API key if you want real email (optional for validate/simulate)
Related MCP server: Nitrosend
1. Start the stack locally
cp .env.dev.example .env
pnpm install --frozen-lockfile
make dev-infra
pnpm migrate
umask 077
openssl rand -base64 18 > /tmp/reflow-admin-password
pnpm setup -- --email admin@example.com --name Admin --password-file /tmp/reflow-admin-passwordStart three host processes (keep each terminal open):
pnpm dev # API :3000
pnpm dev:worker # Temporal worker
pnpm dev:dispatcher # Outbox / webhook side workLocal ports:
Service | Address |
API | |
Postgres | localhost:5433 |
Temporal | localhost:7233 |
Temporal UI |
Stop infra with make dev-infra-down.
For production Compose with TLS, see docs/DEPLOYMENT.md.
2. Sign in
pnpm build
pnpm link --global # once, so `reflow` is on your PATH
export REFLOW_URL=http://localhost:3000
reflow auth login --email admin@example.com --password-file /tmp/reflow-admin-password
reflow workspace use
rm /tmp/reflow-admin-passwordYour session is stored under ~/.config/reflow/. Later accounts need an admin (account.create). Open signup stays off unless ALLOW_REGISTRATION=true.
3. Send email (Resend)
Put your key in .env.local (do not commit it):
printf '%s\n' 'RESEND_API_KEY=re_...' >> .env.local
chmod 600 .env.localAdd to .env.local:
RESEND_API_KEY=re_...
REFLOW_FROM="Reflow <onboarding@resend.dev>"Restart pnpm dev and pnpm dev:worker so they reload the key.
With Resend’s test sender (onboarding@resend.dev), you can only send to the email on your Resend account. Use a verified domain for other recipients. See the complete Resend setup guide for domain verification, webhooks, and safe test addresses.
4. Email templates (React Email)
Author .tsx locally. The CLI renders with react-email render and uploads HTML + plain text. The API/worker never execute TSX; they only interpolate {{contact.*}} / {{variables.*}} at send time. Local templates can import whatever you need.
reflow template init # creates emails/welcome.tsx
reflow template preview # React Email viewer on :3030
reflow template push emails/welcome.tsx \
--name Welcome \
--subject "Welcome, {{contact.firstName}}"
# Re-running with the same --name revises the draft and publishes a new version (no duplicate rows).
reflow template listReact Email 6 needs both react-email (components + CLI) and @react-email/ui (preview app) in the project that owns emails/. This repo already lists them. In another project, install matching versions (pnpm add react-email@6.9.5 @react-email/ui@6.9.5). Saying yes to the preview prompt only installs @react-email/ui; templates still import from react-email.
Add Component.PreviewProps on each template so template preview has sample data. push renders locally, creates + publishes, and prints templateVersionId. Pin that id on each email.send node.
workflow.validate / workflow.publish fail with TEMPLATE_REFERENCE_INVALID (plus hint + details.nextSteps) if a node points at a missing template. template.archive fails with TEMPLATE_IN_USE while any workflow draft or published version still pins it, and archived templates cannot be republished.
5. First project: welcome + nudge
Follow examples/welcome-nudge/README.md:
reflow template preview/reflow template pushfor the two.tsxemailsPin the version ids in
workflow.template.jsonworkflow.validate→workflow.create→workflow.publishcontact.upsert→enrollment.create
6. Day-to-day commands
reflow call system.capabilities
reflow call workflow.actions
reflow template list
reflow call workflow.list --input '{"workspaceId":"YOUR_WORKSPACE_ID"}'
reflow call message.list --input '{"workspaceId":"YOUR_WORKSPACE_ID"}'MCP clients talk to http://localhost:3000/mcp with a session token or API key. Cursor can use .cursor/mcp.json.
Mental model
Piece | Role |
Template | Subject + React Email TSX (or plain body) with |
Template version | Immutable pin used by |
Workflow | Graph of actions, waits, branches, ends |
Workflow version | Immutable pin used by enrollment |
Contact | Recipient + fields ( |
Enrollment | One durable Temporal run for one contact |
Event | Named signal into a waiting enrollment |
Installed actions today: email.send, contact.update. See docs/OPERATIONS.md.
Checks
make checkDocs
Doc | Topic |
Small end-to-end tutorial | |
Full operation catalog | |
Auth and accounts | |
Production Compose | |
Resend API keys, sender domains, webhooks, and testing | |
System design | |
Product requirements | |
Agent operating skill |
This server cannot be deployed
Maintenance
Related MCP Connectors
Send transactional email and manage domains, audiences, and broadcasts from any MCP client.
Email infrastructure for AI agents — send, receive, search, and reply to email over MCP.
Email inboxes for AI agents: send, receive, reply, search, and manage threaded email over MCP.
Create and manage Templated email templates from any MCP client - bring your own model.
Related MCP Servers
- AlicenseAqualityDmaintenanceEmail infrastructure for AI agents — create inboxes, send/receive email, search messages, and manage threads via MCP tools.107 npm2MIT
- AlicenseNot gradedqualityCmaintenanceAI-native email marketing platform built for agents. Control campaigns, automations, contacts, templates, and analytics via MCP with OAuth authentication.76 npm2MIT
- AlicenseAqualityBmaintenanceEnables MCP-capable agents to send, receive, and manage email, including domains, inboxes, contacts, templates, webhooks, and delivery metrics, through the Drin API.894 npmMIT
- FlicenseBqualityBmaintenanceEnables external AI agents to read, send, and manage email over IMAP/SMTP via MCP, including inbox listing, search, drafts, scheduled/batch sending, and operations like reply, archive, and labels.303-