Mindmap Mcp Server

io.github.ravi-labs由 GitHub 帳號 ravi-labs 發布v0.5.0更新於 Oct 24, 2026

Local-first memory & context-handoff across AI tools — capture in one, resume in another. No cloud.

已驗證STDIO僅桌面效率與工作流知識與記憶

概覽

AI 產生的概覽

本地優先的 MCP 記憶伺服器,可在一個 AI 工具中擷取工作階段脈絡,並在另一個工具中接續,資料以純檔案形式存放在本機。

可以做什麼
擷取、接續並列出跨本機 MCP 用戶端的工作階段脈絡,提供候選主題供選擇,並可依需求匯入 Claude Code、Cursor、Copilot 與 Cowork 的歷史工作階段。搜尋、瀏覽、讀取、連結、編輯、提升、清理與遺忘記憶,並可重建完整原始對話。將記憶歸入集合、自動整理成建議分組,並依據既有想法線索就某主題進行腦力激盪。讀取、設定、推斷、同步與刪除描述你工作方式的 persona 檔案。稽核來源、信任度與衰減預測,匯出或匯入記憶護照(含 ChatGPT 與 Claude.ai 資料匯出),並設定衰減視窗與選用的 LLM 供應商。
適用情境
適合在多個本機 AI 用戶端之間切換、反覆說明同一專案的使用者,或希望擁有可檢查、會逐漸冷卻而非無限膨脹的長期工作階段記憶的人。也適合希望脈絡以本機純檔案保存、可匯出攜帶的使用者。
執行需求
透過 npx 以本機 stdio 程序執行,需要 Node.js(僅 Cursor 歷史匯入需要 Node 22.5+)。不需帳號或雲端服務。資料預設存放在 ~/.mindmap,可用 MINDMAP_DIR 環境變數變更位置。LLM 金鑰為選用,使用時從 ANTHROPIC_API_KEY、OPENAI_API_KEY 或 GOOGLE_API_KEY 讀取,或使用本機 ollama。
安裝前請注意
安裝指令會寫入 MCP 用戶端設定,並可能為 Claude Code 加入 SessionEnd 自動擷取掛鉤與一個隨附技能;可先用 --dry-run 預覽,用 uninstall 復原。記憶是純檔案,匯入可能帶入過去工作階段中貼上的金鑰,遮蔽為盡力而為且可關閉。相關工具可編輯、清理、軟封存或硬刪除記憶。若 GUI 用戶端需要 LLM 金鑰,金鑰可能以明文寫入該用戶端設定的 env 區塊。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Mindmap Mcp Server,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。

其他 MCP 客戶端

參照 儲存庫 中的啟動說明。

README

🧠 Mind Map — MCP memory & context-handoff server

[npm] [CI] [License: Apache-2.0] [Node]

Ever lose the thread of a discussion across Claude Code, Claude Desktop, and your other AI tools? Mind Map is a small, local-first MCP server that acts as a shared memory layer across all your local MCP clients.

You capture context at the end of a session, and resume it in any other tool — no more re-explaining your project from scratch. Memory you stop using cools and decays gracefully into one-line traces (it's never silently deleted), so your shelf stays small and trustworthy instead of becoming another haystack.

Local-first by design. It runs on your machine; your memories are plain files in ~/.mindmap that never leave your control. No account, no cloud, no server to trust. Install once with npx @ravi-labs/mindmap-mcp-server install.

ChatGPT and other cloud/web clients are out of scope for now — they can't reach a local server without a public endpoint, which conflicts with local-first. See Future.

The idea in one loop

  1. Capture (effortless) — at the end of a discussion, save a portable summary.
  2. Resume (promote-on-reuse) — pull it forward in a new session. The act of reusing it is what promotes it to trusted memory. Throwaway sessions never get promoted, so they never clutter your shelf.
  3. Consolidate (automatic) — a background pass cools unused memory through tiers (🔥 hot → 🌤️ warm → ❄️ cold) and collapses cold items to a searchable one-line trace. The moat isn't storing things — it's forgetting well.
  4. Tidy (opt-in, gamified) — a cleanliness score rewards pruning, not hoarding.

Install (one command)

Once published to npm, the whole install is:

bash
npx @ravi-labs/mindmap-mcp-server install

This auto-detects your local MCP clients (Claude Desktop, Cursor, Windsurf) and writes the config for you, and configures Claude Code via its CLI if present. Restart your client and Mind Map's tools are there. Preview first with npx @ravi-labs/mindmap-mcp-server install --dry-run; undo with npx @ravi-labs/mindmap-mcp-server uninstall.

Data lives in ~/.mindmap/ by default — override with the MINDMAP_DIR env var.

Manual setup (if you prefer)

Every client uses the same command — npx -y @ravi-labs/mindmap-mcp-server over stdio.

Claude Code:

bash
claude mcp add mindmap -- npx -y @ravi-labs/mindmap-mcp-server

Claude Desktop — edit claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/claude_desktop_config.json):

json
{  "mcpServers": {    "mindmap": {      "command": "npx",      "args": ["-y", "@ravi-labs/mindmap-mcp-server"]    }  }}

Cursor / Windsurf / other clients — same command + args shape in that client's MCP config. Add an env block to relocate data:

json
{ "command": "npx", "args": ["-y", "@ravi-labs/mindmap-mcp-server"],  "env": { "MINDMAP_DIR": "/path/to/my/memory" } }

From source (development)

bash
git clone https://github.com/ravi-labs/mindmap-mcp-server.git && cd mindmap-mcp-servernpm install && npm run buildnode dist/index.js install --local   # points clients at this checkout

Using it day to day

Just talk naturally inside your AI tool — the model calls the right tool:

  • "Save this to mind map" → captures the current context
  • "Resume my work on <topic>" → pulls it back into a fresh session
  • "What's in my mind map?" / "Show my mind map health" → browse / score
  • "What do you know about how I work?" → reads your persona (see below)
  • "Brainstorm <topic> with me" → loads your prior thinking so ideas continue across tools
  • "Add this to my Goals" / "park this for later" → files it into a collection
  • "What apps did I start and never finish?" → auto-organizes your memory into collections
  • "Continue one of my unfinished projects" → pick one, and you're back in the right folder at the exact next step

Run npx @ravi-labs/mindmap-mcp-server quickstart for the full getting-started guide.

Brainstorm across tools

Start an idea in Claude, keep going in Cursor — without re-explaining it. Mind Map is the shared memory; each tool brings its own brainstorming muscle. mindmap_brainstorm loads your persona and prior idea-threads on the topic, you brainstorm, and saving with kind: "brainstorm" lets it resume anywhere. A bundled brainstorm Skill (installed into ~/.claude/skills by install) wires the load → brainstorm → save flow for Claude.

Organize it your way — Collections

Mind Map always organizes automatically (recency tiers, source, topic, workspace). Collections are your own layer on top: named groups like 🎯 Goals, 🅿️ Parking Lot, ✅ Decisions — or anything you invent. Say "add this to my Goals" or "park this" in any tool, or use the dashboard's Organize tab.

Two things make collections more than folders:

  • Filing protects from decay. A memory in a pinned collection won't be forgotten while it's filed — parking something is a signal it matters. (An explicit "forget this" still wins.)
  • Every collection is a launcher. "Continue one of my unfinished projects" lists them — each with its 📂 workspace and ↳ where you left off — pick one and mindmap_resume drops you back in: full topic context, right folder, exact next step.

Don't want to file things by hand? Auto-organize reads across all your sessions and proposes collections — it always looks for unfinished projects (started building, went cold, never shipped), Goals, Decisions, and parked ideas, plus anything you ask for ("everything about billing"). It only suggests; nothing is filed until you accept. Uses your own LLM if configured, otherwise a no-key heuristic.

Make capture automatic

For Claude Code, install adds a SessionEnd auto-capture hook — every substantive session is distilled into a memory automatically, so you never have to remember to save. It's deduped (resuming + re-ending updates in place) and skips trivial/automated sessions. Opt out with install --no-hook; it's removed cleanly by uninstall.

For other clients (or as a belt-and-braces nudge), add one line to your client's instructions (e.g. Claude Code's CLAUDE.md):

At the end of a substantive session, call mindmap_capture to save the context. When I reference past work, call mindmap_resume first.

The tools are also described to encourage the model to do this proactively.

Bring in your past sessions

Import your existing Claude history into Mind Map — distilled, not raw dumps:

bash
npx @ravi-labs/mindmap-mcp-server import --dry-run   # previewnpx @ravi-labs/mindmap-mcp-server import             # apply

Covers Claude Code (CLI — full prompts), Cowork (title + opening message), VS Code Copilot (full prompts), and Cursor (chat titles + prompts); each memory is tagged by source. Filters: --source code|cowork|copilot|cursor, --project <name>, --limit N. Imported memories keep their original dates, so old ones settle into cold traces automatically.

Imported memories capture the discussion (your prompts + the assistant's substantive answers), not just titles — for the transcript-backed sources (Claude Code, Cursor, Copilot). Re-run with --reimport to refresh existing memories in place after an upgrade.

Notes:

  • Cursor stores chats in a (often multi-GB) SQLite DB, read via Node's built-in SQLite — so Cursor import needs Node 22.5+ (other sources don't).
  • ChatGPT and Claude.ai web chats can't be imported — they live in the cloud, not local files. (A future "import from data-export file" is planned.)

Tidy up

bash
npx @ravi-labs/mindmap-mcp-server cleanup --dry-run   # previewnpx @ravi-labs/mindmap-mcp-server cleanup             # apply

Removes automated/scheduled-task memories and collapses duplicate sessions. Anything you've promoted is always kept.

Persona — a profile every tool can read

Beyond individual discussions, Mind Map keeps a persona: a distilled, evolving profile of how you work — your stack, style, communication preferences, and constraints — so any tool can apply it and stop re-asking the same setup questions. It's separate from your discussion memories.

  • Declared facts: tell a tool "I prefer concise, code-first answers" and it calls mindmap_persona_set. High confidence, yours, editable.
  • Inferred facts: mindmap_persona_learn derives recurring signals from your existing memories. No LLM needed (keyword heuristic); richer if you enable one.
  • Tools call mindmap_persona at the start of a session and apply what's there.

Add this to your client's instructions so it happens automatically:

At the start of a session call mindmap_persona and apply it. When I state a durable preference, call mindmap_persona_set.

Own your context

A memory you can't extract, inspect, or carry isn't a memory you own. Three features make Mind Map's memory genuinely yours:

Memory Passport — export everything to one portable, open file, and pull your context out of the walled gardens:

bash
npx @ravi-labs/mindmap-mcp-server passport export                 # → ~/mindmap-passport-<date>.jsonnpx @ravi-labs/mindmap-mcp-server passport import <file>          # from another machinenpx @ravi-labs/mindmap-mcp-server passport import-chatgpt conversations.json   # your ChatGPT exportnpx @ravi-labs/mindmap-mcp-server passport import-claude  conversations.json   # your Claude.ai export

The cloud chats can't be reached live from a local server — but their data export files are yours, and this imports them as distilled memories.

Glass-box memory — see exactly what's stored and why:

bash
npx @ravi-labs/mindmap-mcp-server audit

Every memory shows its provenance (where it came from), trust (how many times you reused it), and decay forecast (when it fades to a one-line trace). In the dashboard, each memory has a one-click Forget. Unlike opaque vector stores, nothing about your memory is hidden from you.

Persona projection — write your persona into each tool's own config, so even non-MCP tools know how you work:

bash
npx @ravi-labs/mindmap-mcp-server persona-sync          # Claude, Cursor, Copilot, Windsurf

It edits only a managed block (<!-- mindmap:persona:start -->…:end), so your own content is never touched.

Optional: bring your own LLM key

Mind Map runs fully without any LLM — every feature has a no-LLM path. If you want smarter persona inference and topic-graph labels, plug in your own provider (anthropic, openai, google, or local ollama). It's opt-in and graceful: no key, or a failed call, simply falls back to the no-LLM path, and any cost notes are rough estimates — never a bill.

Mind Map never stores your API key. It saves only the provider + model name in ~/.mindmap/llm.json; the key is read from an environment variable at call time. You set the key; Mind Map just reads it.

Smarter search (optional). Search is BM25 out of the box — no LLM needed. With an embeddings-capable provider (OpenAI, Google, or Ollama — Anthropic has no embeddings API), build a local embedding cache for hybrid search (BM25 fused with semantic similarity via reciprocal rank fusion):

bash
npx @ravi-labs/mindmap-mcp-server embed   # build/refresh the local embedding cache

It re-embeds only new/changed memories, caches vectors in ~/.mindmap/embeddings.json, and resume / search / brainstorm use it automatically. Without it (or on Anthropic), search stays on BM25 — never worse.

Step 1 — choose a provider

From the dashboard's Persona tab (LLM section), or via the mindmap_llm tool (e.g. "set my mindmap llm provider to anthropic"). This writes {provider, model} to ~/.mindmap/llm.json. Per provider, Mind Map looks for one env var:

ProviderEnv var it readsDefault model
anthropicANTHROPIC_API_KEYclaude-sonnet-4-6
openaiOPENAI_API_KEYgpt-4o
googleGOOGLE_API_KEYgemini-1.5-pro
ollama(none — local)llama3.1

Step 2 — give it the key

The key must be visible to the process that needs it. There are two ways, and which one you need depends on the surface:

A. Shell profile — for the dashboard / CLI, and for Claude Code (its MCP servers inherit your shell environment):

bash
# ~/.zshrc (or ~/.bashrc)export ANTHROPIC_API_KEY="sk-ant-…"

Then source ~/.zshrc and restart. Run the dashboard from that same shell and it'll pick the key up.

B. The client's MCP config env block — for GUI clients (Claude Desktop, Cursor, Windsurf), which launch MCP servers without your shell environment, so the export above won't reach them. Add an env map to Mind Map's entry:

json
{  "mcpServers": {    "mindmap": {      "command": "npx",      "args": ["-y", "@ravi-labs/mindmap-mcp-server"],      "env": { "ANTHROPIC_API_KEY": "sk-ant-…" }    }  }}

Trade-off: method B writes the key into that client's config file in plain text. That's the only way some GUI clients can pass it through — but if you'd rather not have a key on disk, prefer method A (or launch the GUI app from a terminal that already has the variable exported, so it inherits it).

There is no key field in the dashboard or tools by design — a key typed into a web form would have to be transmitted and stored to be useful, which is exactly the credential-on-disk pattern Mind Map avoids. You set the env var yourself.

For ollama there's no key at all — just run ollama serve locally and pick the ollama provider.

Step 3 — verify

Call mindmap_llm with no arguments (or open the dashboard Persona tab). When the key is visible it reports ready — e.g. "✓ ANTHROPIC_API_KEY detected." After setting the env var, restart the server/client so it's picked up.

See your memory — the dashboard

bash
npx @ravi-labs/mindmap-mcp-server dashboard   # http://127.0.0.1:7777

A local web UI (loopback-only) with six views:

  • List — memories grouped by 🔥/🌤️/❄️ tier, searchable; click one to read its summary, key points, and full discussion (the complete conversation, reconstructed on demand and rendered as Markdown). A 📜 badge + filter mark memories that have a full transcript; a File into… control files it into a collection.
  • Tree — 🧠 → source → project → discussion, with linked threads joined.
  • Graph — an auto-derived topic map: categories as hubs, sessions connected by relatedness, with category filter chips and live search. An opt-in ✨ LLM labels button relabels the topic clusters using your own LLM.
  • Organize — your collections (each item with ↳ where you left off), the ✨ Auto-organize proposer, and a live breakdown of how memory is organized automatically (by tier, source, workspace, topic).
  • Persona — view and edit your profile (see above), add preferences, run inference, and configure the optional LLM — all from the browser.
  • Activity — a live console of every MCP call across your tools (redacted, from ~/.mindmap/calls.jsonl).

A ⟳ Sync button imports new sessions on demand, and a cleanliness score rewards a tidy, trusted memory — not a big one.

Tools

ToolWhat it does
mindmap_captureSilently save a context summary (the effortless half of the loop).
mindmap_resumeFind + return the best context for a topic; promotes on reuse. Also a launcher: pass collection to resume out of e.g. "Unfinished projects".
mindmap_resume_optionsList distinct candidate topics (with workspace) so the user can pick which to resume.
mindmap_importOn-demand session sync — "update mind map with my recent work".
mindmap_organizeFile memories into collections — "add this to my Goals", "park this".
mindmap_collectionsView collections; opening one shows workspace + where-you-left-off per item.
mindmap_curateAuto-organize: scan everything, propose collections (unfinished projects, goals, decisions, parked). Preview-first.
mindmap_brainstormBrainstorm a topic with your memory — loads prior idea-threads so ideas continue across tools.
mindmap_searchRead-only search across every tier and tool.
mindmap_listBrowse memories with filters.
mindmap_getFetch one memory's full content.
mindmap_transcriptReconstruct the full original conversation for a memory (Claude Code / Cursor / Copilot).
mindmap_promoteExplicitly bless a memory as trusted (→ hot).
mindmap_updateTrim / edit / retag — the human curation moment.
mindmap_linkConnect related threads (the lightweight "map").
mindmap_pruneRun the consolidation pass on demand (dry_run to preview).
mindmap_forgetSoft-archive to a trace, or hard delete.
mindmap_healthGamified cleanliness score (opt-in).
mindmap_tidyBatch of stalest memories to keep / trim / forget.
mindmap_configView / change decay windows and toggles.
mindmap_personaRead your persona — apply it at session start to stop re-asking.
mindmap_persona_setRecord a durable preference (stack/style/constraints…).
mindmap_persona_forgetMute or delete a persona fact.
mindmap_persona_learnInfer persona facts from your memories (LLM-assisted if configured).
mindmap_persona_syncWrite your persona into your tools' native config files.
mindmap_llmConfigure the optional BYO-key LLM (provider/model; key stays in your env).
mindmap_auditGlass-box ledger: provenance, trust, and decay forecast for every memory.
mindmap_passport_exportExport all memories + persona to one portable file.
mindmap_passport_importImport a passport, or a ChatGPT / Claude.ai data export.

How it stores things

~/.mindmap/├── threads/<id>.json   # one file per memory (human-readable JSON)├── index.json          # fast list/search index├── config.json         # tunable thresholds + gamification toggle├── persona.json        # your evolving profile (declared + inferred facts)├── collections.json    # your collections (Goals, Parking Lot, …) — ids only├── llm.json            # optional LLM provider + model (never your API key)├── calls.jsonl         # redacted log of every MCP call (the Activity view)└── embeddings.json     # optional local embedding cache for semantic search

Plain files you own and can inspect, grep, back up, or sync yourself. Tiers map to the mental model: hot = mem, warm = files, cold = drive (trace).

Secrets are masked before saving. Because memories are plain files — and imports can pull in keys pasted into past sessions — every memory is scanned for common credential shapes (API keys, tokens, private keys) and they're replaced with [REDACTED:…] before anything is written. Masked memories are flagged (🔒). Best-effort, local, no LLM; toggle with the redactSecrets config.

Tuning decay

jsonc
// defaults (mindmap_config to change at runtime){  "hotWindowMs":  7 days,    // active memory stays hot this long  "warmWindowMs": 30 days,   // then warm; past it → cold trace  "promotedLongevityFactor": 2,  // blessed memories decay 2× slower  "gamification": true}

Develop

bash
npm run dev      # watch mode (tsx)npm run build    # type-check + emit dist/npm test         # end-to-end smoke tests (stdio + http) in throwaway data dirs

Future

ChatGPT / cloud clients (parked). A cloud client can't reach a local server without exposing it publicly (a tunnel or a host), which breaks the local-first promise. An HTTP transport already ships in the codebase (TRANSPORT=http, with bearer-token auth + origin allow-listing) for anyone who chooses to self-host — but it's intentionally not the default path. Revisiting ChatGPT later likely means an opt-in hosted tier with per-user encryption, a deliberate trust decision rather than a default.

Other directions:

  • Auto-capture hooks per client so the "capture" step is invisible.
  • Embedding-based semantic recall (current search is token-overlap).
  • LLM-assisted relatedness edges in the graph (labels already opt-in).
  • OAuth + per-user data isolation (only needed if a hosted tier ever happens).

License

Apache-2.0 — see LICENSE and NOTICE.

來源:README.md,提交 87ef0fb

工具

0
SourceWeft 尚未在沙箱中啟動過該軟體包,因此其工具未知。

版本歷史

1
  1. v0.5.0最新Sep 16, 2026

評分

已滿足適用檢查項的 50%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通25 分

    請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。

  • 已宣告認證方式10 分

    請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。

  • 已列出工具15 分

    請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。

  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分