mcp-memory-graph
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@mcp-memory-graphfind memories related to system architecture"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
mcp-memory-graph
A personal memory MCP server for Obsidian / markdown vaults — semantic + keyword + tag + time-aware co-occurrence hybrid retrieval, shared across 3 AI clients (Claude Code / Codex / agy).
Built for complex-systems thinkers who refuse to delete old memories. Every note stays forever; you just retrieve it better.
Why this exists
You started keeping a memory file alongside your AI assistant. It worked. Then your MEMORY.md index passed the 24KB read limit and your AI couldn't even load it. The obvious fix is "compress" — but that means deleting things you might need next year.
This server takes the other path: keep everything, retrieve smarter.
Related MCP server: Grove
The 4 principles
Memory is permanent. Old notes are not garbage — they're future re-discoveries waiting to happen.
Separate inject from retrieve. Boot-time context stays tiny; everything else is pulled on demand via MCP tools.
Honor complex-systems thinking. One keyword should pull 3–5 related memories by meaning, structure, AND time.
Evolve without breaking. Adding a new note never invalidates indexing. Old notes resurface naturally.
How it retrieves
Four signals merge into a single hybrid score:
Signal | Source | Weight (default) |
Semantic | Voyage AI embeddings (default model: | 0.5 |
Keyword |
| 0.3 |
Tag |
| 0.2 |
Co-occurrence | "Memories accessed together in the same session" (Phase 3) | 0.2 (addition planned) |
Weights are overridable per environment:
MEMORY_WEIGHTS="semantic=0.5,keyword=0.3,tag=0.2"Tools
Tool | Purpose |
| Hybrid retrieval with recency tie-breaker |
| Read one memory + (optional) auto-prefetch top-2 related |
| Related memories via wikilink, tag, semantic distance |
| Sorted by |
| Filter by |
| Cluster memories born in the same conversation session (originSessionId) |
| Hybrid search without recency boost (surfaces older notes) |
Install
git clone https://github.com/osaken55/mcp-memory-graph.git
cd mcp-memory-graph
npm install
npm run build
npm testDefault paths:
MEMORY_DIR = ~/.claude/projects/.../memory/
MEMORY_DB_PATH = ~/.claude/memory-mcp/cache.db # SQLite is OUTSIDE the memory dir
VOYAGE_MODEL = voyage-multilingual-2 # override with envPhase 0 — smoke test (no MCP client needed)
node dist/bin/probe.jsReports how many .md files are readable, how many have/lack frontmatter, and which iCloud / Syncthing artifacts were excluded. Read-only — zero writes.
Register with the 3 AI clients
Claude Code (CLI / Plugin)
~/.claude/settings.json:
{
"mcpServers": {
"memory-graph": {
"command": "mcp-infisical-env",
"args": ["--", "node", "/Users/junshu/Documents/Projects/mcp-memory-graph/dist/index.js"],
"env": {
"MEMORY_AUTO_PREFETCH": "true"
}
}
}
}Codex (OpenAI Codex CLI / Desktop)
~/.codex/config.toml (or via codex mcp add):
[[mcpServers]]
name = "memory-graph"
command = "mcp-infisical-env"
args = ["--", "node", "/Users/junshu/Documents/Projects/mcp-memory-graph/dist/index.js"]agy (Antigravity CLI)
Use agy's MCP config or wrap in agy-with-context:
# Agy doesn't natively load MCP servers in CLI mode yet;
# in the Antigravity IDE the server registers via the same MCP config above.All three clients hit the same SQLite cache. last_accessed, embedding cache, and co-occurrence stats are shared — your 3 AI workforce really has one shared memory.
Why voyage-multilingual-2 by default
The author's memory is roughly half Japanese, half English (Obsidian Vault notes from a Japanese small business owner). On benchmarks, voyage-multilingual-2 outperforms voyage-3.x on mixed-language retrieval. Pure-English vaults should override with VOYAGE_MODEL=voyage-3-large.
Comparison
Axis | Typical mcp-memory | mcp-memory-graph |
Storage | Internal DB | Existing flat markdown directory |
Migration | Imports / rewrites | Zero-destructive — never edits your notes |
Search | Keyword OR vector | Semantic + keyword + tag (+ co-occurrence) hybrid |
Recency | Often implicit | SQLite |
Multilingual | English-tuned |
|
Failure handling | Vector API down = broken | Falls back to keyword + tag automatically |
ripgrep absent | Crashes | Node.js |
Sync artifacts (iCloud / Syncthing) | Pollutes index | Excluded by glob |
Same-session clustering | None |
|
Auto prefetch | Manual | Opt-in |
Roadmap
Phase 0 ✅ Probe — non-destructive read of every markdown file.
Phase 1 ✅ Hybrid skeleton, 7 tools, SQLite
last_accessed, ripgrep + Node.js fallback, iCloud-exclude.Phase 2 ✅ Voyage embedding cache, content-hash dedup, multilingual default model, semantic + keyword + tag merged.
Phase 3 ✅ Time-aware co-occurrence table (
co_access), 4th signal inmemory.related, in-memory ring buffer auto-records pairs frommemory.get/memory.search.Phase 4 ✅
npx mcp-memory-graph initzero-config bootstrap; Jaccard coefficients for wikilink / tag signals.(next) Local embedding fallback via
@xenova/transformers; multi-tag arrays; tag taxonomy beyondmetadata.type.
Real-world numbers (from the author's vault)
Built on a real corpus of 130 personal markdown memories (mix of Japanese + English).
Operation | Result |
Phase 0 probe | 131 files / 123 with frontmatter / 0 errors |
Phase 1 | top-1 score 1.000, expected hit at top |
Phase 2 Voyage indexing | 204 s for 130 files, ~$0.015 (0.26% of free tier) |
Phase 2 semantic query "責任を取って判断する役割" (no keyword overlap) | top-1 = CTO role memory (score 0.464) |
Phase 2 multilingual: English query → Japanese memory | top-1 score 0.555 |
Phase 3 co-occurrence smoke | "memories from the same session cluster correctly" |
License
MIT — see LICENSE.
Acknowledgements
This server was designed in a 3-AI parallel review pattern that the project author has been refining for months:
agy (Gemini 3.5 Flash High) wrote the Python design draft.
Codex (GPT-5.x) wrote the TypeScript scaffold and ADRs.
Claude Code (Opus 4.7) wrote the CTO integration review and added the 6 unique observations (Phase 0 probe, time-aware co-occurrence, originSessionId clustering, auto-prefetch, zero-config init, the name itself).
The owner (オサケンさん) wrote the principles.
If three AIs and a complex-systems thinker can build a better personal memory, so can yours.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/osaken55/mcp-memory-graph'
If you have feedback or need assistance with the MCP directory API, please join our Discord server