Fastmail's MCP server vs. faist
Both speak MCP. Both connect to your Fastmail. But they sit on opposite sides of the inbox: Fastmail's MCP is the live-ops layer; faist is the historical index. This page is a frank side-by-side, including when to use one, both, or neither.
TL;DR
Use Fastmail's MCP when you want your AI to read, draft, send mail, or pull a calendar entry — live operations against the inbox. Use faist when you want your AI to aggregate across the archive: group, count, filter, semantic-search, or join across years of mail. They compose cleanly: connect both to the same Claude / Cursor / Continue and let the model pick.
At a glance
| Dimension | Fastmail MCP | faist |
|---|---|---|
| Primary surface | Tools (read, search, draft, send, calendar, contacts) | SQL (SELECT against jmap.emails / email_chunks / jmap_accounts) |
| Use case | Live ops — "draft a reply", "what's on my calendar tomorrow" | Historical search & analytics — "who emailed me 10× without a reply?" |
| Indexing | None — walks the inbox per question | Full backfill + incremental tail, embeddings precomputed |
| Search | JMAP search (provider-side) | pgroonga BM25 + pgvector cosine fused with RRF |
| Data location | Stays in Fastmail | Your Supabase project (you own the DB) |
| Auth | OAuth (read / write / send tiers) | OAuth 2.1 + DCR, or per-user PAT |
| Transport | Streamable HTTP | Streamable HTTP |
| Providers | Fastmail only | Any JMAP (Fastmail, Stalwart, generic) |
| Open source | No | Yes (MIT) |
| Self-host? | No (hosted by Fastmail) | Yes — Docker Compose or Vercel + Railway |
When Fastmail's MCP is the right choice
- You want the agent to act on your mailbox — draft replies, send mail, file messages, edit calendar events.
- You don't want to run any infrastructure: it's a hosted endpoint with OAuth.
- You're happy to let the model query the live inbox per question, paginating JMAP as needed.
When faist is the right choice
- You want to aggregate across the archive — counts, group-bys, time-window analyses — without paying the JMAP round-trip per question.
- You want semantic search over mail bodies (pgvector) fused with strong keyword precision (pgroonga BM25).
- You want the data in a database you own, with your own backups, your own retention, and the option to drop faist any day.
- You use Stalwart or another JMAP provider, not just Fastmail.
Using both together
Claude Code, Cursor, Continue, Cline, and VSCode's native MCP all support multiple MCP servers connected at once. The cleanest setup:
- Fastmail MCP at
https://api.fastmail.com/mcpfor live read/write/send. - faist at
https://faist.app/mcpfor SQL over the archive.
Ask "summarize my Q4 revenue from acme.com" and the model will reach for faist's sql-query tool. Ask "draft a reply to Sarah's last message" and it'll reach for Fastmail's tool. Same conversation, two surfaces.
FAQ
- Is faist a replacement for Fastmail's MCP?
- No — faist complements it. Fastmail handles live ops; faist handles historical aggregation, analytics, and search. Most users will want both connected at once.
- Does faist need my Fastmail password?
- No. You generate a Fastmail API token (Mail · Read-only) at app.fastmail.com/settings/security/tokens and paste it once. faist encrypts it with an AES-256 KEK before storing.
- Will my email content be used to train a model?
- No. faist sends embedding requests through zero-retention endpoints. No body, no metadata, nothing is used to train a model.
- How do I get started?
- Read the docs — the quickstart connects Fastmail, installs the schema in your Supabase, and prints an MCP config snippet you can paste into Claude Code, Cursor, or Continue.
Try faist
Two minutes, a Fastmail API token, and a Supabase account.