Skip to content

Mailroom

Shared email inbox for people and AI agents, with reply drafts held for approval and a built-in MCP server

Mailroom unified inbox across three addresses, with an agent draft awaiting approval

Mailroom collects mail for several addresses and domains in one Gmail-style web app, where people read and reply. It receives through Email Routing and replies through Cloudflare Email Sending, all from one Worker in your own Cloudflare account.

You read from a unified inbox or a per-Inbox view, with conversations threaded by their In-Reply-To and References headers. New mail and replies can carry attachments. The app also has full-text search, unread and draft filters, bulk archive and opt-in Web Push notifications. The Worker rejects mail sent to an address you have not added as an Inbox in Settings. AI features start switched off and are configured per Inbox. Drafting uses your base instructions and playbooks to write a reply to the latest inbound message, and that draft waits for your approval; Mailroom never sends it on its own. Natural-language label rules tag incoming mail. The Worker flags auto-submitted and bulk senders so they never get automated replies. External agents connect to /mcp over OAuth 2.1 with scoped read and send access. Every send carries an idempotency key, and each identity is capped at 100 MCP sends per day by default. A single Worker serves the React app, the Hono API, the inbound email handler, the draft queue consumer and the MCP server. D1 stores inboxes, conversations and settings, R2 keeps raw MIME and attachments, Queues retry draft jobs with a dead-letter queue, and KV holds MCP OAuth state. The AI binding calls the drafting and labeling models. Cloudflare Access guards the web app; the API verifies Access JWTs and fails closed when they are missing. The Deploy to Cloudflare button provisions the storage, queues and KV namespace, and the deploy script applies migrations and creates Web Push keys.

Built for: Solo founders and small teams with a domain on Cloudflare who want a private shared inbox that people and AI agents both work from.

What you can use it for

  • Run support@ and hello@ for a product domain from one shared web inbox
  • Review AI-drafted replies before they reach customers
  • Let an MCP client search conversations and send mail from a registered Inbox
  • Tag inbound guest-post or link-exchange pitches with natural-language label rules

Deploy

  • One-click · main path

    Branch main, requires Workers Paid

  • CLI

    Branch main, requires Workers Paid

    Resource commands come from the manual setup in docs/deployment.md, which then deploys through Workers Builds with npm run deploy as the deploy command.

    git clone https://github.com/wong2/cf-mailroom.git
    cd cf-mailroom
    npm ci
    npx wrangler login
    npx wrangler d1 create mailroom
    npx wrangler r2 bucket create mailroom-raw
    npx wrangler queues create mailroom-drafts
    npx wrangler queues create mailroom-drafts-dlq
    npm run deploy

After the button deploy, enable Cloudflare Access and add the two Worker variables the setup screen shows. Then turn on Email Routing and Email Sending for the domain, add an Inbox in Settings and route its address to the Worker.

What it needs to run

  • Workers AIAI
  • D1 databasesmailroom
  • KV namespacesOAUTH_KV
  • Queues (consumer)mailroom-drafts
  • Queues (producer)mailroom-drafts-dlq, mailroom-drafts
  • R2 bucketsmailroom-raw
  • Email sendingEMAIL

Good to know

Replies can go out only after the sender domain is onboarded to Cloudflare Email Sending. The default drafting model (openai/gpt-6-luna) and labeling model (typesafe/jev) are third-party models from Cloudflare's AI catalog; Settings accepts a Workers AI model id for drafting instead. New mail goes to one recipient at a time, and outbound attachments are capped at 3 MB in total. Conversations do not show delivery or bounce status yet. MCP clients need an extra Access Bypass application. Upstream fixes do not arrive automatically; you merge them into the repository the button created.

Cost on Cloudflare

Paid Cloudflare plan required

Receiving mail works on Free: inbound Email Routing is unlimited on all plans, and D1, R2, KV and Queues (10,000 operations per day) have Workers Free allowances. Replying to arbitrary recipients through Email Sending requires Workers Paid ($5 per month with 3,000 emails included, then $0.35 per 1,000). AI Gateway credits for the default third-party models carry a 5% purchase fee.

Source

The estimate is based on Cloudflare’s documented limits and the app’s configuration. What you pay depends on your usage and plan.

Where this comes from

An alternative to Gmail.

Listing history

  • Oct 2, 2026 · Mailroom listed
  • HQBase inbox in dark mode: mail folders on the left and today's conversations across all mailboxes

    Shared team inbox for support@ and sales@ addresses on several domains, with access controls and an MCP server

    Deploy
    One-click
    License
    AGPL-3.0-only
    GitHub stars
    337 stars
    Last commit
  • EmailFlare Inbox landing page with a mockup of the conversation list and a contact thread

    Transactional email API and shared team inbox built on Cloudflare Email Sending, Email Routing and D1

    Deploy
    CLI
    License
    MIT
    GitHub stars
    252 stars
    Last commit
  • ResolveHQ three-pane inbox with ticket queues, an open ticket thread and an internal note

    Email helpdesk for support teams of one to fifteen people who have outgrown group email

    Deploy
    One-click
    License
    ResolveHQ Source-Available License
    GitHub stars
    202 stars
    Last commit