{"name":"io.github.alunsoldantarctica/mail-index","slug":"alunsoldantarctica-mail-index","title":"mail-index","description":"Local-first, read-only MCP server for recall over your Gmail: search, contacts, threads, digests.","url":"https://mcp.market/server/alunsoldantarctica-mail-index","rating":null,"grade":"A","score":91,"certified":false,"status":"active","category":"email","tags":["email","search"],"presence":{"score":31,"stars":4,"forks":1,"downloads_week":60,"last_push_at":"2026-09-14T14:39:23.000Z","license":"MIT"},"uptime":null,"claimed":false,"transport":"npm","callable_via_gateway":false,"default_price_micros":0,"repository":"https://github.com/alunsoldantarctica/mail-index","website":null,"version":"1.0.0","remotes":[],"packages":[{"registryType":"npm","identifier":"mail-index","version":"1.0.0","runtimeHint":"npx","transport":{"type":"stdio"},"runtimeArguments":[{"type":"named","name":"-y"},{"value":"mail-index","type":"named","name":"-p"},{"value":"mail-index-mcp","type":"positional"}]}],"tools":[{"name":"catch_up","description":"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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"digest_sources","description":"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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"domains_to_categorize","description":"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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"find_person","description":"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?\".","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_contact","description":"One contact by address: stats, curation, recent threads. A near-miss returns ranked candidates rather than nothing.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_message","description":"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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_thread","description":"A thread by <account:thread-id>: metadata, its messages (compact, snippet-first), and the thread summary if present.","write_action":false,"price_micros":0,"input_schema":null},{"name":"graph_communities","description":"Detected social circles (Louvain communities) with top members by centrality. Returns a build command handback when no graph exists yet.","write_action":false,"price_micros":0,"input_schema":null},{"name":"graph_neighbors","description":"Co-recipiency neighbours of a contact, ranked by shared threads. On a miss, returns ranked near-miss contacts so the answer is never empty.","write_action":false,"price_micros":0,"input_schema":null},{"name":"interest_get","description":"Read back the curated interest profile: curated contacts/domains + keywords.","write_action":false,"price_micros":0,"input_schema":null},{"name":"interest_propose","description":"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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"interest_set","description":"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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_contacts","description":"Ranked contacts. sort: engagement (default) | volume | recency | community. filter: \"correspondent\" (people you have written to) | important | muted | blocked.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_threads","description":"Conversations by contact (address) OR by query (FTS). Compact thread shapes.","write_action":false,"price_micros":0,"input_schema":null},{"name":"save_domain_category","description":"PERSIST an entity category you assigned to a domain (open vocabulary: client, vendor, travel operator, finance, publisher, …). Used as a filter/grouping axis.","write_action":false,"price_micros":0,"input_schema":null},{"name":"save_summary","description":"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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"search","description":"Ranked fuzzy full-text recall over the indexed mail (subject/sender/snippet/body/summaries). Snippet-first, compact; opt into a body via get_message. Recall, not lookup: a half-remembered phrase still surfaces ranked neighbours.","write_action":false,"price_micros":0,"input_schema":null},{"name":"setup_instructions","description":"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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"setup_status","description":"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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"sync_status","description":"Per-account freshness (index_as_of), whether a sync is running, message counts, and the meta/full/summary-only body-ladder split.","write_action":false,"price_micros":0,"input_schema":null}],"scan":{"score":91,"grade":"A","scanned_at":"2026-09-26T21:23:05.617Z","report":{"scannerVersion":"0.1.9","scannedAt":"2026-09-26T21:23:05.539Z","components":{"code":{"score":25,"max":25,"notes":["44 source files scanned"]},"reliability":{"score":-1,"max":20,"notes":["no gateway calls yet and no remote to probe"]},"poisoning":{"score":-1,"max":15,"notes":["tools not inspected (local package is not executed); not counted"]},"auth":{"score":12,"max":15,"notes":["local package, no credentials required"]},"maintenance":{"score":15,"max":15,"notes":["last push 12 days ago"]},"identity":{"score":7,"max":10,"notes":["registry namespace matches repository owner"]}},"findings":[],"inputs":{"packages":[{"registryType":"npm","identifier":"mail-index","version":"1.0.0","found":true,"license":"MIT","hasInstallScripts":false,"dependencyCount":4,"publishedAt":"2026-06-17T08:14:55.597Z","repositoryUrl":"git+https://github.com/alunsoldantarctica/mail-index.git","weeklyDownloads":60}],"repo":{"found":true,"owner":"alunsoldantarctica","repo":"mail-index","archived":false,"pushedAt":"2026-09-14T14:39:23Z","stars":4,"forks":1,"openIssues":14,"ownerType":"Organization","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/301315600?v=4","license":"MIT"},"icon":{"url":null,"source":"none"},"presence":{"stars":4,"forks":1,"downloadsWeek":60,"license":"MIT","lastPushAt":"2026-09-14T14:39:23.000Z","score":31}}}},"grade_history":[],"reviews":[]}