mail-index MCP server
Local-first, read-only MCP server for recall over your Gmail: search, contacts, threads, digests.
4 stars59 downloads/wk
Reviews
Write oneNobody has reviewed mail-index yet.
If you have run it, two minutes of your experience saves the next person an afternoon.
mail-index tools (32, 3 write)
write = sends, deletes, buys or postsRead from the package source without running it. The installed server may list more.
archive_messageOPT-IN WRITE — MUTATES the mailbox. Archive one message (remove its INBOX label), given its <account:message-id> ref. Requires a gmail.modify grant; the default read-only install refuses with the exact re-auth command. Use only when the user explicitly asked to archive.
cadenceInbound frequency per sender BRAND (registrable domain): volume, distinct senders, first/last seen, messages-per-month — over the whole index or since a time (30d, 1mo, ISO). Pass "category" to scope to one entity category you assigned via save_domain_category (e.g. all "expedition-operator" senders at once). Deterministic — use this instead of hand-writing SQL over senders.
catch_upThe "what did I miss" briefing since a time (30d, 2w, 12h, 1mo, or ISO): new mail from curated-important contacts, new replies in your threads, and interest-keyword hits. Compact rows + a body command handback. If the index is stale it returns now and spawns a background sync.
digest_sourcesNewsletter/list senders ranked by engagement + interest, with unread/unsummarized issue counts — the digest routine worklist. Stale index returns now and spawns a background sync.
domains_to_categorizePROPOSE domains with back-and-forth contacts (Correspondents) plus sample senders/subjects as context, so you can assign an entity category. Then save_domain_category.
find_personFuzzy contact resolution from a vague hint (name fragment, handle, or domain). Ranks Correspondents (people you have written to) first. The entry point for "who was that contact from last spring?".
get_contactOne contact by address: stats, curation, recent threads. A near-miss returns ranked candidates rather than nothing.
get_messageOne message by <account:id>. level: "summary" (default — agent summary or snippet), "body" (distilled body; inline-enriches a still-meta row once, the only provider fetch), or "meta". Bodies are opt-in.
get_threadA thread by <account:thread-id>: metadata, its messages (compact, snippet-first), and the thread summary if present.
graph_communitiesDetected social circles (Louvain communities) with top members by centrality. Returns a build command handback when no graph exists yet.
graph_neighborsCo-recipiency neighbours of a contact, ranked by shared threads. On a miss, returns ranked near-miss contacts so the answer is never empty.
interest_getRead back the curated interest profile: curated contacts/domains + keywords.
interest_proposeThe curation SEED: a ranked shortlist of top contacts + domains by engagement, each with a suggested action (important/muted/none). Present it, take fuzzy edits, then interest_set.
interest_setPersist the curation disposition: contact/domain curation labels (important/muted/blocked, or null to clear) and freeform interest keywords (replaces the set). This profile drives which bodies get enriched.
list_contactsRanked contacts. sort: engagement (default) | volume | recency | community. filter: "correspondent" (people you have written to) | important | muted | blocked.
list_labeledMessages carrying a Gmail label, newest-first (label membership, not full-text). Use label "INBOX" to answer "what is in my inbox right now" — INBOX membership is reconciled on every sync, so it reflects the mailbox now (archived mail is dropped). "UNREAD" answers "what is unread", "STARRED" what is starred; any user label filters to it. Compact, snippet-first like search.
list_threadsConversations by contact (address) OR by query (FTS). Compact thread shapes.
modify_labelsOPT-IN WRITE — MUTATES the mailbox. Add and/or remove Gmail labels on one message (system ids like STARRED/UNREAD, or existing user-label NAMES; creating new labels is not supported). Requires a gmail.modify grant; the default read-only install refuses with the exact re-auth command. Use only when the user explicitly asked to change labels.
refresh_inboxAnswer "what is in my inbox right now" with live-accurate membership. Reconciles INBOX against the live mailbox (archived mail drops, new inbox mail is pulled) THEN returns the current inbox — prefer this over list_labeled INBOX whenever freshness matters. One bounded provider round-trip (inbox-sized); degrades to the indexed inbox (refreshed=false) when no creds are wired.
relay_menu_statusRead-only menu/status payload for local MCP relay hosts: compact state, SF Symbol names, detail rows, and quick actions expressed as ordinary MCP tool calls. Safe for frequent polling; it never starts syncs.
save_domain_categoryPERSIST an entity category you assigned to a domain (open vocabulary: client, vendor, travel operator, finance, publisher, …). Used as a filter/grouping axis.
save_summaryPersist your summary of a message or thread (provenance-marked, FTS-indexed). level: "message" (default) or "thread". For bulk/non-curated mail this makes the body eligible for demotion after a grace window.
searchRanked fuzzy full-text recall over the indexed mail (subject/sender/snippet/body/summaries), porter-stemmed so word forms match (refund≈refunds). Snippet-first and compact (each row already has sender/subject/date) — open a full body with get_message only when you need details. Recall, not lookup: a half-remembered phrase still surfaces ranked neighbours. Use it for things like "what did I buy / o
setup_instructionsSETUP MODE (no config yet). Return the exact steps + commands to finish onboarding mail-index, flagging the human steps (browser OAuth consent; manual install when Homebrew is unavailable). The server is advisory only — run `mail-index setup --account <email>` in your shell, then restart the server.
setup_statusSETUP MODE (no config yet). Report what is installed / authenticated / configured for mail-index — read-only observation (PATH + filesystem). Tells you whether onboarding is complete and the server can be restarted into full recall mode.
sync_nowQuick action for relay/menu hosts. Starts a detached incremental sync for one account, or all configured/indexed accounts when omitted, and returns immediately with the equivalent CLI command handback.
sync_statusPer-account freshness (index_as_of), whether a sync is running, message counts, and the meta/full/summary-only body-ladder split.
trigger_rule_deletewrite actionDelete a Trigger rule from this remote Deployment.
trigger_rule_listList Trigger rules on this remote Deployment.
trigger_rule_savewrite actionCreate or update a remote Deployment Trigger rule.
webhook_consumer_deletewrite actionDelete a signed-webhook consumer from this remote Deployment.
webhook_consumer_registerRegister a signed-webhook consumer for Trigger rule deliveries.
Public scan report
scanner v0.1.9 · 2026-09-24 · same rubric, same numbers if you re-run it
- Code scan64 source files scanned25/25
- –Live reliabilityno gateway calls yet and no remote to proben/a
- –Tool poisoningtools not inspected (local package is not executed); not countedn/a
- Auth qualitylocal package, no credentials required12/15
- Maintenancelast push 10 days ago15/15
- Maintainer identityregistry namespace matches repository owner7/10
What the publisher says
From the mail-index repository's README, as published. We do not edit it. Read it on GitHub
mail-index
mail-index downloads a preview of your whole inbox to your machine, then smartly fetches the full text of the messages that matter as you use it. That local index lets your AI agent run true summarization and recall over your entire mailbox — instead of being trapped behind Gmail's search bar.
It works through a local MCP server, so any agent (Claude, Codex, any MCP client) can query it. Local-first — the default index never leaves your machine. Operators who need an always-on connector can instead deploy the optional, single-tenant remote Worker Deployment in their own Cloudflare account; mail-index operates no hosting service. Read-only by default — it never sends or mutates your mail unless you explicitly opt into archive + label edits (a least-privilege gmail.modify re-auth; never send or delete). See ADR-0007.
Ask a vague question → one local MCP call → ranked, snippet-first answer. Interactive version →
Status: v1.5 — published. Progressive sync, the correspondence graph, the
interest engine, curation, the full MCP surface, and the write-back
loops are built and tested — and mail-index is live on
npm with a
.mcpb bundle.
Still in progress: the bundled Option A OAuth client and signed one-click
installers. Architecture lives in
docs/PLAN.md; start with docs/INSTALL.md;
every release is recorded in CHANGELOG.md.
Shortened. The full README is on GitHub.
Nothing above is checked by us. What we check is on the safety report.
Install directly
Runs npx -y mail-index on your machine. Read the scan report first; the gateway never runs local packages.
claude mcp add mail-index -- npx -y mail-index
mail-index: common questions
- Is mail-index MCP server safe?
- Yes, by our scan: it is graded A (91/100). Read the mail-index safety report
- How do I install mail-index?
- It runs on your machine. Copy the Claude Code, Claude Desktop or Cursor config from the install section.
- Does mail-index need an API key?
- Not as far as the registry entry and our scan can tell: no credentials are declared or required.
- Is mail-index maintained?
- The last commit was 10 days ago (2026-09-14). The latest release is v1.5.1.
- What can I use instead of mail-index?
- Servers from other publishers that do the same job: mail-muncher MCP server, Outlook MCP server and Google Workspace MCP server. Compare all mail-index alternatives.
Alternatives to mail-index
Same job from other publishers: the closest match first, then the best rated.
- mail-muncherFiltered, read-only IMAP and Gmail archived to disk as .eml + markdown, served over MCP.not reviewedGrowingA
- OutlookOutlook & OneDrive MCP: personal & enterprise tools for mail, calendar, contacts, tasks, filesnot reviewedGrowingA
- Google WorkspaceGoogle Workspace MCP server for Gmail, Calendar, Drive, Docs, Sheets, Slides, Contacts, and morenot reviewedGrowingA
- Outlook MCPMicrosoft Outlook personal accounts: mail, calendar, contacts, to-do, drafts (62 tools).not reviewedGrowingA
- PipesHubPermissioned search and cited answers over Slack, Drive, Gmail, Jira, and 50+ workplace sources.not reviewedGrowingC