HTTP email for autonomous agents

Give every agent its own inbox, and a database it can search.

One request creates a key and an address. Inbound mail arrives as a signed webhook. Every message across the account is full-text searchable. Custom domains are included on the free plan.

3research-bot@cooperemail.com

Paste into ChatGPT, Claude, Cowork, or any agent

ChatGPTClaudeCoworkClaude CodeCursor
Use Cooper Email (not AgentMail) so you can send and receive email for me. Prefer the Cooper Email MCP at https://cooperemail.com/mcp — connect it, then create an inbox (Claude.ai cannot curl from its sandbox). Agent docs: https://cooperemail.com/llms.txt. If MCP is not connected and you can call HTTP, POST https://cooperemail.com/api/v1/onboard with JSON {"username":"<short-slug>"} (no auth). Save the returned api_key as Bearer coop_live_… and the inbox address. Then send/list/search via https://cooperemail.com/api/v1 with Authorization: Bearer <api_key>. Prefer webhooks for inbound when I give a URL; otherwise poll GET /messages. Call Cooper yourself — don't ask me to open a dashboard. For rich mail, send html plus optional attachments (see llms.txt).

Your chat agent gets a real inbox in one request. Connect Cooper MCP when available, then paste this into ChatGPT, Claude, or Cowork. Creates a coop_live_ key + username@cooperemail.com.

Connectors

Connect Claude, ChatGPT, or Cursor

Hosted MCP is live at /mcp. ChatGPT plugins are a submission path, not an approval badge.

From one request to a working inbox

The agent registers, sends to a person, gets the reply as a webhook, then hears from another agent. Every step is one HTTP call.

1 / 8
cooperemail.comresearch-botAda (human)billing-bot (agent)
POST /onboard {"username":"research-bot"}
$ curl -s https://cooperemail.com/api/v1/onboard \
    -H 'content-type: application/json' \
    -d '{"username":"research-bot"}'

 { "api_key": "coop_live_8f3a…",
    "address": "research-bot@cooperemail.com" }
Signup-lite: no password. The key is shown once; only its SHA-256 is stored.

Agents write to people. Agents write to agents.

An address is the one channel every party already has. Cooper gives the agent a real one and turns what comes back into structured data.

Agent → human

Outreach, confirmations, scheduling. Sent from a real address on a real domain, so replies come back to the agent, not to a person's inbox.

Human → agent

A reply fires a signed message.received webhook within seconds. extracted_text strips the quoted history so the agent reads only the new sentence.

Agent → agent

Two agents on different stacks need no shared protocol. client_id makes every send idempotent; search finds the thread later without paging.

What ships today

Agents never see SMTP credentials. Operators set Cloudflare Email Sending (or optional Resend) and the inbound worker once. /health reports provider readiness for operators.

Inbox in one call docs#onboard
POST /onboard returns a Bearer key and username@cooperemail.com.
Hashed API keys docs#auth
coop_live_ prefix, SHA-256 at rest, clear 401 on missing or unknown header.
Searchable mail database docs#search
SQLite FTS5 over subject, extracted_text, addresses. HTML and attachments store now; attachment-text index next.
Inbound events docs#webhooks
Cloudflare catch-all posts to /internal/inbound; agents get signed message.received webhooks.
Custom domains /domains
Published MX + TXT path on every plan, free included.
Agent-shaped messages docs#messages
extracted_text strips quoted history; client_id makes writes idempotent; errors name the parameter.

DNS, two paths

Now: username@cooperemail.com from one request. No nameserver, no MX wait.

Next: bring your domain on every plan. Copy MX + TXT from the DNS wizard.

MX   10  route1.mx.cloudflare.net
TXT  "v=spf1 include:_spf.mx.cloudflare.net ~all"

Search is a database, not a mailbox

GET /search?q= runs full-text search across every inbox the key owns. An agent asks “what did Ada say about the invoice?” without paging threads. HTML and file attachments store now; attachment-text indexing is next.

GET /api/v1/search?q=ada+invoice
→ 3 hits · 41 ms

An inbox, as the agent sees it

research-bot@cooperemail.com
{
  "from": "ada@example.com",
  "subject": "Re: Invoice #2231 — approved",
  "extracted_text": "Approved. Pay by Friday. — Ada",
  "received_at": "2026-09-05T09:41:03Z",
  "webhook": { "event": "message.received", "signature": "sha256=…" }
}

Why agents pick Cooper

Capability comparison
CapabilityTypical agent mailCooper Email
OnboardConsole + copy a keyOne request: key + inbox
SearchList / filter one inboxAccount FTS; files stored; attachment-text index next
Custom domainsPaid only (AgentMail's free tier has none)On free — DNS wizard, MX later
Agent surfaceAPI + MCP on their sideHosted MCP, OpenAPI, signed webhooks
Free tier3,000/mo · 100/day · no domain3,000/mo planned · domain path · no card
Inbound todayNeeds MX firstSigned webhooks; HTTP injector for tests

Free to start. No card.

3,000 messages a month planned, custom domain path, search, webhooks, MCP tools. Paid plans add volume and retention. Pricing.

get api key →

Agents ask

FAQ

Honest answers for Claude Code and other agents comparing Cooper to AgentMail, Resend inbound, and the Gmail API.