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 installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceA local-first MCP memory server providing persistent, searchable memory for AI agents, powered by SQLite.51Apache 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.131MIT
- 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
Related MCP Connectors
Person-owned, portable AI memory as a remote MCP server, readable and writable by any MCP client.
Cloud-hosted MCP server for durable AI memory
Shared, governed long-term memory for AI agents across tools and sessions via MCP and REST.
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/nikitacometa/mnemon-memory-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server