mcp-memory-rs
Resumen
Descripción del creador (original en inglés)
Local-first agent memory: versioned JSON categories, BM25 search, per-device ACL, fleet sync.
Los tres pilares de PopNx MCP
Estos tres nunca se combinan en una sola puntuación: las opiniones, las mediciones y la popularidad son cosas distintas.
- Opinión de usuariosiAún no hay reseñasLas reseñas se abrirán junto con las cuentas en una etapa posterior
- Nuestras revisiones básicasi1 de 1 superadasRevisado con información pública; el código aún no se ha escaneado
- UsoiMuy nuevo★ –
Qué puedes hacer con él
Todavía no escribimos un resumen sencillo para este. Abajo están los datos que leímos del registro.
- Conexión: –
- Transporte:
- Categoría: Búsqueda y memoria de IA
Instalación
Elige la app de IA que usas y copia la configuración.
Antes de instalar
- Revisiones básicas: 1 de 1 superadas
- Se ejecuta en tu computadora con los permisos de tu usuario (archivos, red, apps).
- El registro no indica ninguna clave que completar.
El creador no incluyó detalles de instalación en el registro. Consulta el README del creador más abajo.
Qué puede hacer
Se ejecuta en tu computadora; la lista de herramientas aparece en tu app de IA después de instalarlo.
Revisiones básicasi
Revisamos información que cualquiera puede ver; no hemos leído el código. Las revisiones que no aplican no se cuentan. · Revisado el 8 nov 2026
- ✓ Superada
El creador coincide con el repo
El nombre en el registro se verificó con la cuenta de GitHub DioNanos, dueña del repo
- … Aún sin revisar
Sigue en mantenimiento
Todavía no hemos leído este repo en GitHub
- … Aún sin revisar
Tiene licencia
Todavía no hemos leído este repo en GitHub
- – No aplica
El endpoint responde
Este se ejecuta en tu computadora; no hay endpoint en internet
- – No aplica
Inicio de sesión con OAuth
Se ejecuta en tu computadora y usa ajustes locales en su lugar
- … Aún sin revisar
Sin instrucciones ocultas en las descripciones de herramientas
Se ejecuta en tu computadora; solo podemos leer listas de herramientas de endpoints en internet
Comparado con otros en Búsqueda y memoria de IAi
- Más estrellas que el 0% de los otros 5688 servidores de esta categoría
- Publicado en el registro más recientemente que el 17% de los otros 5688 servidores de esta categoría
- Revisiones básicas iguales o mejores que el 100% de los otros 5688 servidores de esta categoría
Comparado con todos los servidores activos de esta categoría en el registro. Las estrellas solo cuentan cuando quien lo publica es dueño del repo.
Preguntas frecuentes
¿Es seguro mcp-memory-rs?
Superó 1 de 1 revisiones básicas aplicables. No hemos leído el código. Antes de agregar una clave o un token, revisa qué acceso pide el servidor y usa una clave que tenga solo los permisos que necesitas.
¿Qué claves o códigos necesita?
El registro no indica ninguna clave obligatoria, aunque algunos servidores te piden iniciar sesión la primera vez que los usas.
¿Se ejecuta en mi computadora o en la nube?
Se ejecuta en tu computadora. Tu app de IA lo inicia cuando hace falta, y los datos no pasan por los servidores del creador (a menos que el propio servidor llame a un servicio en línea).
¿Sigue en mantenimiento?
El repo de GitHub cambió por última vez –, y la última versión (0.2.1) llegó al registro hace 5 meses.
¿Qué apps pueden usarlo?
Las apps compatibles con MCP, como Claude Desktop, Claude Code, Cursor y VS Code.
¿Qué puedo usar en su lugar?
En la misma categoría: Context7, Codebase Memory, Exa
Alternativas
Servidores de la misma categoría hechos por otros creadores, ordenados por estrellas.
Cómo leer una tarjeta:↓ Descargas por semanai★ Estrellas de GitHubiTres pilares: reseñas · revisiones · usoiActualizado = fecha en que se publicó la última versión en el registroi
Codebase Memory
Codebase knowledge graph for AI agents — 162 languages, sub-ms queries, 99% fewer tokens.
Exa
Connect AI agents to Exa for web search, content fetching, and multi-step research.
README del creador
Abrir el README
Copiado tal cual del repo del creador. PopNx MCP no lo ha revisado ni lo respalda. Se quitaron HTML, imágenes y scripts. Los enlaces llevan fuera de este sitio.
mcp-memory-rs
Local-first MCP memory server in pure Rust. Persistent, versioned, queryable memory for AI agents — owned by the user, not by a platform.
State lives on your disk as plain JSON categories backed by SQLite (FTS5). Every write is versioned and backed up. A fleet of devices syncs through an optional HTTP endpoint with merkle manifests and optimistic concurrency. No cloud account, no embedding service, no network dependency in the default mode.
Why
Agent memory tied to a vendor dies with the vendor session. This server keeps the agent's long-lived state — identity, projects, infrastructure notes, per-device workflows — in files you can read, grep, diff, and back up yourself. Any MCP client (Claude Code, Codex, or anything speaking MCP stdio) gets the same memory; swapping the model does not lose the state.
Design choices that follow from that:
- Local-first: the stdio server works fully offline against local storage. Sync is a separate, explicit step — never a hidden dependency.
- Plain storage: one JSON file per category plus a SQLite index. The database can be rebuilt from the files; the files are the truth.
- Versioning by default: every write keeps history; deletes create a backup first.
memory_historyandmemory_compactmanage the tail. - Concurrency-safe writes:
expected_hashturns clobbering races between concurrent agents into explicit conflicts. - Zero ML in the core: full-text search is SQLite FTS5 with BM25;
memory_search_semanticadds an optional TF-IDF hybrid. No model downloads.
The pair: for *corpus* recall (chunked documents, BM25 retrieval,
original-text injection) see the companion server
mcp-vl-msa-rs. This server holds
the curated agent state; that one holds the queryable corpus.
flowchart LR
A["AI agent (any MCP client)"] A -->|"curated state read / write / sync"| M["mcp-memory-rs the notebook "] A -->|"corpus recall index / search / fetch"| V["mcp-vl-msa-rs the library "] M --- D1[("JSON categories SQLite FTS5")] V --- D2[("tantivy BM25 collections")]
Install
Prebuilt binary (recommended) — download the archive for your platform from the latest release, extract, and point your MCP client at the binary:
tar xzf mcp-memory-rs-x86_64-unknown-linux-gnu.tar.gz
install -m755 mcp-memory-rs-*/mcp-memory-rs ~/.local/bin/
Prebuilt targets (Linux + Android): x86_64-unknown-linux-gnu, x86_64-unknown-linux-musl, aarch64-unknown-linux-gnu, aarch64-unknown-linux-musl (edge / ARM / Termux), aarch64-linux-android.
macOS: no prebuilt binary is shipped (it would need Apple code-signing). Install from source instead — cargo install compiles it on your Mac in one command, no signing needed:
cargo install --git https://github.com/DioNanos/mcp-memory-rs --locked
--locked uses the committed Cargo.lock (reproducible build).
Quick start
cargo build --release
stdio MCP server, offline mode (default)
./target/release/mcp-memory-rs
Claude Code (~/.claude.json) or any MCP client:
{
"mcpServers": { "memory": { "command": "/path/to/mcp-memory-rs", "env": { "MCP_MEMORY_CONFIG": "/home/me/.config/mcp-memory-rs/config.toml", "MCP_MEMORY_REQUIRE_CONFIG": "1", "MCP_MEMORY_MODE": "offline", "MCP_DEVICE": "my-laptop" } } } }
Codex (~/.codex/config.toml):
[mcp_servers.memory]
command = "/path/to/mcp-memory-rs" env = { MCP_MEMORY_CONFIG = "/home/me/.config/mcp-memory-rs/config.toml", MCP_MEMORY_REQUIRE_CONFIG = "1", MCP_MEMORY_MODE = "offline", MCP_DEVICE = "my-laptop" }
auto-approve read-only tools (memory_read/list/search/…); writes still gated
default_tools_approval_mode = "approve"
Configuration is TOML — copy config/example.toml to ~/.config/mcp-memory-rs/config.toml and adjust it. The server auto-discovers that XDG-style path. Environment variables override file values (MCP_DEVICE, MCP_MEMORY_MODE, MCP_MEMORY_DIR, …); managed deployments should set MCP_MEMORY_REQUIRE_CONFIG=1 so a missing config fails closed.
Memory model
Memory is organized in categories: named JSON documents (base, projects, my-laptop, workflow_my-laptop, …). Reads return the document plus metadata (content hash, size, last writer, timestamp). Writes replace the category or, with merge=true, patch it per top-level key.
Access control
Multi-device fleets get a small, explicit ACL ([acl] in the config):
| Rule | Effect |
|---|---|
admin_devices | Listed devices write everything. |
device_categories | Device name writes category name and workflow_name — its own namespace only. |
| agent scope | Device foo-agent writes foo_* categories. |
| everyone | All devices read everything. |
Unknown categories are denied for non-admin writers — fail closed.
Fleet sync
Each node runs local-first; one node (or any number) exposes the HTTP API as a sync remote. sync_manifest builds a merkle-rooted fingerprint of all categories; sync_diff compares manifests; memory_sync pushes dirty categories or pulls remote changes. Conflicts between nodes are resolved by the configured conflict_strategy (last-write-wins by default); expected_hash preconditions protect direct writes (MCP and HTTP), not the sync envelope.
The HTTP API is an admin/sync plane: the bearer token grants full access to every category. Per-category ACL applies on the MCP stdio surface, where the device identity is known locally; HTTP callers are identified only by the shared token, so no per-device ACL is enforced there.
The HTTP server requires MCP_MEMORY_TOKEN and refuses to start without it. Bind it to loopback (the default) and tunnel between nodes; do not expose it to the public internet.
MCP_MEMORY_TOKEN=<secret> ./target/release/mcp-memory-rs --http
Tool surface
| Tool | Description |
|---|---|
memory_read | Read a category (optional field filtering). |
memory_write | Replace or merge-patch a category; versioned; expected_hash precondition. |
memory_append | Append a timestamped entry to a bounded append-only log category; auto-prunes by max_entries/max_age_days. For event streams / session journals, so they don't bloat memory categories. |
memory_delete | Delete a category (backup created first). |
memory_list | All categories with hash/size/last-update metadata. |
memory_search | FTS5 full-text search, BM25 ranking, category/date/actor filters, snippets. |
memory_search_semantic | Hybrid TF-IDF + FTS5 search. |
memory_history | Version history of a category. |
memory_delta | Changes since a known hash (cheap polling). |
memory_context | Multi-category warmup read, token-budget oriented. |
memory_compact | Prune old versions and backups. |
memory_status | Local-first status: dirty queue, manifest hash, last sync. |
memory_doctor | Diagnostics: paths, database, categories, sync config. |
sync_manifest | Merkle-rooted manifest of all categories. |
sync_diff | Compare local vs remote manifest: push/pull/conflict sets. |
sync_push / sync_pull | Export/import sync envelopes. |
memory_sync | One sync step against the configured remote (push_dirty / pull_remote). |
The same surface is available over HTTP (/api/v1/*) for non-MCP consumers; /health is unauthenticated, everything else requires the bearer token.
AI client compatibility
The server is built to be self-explanatory to a weak client model:
- At
initializeit returns an instructions string describing the memory model and the entry-point tools. Some lightweight clients ignore this field; if your client never surfaces it, read the tool descriptions instead — they carry the same guidance (e.g.memory_readtakescategory, notkey). - Read-only tools are annotated
readOnlyHint, so a client such as Codex can auto-approve them. On Codex, anunsupported call/user cancelledresult usually means the tool-approval gate fired, not a server fault — setdefault_tools_approval_mode = "approve"(see the Codex snippet above). - The server speaks the standard MCP handshake. A client must complete
initializeand sendnotifications/initializedlike any MCP client.
Storage layout
With no config and strict mode disabled, standalone base_dir remains ~/.memory for compatibility. The auto-discovered example config uses ~/.local/state/mcp-memory-rs (XDG-style). Config resolution is: explicit MCP_MEMORY_CONFIG, $XDG_CONFIG_HOME, $HOME/.config, legacy cwd-local memory-config.toml, then standalone defaults. Either way the layout is:
<base_dir>/
├── categories/ # one .json file per category — the source of truth ├── backups/ # automatic pre-delete/pre-overwrite backups ├── memory.db # SQLite: FTS5 index, versions, sync state (rebuildable) └── memory.db-wal # write-ahead log (WAL mode; do not copy or delete by hand)
Concurrency (many processes, one store)
Every writer — one stdio server per client plus the optional --http instance — opens its own SQLite connection on the same file. Since 0.3.2 each mutation runs inside a BEGIN IMMEDIATE transaction: SQLite is the mutex that serializes writers *across processes*, so an append (read → modify → write) can never lose another process's entry. Lock acquisition is retried with jittered backoff inside one total budget; when it expires the call fails with a clear Store busy … retry later error instead of hanging or corrupting anything.
[storage]
journal_mode = "wal" # "wal" (default) or "delete" synchronous = "full" # "full" (default, durable) or "normal" sqlite_busy_timeout_ms = 200 # per-statement SQLite busy handler lock_deadline_ms = 10000 # total wait for the write lock per mutation
Category JSON files are written crash-safely: the new content is staged next to the file (a name unique to the transaction), the SQLite rows are committed, then the staged file is renamed into place. A process that dies in between leaves a staged file whose fate is decided by its hash under the next write lock (matching the committed hash → promoted; otherwise → discarded). Readers never rename or delete anything: they serve whichever file carries the committed hash. memory_write merge=true, the log/memory kind check and the optional expected_hash compare-and-swap all run inside the same lock.
Snapshot and restore
memory.db alone is not a backup (WAL, JSON files). Use the CLI:
mcp-memory-rs --snapshot /path/to/snap-2026-09-15 --with-backups # db + json + backups + manifest
mcp-memory-rs --restore /path/to/snap-2026-09-15 --stopped mcp-memory-rs --verify-store # read-only: db vs json, pending files
--verify-store never opens a Store (no PRAGMA, schema or reconcile): it is safe on a store another binary still owns. A store written by a version older than 0.3.2 can hold categor
Solo se muestra el principio; lee el resto en el repo