About mbox-mcp
mbox-mcp is an MCP server for searching local .mbox archives and .eml files. It is for people analyzing saved email without connecting to an account; message parsing is on demand, and attachment contents are not returned.
Key features
- 01Index .mbox and .eml archives
- 02Search by keyword and envelope fields
- 03Filter by date range
- 04Parse individual messages on demand
- 05List attachment names and sizes
Use cases
- 01Find an old message in a Takeout export
- 02Summarize correspondence with a contact
- 03Review archive senders and date range
MCP support
Exposes archive indexing, message search, and message retrieval tools to MCP clients. It reads local files without OAuth, cloud, or IMAP connections.
Configuration
Local server config is the same for every client. Copy it into your client’s MCP config file.
Tools
3Saved tool list · updated 2w ago
| Parameter | Type | Required | Description |
|---|---|---|---|
| path | string | Yes | Path to an .mbox file (e.g. a Google Takeout export) or a directory of .eml files |
Details
From the project READMEmbox-mcp
An MCP server for local email archives. Point it at a Google Takeout .mbox export or a folder of .eml files and ask Claude things like:
- "Who did I email most in this archive?"
- "Find the message where the landlord mentioned the lease renewal."
- "Summarize my correspondence with [email protected] from early 2026."
Everything stays on your machine. No OAuth, no app passwords, no IMAP connection, no cloud. Every other email MCP server connects to a live account — this one reads the archive files you already have, which is exactly what you want for the 15 years of Gmail sitting in a Takeout export.
Quick start
Claude Code
claude mcp add mbox -- npx -y mbox-mcp
Claude Desktop — add to claude_desktop_config.json:
{
"mcpServers": {
"mbox": {
"command": "npx",
"args": ["-y", "mbox-mcp"]
}
}
}
Then: "Open C:\Takeout\Mail\All mail Including Spam and Trash.mbox and tell me about it."
Tools
| Tool | What it does |
|---|---|
open_archive | Index an .mbox file or .eml directory: message count, date range, top senders |
search_messages | Search by keyword, sender, subject, date range — plus bounded body-text search |
get_message | Fully parse one message: decoded body, headers, attachment names/sizes |
Built for large archives
A Takeout mbox is often multiple gigabytes with 100k+ messages. The design reads the minimum, lazily:
- Streaming index — one pass in 8 MiB chunks, recording byte offsets; only the current message's first 16 KiB is ever held for envelope parsing (sender, subject, date, RFC 2047 decoding).
- Full MIME on demand — reading a message parses just that message (postal-mime: nested multipart, charsets, quoted-printable/base64). Attachments are listed with names and sizes, never dumped into context.
- Honest body search —
body_queryonly full-parses messages that already match your envelope filters, stops at a scan cap, and reports how many it scanned, so the model knows to narrow by sender or date first. - Staleness-aware cache — archives are indexed once per process and re-indexed if the file changes.
Notes and limitations
- mbox variants: Takeout and Thunderbird produce
mboxrd(bodyFromlines are quoted as>From), which splits cleanly. Plainmboxoarchives with unquoted bodyFromlines can over-split. - Attachment contents are never returned or written anywhere.
- PST/OST and Maildir are out of scope for now.
Development
npm install
npm test # offline tests — synthetic archives built in-suite
npm run build # tsc → dist/
node scripts/smoke.mjs # end-to-end: generates an archive, drives the server over stdio
Architecture: src/archive.ts (streaming indexer, header decoding, envelope filtering) and src/reader.ts (per-message MIME parsing) are pure logic; src/index.ts is the MCP wiring. The test suite includes a chunk-seam property test: indexing with pathological 17-byte chunks must produce an identical index to whole-file reads.
License
MIT
Comments
New to MCP?
From what the protocol is to installing your first server, these answers cover most first questions.
An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.