Persistent semantic memory for AI agents — 100% local on Apple Silicon (MLX) or Linux/Ubuntu (CPU). Markdown source of truth, sqlite-vec + BM25 hybrid search, a codegraph-backed knowledge graph, MCP server + CLI. No cloud, no keys.
- ✓Open-source license (MIT)
- ✓Actively maintained (<30d)
- ✓Topics declared
- !No description
claude mcp add memo -- docker run -i --rm ghcr.io/jagoff/memo{
"mcpServers": {
"memo": {
"command": "docker",
"args": ["run", "-i", "--rm", "ghcr.io/jagoff/memo"]
}
}
}MCP Servers overview
<div align="center"> <img src="docs/banner.jpg" alt="memo — local memory for AI" width="100%" /> # memo — MCP semantic memory server with MLX embeddings **Local-first semantic memory for AI agents — with time-travel, contradiction radar, and automatic synthesis.** **[Explore the memo website →](https://memo-web-sigma.vercel.app)** [](https://pypi.org/project/mlx-memo/) [](https://pepy.tech/project/mlx-memo) [](https://pypi.org/project/mlx-memo/) [](LICENSE) [](https://modelcontextprotocol.io) <a href="https://glama.ai/mcp/servers/jagoff/memo"> <img src="https://glama.ai/mcp/servers/jagoff/memo/badges/score.svg" alt="memo MCP server score" /> </a> <br /> <br /> <a href="https://glama.ai/mcp/servers/jagoff/memo"> <img src="https://glama.ai/mcp/servers/jagoff/memo/badges/card.svg" alt="memo MCP server on Glama" width="380" /> </a> </div> ## What is memo? **memo** is an MCP server for semantic memory. It gives any AI agent (Claude Code, Devin, Cursor, Cline) a persistent, searchable knowledge base that: - Runs **100% locally** (macOS + Apple Silicon via MLX, or Linux/CPU) - Uses **hybrid search** (vector embeddings + full-text search) - Stores memories as **plain Markdown** (version-controllable, human-readable) - Syncs **across machines** via serverless git - Detects & resolves **contradictions** automatically - Builds a **knowledge graph** (entities + relations) you can query and reason over - Time-travels to any date (audit trail) No Ollama, no Qdrant, no cloud APIs, no keys. ### Measured results Numbers from real command output on the author's live corpus (~4,900 memories, measured 2026-07-20). Methodology, reproduction commands, limitations, and an adversarial challenger review of these very claims: **[docs/BENCHMARK.md](docs/BENCHMARK.md)**. | Metric | Result | Command | |---|---|---| | LongMemEval oracle (retrieval-only, 60 stratified questions) — recall@5 | 0.746 weighted micro | `memo eval bench` | | Curated regression set — noise@5 (unfiltered config) | 0.00 | `memo eval recall` | | Live recall hit rate (~1,230 hook fires, log window ~31 days) | 99% (97% strong) | `memo stats` | | Tokens saved — estimated usage ledger, all-time | 1.21M (constants disclosed) | `memo tokens` | ### Offline by default Normal `memo-mcp` startup makes no outbound network request and does not rewrite Claude or Codex configuration. Release checks, automatic updates, statusline self-healing, and hook self-healing are all explicit opt-ins. Commands such as update and cross-machine sync, plus requested model or benchmark downloads, may use the network. See the [privacy and network policy](docs/privacy.md) for the exact flags and boundaries. <!-- mcp-name: io.github.jagoff/memo --> `memo` gives any MCP-aware agent (Claude Code, Codex, Devin, OpenCode, Cursor, Cline, Continue, …) a long-term memory that **runs entirely on your own machine** — **macOS on Apple Silicon** via [Apple MLX](https://github.com/ml-explore/mlx), or **Linux / Ubuntu on a CPU `sentence-transformers` backend** (see [docs/ubuntu.md](docs/ubuntu.md)). Each memory is a plain Markdown file; embeddings live in a single sqlite file; the embedder, reranker, and LLM run in-process — no Ollama, no Qdrant, no cloud API, no keys. Your prompts and memories never leave the machine. <div align="center"> <img src="docs/diagram-loop.svg" alt="Save a fact once and any later session recalls it automatically, all stored locally on your own machine." width="760" /> </div> <div align="center"> <img src="docs/demo.gif" alt="memo in a terminal: save a fact once, then a later session recalls it automatically." width="760" /> </div> ## Install — one step ```bash curl -fsSL https://raw.githubusercontent.com/jagoff/memo/v3.12.1/install.sh | bash ``` The installer auto-detects **uv** (preferred) or falls back to **pipx**. It downloads MLX models, and wires memo into every agent client it finds (Claude Code, Codex, Devin, Devin Desktop, OpenCode). Prefer a manual install? Any of these expose the same two binaries — `memo` (CLI) and `memo-mcp` (MCP server): ```bash uv tool install mlx-memo # recommended pipx install mlx-memo brew tap jagoff/memo && brew install mlx-memo ``` > Keep memo **isolated as its own tool** (uv tool / pipx / Homebrew). Don't vendor it inside another project's `.venv`. `memo doctor --strict-runtime` verifies the install. **On Linux, or just want to try it without installing anything?** Run the Docker image (CPU backend on Linux — search/recall/save; the reranker + `ask`/ `synthesize`/`dream` verbs are Apple-Silicon-only): ```bash docker run --rm ghcr.io/jagoff/memo:latest memo doctor ``` Details in **[docs/docker.md](docs/docker.md)**. First install downloads ~8 GB of MLX models (5–15 min); later installs hit the HuggingFace cache. Full installer knobs and "move to a new Mac" steps: **[docs/reference.md › Install](docs/reference.md#install-detail)**. **Migrating from another Mac?** Install first, then restore your corpus: ```bash curl -fsSL https://raw.githubusercontent.com/jagoff/memo/v3.12.1/install.sh | bash memo sync bootstrap git@github.com:yourname/memo-sync.git # restore from git ``` ## What makes memo different | Capability | memo | mem0 | letta | cognee | engram | basic-memory | cipher | |---|:---:|:---:|:---:|:---:|:---:|:---:|:---:| | 100% local (no cloud API) | ✅ | ⚠️ | ⚠️ | ⚠️ | ✅ | ✅ | ⚠️ | | **Time-machine** (rewind corpus to any date) | ✅ | ❌ | ⚠️ | ❌ | ❌ | ⚠️ | ⚠️ | | **Contradiction radar** (detect + resolve conflicts) | ✅ | ⚠️ | ⚠️ | ❌ | ⚠️ | ❌ | ❌ | | **Synthesis pipeline** (auto-infer cross-cluster insights) | ✅ | ❌ | ✅ | ⚠️ | ❌ | ❌ | ⚠️ | | **Cross-Mac git sync** (shared corpus, no server) | ✅ | ❌ | ⚠️ | ❌ | ✅ | ✅ | ⚠️ | | Cloud sync (opt-in replication) | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | **TUI** (terminal UI) | ✅ | ❌ | ⚠️ | ❌ | ✅ | ❌ | ✅ | | Obsidian as source-of-truth | ✅ | ❌ | ⚠️ | ❌ | ❌ | ✅ | ❌ | | Knowledge graph + entity extraction | ✅ | ✅ | ❌ | ✅ | ❌ | ✅ | ⚠️ | | Eval regression gate (pre-commit wireable) | ✅ | ⚠️ | ⚠️ | ⚠️ | ❌ | ❌ | ❌ | | Multi-modal (images, audio OCR) | ✅ | ⚠️ | ⚠️ | ✅ | ❌ | ❌ | ❌ | | MCP surface profiles (token economy) | ✅ | ❌ | ❌ | ⚠️ | ⚠️ | ✅ | ❌ | | **Passive capture** (auto-extract from transcripts) | ✅ | ⚠️ | ✅ | ✅ | ✅ | ❌ | ⚠️ | | Session timeline (context before/after) | ✅ | ❌ | ❌ | ❌ | ✅ | ⚠️ | ⚠️ | <sub>✅ first-class · ⚠️ partial, config-gated, or add-on · ❌ absent. Verified mid-2026 against each project's docs/repo: [mem0](https://github.com/mem0ai/mem0), [letta](https://github.com/letta-ai/letta) (formerly MemGPT), [cognee](https://github.com/topoteretes/cognee), [engram](https://github.com/Gentleman-Programming/engram), [basic-memory](https://github.com/basicmachines-co/basic-memory), [cipher](https://github.com/campfirein/cipher). Closest comparators: **basic-memory** (local-first + Obsidian + MCP — memo's exact thesis) and **cipher** (memory layer for coding agents).</sub> ## Why it pays for itself — in tokens memo is built to **spend fewer tokens, not more**. - **~90% smaller MCP surface.** The default `agent` profile exposes **14 tools / ~1.4k schema tokens**, versus **137 tools / ~15k tokens** for the full surface — that overhead is paid *every session, in every client*. memo trims it to almost nothing. - **Recall injects the answer instead of re-deriving it.** Ambient recall surfaces the top memory *before* the agent answers, on a tight **~160-token budget**. The agent stops re-explaining what it already figured out last week. On a ~200-memory corpus, `memo roi` estimates **~80k tokens of model work avoided** per session. The number is corpus-specific; it grows as memo learns more. `memo tokens` tracks the savings in real-time: <img src="docs/tokens-screenshot.png" alt="memo tokens — showing 673k tokens saved all-time across 1924 memories used" width="760" /> | Technique | How to enable | Typical saving | |---|---|---| | Compact recall format | `export MEMO_RECALL_FORMAT=compact` | ~65% per injection | | Trivial prompt gate | On by default | ~25% fewer injections | | Context file compression | `memo compress-context CLAUDE.md` | 30–40% smaller context | ## Use cases - **Continuity across sessions.** Decide "we use Postgres, not Mongo" today; tomorrow, in a fresh session, the agent recalls it on its own — recall injects the decision *before* it answers, so you never re-explain it. - **Shared memory across agents.** Save something while working in Claude Code; Codex, Cursor, or Cline pick it up later. They all read the same local store over MCP. - **Memory that follows you across Macs.** Start on the laptop, continue on the desktop. The corpus travels over serverless git sync and the agent starts with the same context on both. - **Preferences and conventions that stick.** "Tests first", "commit messages in English", "don't touch the auth module" — say it once, the agent applies it every future session. - **Contradiction radar.** Change your mind on an old decision and memo flags the now-stale version — the agent won't reintroduce what you already discarded. - **Time-machine / audit.** "What did we know about this bug last month?" Rewind the corpus to any date and see the state of knowledge at that point. - **Instant project onboarding.** A cold agent gets the project's durable decisions, facts, and preferences up front via the session-start briefing. - **Exact transcript lookup (opt-in).** `memo verbatim search` can find the precise wording of past local transcript turns through a private, lexical-only FTS5 index. It never enters ambient recall. - **Fewer tokens, not more.** Instead of re-deriving what you solved last week, recall injects the answer on a t
What people ask about memo
What is jagoff/memo?
+
jagoff/memo is mcp servers for the Claude AI ecosystem. Persistent semantic memory for AI agents — 100% local on Apple Silicon (MLX) or Linux/Ubuntu (CPU). Markdown source of truth, sqlite-vec + BM25 hybrid search, a codegraph-backed knowledge graph, MCP server + CLI. No cloud, no keys. It has 7 GitHub stars and was last updated today.
How do I install memo?
+
You can install memo by cloning the repository (https://github.com/jagoff/memo) or following the README instructions on GitHub. ClaudeWave also provides quick install blocks on this page.
Is jagoff/memo safe to use?
+
Our security agent has analyzed jagoff/memo and assigned a Trust Score of 77/100 (tier: Trusted). See the full breakdown of passed checks and flags on this page.
Who maintains jagoff/memo?
+
jagoff/memo is maintained by jagoff. The last recorded GitHub activity is from today, with 4 open issues.
Are there alternatives to memo?
+
Yes. On ClaudeWave you can browse similar mcp servers at /categories/mcp, sorted by popularity or recent activity.
Deploy memo to your cloud
Ship this repo to production in minutes. Each platform spins up its own environment with editable env vars.
Maintain this repo? Add a badge to your README
Drop the badge into your GitHub README to show it's tracked on ClaudeWave. Each badge links back to this page and reflects the live Trust Score.
More MCP Servers
Fair-code workflow automation platform with native AI capabilities. Combine visual building with custom code, self-host or cloud, 400+ integrations.
User-friendly AI Interface (Supports Ollama, OpenAI API, ...)
An open-source AI agent that brings the power of Gemini directly into your terminal.
The fastest path to AI-powered full stack observability, even for lean teams.
🕷️ An adaptive Web Scraping framework that handles everything from a single request to a full-scale crawl!
Real-time global intelligence dashboard. AI-powered news aggregation, geopolitical monitoring, and infrastructure tracking in a unified situational awareness interface