memory engine

Una memoria viva que decae, aprende y evoluciona con tu IA.

Documentación

Version License: MIT Python MCP Registry Ready Docker

Memory Engine Logo

🧠 Memory Engine MCP

Memoria de largo plazo local-first y consciente del grafo para asistentes de IA.
SQLite + búsqueda semántica + grafo de conocimiento + herramientas MCP para agentes que necesitan continuidad.

Funciona con Claude Desktop · Claude Code · Cursor · Cline · Windsurf · OpenClaw · cualquier cliente MCP


¿Por qué Memory Engine?

La mayoría de los servidores de memoria MCP son simples almacenes clave-valor o envoltorios de búsqueda de texto plano.

Memory Engine es diferente: modela la memoria como átomos tipados conectados por enlaces tipados, y luego recupera contexto con un pipeline de clasificación híbrido que combina:

  • búsqueda de texto completo (SQLite FTS5)
  • similitud semántica mediante embeddings locales de Ollama
  • confianza, recencia y peso
  • expansión de grafo a partir de memorias relacionadas

El objetivo no es solo el almacenamiento. El objetivo es un sistema de memoria que pueda recordar, conectar, decaer, curar y aprender con el tiempo.

Destacados

  • Local-first — base de datos SQLite, embeddings locales opcionales vía Ollama, sin API en la nube requerida.
  • Nativo MCP — expone 35 herramientas a través de FastMCP.
  • Recuperación consciente del grafo — expande los mejores resultados mediante enlaces bidireccionales para un contexto más rico.
  • Búsqueda semántica — recuperación basada en significado con nomic-embed-text.
  • Coexistencia con Markdown — importa notas existentes de forma unidireccional sin reemplazar tu memoria legible por humanos.
  • Memoria de errores — recuerda errores y correcciones, con promoción automática a preferencias tras fallos repetidos.
  • Curador cognitivo — pasada de mantenimiento no destructiva para compactación, sugerencias de enlaces, detección de duplicados y clasificación de átomos aislados.
  • Vigilante de sesiones — ingesta canónica de SQLite de OpenClaw (esquema 17), resúmenes conscientes de reinicio y respaldo JSONL heredado.
  • Copia de seguridad y restauración — instantáneas completas de SQLite, exportación/importación JSON, restauraciones verificadas con copias de seguridad automáticas.
  • Autenticación y endurecimiento — token API opcional, enlace seguro, validación de entrada, limitación de velocidad.
  • Suite de pruebas — 144 pruebas que cubren CRUD, clasificación, migraciones, autenticación, copias de seguridad, concurrencia e ingesta de transcripciones.
  • Benchmark — suite CLI de calidad de recuperación con Precision@K, MRR, percentiles de latencia.

Arquitectura

AI assistant / MCP client
        │
        ▼
FastMCP server — 35 tools
        │
        ▼
Memory engine — hybrid ranking, graph recall, decay, learning
        │
        ├── SQLite — atoms, bonds, FTS5, JSON metadata, versions
        ├── Ollama — optional local embeddings
        ├── Curator — conservative maintenance
        └── Session watcher — OpenClaw SQLite + JSONL fallback

Herramientas MCP

Memoria

HerramientaPropósito
rememberCrear o actualizar un átomo
recallRecuperación híbrida inteligente con expansión de grafo
working_setConstruir un paquete de contexto orientado a tareas
semantic_searchBúsqueda semántica pura
get_atomLeer un átomo con sus enlaces
list_atomsExplorar átomos por dominio/tipo/estado
merge_atomsFusionar átomos duplicados
export_atomExportar un átomo como markdown

Grafo de conocimiento

HerramientaPropósito
link / unlinkCrear o eliminar enlaces tipados
search_graphRecorrer el grafo desde un átomo
suggest_bondsSugerir enlaces para un átomo
suggest_bonds_allSugerir o crear enlaces en lote

Aprendizaje y mantenimiento

HerramientaPropósito
curator_runPasada de curación conservadora
cognitive_statusMétricas de salud del grafo y la memoria
learning_runDetectar contradicciones, átomos débiles, candidatos a fusión, vacíos
ask_pending / answer_humanAclaración con intervención humana
decay_runEjecutar ciclo de decaimiento
cleanup_sessionsEliminar átomos de sesión expirados
cleanup_duplicatesEliminar átomos de sesión duplicados
reindex_embeddingsReconstruir embeddings

Memoria de errores y preferencias

HerramientaPropósito
error_checkVerificar fallos pasados antes de realizar una tarea
error_logRegistrar un error y la corrección
error_listExplorar errores no resueltos/resueltos
preference_searchBuscar preferencias estructuradas

Importación e introspección

HerramientaPropósito
import_markdownImportar notas markdown en átomos
memory_summaryResumen de 3 niveles: global → dominio → detalle
statsEstadísticas de la base de datos
versionVersión del servidor
recall_sessionBuscar una sesión de OpenClaw
session_summaryResumir una sesión de OpenClaw
memory_contradictReemplazar un átomo antiguo con uno más nuevo y contradictorio
list_contradictionsListar registros explícitos de contradicción/reemplazo
classify_memory_tierInferir la clase de 3 niveles (episódica/semántica/procedimental)
memory_impactAnálisis de impacto: qué depende de este átomo

Copia de seguridad, restauración y exportación

HerramientaPropósito
backup_databaseCrear, listar, verificar o limpiar instantáneas SQLite
restore_databaseRestaurar desde una copia de seguridad (con copia de seguridad automática)
export_allExportar todos los datos de memoria como JSON portátil
import_dataImportar desde JSON (modo fusión o reemplazo)

Interfaz web (opcional)

Memory Engine incluye una interfaz web opcional para exploración de grafos, inspección de átomos, navegación de contradicciones y análisis de impacto.

# In docker-compose.yml, add:
#   environment:
#     - MEM_UI_PORT=6000
#   expose:
#     - "6000"

O ejecutar de forma independiente:

python3 web_ui.py
# Open http://localhost:6000

Memory Engine Web UI — graph explorer
Interfaz web: grafo interactivo, detalles de átomos, navegador de contradicciones, panel de estadísticas

Inicio rápido con Docker

Opción A — Usar la imagen preconstruida (recomendado)

# docker-compose.yml
services:
  memory-engine:
    image: ghcr.io/simoneb79/memory-engine-mcp:1.9.0
    ports:
      - "8085:8085"
    volumes:
      - memory-data:/data
    restart: unless-stopped

volumes:
  memory-data:
docker compose up -d

Fija la versión. Usa una etiqueta explícita como :1.7.0 en producción. Evita :latest — puede cambiar sin previo aviso.

Opción B — Compilar desde el código fuente

git clone https://github.com/SimoneB79/memory-engine-mcp.git
cd memory-engine-mcp
cp docker-compose.yml docker-compose.local.yml
# Edit volume paths in docker-compose.local.yml if needed
docker compose -f docker-compose.local.yml up -d --build

Endpoint predeterminado:

http://localhost:8085/sse

Ejemplo de configuración de cliente MCP:

{
  "mcpServers": {
    "memory-engine": {
      "url": "http://localhost:8085/sse",
      "transport": "sse"
    }
  }
}

Consulta docs/INSTALL.md para ejemplos de Docker, Python local, Claude Desktop, Cursor y OpenClaw.

Python local

python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
python server.py

Configuración

Archivo de configuración principal: config.json

Variables de entorno importantes:

VariablePredeterminadoPropósito
MEMORY_DB_PATH/data/memory.dbRuta de la base de datos SQLite
MARKDOWN_SOURCE/workspace/memoryDirectorio Markdown para importación
MEMORY_HOST127.0.0.1Dirección de enlace del servidor (predeterminado seguro)
MEMORY_PORT8085Puerto SSE
MEMORY_API_TOKEN(ninguno)Token API opcional para autenticación (ver Seguridad)
OPENCLAW_AGENT_DB(ninguno)Base de datos SQLite de OpenClaw preferida por agente (esquema 17)
OPENCLAW_SESSIONS_DIR/sessionsRespaldo JSONL heredado cuando no hay base de datos de agente configurada
SESSION_DIGEST_DIR/data/session_digestsSalida opcional de resumen de sesión

Para el montaje SQLite, manejo de WAL/SHM, filtrado y límite de seguridad, consulta Ingesta de transcripciones de OpenClaw.

La búsqueda semántica requiere que Ollama sea accesible desde el contenedor o el host. Predeterminado:

{
  "ollama": {
    "enabled": true,
    "host": "http://ollama:11434",
    "model": "nomic-embed-text"
  }
}

Si no usas Ollama, establece ollama.enabled a false; la recuperación FTS sigue funcionando.

Modelo de memoria

Los átomos tienen:

  • title
  • body
  • type: fact, decision, event, preference, log, procedure, note, etc.
  • domain: espacio de nombres de proyecto o tema
  • confidence
  • weight
  • tags
  • TTL opcional

Los enlaces conectan átomos con tipos de relación:

is_a · part_of · depends_on · contradicts · refines · derived_from · detail_of · related_to

Ejemplo de uso

remember(
    title="Use PostgreSQL for analytics",
    body="SQLite is kept for local memory, PostgreSQL is used for multi-user analytics.",
    type="decision",
    domain="project:analytics",
    confidence=0.9,
    tags=["database", "architecture"]
)
recall(query="what database did we choose for analytics?", limit=5)
working_set(
    query="continue the analytics backend work",
    domain="project:analytics",
    limit=8,
    graph_depth=1
)

Seguridad

Por defecto, Memory Engine se ejecuta en modo abierto (sin autenticación) — seguro para stdio o entornos locales de confianza.

Para habilitar la autenticación con token API:

// config.json
{
  "security": {
    "api_token": "your-secret-token",
    "allow_remote": false
  }
}

O mediante variable de entorno:

MEMORY_API_TOKEN=your-secret-token

Cuando la autenticación está habilitada:

  • Las solicitudes MCP SSE deben incluir Authorization: Bearer <token>
  • Los endpoints de la API de la interfaz web requieren ?token=<token> o encabezado Bearer
  • El servidor se enlaza a 127.0.0.1 a menos que allow_remote: true
  • La validación de entrada (límites de tamaño de título/cuerpo) y la limitación de velocidad están siempre activas

Consulta CHANGELOG.md para la lista completa de funciones de seguridad.

Publicación y registros

Este repositorio está preparado para el descubrimiento MCP:

  • Nombre del registro MCP: io.github.simoneb79/memory-engine-mcp
  • Metadatos del registro: server.json
  • Etiqueta de verificación Docker/OCI: incluida en Dockerfile
  • Ejemplo de configuración de cliente: mcp.json

Consulta docs/PUBLISHING.md para la lista de verificación de publicación.

Estado del repositorio

Licencia

MIT — consulta LICENSE.


Hecho con 🧠 por SimoneB79