Memlord MCP Server
oficialSelf-hosted MCP memory server for personal use and teams
Documentación
Servidor MCP de memoria autohospedado para uso personal y equipos
Inicio rápido • Cómo funciona • Herramientas MCP • Configuración • Requisitos • Licencia
✨ Características
- 🔍 Búsqueda híbrida — BM25 (texto completo) + KNN vectorial (pgvector) fusionados mediante Reciprocal Rank Fusion
- 📂 Multiusuario — cada usuario ve solo sus propias memorias; espacios de trabajo para conocimiento compartido en equipo
- 🛠️ 10 herramientas MCP — almacenar, recuperar, recordar, listar, buscar por etiqueta, obtener, actualizar, eliminar, mover, listar espacios de trabajo
- 🌐 Interfaz web — navegar, buscar, editar y eliminar memorias en el navegador; exportar/importar JSON
- 🔒 OAuth 2.1 — servidor de autorización completo en proceso, siempre habilitado
- 🐘 PostgreSQL — pgvector para embeddings, tsvector para búsqueda de texto completo
- 📊 Divulgación progresiva — la búsqueda devuelve fragmentos compactos por defecto; llama a
get_memory(name)solo para lo que necesites, reduciendo el uso de tokens - 🔁 Deduplicación — detecta automáticamente memorias casi idénticas antes de guardar, evitando la acumulación de ruido
🆚 Comparativa de Memlord
| Memlord | OpenMemory | mcp-memory-service | basic-memory | |
|---|---|---|---|---|
| Búsqueda | BM25 + vectorial + RRF | Solo vectorial (Qdrant) | BM25 + vectorial + RRF | BM25 + vectorial |
| Embeddings | ONNX local, sin configuración | OpenAI por defecto; Ollama opcional | ONNX local, sin configuración | FastEmbed local |
| Almacenamiento | PostgreSQL + pgvector | PostgreSQL + Qdrant | SQLite-vec / Cloudflare Vectorize | SQLite + archivos Markdown |
| Multiusuario | ✅ | ❌ un solo usuario en la práctica | ⚠️ ámbito por agent-ID, sin aislamiento | ❌ |
| Espacios de trabajo | ✅ compartidos + personales, enlaces de invitación | ⚠️ Espacio de nombres "Apps" | ⚠️ etiquetas + conversation_id | ✅ bandera por proyecto |
| Autenticación | ✅ OAuth 2.1 | ❌ ninguna (autohospedado) | ✅ OAuth 2.0 + PKCE | ❌ |
| Interfaz web | ✅ navegar, editar, exportar | ✅ Panel Next.js | ✅ IU rica, visualización de grafos, puntuaciones de calidad | ❌ local; solo en la nube |
| Herramientas MCP | 10 | 5 | 15+ | ~20 |
| Autohospedado | ✅ proceso único | ✅ Docker (3 contenedores) | ✅ | ✅ |
| Entrada de memoria | Manual (almacenamiento explícito) | Autoextraída por LLM | Manual | Manual (notas Markdown) |
| Tipos de memoria | hecho / preferencia / instrucción / retroalimentación | hechos autoextraídos | — | observaciones + enlaces wiki |
| Búsqueda temporal | ✅ fechas en lenguaje natural | ⚠️ Solo REST, no en herramientas MCP | — | ✅ recent_activity |
| Eficiencia de tokens | ✅ divulgación progresiva | ❌ | — | ✅ build_context traversal |
| Importar / Exportar | ✅ JSON | ✅ ZIP (JSON + JSONL) | — | ✅ Markdown (legible por humanos) |
| Licencia | AGPL-3.0 / Comercial | Apache 2.0 | Apache 2.0 | AGPL-3.0 |
Donde los competidores tienen una ventaja real:
- OpenMemory — autoextrae memorias de texto de conversación en bruto; no es necesario decidir qué almacenar manualmente; buena importación/exportación
- mcp-memory-service — interfaz web más rica (visualización de grafos, puntuación de calidad, 8 pestañas); licencia más permisiva (Apache 2.0); múltiples opciones de transporte (stdio, SSE, HTTP)
- basic-memory — las memorias son archivos Markdown legibles por humanos que puedes editar, controlar versiones y leer sin ningún servidor; los enlaces de entidad estilo wiki forman un grafo de conocimiento local; ~20 herramientas MCP
Cuándo elegir Memlord:
- Quieres embeddings locales sin configuración — el modelo ONNX se incluye con el servidor, sin necesidad de Ollama o API externa
- Ejecutas un servidor de equipo multiusuario con autenticación OAuth 2.1 adecuada y espacios de trabajo basados en invitaciones
- Quieres una base de datos de grado de producción (PostgreSQL) que escale más allá de SQLite en una sola máquina
- Gestionas las memorias explícitamente — almacenas exactamente lo que importa, tipado y etiquetado, no todo lo que el LLM decide extraer
- Quieres una interfaz web autohospedada con CRUD completo y exportación JSON, sin suscripción a la nube
🚀 Inicio rápido
🐳 Docker
cp .env.example .env
docker compose up
Servidor HTTP (multiusuario, interfaz web, OAuth)
# Install dependencies
uv sync --dev
# Download ONNX model (~23 MB)
uv run python scripts/download_model.py
# Run migrations
alembic upgrade head
# Start the server
memlord
Abre http://localhost:8000 para la interfaz web. El endpoint MCP está en /mcp.
🔍 Cómo funciona
Cada solicitud de búsqueda ejecuta BM25 y KNN vectorial en paralelo, luego fusiona los resultados mediante Reciprocal Rank Fusion:
flowchart TD
Q([query]) --> BM25["BM25\nsearch_vector @@ websearch_to_tsquery"]
Q --> EMB["ONNX embed\nall-MiniLM-L6-v2 · 384d · local"]
EMB --> KNN["KNN\nembedding <=> query_vector\ncosine distance"]
BM25 --> RRF["RRF fusion\nscore = 1/(k+rank_bm25) + 1/(k+rank_vec)\nk=60"]
KNN --> RRF
RRF --> R([top-N results])
⚙️ Configuración
Todos los ajustes usan el prefijo MEMLORD_. Consulta .env.example para la lista completa.
| Variable | Valor por defecto | Descripción |
|---|---|---|
MEMLORD_DB_URL | postgresql+asyncpg://postgres:postgres@localhost/memlord | URL de conexión PostgreSQL |
MEMLORD_PORT | 8000 | Puerto del servidor |
MEMLORD_BASE_URL | http://localhost:8000 | URL pública para OAuth (modo HTTP) |
MEMLORD_OAUTH_JWT_SECRET | memlord-dev-secret-please-change | Secreto de firma JWT (modo HTTP) |
Establece MEMLORD_BASE_URL a tu URL pública y cambia MEMLORD_OAUTH_JWT_SECRET antes de desplegar.
🛠️ Herramientas MCP
| Herramienta | Descripción |
|---|---|
store_memory | Guardar una memoria (idempotente por contenido); genera error en casi duplicados; expires_at opcional |
retrieve_memory | Búsqueda híbrida semántica + texto completo; devuelve fragmentos por defecto |
recall_memory | Buscar por expresión de tiempo en lenguaje natural; devuelve fragmentos por defecto |
list_memories | Lista paginada con filtros de tipo/etiqueta |
search_by_tag | Búsqueda de etiquetas AND/OR |
get_memory | Obtener una sola memoria por nombre con contenido completo |
update_memory | Actualizar contenido, tipo, etiquetas, metadatos o caducidad por nombre (y opcionalmente renombrar) |
delete_memory | Eliminar por nombre |
move_memory | Mover una memoria a un espacio de trabajo diferente |
list_workspaces | Listar espacios de trabajo de los que eres miembro (incluyendo personales) |
La gestión de espacios de trabajo (crear, invitar, unirse, salir) se maneja a través de la interfaz web.
💻 Requisitos del sistema
- Python 3.12
- PostgreSQL ≥ 15 con extensión pgvector
- uv — gestor de paquetes de Python
👨💻 Desarrollo
pyright src/ # type check
ruff format . # format
pytest # run tests
alembic-autogen-check # verify migrations are up to date
📄 Licencia
Memlord tiene doble licencia:
- AGPL-3.0 — gratuito para uso de código abierto. Si ejecutas una versión modificada como servicio de red, debes publicar tu código fuente.
- Licencia Comercial — para despliegues propietarios o de código cerrado. Contacta con [email protected] o [email protected] para adquirirla.