mnemon-mcp
mnemon-mcp
Memoria persistente en capas para agentes de IA. Local primero. Sin nube. Un único archivo SQLite.
Página de inicio · npm · GitHub
Tu agente de IA olvida todo después de cada sesión. Mnemon lo soluciona.
Le da a cualquier cliente compatible con MCP — OpenClaw, Claude Code, Cursor, Windsurf, o el tuyo propio — una memoria a largo plazo estructurada respaldada por una única base de datos SQLite en tu máquina. Sin claves API, sin nube, sin telemetría. Solo npm install y tu agente recuerda.
¿Por qué memoria en capas?
Los almacenes planos de clave-valor tratan "lo que pasó ayer" igual que "nunca hagas commit sin pruebas". Eso está mal: diferentes tipos de conocimiento tienen diferentes vidas útiles y patrones de acceso.
Mnemon organiza los recuerdos en cuatro capas:
Capa | Qué almacena | Cómo se accede | Vida útil |
Episódica | Eventos, sesiones, entradas de diario | Por fecha o período | Decae (vida media de 30 días) |
Semántica | Hechos, preferencias, relaciones | Por tema o entidad | Estable |
Procedimental | Reglas, flujos de trabajo, convenciones | Se carga al inicio | Rara vez cambia |
Recurso | Material de referencia, notas de libros | Bajo demanda | Decae lentamente (90 días) |
Una entrada de diario del martes pasado y una regla de codificación que nunca cambia viven en capas diferentes — porque así debe ser.
Related MCP server: persistent-kb-mcp
Calidad de recuperación
La recuperación se mide contra un conjunto dorado de 50 casos en un corpus bilingüe real de 797 memorias (RU/EN), a través del servidor MCP real — no una reimplementación. Números actuales (metodología e historial):
Métrica | Solo FTS | Solo vector | Híbrido (RRF) |
Puntuación compuesta | 88.9 | 89.2 | 91.7 |
Recall@5 | 0.907 | 0.898 | 0.919 |
MRR | 0.817 | 0.832 | 0.878 |
nDCG@5 | 0.816 | 0.828 | 0.869 |
Precisión negativa | 1.000 | 1.000 | 1.000 |
El híbrido supera ambas partes individualmente, que es todo el argumento para fusionarlas: la búsqueda léxica tiene mejor recall bruto, la búsqueda vectorial mejor ranking, y RRF conserva ambas en lugar de promediarlas.
El documento de evaluación también rastrea los fallos: deriva de puntuación bajo crecimiento del corpus, el error de ponderación de campos BM25 que la evaluación detectó, los dos casos donde la fusión aún pierde frente a la búsqueda puramente léxica, y lo que el conjunto dorado no cubre. Los números que no se pueden auditar son marketing; lee cómo se producen.
Arquitectura
flowchart LR
C["MCP client<br/>Claude Code · Cursor · …"] -- "stdio / HTTP" --> T["10 tools · 4 resources · 3 prompts"]
T --> R["retrieval pipeline<br/>FTS5 · vector · RRF fusion"]
T --> M["memories + supersede chains"]
I["KB import pipeline<br/>markdown → memories"] --> M
M -- triggers --> F["FTS5 index (stemmed EN+RU)"]
R --> F
R --> V["sqlite-vec (optional, BYOK)"]Un archivo SQLite contiene las memorias, el índice FTS5 y el índice vectorial opcional. Las escrituras pasan por transacciones que mantienen la invariante de la cadena de superación; las lecturas ejecutan el pipeline de recuperación por etapas descrito en Búsqueda.
La imagen completa — límites de módulos, rutas de escritura/lectura, invariantes y limitaciones conocidas — está en docs/ARCHITECTURE.md. Las decisiones de diseño se registran como ADR: núcleo SQLite+FTS5, recuperación híbrida RRF, controlador síncrono, modelo de memoria en capas.
Inicio rápido
Instalación
npm install -g mnemon-mcpO desde el código fuente:
git clone https://github.com/nikitacometa/mnemon-memory-mcp.git
cd mnemon-memory-mcp && npm install && npm run buildConfigura tu cliente MCP
openclaw mcp register mnemon-mcp --command="mnemon-mcp"O añade a ~/.openclaw/mcp_config.json:
{
"mnemon-mcp": {
"command": "mnemon-mcp"
}
}Añade a ~/.claude/mcp.json:
{
"mcpServers": {
"mnemon-mcp": {
"command": "mnemon-mcp"
}
}
}Añade a la configuración MCP de tu cliente:
{
"mcpServers": {
"mnemon-mcp": {
"command": "mnemon-mcp"
}
}
}Usa la ruta completa al punto de entrada compilado:
{
"mnemon-mcp": {
"command": "node",
"args": ["/absolute/path/to/mnemon-mcp/dist/index.js"]
}
}Verificación
echo '{"jsonrpc":"2.0","method":"tools/list","id":1}' | mnemon-mcpDeberías ver 10 herramientas en la respuesta. La base de datos (~/.mnemon-mcp/memory.db) se crea automáticamente en la primera ejecución.
Eso es todo. Tu agente ahora tiene memoria persistente.
Qué puede hacer
10 herramientas MCP
Herramienta | Qué hace |
| Almacena una memoria con capa, entidad, confianza, importancia y TTL opcional |
| Búsqueda de texto completo o exacta con filtros por capa, entidad, fecha, alcance, confianza |
| Actualiza en el lugar o crea un reemplazo versionado (cadena de superación) |
| Elimina una memoria; reactiva su predecesora si existe |
| Obtiene estadísticas de capa o rastrea el historial de versiones de una memoria |
| Exporta a JSON, Markdown o formato Claude-md con filtros |
| Ejecuta diagnósticos: entradas caducadas, cadenas huérfanas, memorias obsoletas; opcionalmente GC |
| Inicia una sesión de agente — devuelve ID de sesión para agrupar memorias |
| Finaliza una sesión con resumen opcional; devuelve duración y número de memorias |
| Lista sesiones con filtros por cliente, proyecto o estado activo |
Recursos y prompts MCP
Recursos — datos en vivo que tu agente puede leer:
URI | Devuelve |
| Estadísticas agregadas por capa |
| Memorias creadas/actualizadas en las últimas 24h |
| Todas las memorias activas en una capa |
| Todas las memorias activas sobre una entidad |
Prompts — flujos de trabajo predefinidos:
Prompt | Propósito |
| "Cuéntame todo lo que sabes sobre X" |
| Cargar contexto relevante antes de comenzar una tarea |
| Crear una entrada de diario estructurada |
Búsqueda
Cuatro modos, todos con filtros de capa / entidad / alcance / fecha / confianza:
Modo FTS (predeterminado sin embeddings) — búsqueda de texto completo tokenizada con ranking BM25. Las consultas de varias palabras usan AND; si hay muy pocos resultados, OR complementa con una penalización de puntuación. La relajación progresiva de AND prueba los 3 términos más específicos antes de recurrir a OR completo.
Modo híbrido (predeterminado cuando hay embeddings configurados) — combina FTS5 + búsqueda vectorial mediante Reciprocal Rank Fusion. Detecta entidades entre comillas en las consultas (p. ej., 'Essentialism') y ejecuta subconsultas ponderadas para recuperación de referencias cruzadas.
Modo vectorial — búsqueda pura de similitud coseno sobre embeddings.
Modo exacto — coincidencia de subcadena LIKE para búsquedas precisas de frases.
Puntuaciones: bm25 × (0.3 + 0.7 × importancia) × decaimiento(capa) × actualidad
Impulso de actualidad: 1 / (1 + díasDesde / 365) — recompensa suavemente las memorias recientes sin penalizar las antiguas.
Derivación (stemming)
Se aplica el derivador Snowball tanto en tiempo de indexación como en tiempo de consulta para inglés y ruso. Esto significa que "running" coincide con "runs", y "книги" coincide con "книга". Las palabras vacías se filtran de las consultas para mejorar la precisión.
Versionado de hechos
El conocimiento evoluciona. Mnemon no elimina hechos antiguos — los encadena:
v1: "Team uses React 17" → superseded_by: v2
v2: "Team uses React 19" → supersedes: v1 (active)La búsqueda devuelve solo la versión más reciente. memory_inspect con include_history: true revela la cadena completa. memory_delete reactiva la predecesora — nada se pierde.
Búsqueda vectorial (Opcional, BYOK)
Habilita la búsqueda de similitud semántica proporcionando tu propia API de embeddings:
# OpenAI
MNEMON_EMBEDDING_PROVIDER=openai MNEMON_EMBEDDING_API_KEY=sk-... mnemon-mcp
# Ollama (local, free)
MNEMON_EMBEDDING_PROVIDER=ollama mnemon-mcpEsto desbloquea dos modos de búsqueda adicionales:
mode: "vector"— búsqueda pura de similitud cosenomode: "hybrid"— FTS5 + vector combinados mediante Reciprocal Rank Fusion
Requiere sqlite-vec (instalado como dependencia opcional). Las nuevas memorias se incrustan al añadirse; las existentes pueden rellenarse retroactivamente.
Variable | Valor predeterminado | Descripción |
| — |
|
| — | Clave API (requerida para OpenAI) |
|
| Nombre del modelo |
|
| Dimensiones del vector |
|
| Endpoint de Ollama |
Importar una base de conocimiento
¿Tienes una carpeta de archivos Markdown? Impórtalos en lote:
cp config.example.json ~/.mnemon-mcp/config.json # edit this first
npm run import:kb -- --kb-path /path/to/your/kb # incremental (skips unchanged files)La configuración mapea patrones glob a capas de memoria:
{
"owner_name": "your-name",
"extra_stop_words": [],
"mappings": [
{
"glob": "journal/*.md",
"layer": "episodic",
"entity_type": "user",
"entity_name": "$owner",
"importance": 0.6,
"split": "h2"
},
{
"glob": "people/*.md",
"layer": "semantic",
"entity_type": "person",
"entity_name": "from-heading",
"importance": 0.8,
"split": "h3"
}
]
}Campos de configuración
Campo | Tipo | Descripción |
| string | Tu nombre — se usa para la sustitución |
| string[] | Palabras a filtrar de las consultas FTS (p. ej., formas de tu nombre) |
| string | Patrón de archivo a coincidir |
| string | Capa de memoria de destino |
| string |
|
| string | Nombre literal, |
| string |
|
| number | 0.0–1.0, afecta el ranking de búsqueda |
| number | 0.0–1.0, filtrable en la búsqueda |
| string | Espacio de nombres opcional |
Transporte HTTP
Para configuraciones remotas o de múltiples clientes:
MNEMON_AUTH_TOKEN=your-secret MNEMON_HOST=0.0.0.0 MNEMON_PORT=3000 npm run start:httpEndpoint | Descripción |
| MCP JSON-RPC (autenticación Bearer si hay token) |
|
|
Se vincula a 127.0.0.1 por defecto. Vincularse a cualquier otro host requiere MNEMON_AUTH_TOKEN: el servidor se niega a exponer el almacén de memoria a la red sin autenticación (se puede anular con MNEMON_ALLOW_INSECURE_HTTP=1 en una red de confianza). Límite de peticiones (100 req/min/IP por defecto), CORS opcional, límite de cuerpo de 1MB, autenticación a prueba de temporización, apagado ordenado en SIGTERM.
Referencia de configuración
Variable | Por defecto | Descripción |
|
| Ruta de la base de datos |
|
| Raíz de la base de conocimiento para importación |
|
| Ruta de configuración de importación |
| — | Token Bearer para el transporte HTTP |
|
| Dirección de enlace del transporte HTTP |
|
| Puerto del transporte HTTP |
| — | CORS |
|
| Máximo de peticiones por minuto por IP (0 = desactivado) |
Referencia de herramientas
Parámetro | Tipo | Obligatorio | Descripción |
| string | Sí | Texto de memoria (máx. 100K caracteres) |
| string | Sí |
|
| string | No | Título corto (máx. 500 caracteres) |
| string | No |
|
| string | No | Nombre de la entidad para filtrar |
| number | No | 0.0–1.0 (por defecto 0.8) |
| number | No | 0.0–1.0 (por defecto 0.5) |
| string | No | Espacio de nombres (por defecto |
| string | No | Ruta del archivo de origen: activa la sustitución automática de entradas coincidentes |
| number | No | Caducidad automática tras N días |
| string | No | Ventana temporal de hechos (ISO 8601) |
Parámetro | Tipo | Obligatorio | Descripción |
| string | Sí | Texto de búsqueda |
| string | No |
|
| string[] | No | Filtrar por capas |
| string | No | Filtrar por entidad (admite alias) |
| string | No | Filtrar por ámbito |
| string | No | Rango de fechas (ISO 8601) |
| string | No | Filtro temporal de hechos: hechos válidos en esta fecha |
| number | No | Confianza mínima |
| number | No | Importancia mínima |
| number | No | Máximo de resultados (por defecto 10, máx. 100) |
| number | No | Desplazamiento de paginación |
Parámetro | Tipo | Obligatorio | Descripción |
| string | Sí | ID de memoria |
| string | No | Nuevo contenido |
| string | No | Nuevo título |
| number | No | Nueva confianza |
| number | No | Nueva importancia |
| boolean | No |
|
| string | No | Contenido para la entrada de sustitución |
Parámetro | Tipo | Obligatorio | Descripción |
| string | Sí | ID de memoria. Re-activa el predecesor si forma parte de una cadena de sustitución |
Parámetro | Tipo | Obligatorio | Descripción |
| string | No | ID de memoria (omitir para estadísticas agregadas) |
| string | No | Filtrar estadísticas por capa |
| string | No | Filtrar estadísticas por entidad |
| boolean | No | Mostrar cadena de sustitución |
Parámetro | Tipo | Obligatorio | Descripción |
| string | Sí |
|
| string[] | No | Filtrar por capas |
| string | No | Filtrar por ámbito |
| string | No | Rango de fechas |
| number | No | Máximo de entradas (por defecto todas, máx. 10K) |
Parámetro | Tipo | Obligatorio | Descripción |
| boolean | No |
|
Devuelve: estado (healthy / warning / degraded), estadísticas por capa, entradas caducadas, cadenas huérfanas, recuentos obsoletos/de baja confianza, recuento de limpieza cuando cleanup=true.
Parámetro | Tipo | Obligatorio | Descripción |
| string | Sí | Identificador de cliente (p. ej. |
| string | No | Ámbito de proyecto para esta sesión |
| object | No | Metadatos adicionales de la sesión |
Devuelve: id (UUID de sesión), started_at (ISO 8601).
Parámetro | Tipo | Obligatorio | Descripción |
| string | Sí | ID de sesión a finalizar |
| string | No | Resumen de lo logrado (máx. 10K caracteres) |
Devuelve: id, ended_at, duration_minutes, memories_count.
Parámetro | Tipo | Obligatorio | Descripción |
| number | No | Máximo de sesiones (por defecto 20, máx. 100) |
| string | No | Filtrar por cliente |
| string | No | Filtrar por proyecto |
| boolean | No | Devolver solo sesiones no finalizadas (por defecto false) |
Devuelve: array de sesiones con id, client, project, started_at, ended_at, summary, memories_count.
Comparativa
mnemon-mcp | mem0 | basic-memory | Engram | Anthropic KG | |
Arquitectura | SQLite FTS5 + vector | Cloud API + Qdrant | Markdown + vector | SQLite FTS5 | Archivo JSON |
Estructura de memoria | 4 capas tipadas | Plano | Plano | Plano + sesiones | Grafo |
Búsqueda | FTS5 + RRF híbrido | Semántica | Híbrida | FTS5 | Exacta |
Versionado de hechos | Cadenas de sustitución | Parcial | No | No | No |
Stemming | EN + RU (Snowball) | Solo EN | Solo EN | Ninguno | Ninguno |
Embeddings | BYOK (OpenAI / Ollama) | Integrado | FastEmbed | Ninguno | Ninguno |
Dependencias | 0 requeridas | Qdrant, Neo4j | Python 3.12 | Binario Go | Ninguna |
Requiere nube | No | Sí | No | No | No |
Coste | Gratuito | $19–249/mes | Gratis | Gratis | Gratis |
Instalación |
| Docker + claves API | pip + dependencias | Instalación de Go | Integrado |
Licencia | MIT | Apache 2.0 | AGPL | MIT | MIT |
Análisis competitivo ampliado con fuentes: docs/COMPETITORS.md.
Desarrollo
npm run dev # run via tsx (no build step)
npm run build # TypeScript → dist/
npm run lint # eslint (flat config)
npm test # vitest — unit + integration + MCP dispatch + HTTP transport + hybrid RRF
npm run bench # performance benchmarks
npm run db:backup # backup databaseEl CI ejecuta compilación + lint + pruebas en Node 20 y 22, y luego realiza pruebas de humo del servidor compilado mediante JSON-RPC real (tools/list debe coincidir con el conjunto exacto de herramientas).
Stack: TypeScript 5.9 (modo estricto), better-sqlite3, @modelcontextprotocol/sdk, Snowball stemmer, Zod, vitest.
Consulta CONTRIBUTING.md para las directrices de código.
Principios de diseño
Aislado de la red por defecto — cero telemetría, jamás. De serie, nada sale de la máquina; el único componente que se comunica con la red es el embedder opcional, y solo con el proveedor que configures (incluido un Ollama local).
Un solo archivo — una base de datos SQLite, cero operaciones, copia de seguridad instantánea mediante copia de archivo.
Búsqueda determinista — FTS5, no embeddings, es el valor predeterminado. Interpretable, reproducible, sin necesidad de GPU.
Estructurado frente a plano — las capas codifican patrones de acceso; las cadenas de sustitución codifican el tiempo.
Mínimo — 4 dependencias de producción. Funciona en cualquier lugar donde se ejecute Node.
Medido, no afirmado — los cambios de recuperación se evalúan contra un conjunto de referencia, regresiones incluidas.
Licencia
This server cannot be deployed
Maintenance
Related MCP Connectors
Cloud-hosted MCP server for durable AI memory
Persistent memory, knowledge graph, task management and more for AI agents via MCP.
1One memory, every AI. A shared, user-owned markdown memory your AI clients read and write over MCP.
- memnodeOAuthdev.memnode
Persistent, inspectable memory for AI agents with lineage, correction, and a hosted MCP endpoint.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceA local-first MCP memory server providing persistent, searchable memory for AI agents, powered by SQLite.1 npm1Apache 2.0
- AlicenseNot gradedqualityDmaintenanceA local-first MCP server providing persistent, searchable knowledge base via SQLite, enabling AI agents to save and recall facts across sessions without cloud dependencies.MIT
- AlicenseNot gradedqualityDmaintenanceA local-first long-term memory system for AI coding agents, exposed as an MCP server.54 npmMIT
- AlicenseAqualityCmaintenancePersistent memory MCP server for AI agents, using SQLite with hybrid keyword and semantic search for long-term memory storage.5Do What The F*ck You Want To Public