AgentStack
MCP unreviewed MIT Self-run

Mneme

mcp-perseus-computing-llc-mneme · by Perseus-Computing-LLC

Persistent memory MCP server for AI agents. SQLite, FTS5 and vector search, AES-256-GCM, 43 tools. Local-first, single Rust binary.

No reviews yet
0 installs
18 views
0.0% view→install

Install

$ agentstack add mcp-perseus-computing-llc-mneme

Open-source listing — not yet scanned by AgentStack. Follow the source repository for install instructions.

Security review

⚠ Flagged

1 finding(s); flagged for manual review. · v0.1.0 How review works →

  • Prompt-injection patterns
  • Secret / credential exfiltration
  • Dangerous shell & filesystem operations
  • Untrusted network calls
  • Known-malicious package signatures
  • high Pipes remote content directly into a shell (remote code execution).

What it can access

  • Network access Used
  • Filesystem access No
  • Shell / process execution Used
  • Environment & secrets No
  • Dynamic code execution No

From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.

Are you the author of Mneme? Claim this listing to set pricing, connect Stripe payouts, and keep 70% of every sale.
Sign up to claim

About

Mneme

> Persistent Memory for AI Agents — MCP-Native. Local-First. Zero Dependencies.

[](./LICENSE) [](https://rust-lang.org) [](https://github.com/Perseus-Computing-LLC/mneme/releases) [](integrations/langgraph/) [](integrations/crewai/) [](integrations/autogen/) []()

Mneme is a single Rust binary that gives AI agents durable memory across sessions. One binary. One file. No Docker. No Postgres. No cloud. Just persistent memory that works with any MCP host.

One-Line Install

curl -sSf https://raw.githubusercontent.com/Perseus-Computing-LLC/mneme/main/scripts/install.sh | sh

That's it. Mneme is installed to ~/.local/bin/mneme. Start it:

mneme serve --db ~/.mimir/data/mneme.db

> macOS note. On Apple Silicon, an unsigned binary is killed on launch > (Killed: 9, no output) by the OS binary policy — even with no quarantine > attribute. The installer ad-hoc code-signs Mneme for you. If you build or copy > the binary yourself (cargo build --release && cp target/release/mneme > ~/.cargo/bin/), sign it once after each rebuild: > > ``bash > codesign --sign - "$(command -v mneme)" > ``

Connect any MCP host (Claude Desktop, Cursor, Hermes Agent, Perseus, etc.):

{
  "mcpServers": {
    "mneme": {
      "command": "mneme",
      "args": ["serve", "--db", "~/.mimir/data/mneme.db"]
    }
  }
}

30-Second Quickstart

# Start Mneme
mneme serve --db memory.db &
sleep 1

# Remember a fact (via MCP JSON-RPC on stdio)
echo '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"mimir_remember","arguments":{"category":"demo","key":"hello","body_json":"{\"text\":\"Hello from Mneme!\"}"}}}' | mneme serve --db memory.db

# Search for it
echo '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"mimir_recall","arguments":{"query":"Hello"}}}' | mneme serve --db memory.db

Works With Every MCP Client

Mneme is a standard MCP stdio server — the same mneme serve command works everywhere. Run mneme doctor to validate your install and print this matrix locally.

| Client | Status | Config | |---|---|---| | Claude Desktop | ✅ | claude_desktop_config.json | | Claude Code / Hermes | ✅ | .mcp.json / config.yaml | | Cursor | ✅ | .cursor/mcp.json | | Windsurf | ✅ | mcp_config.json | | VS Code + Continue.dev | ✅ | config.json | | Zed | ✅ | settings.json | | Codex CLI | ✅ | ~/.codex/config.toml |

Copy-paste config snippets for each: [docs/clients/](docs/clients/).

Why Mneme

Mneme is the only memory engine that is simultaneously MCP-native, local-first, zero-dependency, AND agent-first.

Comparison Matrix

| | Mneme | Mem0 | Letta | Zep | |---|---|---|---|---| | Deployment | Single binary (~8MB) | Cloud + self-host | Docker/Postgres | Docker/Postgres | | Dependencies | None (SQLite embedded) | Python + vector DB | Postgres + Python | Postgres + Go | | MCP-Native | ✅ 46 tools | ❌ Not MCP-native | ❌ Not MCP-native | ❌ Not MCP-native | | Offline/Local | ✅ Fully local | Cloud-dependent | Docker needed | Docker needed | | Encryption | AES-256-GCM ✅ | ❌ | ❌ | ❌ | | Hybrid Search | BM25 + Dense + RRF | Vector only | Vector only | Vector + Graph | | Entity Lifecycle | Decay + Promote + Archive | ❌ | ❌ | ❌ | | Entity Graph | Link + Traverse | ❌ | ❌ | ✅ | | Journal Audit Trail | ✅ Immutable | ❌ | ❌ | ❌ | | State Management | ✅ Key-value + TTL | ❌ | ❌ | ❌ | | MCP Tools | 46 | 5 | 8 | 0 | | GitHub Stars | ~20 | ~55K | ~15K | ~3K | | License | MIT | Apache 2.0 | Apache 2.0 | Apache 2.0 |

[Full comparison: Mneme vs Mem0 →](docs/comparison/mimir-vs-mem0.md) [vs Letta →](docs/comparison/mimir-vs-letta.md) [vs Zep →](docs/comparison/mimir-vs-zep.md)

Stress Test: 100K Entities

Mneme handles production workloads on modest hardware:

| Metric | Result | |---|---| | 100K entity insert | 1.01s (98,732 entities/s) | | FTS5 recall (10 results) | 0.022s | | Decay tick (100K entities) | 1.317s (batched, transactional) | | Memory (100K entities) | ~85MB RSS | | DB file size (100K) | ~45MB (with FTS5 index) |

Run it yourself: cargo test stress_100k --release -- --ignored --nocapture

Framework Integrations

Ready-to-use adapters that make Mneme the default memory backend for popular AI agent frameworks:

| Framework | Integration | Type | |---|---|---| | [LangGraph](integrations/langgraph/) | MimirStore | BaseStore implementation | | [CrewAI](integrations/crewai/) | MimirMemoryTool | Agent tool | | [AutoGen](integrations/autogen/) | MimirMemory | Memory implementation |

Each adapter:

  • Connects via MCP stdio subprocess (persistent session)
  • Maps the framework's memory interface to Mneme tools
  • Comes with a README quickstart (5 minutes to working)
  • Has passing tests with mocked MCP transport

Any MCP-compatible framework works with Mneme directly. See [Awesome Mimir](awesome-mimir.md) for the full list.

46 MCP Tools

Entity CRUD

| Tool | Description | |---|---| | mimir_remember | Store/update entity. Idempotent by (category, key); a content change snapshots the prior version into history. | | mimir_recall | Search with FTS5/dense/hybrid modes, filters, stemming expansion. | | mimir_recall_layer | Recall from a specific biomimetic layer (world, episodic, semantic). | | mimir_recall_when | Proactive just-in-time recall: surface entities whose recall_when triggers match. | | mimir_get_entity | Fetch one entity by ID with full body_json. | | mimir_as_of | Bi-temporal time-travel: the version of a fact (category + key) that was live at a past instant. | | mimir_history | List every superseded version of a fact (category + key), newest first — the full version trail (companion to mimir_as_of). | | mimir_forget | Soft-delete (archived=1). |

Search & RAG

| Tool | Description | |---|---| | mimir_ask | RAG: recall context, query LLM, return grounded answer with sources. | | mimir_embed | Generate dense vectors via the bundled model, Ollama, or OpenAI-compatible endpoint. | | mimir_semantic_search | Dense-only semantic search shortcut — find entities by meaning, ranked purely by embedding similarity (no keyword fallback). | | mimir_context | Pre-formatted markdown block for session injection. | | mimir_ingest | Trigger connector syncs (GitHub, file watcher). | | mimir_ingest_file | Locally extract a document's text (plaintext/markdown always; DOCX/PDF with the multimodal feature) and store it as a recallable entity. | | mimir_extract | Local, deterministic, rule-based knowledge extraction (facts / preferences / temporal events / episodes) from text or a stored entity. Read-only. |

Graph

| Tool | Description | |---|---| | mimir_link | Create typed relationship links between entities. | | mimir_unlink | Remove entity links. | | mimir_traverse | Walk entity link graph up to configurable depth. |

Journal

| Tool | Description | |---|---| | mimir_journal | Append structured event with actor attribution. | | mimir_timeline | Query journal by time range with filters. |

State

| Tool | Description | |---|---| | mimir_state_set | Set key-value state with optional TTL. | | mimir_state_get | Get state value. Returns null if expired. | | mimir_state_delete | Delete state entry. | | mimir_state_list | List state keys, optionally filtered by prefix. |

Lifecycle

| Tool | Description | |---|---| | mimir_decay | Recalculate Ebbinghaus decay scores (batched 1000-entity transactions). | | mimir_prune | Bulk archive by category, decay threshold, or age. | | mimir_purge | Permanently delete archived entities + VACUUM. Destructive. | | mimir_cohere | Autonomous coherence grooming pass — promote, decay, link, archive. | | mimir_autocohere | Full atomic grooming: cohere → decay → compact in one pass (supports dry-run). | | mimir_compact | Archive entities below decay threshold. | | mimir_reindex | Rebuild FTS5 search index from entities table. |

Quality

| Tool | Description | |---|---| | mimir_score | Assign quality score (0.0-1.0). | | mimir_conflicts | Detect conflicting entities via trigram similarity; opt-in resolve=true invalidates the lower-certainty side into history (reversible, dry-run by default). | | mimir_correct | Structured correction capture for learning from errors. | | mimir_supersede | Mark a new fact as superseding an old one (sets the old entity to deprecated). |

Vault & Federation

| Tool | Description | |---|---| | mimir_vault_export | Export entities to .md files with YAML frontmatter. | | mimir_vault_import | Import from .md vault directory (idempotent). | | mimir_federate | Copy entities between workspaces. | | mimir_share | Share one entity (by category + key) into another workspace, preserving content. | | mimir_workspace_list | List all distinct entity categories. |

Metrics & Ops

| Tool | Description | |---|---| | mimir_stats | Full DB statistics across all tables. | | mimir_health | Server and DB health check. | | mimir_bench | Performance benchmark tracking. | | mimir_maintenance | DB maintenance: dedup, orphan detection, VACUUM, FTS5 reindex (supports dry-run). | | mimir_synthesize | LLM session synthesis — extract lessons from transcripts. | | mimir_migrate | Migrate v0.1.x DB to current schema. |

CLI

# Server
mneme serve --db /data/mneme.db
mneme serve --web --port 8767 --encryption-key ~/.mimir/secret.key
mneme serve --llm-endpoint http://localhost:11434/api/generate --llm-model llama3
mneme serve --transport sse --port 8787 --mcp-token my-secret-token

# Maintenance (operate directly on DB, no server needed)
mneme stats          --db /data/mneme.db
mneme forget         --db /data/mneme.db --category decision --key stale-choice --reason "superseded"
mneme prune          --db /data/mneme.db --category junk --min-decay 0.1 --dry-run
mneme purge          --db /data/mneme.db --dry-run
mneme decay          --db /data/mneme.db
mneme reindex        --db /data/mneme.db
mneme vault-export   --db /data/mneme.db --vault-dir ./export/
mneme vault-import   --db /data/mneme.db --vault-dir ./export/
mneme obsidian-sync  ~/obsidian-vault/Mneme/          # one-shot export to an Obsidian vault
mneme obsidian-sync  ~/obsidian-vault/Mneme/ --watch  # continuous sync on every memory change

# Key management
mneme keygen --key-file ~/.mimir/secret.key

Flags

| Flag | Description | |---|---| | --db | SQLite database path (default: ~/.mimir/data/mneme.db) | | --web | Start web dashboard | | --port | Dashboard port (default: 8767) | | --web-bind | Dashboard bind address (default: 127.0.0.1) | | --transport | MCP transport: stdio (default), sse, or http | | --mcp-token | Bearer token for SSE/HTTP transport auth | | --encryption-key | AES-256-GCM key file path | | --llm-endpoint | LLM API endpoint for mimir_ask and embeddings | | --llm-model | LLM model name (default: llama3) | | --llm-api-key | API key for LLM endpoints (OpenAI, Azure, etc.) | | --embedding-endpoint | OpenAI-compatible embedding endpoint | | --connectors-config | Path to connectors.yaml |

Your AI Memory in Obsidian

Mneme is your AI agent's long-term memory — and it doubles as your second brain. Every entity your agent remembers exports to a plain Markdown note with YAML frontmatter, so your AI's memory becomes a navigable personal knowledge base inside the tools you already use: Obsidian, Logseq, or Notion.

# Export your entire memory to an Obsidian vault as linked Markdown notes
mneme obsidian-sync ~/obsidian-vault/Mneme/

# Keep it live — re-export automatically on every memory change
mneme obsidian-sync ~/obsidian-vault/Mneme/ --watch

Open the vault in Obsidian and you get a graph of your agent's knowledge.

WikiLink backlinks. When one entity links to another (via mimir_link or a depends_on / implements / references relationship), the exported note gets a ## Links section with [[WikiLink]] backlinks that resolve natively in Obsidian's graph view:

---
id: cli-de8dfb8364b6
category: architecture
key: api
type: insight
decay_score: 0.5000
---

{"content":"axum service"}

## Links

- [[cli-99756b494c7d|database]] (depends_on)

Links resolve by entity id (notes are written as .md) so they never break, and Obsidian shows the human-readable key as the link label. Open the graph view and your agent's architecture, decisions, and insights become a clickable knowledge map.

--watch polls Mneme's cheap, deterministic state digest on an interval and re-exports only when memory actually changes. It naturally catches every mimir_remember write with no filesystem-watcher dependency and no coupling to the server. Tune the interval with MIMIR_SYNC_INTERVAL_SECS (default: 2s).

Other PKM tools

| Tool | How | |---|---| | Obsidian | mneme obsidian-sync — WikiLinks resolve in the graph view out of the box. | | Logseq | Point obsidian-sync at your Logseq graph directory. Logseq reads the same [[WikiLink]] syntax and Markdown frontmatter. | | Notion | Run mneme vault-export, then use Notion's Import → Markdown & CSV to pull the notes in. |

Unlike cloud-only "second brain" tools, Mneme runs 100% local, is written in Rust, encrypts at rest with AES-256-GCM, and applies decay scoring so stale memories fade — your knowledge base stays yours and stays fresh.

Features

Semantic Search (on by default)

  • Bundled, in-process embeddings — a quantized all-MiniLM-L6-v2 model

(384-dim) is compiled into the binary, so dense/semantic search works with zero config and zero network: no Ollama, no API key, no model download. This is the default build (bundled-embeddings feature).

  • Auto-embed on write (#271)mimir_remember embeds each new (or

content-changed) entity synchronously as it is written, using the bundled model. Single-entity embedding is deterministic and LRU-cached, so it is cheap and adds no background tasks. Embedding failures are non-fatal (logged to stderr); the write always succeeds.

  • Hybrid is the default recall mode (#271)mimir_recall(query=...) with

no mode flag automatically selects hybrid (dense + keyword fused via RRF) whenever embeddings exist, and transparently falls back to fts5 keyword search when none do. No manual mimir_embed step, no flags to remember.

  • mimir_semantic_search(query, limit) — a one-tool shortcut for pure

dense, meaning-based search (no keyword fallback) when you just want "find things like this".

  • Optional alternate embedder — to use Ollama or any OpenAI-compatible

/v1/embeddings endpoint instead of the bundled model, set --llm-endpoint (and --embedding-endpoint / --llm-api-key as needed). This is entirely optional; the bundled model is used by default.

  • Build a lean binary without bundled embeddings via

cargo build --no-default-features — recall then defaults to keyword search unless a remote embedder is configured.

Hybrid Search internals

  • FTS5 keyword search with LIKE fallback and Porter stemming expansion
  • Dense vector search via cosine similarity on stored embeddings
  • Reciprocal Rank Fusion (RRF) — combine keyword + vector results
  • Query expansion — automatic stemming variants for broader recall

Memory Lifecycle

Mneme models memory using three biomimetic layers, inspired by human memory pathways:

  • World (Core): Slow-decaying, global facts about the environment.
  • Episodic (Buffer): Fast-decaying, session-specific interaction history.
  • Semantic (Working): Medium-decaying, general knowledge and learned concepts.

You can interact with these layers directly using the mimir_recall_layer tool or by specifying the layer parameter in mimir_remember.

  • Ebbinghaus decay

Source & license

This open-source MCP server is cataloged on AgentStack and links to its original source — we do not rehost the code.

Install and usage instructions live in the source repository linked above.

Reviews

No reviews yet — be the first.

Versions

  • v0.1.0 Imported from the upstream source.