Mnemo - Persistent AI Memory
Mnemo is a persistent AI memory server with hybrid search, a knowledge graph, and multi-machine sync.
Core Memory Operations
Store memories via typed capture (conversation, fact, preference, skill, task, decision) with embedding-based dedup and optional LLM compression
Search using natural language with hybrid FTS5 + vector retrieval fused via RRF, cross-encoder reranking, and temporal decay
List & filter memories by category; update or delete by ID
Archive (auto or manual, based on importance × recency) and restore archived memories
Consolidate similar memories within a category using an LLM
Knowledge Graph & Temporal Features
Automatic entity extraction and relation tracking
Bitemporal time-travel queries (
as_of) and a full audit trail of changesEntity search and graph traversal
Export, Import & Sync
Export/import memories as JSONL for backup or migration
Sync across machines via Google Drive or S3/R2/B2/MinIO
Encrypted passport bundles (AES-256-GCM + Argon2id) for secure cross-machine transfer
AI Agent Integration
Built-in skills:
recall-context,memory-commit,knowledge-audit, andsession-handoffSessionStart and PostToolUse hooks for proactive memory management
System & Configuration
View stats (count, categories, embedding status)
Manage settings, authenticate sync providers, pre-warm embedding models
Zero-config local Qwen3 ONNX embeddings and reranking (no API keys required)
Optional cloud LLM providers: Jina AI, Gemini, OpenAI, Cohere
In-server
helpdocumentation
Supports syncing persistent memory data across multiple machines using Dropbox as a remote storage provider.
Utilizes Google's Gemini embedding models to provide cloud-based semantic search capabilities for stored memories.
Enables automatic synchronization of memory databases across multiple instances using Google Drive via rclone.
Integrates with OpenAI's embedding models to enable high-quality semantic search and vector-based retrieval of facts and preferences.
Uses an embedded and managed rclone subprocess to facilitate automatic, multi-machine synchronization of memory files.
Mnemo MCP Server
mcp-name: io.github.n24q02m/mnemo-mcp
Persistent AI memory with hybrid search and embedded sync. Open, free, unlimited.
Project | Tagline | Tag |
Knowledge graph for token-efficient code reviews -- semantic search and call-... | MCP | |
IMAP/SMTP email for AI agents -- read, send, organize folders, and manage att... | MCP | |
Composite MCP server for Godot Engine -- 17 composite tools for AI-assisted g... | MCP | |
Markdown-first Notion for AI agents -- pages, databases, blocks, and comments... | MCP | |
Telegram for AI agents -- messages, chats, media, and contacts across both bo... | MCP | |
Claude Code plugin marketplace for the n24q02m MCP servers -- install web sea... | Marketplace | |
Image and video understanding + generation for AI agents -- across Gemini, Op... | MCP | |
Chrome Extension for bulk operations on Jules tasks via batchexecute API -- a... | Tooling | |
Shared foundation for building MCP servers -- Streamable HTTP transport, OAut... | MCP | |
Persistent AI memory with hybrid search and embedded sync. Open, free, unlimi... | MCP | |
Lightweight Qwen3 text embedding and reranking via ONNX Runtime and GGUF | Library | |
Secrets without the server. | CLI | |
TACET: a self-distilling neuro-symbolic cascade that amortises LLM cost in kn... | Tooling | |
Shared web infrastructure package for search, scraping, HTTP security, and st... | Library | |
Open-source MCP server for AI agents: web search, content extraction, and lib... | MCP |
Table of contents
Related MCP server: Better Notion MCP
Roadmap (current = Phase 3 / v2.x)
Phase | Version | Status | Highlights |
Phase 1 | v1.x | Shipped | Typed |
Phase 2 | v1.x+1 | Shipped | LLM-driven compression of older memories + Passport sync (encrypted import/export bundle for cross-machine bootstrap) -- AES-256-GCM + Argon2id, S3 / R2 / B2 / MinIO + GDrive backends, delta-sync with LWW per row |
Phase 3 | v2.0.0 | Shipped (BREAKING) | Temporal knowledge graph -- bitemporal |
Features
Hybrid retrieval -- FTS5 + sqlite-vec, fused via Reciprocal Rank Fusion (k=60), then re-ranked by a configurable rerank chain (
RERANK_MODELS, order = litellm fallback; empty -> local qwen3-reranker) with temporal decay and importance boostTyped capture --
memory(action="capture")with 6 context_types (conversation/fact/preference/skill/task/decision), embedding-based dedup, and a configurable LLM chain (LLM_MODELS, order = litellm fallback)Knowledge graph -- Automatic entity extraction and relation tracking; top results boosted by graph proximity
Importance scoring + archive policy -- LLM-scored 0.0-1.0 importance; soft-archive when
recency_factor * (1 - importance) > 1.0; restore action availableAuto-archive trigger -- Background sweep every Nth capture (default 100) -- no cron required
STM-to-LTM consolidation -- LLM summarization of related memories in a category
Duplicate detection -- Warns before adding semantically similar memories
Zero config -- Built-in local Qwen3 ONNX embedding + reranking, no API keys needed. Optional cloud providers (Jina AI, Gemini, OpenAI, Cohere)
Multi-machine sync -- JSONL-based merge sync via Google Drive (bundled Desktop OAuth public client)
Plugin trinity -- Ships
/recall-context+/memory-commitskills and SessionStart + opt-in PostToolUse hooks (see docs/ARCHITECTURE.md)Proactive memory -- Tool descriptions and skills guide AI to save preferences, decisions, facts at the right moment
LLM compression -- Per-turn compression via the multi-provider dispatcher targets ~3x token reduction at >=0.9 fact retention; graceful skip when no provider configured (see docs/compression.md)
Encrypted passport sync -- AES-256-GCM bundles + Argon2id KDF, S3 (R2 / B2 / MinIO) and Google Drive backends, delta-sync with last-write-wins per row (see docs/passport.md). Bootstrap via the
passport-bootstrapskill.Temporal knowledge graph -- Bitemporal columns (
valid_from/valid_to/superseded_by) on every memory + entity-resolution dedup (embedding KNN at default 0.85 cosine threshold) + audit trail (memory_audittable with prev/new state hashes) + new actions (entity_search/entity_graph/history) + opt-inKG_AUTO_ENABLEDauto-extract on capture. BREAKING for clients that calledmemory.getexpecting historical-inclusive results: passas_offor time-travel; default now filters to current-state (valid_to IS NULL).
Comparison vs. peers
Feature | mnemo-mcp | Mem0 | Letta | OpenMemory |
Hybrid retrieval (FTS + vec) | yes (FTS5 + sqlite-vec + RRF) | yes | partial | yes |
Cross-encoder rerank chain | yes (qwen3 local + Jina + Cohere) | partial (Cohere only) | no | no |
Temporal decay scoring | yes (exp half-life) | no | no | no |
Importance boost in rank | yes (LLM 0.0-1.0) | no | no | no |
Soft-archive + restore policy | yes (importance x recency) | no | no | no |
Self-hostable (single SQLite file) | yes (zero ext deps) | partial (cloud-first) | yes (Postgres) | yes (Postgres + Qdrant) |
Multi-provider LLM dispatch | yes ( | partial | yes | partial |
Plugin trinity (skills + hooks) | yes (recall-context + memory-commit) | n/a | n/a | n/a |
Multi-machine sync | yes (GDrive bundled OAuth) | yes (cloud) | n/a | n/a |
E2E-encrypted passport sync | yes (AES-256-GCM + Argon2id, S3 + GDrive) | no | no | no |
LLM compression on capture | yes (multi-provider, ~3x at >=0.90 retention) | no | no | no |
Backend-pluggable sync architecture | yes (S3 / R2 / B2 / MinIO + GDrive) | no | no | no |
Bitemporal | yes ( | no | partial (events only) | no |
Entity resolution via embedding KNN | yes (cosine threshold tunable) | no | no | no |
Audit trail with state hashes | yes ( | no | no | no |
Status
2026-05-02 -- Architecture stabilization update
Past months saw significant churn around credential handling and the daemon-bridge auto-spawn pattern. This caused multi-process races, browser tab spam, and inconsistent setup UX across plugins. The architecture is now stable: 2 clean modes (stdio + HTTP), no daemon-bridge layer, no auto-spawn from stdio.
Apologies for the instability period. If you encountered issues with prior versions, please update to the latest release and follow the current setup docs -- most prior workarounds are no longer needed.
Related plugins from the same author:
wet-mcp -- Web search + content extraction
imagine-mcp -- Image/video understanding + generation
better-notion-mcp -- Notion API
better-email-mcp -- Email management
better-telegram-mcp -- Telegram
better-godot-mcp -- Godot Engine
better-code-review-graph -- Code review knowledge graph
All plugins share the same architecture -- install once, learn pattern transfers.
Documentation
Full docs at mcp.n24q02m.com/servers/mnemo-mcp/setup/:
Setup -- install methods for Claude Code, Codex, Gemini CLI, Cursor, Windsurf, mcp.json
Modes overview -- stdio / local-relay / remote-relay / remote-oauth
Multi-user setup -- per-JWT-sub credential model
Install with AI agent -- paste this to your AI coding agent:
Install MCP server
mnemo-mcpfollowing the steps at https://raw.githubusercontent.com/n24q02m/claude-plugins/main/plugins/mnemo-mcp/setup-with-agent.md
Smithery
mnemo-mcp is packaged for Smithery -- install or run it straight from the registry. It starts over stdio via uvx mnemo-mcp with no configuration required to launch; credentials are configured at runtime through the server's own config flow (see Documentation). The published start command lives in smithery.yaml.
Tools
15 MCP tools, 17 memory actions. The memory surface is exposed both as 11 specialized single-purpose tools and a deprecated legacy memory dispatcher (same actions), plus config, help, and config__open_relay:
Tool | Actions | Description |
| (one action each) | Specialized single-purpose memory tools -- the recommended surface |
|
| Core CRUD + typed capture (6 context_types) + hybrid search (RRF + rerank + temporal decay) + import/export + soft-archive + restore + on-demand archive sweep + LLM consolidation + LLM compression + temporal KG (entity search / graph / history) |
|
| Server status, trigger sync, update settings, pre-download embedding model, authenticate sync provider, manage HTTP setup form lifecycle, passport export/import |
|
| Full documentation for any tool |
| (HTTP relay mode) | Open the zero-config relay setup form (registered via mcp-core) |
Plugin trinity (Claude Code marketplace install):
Component | Trigger | Purpose |
| session start, before significant decisions, "what do I know about X?" | Pulls cwd / topic-relevant memories with |
| "remember this" / "save this" / "ghi nho" / "luu lai" | Typed manual capture with |
| periodic / "audit memory" | Find duplicates, contradictions, stale entries; consolidate |
| end of session | Capture decisions / preferences / corrections / conventions / open questions |
SessionStart hook | every session init | Non-blocking nudge to invoke |
PostToolUse hook (opt-in) |
| Hint |
MCP Resources
URI | Description |
| Database statistics and server status |
MCP Prompts
Prompt | Parameters | Description |
|
| Generate prompt to save a conversation summary as memory |
|
| Generate prompt to recall relevant memories about a topic |
Security
Graceful fallbacks -- Cloud → Local embedding, no cross-mode fallback
Sync token security -- OAuth tokens stored at
~/.mnemo-mcp/tokens/with 600 permissionsInput validation -- Sync provider, folder, remote validated against allowlists
Error sanitization -- No credentials in error messages
Build from Source
git clone https://github.com/n24q02m/mnemo-mcp.git
cd mnemo-mcp
uv sync
uv run mnemo-mcpCLI
The mnemo-mcp console script both starts the server and exposes a few one-shot operator subcommands. A bare invocation (or any ---prefixed flag) starts the server; a leading subcommand runs an action and exits.
mnemo-mcp # start the stdio server (default transport)
mnemo-mcp --http # start the Streamable HTTP server
# (also via MCP_TRANSPORT=http or TRANSPORT_MODE=http)
mnemo-mcp auth google # authorize Google Drive sync via OAuth
mnemo-mcp auth google --client-id <ID> --client-secret <SECRET> # bring-your-own OAuth client
mnemo-mcp logout # clear the local Google Drive sync token
mnemo-mcp warmup # pre-download the bundled local embedding + rerank model
mnemo-mcp config status # report whether stored config exists
mnemo-mcp config delete --yes # delete the stored (encrypted) config
mnemo-mcp relay status # show the active browser-setup relay session
mnemo-mcp relay open # open the relay setup form in a browser
mnemo-mcp relay reset # clear relay session state
mnemo-mcp doctor # environment diagnostics (Python, backend, store, mode)Subcommand | Purpose |
| Authorize a sync credential provider (currently |
| Pre-download the bundled local Qwen3 ONNX embedding + rerank model so first use works offline |
| Inspect or remove the stored encrypted configuration |
| Inspect, open, or clear the zero-config browser setup session |
| Report Python version, credential backend, store dir, config, relay session, and storage mode |
Hosted endpoint
A ready-to-use shared instance is hosted at https://mnemo.n24q02m.com/mcp -- Streamable HTTP transport, OAuth-gated. Point any MCP client that supports remote HTTP + OAuth at that URL and authenticate on first connect; each authenticated user gets an isolated per-user credential store (see Trust Model). To run your own instance instead, see Deploy to Cloudflare.
Deploy to Cloudflare
Run your own mnemo instance serverless on Cloudflare (Containers + D1 + Vectorize + KV).
Prerequisites: a Cloudflare account on the Workers Paid plan — required for Containers, D1, and Vectorize (the Cloudflare free tier does not include them) — and the wrangler CLI.
git clone https://github.com/n24q02m/mnemo-mcp && cd mnemo-mcpwrangler loginProvision the storage bindings mnemo uses -- the memories database, the embedding index, and the encrypted credential store:
wrangler d1 create mnemo-memories wrangler vectorize create mnemo-memory-vectors --dimensions 768 --metric cosine wrangler kv namespace create mnemo-kvPaste the returned D1 database ID and KV namespace ID into
wrangler.jsonc(the Vectorize index binds by name, so no ID is needed). The memories schema (tables + FTS5 full-text) is created by the container on first boot -- there is no separate migration step.Push the container image to your Cloudflare managed registry (CF Containers cannot pull from external registries directly), then set
<YOUR_ACCOUNT_ID>inwrangler.jsonc:docker pull ghcr.io/n24q02m/mnemo-mcp:beta docker tag ghcr.io/n24q02m/mnemo-mcp:beta mnemo-mcp:beta wrangler containers push mnemo-mcp:beta # prints registry.cloudflare.com/<ACCOUNT_ID>/mnemo-mcp:betaSet
<YOUR_PUBLIC_URL>(e.g.https://mnemo.example.com) and<YOUR_WORKER_DOMAIN>(e.g.mnemo.example.com) inwrangler.jsonc, then set the secrets:wrangler secret put CREDENTIAL_SECRET # per-user vault key (encrypts the cf-kv credential store) wrangler secret put MCP_RELAY_PASSWORD # shared password gating the browser setup form wrangler secret put MCP_DCR_SERVER_SECRET # required once PUBLIC_URL is set (multi-user, per-JWT-sub) wrangler secret put JINA_AI_API_KEY # EMBEDDING_MODELS + RERANK_MODELS (cloud embed / rerank) wrangler secret put GOOGLE_VERTEX_EXPRESS_API_KEY # LLM_MODELS (graph extraction, importance, consolidation)wrangler deployand complete setup in the browser relay form at your Worker domain.
Storage maps to Cloudflare via MCP_STORAGE_BACKEND=cf-kv (credentials / tokens, encrypted),
DOCS_DB_BACKEND=cf-d1 (the memories database + FTS5 full-text), and Vectorize (embeddings,
cosine). Embedding and reranking are forced cloud through the EMBEDDING_MODELS /
RERANK_MODELS chains (jina_ai/...) so the container never downloads the local Qwen3 ONNX
models, and graph / LLM features run through the LLM_MODELS chain (vertex_express/...).
Trust Model
This plugin implements TC-Local (machine-bound, single trust principal). The mode/storage/encryption breakdown below is the full classification.
Mode | Storage | Encryption | Who can read your data? |
stdio (default) |
| AES-GCM, machine-bound key | Only your OS user (file perm 0600) |
HTTP self-host | Same as stdio | Same | Only you (admin = user) |
HTTP multi-user remote ( | Per-JWT-sub credential store | AES-GCM | Only the authenticated user (per- |
License
MIT -- See LICENSE.
Maintenance
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/n24q02m/mnemo-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server