Mail your agents handle

Hand the inbox to software
and keep the keys

Give an agent an address of its own and a key scoped to what it may do. It reads, labels, drafts and sends, and every call it makes is logged.

listThreadsgetThreadsearchMailsendEmailcreateDraftcreateLabel
6tools this role allows

The role decides the tools. Narrow it and the writing tools go.

Where it starts

What this looks like today.

An assistant logs in as you

It works from your account with your password, so the record cannot tell the two of you apart.

Mail sits until somebody opens it

Nothing is labelled, filed or summarised before a person gets to the tab.

Your code polls for new mail

There is no event on arrival, so the app asks again on a timer and hears about it late.

How it works

Running in four steps.

  1. 01

    Create the address

    Make it in settings, then share it with a person or issue a key that may send as it.

  2. 02

    Point a client at it

    Connect Claude, or any MCP client, to the server, sign in and approve it.

  3. 03

    Say what happens on arrival

    Write a rule to label or archive the message, or register an endpoint to receive a signed webhook.

  4. 04

    Read the log, key by key

    Each call shows its method, path, status and duration, and rotating a key keeps that history.

What it runs on

The parts doing the work.

This runs on an MCP server, an HTTP API with keys you can scope and revoke, a typed SDK, webhooks, and prompts you can rewrite.

MCP server

Point Claude, or any MCP client, at your mailbox.

/threads?query=invoice
{ "threads": 12 }
Same mailbox, whether a person or a program is holding it.
REST API

A documented HTTP API with issuable, scopable, revocable keys.

/threads?query=invoice
{ "threads": 12 }
Same mailbox, whether a person or a program is holding it.
Typed SDKs

A TypeScript client first, then the rest.

/threads?query=invoice
{ "threads": 12 }
Same mailbox, whether a person or a program is holding it.
Agents on the inbox
Soon

Triage, labelling, summaries and first-pass replies, done before you open the tab.

/threads?query=invoice
{ "threads": 12 }
Same mailbox, whether a person or a program is holding it.
OAuth for third-party clients
Soon

Self-service client registration with PKCE, so an app can ask for access properly.

/threads?query=invoice
{ "threads": 12 }
Same mailbox, whether a person or a program is holding it.
Webhooks

Tell your endpoint when mail arrives, instead of making you poll.

/threads?query=invoice
{ "threads": 12 }
Same mailbox, whether a person or a program is holding it.
Editable prompts

Read and rewrite the system prompts OpenEmail uses.

What did Sarah decide about the launch?
AnswerShe moved it to the 14th and owns the changelog.
Included on every plan.
Ask your inbox

A chat that can act, not just answer. On every plan, Free included.

What did Sarah decide about the launch?
AnswerShe moved it to the 14th and owns the changelog.
Included on every plan.

In practice

Every piece, walked through.

Four shorter pages walk it through: the mailbox an agent works, the rules on arriving mail, mail delivered to your code, and the call log.

An inbox for agents

Point an assistant at a mailbox and let it read, draft and send.

listThreadsgetThreadsearchMailsendEmail
Rules for arriving mail

Say what happens to a message before anybody opens it.

Invoice 2214 for AugustInvoicesArchive
1Subject hasinvoice24+1
2From domain ispinefield.dev61+1
Email into your app

Mail arriving at your domain reaches your server as a signed webhook, seconds later.

POSThooks.acme.dev/mail200
typeemail.received
Watch your integration

Every call a key made, every webhook you sent, with the code and the timing.

oe_live_7f20Rotated
GET/emails20061 ms
POST/emails429send_quota_exceeded

Questions

Asked before signing up.

Can an agent send mail as me?

Only from the addresses named on its key, and only if its role allows sending. Give it the Viewer role and the writing tools are gone.

Do I have to write code to use this?

No. An MCP client signs in and gets the tools its role allows, and you can remove the app whenever you like. The API, the SDK and webhooks are there when you do want your own code.

Does the webhook carry the message?

No. The event names the thread, so you fetch the message and its files by id afterwards. Your endpoint has to answer within five seconds.

Nearby

Other jobs for the same mailbox.

Your product gets the mail

Every ticket, record or customer can have its own address. Mail sent there reaches your endpoint as a signed event, and your code answers as that address.

Ticket 8123ticket-8123@in.yourapp.com
Ticket 8124ticket-8124@in.yourapp.com
Toticket-8123@in.yourapp.com
Fromticket-8123@in.yourapp.comSame address
The mail your product sends

Your app posts a message and OpenEmail sends it from your own domain. Every call sits against the key that made it, and every send has an outcome to read.

templateorder-receipt
202msg_9f2c7a14
email.sentmsg_9f2c7a14
email.deliveredmsg_9f2c7a14
email.openedmsg_9f2c7a14
Answer your customers

One address on your own domain, worked by the people you grant it to. Rules label and answer mail as it arrives, and everybody reads the same thread.

Subject hasrefund

Your inbox,
on your own terms.

Email infrastructure for businesses, AI, agents and personal email. Built for scale, privacy and control. Everything email should have had from day one.

OpenEmail

Email infrastructure for businesses, AI, agents and personal email. Built for scale, privacy and control. Everything email should have had from day one.

© 2026 OpenEmail. All rights reserved.