Mmcp.market

mail-index MCP server

by unsoldgroup·io.github.unsoldgroup/mail-index·v1.5.1

Local-first, read-only MCP server for recall over your Gmail: search, contacts, threads, digests.

A91/100grade A
What users say
No reviews yet
Be the first
Safety scan
A91/100

full report

Adoption
Growing

4 stars59 downloads/wk

Reviews

Write one

Nobody 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 posts

Read from the package source without running it. The installed server may list more.

  • archive_message

    OPT-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.

  • cadence

    Inbound 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_up

    The "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_sources

    Newsletter/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_categorize

    PROPOSE 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_person

    Fuzzy 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_contact

    One contact by address: stats, curation, recent threads. A near-miss returns ranked candidates rather than nothing.

  • get_message

    One 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_thread

    A thread by <account:thread-id>: metadata, its messages (compact, snippet-first), and the thread summary if present.

  • graph_communities

    Detected social circles (Louvain communities) with top members by centrality. Returns a build command handback when no graph exists yet.

  • graph_neighbors

    Co-recipiency neighbours of a contact, ranked by shared threads. On a miss, returns ranked near-miss contacts so the answer is never empty.

  • interest_get

    Read back the curated interest profile: curated contacts/domains + keywords.

  • interest_propose

    The 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_set

    Persist 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_contacts

    Ranked contacts. sort: engagement (default) | volume | recency | community. filter: "correspondent" (people you have written to) | important | muted | blocked.

  • list_labeled

    Messages 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_threads

    Conversations by contact (address) OR by query (FTS). Compact thread shapes.

  • modify_labels

    OPT-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_inbox

    Answer "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_status

    Read-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_category

    PERSIST an entity category you assigned to a domain (open vocabulary: client, vendor, travel operator, finance, publisher, …). Used as a filter/grouping axis.

  • save_summary

    Persist 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.

  • search

    Ranked 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_instructions

    SETUP 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_status

    SETUP 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_now

    Quick 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_status

    Per-account freshness (index_as_of), whether a sync is running, message counts, and the meta/full/summary-only body-ladder split.

  • trigger_rule_deletewrite action

    Delete a Trigger rule from this remote Deployment.

  • trigger_rule_list

    List Trigger rules on this remote Deployment.

  • trigger_rule_savewrite action

    Create or update a remote Deployment Trigger rule.

  • webhook_consumer_deletewrite action

    Delete a signed-webhook consumer from this remote Deployment.

  • webhook_consumer_register

    Register 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

no findings
  • 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
Overall 91/100. Components that don't apply are left out of the denominator. Any critical finding is an F.RubricAppeal a findingJSON

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
Add to Cursor

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.

All mail-index alternatives →
  • mail-muncher
    Filtered, read-only IMAP and Gmail archived to disk as .eml + markdown, served over MCP.
    A
  • Outlook
    Outlook & OneDrive MCP: personal & enterprise tools for mail, calendar, contacts, tasks, files
    A
  • Google Workspace
    Google Workspace MCP server for Gmail, Calendar, Drive, Docs, Sheets, Slides, Contacts, and more
    A
  • Outlook MCP
    Microsoft Outlook personal accounts: mail, calendar, contacts, to-do, drafts (62 tools).
    A
  • PipesHub
    Permissioned search and cited answers over Slack, Drive, Gmail, Jira, and 50+ workplace sources.
    C

More from unsoldgroup →