Goal: full email API for agents (inbound + outbound + threads) plus advantages AgentMail does not have.
| AgentMail | MailAgent v1.0 |
|---|
| Inbound | ✅ | ✅ |
| Outbound / reply | ✅ | ✅ |
| Threads | ✅ | ✅ |
| Attachments | ✅ | ✅ |
| Realtime (SSE/webhooks) | ✅ | ✅ + MCP progress |
| Custom domains | ✅ API | ✅ |
| Semantic search | ✅ | ✅ |
| Document extraction | ✅ | ✅ |
| MCP | ✅ | ✅ OAuth + 44 tools |
| SDK (TS/Python) | ✅ | ✅ TS SDKs + Python + MCP |
| Enterprise / SOC 2 | ✅ | ✅ audit log + retention |
| Open source | ❌ | ✅ MIT |
| Self-host (Cloudflare) | ❌ | ✅ |
QA / E2E (@mailagent/qa) | ❌ | ✅ |
| Simulate without SMTP | ❌ | ✅ |
| Diagnose on timeout | ❌ | ✅ |
| Agent verify + primaryAction | partial | ✅ |
| Multi-step run memory | partial | ✅ session API + MCP |
| Developer email relay | ❌ | ✅ notifyEmail + delivery log + quota |
| Task | API / MCP |
|---|
POST /v1/inboxes/:id/send | text/html, to[], cc[] |
POST …/messages/:id/reply | In-Reply-To / References |
GET …/threads, GET …/threads/:id/messages | conversation view |
MCP mailagent_send_message, mailagent_list_threads | agents |
| Inbound → thread_id (subject / headers) | auto-grouping |
Resend: verified send domain (OUTBOUND_FROM), Reply-To = inbox address.
| Task | |
|---|
POST /v1/domains | add domain, DNS instructions |
GET /v1/domains/:id/verify | poll MX/SPF status |
POST /v1/inboxes { username, domainId } | like AgentMail |
| Team-scoped domains | multi-tenant |
| Task | |
|---|
| Embedding at ingest (Workers AI / external) | pgvector in Neon |
GET /v1/inboxes/:id/search?q= | semantic + keyword |
MCP mailagent_search_messages | |
| Task | |
|---|
POST /v1/messages/:id/extract { schema } | JSON from body/attachments |
| Presets: invoice, receipt, 2FA | |
| Keep OTP/links as today | backward compatible |
| Task | Status |
|---|
| Stripe checkout + portal (API) | ✅ code; live secrets optional |
| Web console (inboxes, threads, domains) | ✅ |
| API keys UI, team invites | ✅ |
| Codex Marketplace publish | manual |
@mailagent/qa, simulate, diagnose, contract CI, Playwright simulate gate
- Remote MCP + OAuth + DCR
- Self-host docs (INTEGRATE.md)
- Service presets + allowlist
- Agent run session memory (
GET/PATCH …/runs/:runId/session)
- Time-to-first-OTP — MCP one-shot + simulate for CI
- Time-to-debug-failure — diagnose API (unique)
- Self-host TCO — $0 infra except Cloudflare + Neon
- QA adoption — Playwright fixture installs vs generic inbox API
v1.0 baseline complete — API, MCP, QA starters, @mailagent/mcp@0.2.16, @mailagent/agent@0.1.13, @mailagent/qa@0.1.17, PyPI mailagent-agent@0.1.0.
Waiting on external: catalog PR merge · first external QA pilot feedback · Stripe · Codex Directory · SOC 2.
New repo work: product features from pilot feedback when issue #5 has data.
Discovery: GET /v1/agent → packages · distribution · DISTRIBUTION-STATUS.md.