Sistema de memoria IA MemPalace: arquitectura de palacio y herramientas MCP — implementación en Python
10 min read

MemPalace: Cómo Milla Jovovich revoluciona la memoria de la IA

#Open Source #IA #Python #AI Memory #Contributing
49.600+
GitHub Stars
96,6%
LongMemEval Score
47
Mis Pull Requests
0
Costo de APIs

Cómo descubrí MemPalace

Estaba haciendo scroll por Instagram — como todas las noches — y un video me detuvo en seco. Una mujer hablaba sobre un problema que yo conocia demasiado bien: la IA olvida todo después de cada sesión.

Esa mujer era Milla Jovovich. Si, esa Milla Jovovich — Leeloo de El Quinto Elemento, Alice de Resident Evil.

En su video de Instagram, explicaba como a finales de 2025 comenzo a trabajar intensamente con sistemas de IA — Claude, ChatGPT, Gemini — manteniendo miles de conversaciones. Decisiones de negocio, trabajo creativo, análisis de contratos, debugging. Y cada vez que iniciaba una nueva conversacion, todo desaparecia.

Su descripción fue perfecta: “Un asistente brillante con pérdida permanente de memoria a corto plazo.”

Qué es MemPalace?

MemPalace es un sistema de memoria IA gratuito y de código abierto que otorga a los grandes modelos de lenguaje una memoria persistente. Almacena las conversaciones completas y textuales — sin resúmenes, sin filtros, sin que una IA decida que es importante.

El nombre proviene del antiguo Método de Loci (técnica del palacio de memoria), utilizada por oradores griegos para memorizar discursos colocando mentalmente ideas en habitaciones de un edificio imaginario.

La arquitectura del Palacio

MemPalace organiza la información de forma jerárquica — como un edificio real:

Wings

Contenedores para personas o proyectos — las grandes alas del palacio

Rooms

Temas dentro de un ala — p.ej., "auth-migration" o "ci-pipeline"

Halls

Tipos de memoria: hechos, eventos, descubrimientos, preferencias, consejos

Closets

Resúmenes comprimidos que apuntan al contenido original

Drawers

Archivos originales textuales, nunca resumidos — el corazón del sistema

Tunnels

Conexiones cruzadas entre alas para el mismo tema en diferentes contextos

Stack técnico

El proyecto se ejecuta completamente en local — sin nube, sin suscripciones, sin costos de API para la funcionalidad principal:

  • Python 3.9+ como base
  • ChromaDB para búsqueda semántica vectorial
  • SQLite para el grafo de conocimiento temporal
  • Protocolo MCP con 19 herramientas para integración fluida con IA
  • Licencia MIT — completamente libre de usar

La historia de origen

El problema

Milla Jovovich comienza a trabajar intensamente con IA. Miles de conversaciones se pierden después de cada sesión. Soluciones existentes como Mem0 y Zep usan IA para resumir — perdiendo matices en el proceso.

La alianza

Jovovich y el ingeniero Ben Sigman comienzan el desarrollo usando Claude Code. Principio central: almacenar todo textualmente, nunca dejar que la IA lo filtre.

Lanzamiento en GitHub

MemPalace se pública bajo la cuenta personal de GitHub de Jovovich como proyecto open source con licencia MIT.

Se vuelve viral

7.000+ estrellas en GitHub. El tweet de lanzamiento de Ben Sigman con la palabra "Multipass" (referencia a El Quinto Elemento) se vuelve viral.

19.500+ Stars

Uno de los repos de GitHub con crecimiento más rápido del mes. Alrededor de 3.000 forks. Comunidad activa con contribuciones diarias.

40.500+ Stars

El crecimiento se duplica en 24 horas. Más de 5.100 forks. Mis 10 PRs originales aprobados por reviewers. Esa misma mañana envié 5 PRs adicionales tras una auditoría sistemática de seguridad y calidad de código.

Tercera ronda mergeada

Cuatro fixes adicionales aterrizan en `develop` vía rollups del maintainer (#862–#866) — protección de stdout MCP, guard de resultados vacíos de ChromaDB, auto-registro en gitignore y aclaración de docs de la CLI.

Cuarta ronda — fix de i18n

PR #928 (resolución case-insensitive de códigos de idioma) mergeado tras un intercambio colaborativo de review — acepté el enfoque alternativo de otro contributor y dejé la decisión al maintainer. El merge cayó 53 minutos después. Totales: 33 PRs enviados, 8 mergeados directamente (#569, #609, #610, #862, #864, #865, #866, #928), 24 integrados vía rollups del maintainer en `develop`, 1 abierto (#926 — diff sha256 del diary).

Resultados de benchmark y la controversia

MemPalace reclama puntuaciones maximas en el benchmark LongMemEval:

  • 96,6% en modo raw (sin llamadas API externas)
  • 100% en modo hibrido (con reranking de Haiku)

Por qué contribuyo

Después de ver el video de Instagram, clone el repositorio inmediatamente. Al leer el código, identifiqué varias oportunidades de mejora — cosas típicas que ocurren en un proyecto joven con crecimiento explosivo:

  • Falta de anotaciones de tipo en módulos centrales
  • Referencias de versión desactualizadas en la documentación
  • Un CHANGELOG inexistente
  • Bugs menores en la lógica de compresión y configuración de búsqueda

Me pareció interesante y decidí contribuir: abrí pull requests.

Mis 47 Pull Requests

Primera ronda: Calidad de código y documentación (10 de abril)

PR #580

Actualicé CONTRIBUTING.md — directorios faltantes, comandos de test alineados, referencias obsoletas eliminadas

PR #579

Actualicé AGENTS.md con listado completo de modulos y umbrales de cobertura corregidos

PR #578

Actualicé referencias obsoletas de v3.0.0 a v3.1.0 en el README

PR #577

Añadí type hints de retorno y docstrings para knowledge_graph.py

PR #576

Creé CHANGELOG.md con historial completo de v3.0.0 y v3.1.0

PR #573

Rotación de archivo WAL a 10 MB para prevenir crecimiento ilimitado del log de SQLite

PR #571

Renombré parámetro de "object" a "obj" para evitar shadowing de builtin de Python

PR #570

Corregí clave de registro en la busqueda de entidades de spellcheck

PR #569

Alineé claves de diccionario en cmd_compress con los valores reales de retorno de compression_stats()

PR #568

Establecí cosine distance como default para la colección y limitación de scores de similitud a 0-1

Segunda ronda: Auditoría de seguridad y caza de bugs (11 de abril)

Tras una auditoría sistemática de todo el código — cubriendo seguridad, bugs y calidad de código — identifiqué mejoras adicionales y envié 5 PRs más:

PR #609

Corregí el conteo de tokens en el comando compress — siempre mostraba "1t → 1t" porque count_tokens() se llamaba sobre un string sin espacios

PR #610

Reemplacé la igualdad de floats para tiempos de modificación por comparación epsilon — previene re-mining innecesario de archivos sin cambios

PR #611

Corregí la dirección por defecto de query_entity de "outgoing" a "both" para coincidir con la documentación MCP

PR #612

Añadí threading lock para operaciones de escritura del Knowledge Graph — previene corrupción de datos en llamadas MCP concurrentes

PR #613

Eliminé código muerto: declaraciones duplicadas de variables de cache y un exception handler sin efecto

Ronda intermedia: MCP server, mining y Knowledge Graph (12-14 de abril)

Tras un follow-up de auditoría me concentré en el server MCP, el pipeline de mining y la consistencia del Knowledge Graph. Los 8 PRs fueron cerrados por el maintainer — algunos absorbidos en rollups posteriores (#862-#866), otros en favor de soluciones alternativas. Los listo por transparencia:

PR #726

Implementé el método `ping` en el server MCP — necesario para health-checks de clientes que validan el handshake antes de empezar a enviar tools.

PR #727

Loggeo de warnings en exceptions silenciadas de las navigation tools — antes los errores se tragaban sin rastro.

PR #728

Typo fix en el prompt interactivo de clasificación de entity_detector — afectaba el flujo de revisión humana.

PR #730

Extraje bloques `tool_use` y `tool_result` durante el mining de JSONL de Claude Code — antes esas estructuras se perdían en la ingestión.

PR #779

Skip de mensajes `tool_result` al contar intercambios humanos en hooks — el contador inflaba con tool turns que no eran turnos reales del usuario.

PR #780

Stopwords técnicos + filtro de inicio de frase en entity_detector — reduce falsos positivos como "Python" o "API" matcheando como entidades nombradas.

PR #781

Prevención de duplicación de aristas en el KG con índice UNIQUE parcial + upsert atómico — evita inflar el grafo con duplicados en re-ingestión.

PR #797

Skip del triple `is_pet_of` cuando el owner no existe en seed_from_entity_facts — antes se creaban relaciones huérfanas.

Tercera ronda: Estabilidad MCP e higiene del proyecto (15 de abril)

Después de que los maintainers hicieran rebase de mi trabajo anterior sobre develop, envié cuatro fixes más que atacan problemas reales de runtime reportados en el tracker. Los cuatro se mergearon como parte de PRs rollup (#862–#866):

PR #210

Fix de docs: aclaré que `mempalace init` requiere un argumento `<dir>` — el texto de ayuda de la CLI confundía a usuarios nuevos

PR #225

Redirigí stdout a stderr durante la importación del módulo para proteger el canal JSON-RPC de MCP — previene corrupción del protocolo cuando los clientes pipean stdio

PR #195

Protegí contra resultados vacíos de ChromaDB en el searcher — corrige un IndexError en palacios recién creados

PR #185

Añadir automáticamente archivos específicos de MemPalace al `.gitignore` cuando el directorio es un repo git — evita commitear datos del palacio por accidente

Cuarta ronda: Internacionalización y reviews colaborativas (16 de abril)

PR #928

Resolución case-insensitive de códigos de idioma en `_resolve_language()` — arregla #927 donde usuarios con `LC_ALL=de_DE.UTF-8` obtenían errores porque el mapa sólo matcheaba claves en minúsculas.

PR #926 (abierto)

Módulo diary: detecta edits de misma longitud vía hash sha256 — antes pasaban desapercibidas reescrituras puras sin cambio de longitud, porque el check de diff era por cantidad de caracteres.

Quinta ronda: Refuerzo de seguridad y robustez de encoding (abril 2026)

Dos fixes de seguridad mergeados directamente; siete más en revisión:

PR #1168 (mergeado)

Permisos del archivo tunnels.json restringidos a 0o600 — evita que otros usuarios locales lean datos de conexiones cruzadas entre alas en máquinas compartidas.

PR #1166 (mergeado)

Variable de entorno MEMPALACE_PALACE_PATH normalizada con abspath + expanduser — cierra un riesgo de path traversal cuando la variable contenía componentes relativos o una tilde sin resolver.

PR #1167

Validación de formatos ISO-8601 en la frontera MCP antes de persistir en el grafo de conocimiento — rechaza fechas malformadas de forma temprana en lugar de corromper silenciosamente las consultas temporales.

PR #1139

Relleno de metadatos NULL en llamadas duplicadas de add_triple en el grafo de conocimiento — previene errores de puntero nulo en el traversal del grafo tras re-ingestión de la misma conversación.

PR #1137

Preserva líneas en blanco e indentación en respuestas de IA durante la ingestión de convo_miner — la estructura que antes se perdía ahora se almacena textualmente en los Drawers.

PR #1104

Reemplaza símbolos no-ASCII (✓ ✗ →) en la salida principal de la CLI — corrige caracteres ilegibles en entornos de terminal GBK/CP1252 (#1034).

PR #1102

Maneja el BOM de UTF-8 en archivos de transcripción durante el paso de normalización — previene un fallo silencioso de parseo que producía Drawers vacíos en exportaciones Windows con BOM.

PR #1100

Mismo fix de encoding aplicado a la salida de progreso de closet_llm (#1034).

PR #1140

Impone el presupuesto de 100ms de inyección en el arranque en la suite de benchmarks — detecta regresiones en la latencia de arranque en frío del servidor MCP antes de llegar a los usuarios.

Lo que me fascina de MemPalace

Tres cosas me convencieron de contribuir activamente:

1. Local-First, sin dependencias

Sin suscripciones en la nube, sin costos de API para la funcionalidad principal. ChromaDB y SQLite corren en tu máquina. Tus datos se quedan contigo.

2. Textual, no resumido

Otros sistemas como Mem0 o Zep dejan que una IA decida que conservar. MemPalace almacena todo textualmente en “Drawers”. Los resúmenes existen como “Closets”, pero el original siempre se preserva.

3. El Método de Loci como arquitectura de software

La metáfora del palacio de memoria no es solo marketing — moldea toda la estructura de la base de datos. Wings, Rooms, Halls, Tunnels — el modelo mental funciona intuitivamente porque se basa en una técnica mnemónica de 2.500 años de antigüedad.

Mirando hacia adelante

Seguiré observando este proyecto y contribuyendo regularmente. MemPalace es uno de los pocos proyectos open source donde un nombre prominente no es solo marketing — Milla Jovovich personalmente contribuyó más de 25 commits y co-diseñó el concepto arquitectonico.

El proyecto se duplicó de 19.500 a más de 40.500 estrellas en una sola semana — la demanda de sistemas de memoria para IA es claramente enorme. Si la controversia de los benchmarks dañará al proyecto a largo plazo o más bien generará atención, está por verse. Los fundamentos técnicos son sólidos, la comunidad crece rápidamente, y el problema — la amnesia de la IA — es real y no resuelto.

Multipass.