Memlord
officielServeur de mémoire MCP auto-hébergé pour usage personnel et en équipe
Que pouvez-vous faire avec Memlord MCP ?
- Stocker un souvenir avec un type et des étiquettes — Enregistrez des faits, préférences, instructions ou retours en utilisant
store_memory, avec détection automatique des quasi-doublons. - Rechercher des souvenirs par récupération hybride — Utilisez
retrieve_memorypour trouver des souvenirs via une recherche combinée BM25 en texte intégral et vectorielle sémantique. - Rappeler des souvenirs par expression temporelle — Trouvez des souvenirs en utilisant des requêtes temporelles en langage naturel comme "la semaine dernière" ou "hier" avec
recall_memory. - Lister et filtrer les souvenirs — Parcourez les souvenirs par type ou étiquette avec
list_memories, ou combinez les étiquettes avec une logique ET/OU viasearch_by_tag. - Obtenir le contenu complet d'un souvenir à la demande — Récupérez un souvenir complet par son nom avec
get_memorylorsque vous avez besoin de détails au-delà des extraits de recherche. - Mettre à jour, supprimer ou déplacer des souvenirs — Modifiez le contenu, les étiquettes ou l'expiration avec
update_memory, supprimez avecdelete_memory, ou déplacez entre les espaces de travail avecmove_memory.
Documentation
Serveur MCP de mémoire auto-hébergé pour usage personnel et en équipe
Démarrage rapide • Fonctionnement • Outils MCP • Configuration • Prérequis • Licence
✨ Fonctionnalités
- 🔍 Recherche hybride — BM25 (texte intégral) + KNN vectoriel (pgvector) fusionnés via Reciprocal Rank Fusion
- 📂 Multi-utilisateur — chaque utilisateur ne voit que ses propres souvenirs ; espaces de travail pour les connaissances partagées en équipe
- 🛠️ 10 outils MCP — stocker, récupérer, rappeler, lister, rechercher par tag, obtenir, mettre à jour, supprimer, déplacer, lister les espaces de travail
- 🌐 Interface Web — parcourir, rechercher, modifier et supprimer des souvenirs dans le navigateur ; export/import JSON
- 🔒 OAuth 2.1 — serveur d'autorisation complet intégré au processus, toujours activé
- 🐘 PostgreSQL — pgvector pour les embeddings, tsvector pour la recherche en texte intégral
- 📊 Divulgation progressive — la recherche renvoie des extraits compacts par défaut ; appelez
get_memory(name)uniquement pour ce dont vous avez besoin, réduisant ainsi l'utilisation de tokens - 🔁 Déduplication — détecte automatiquement les souvenirs quasi identiques avant l'enregistrement, empêchant l'accumulation de bruit
🆚 Comparaison de Memlord
| Memlord | OpenMemory | mcp-memory-service | basic-memory | |
|---|---|---|---|---|
| Recherche | BM25 + vectoriel + RRF | Vectoriel uniquement (Qdrant) | BM25 + vectoriel + RRF | BM25 + vectoriel |
| Embeddings | ONNX local, zéro configuration | OpenAI par défaut ; Ollama en option | ONNX local, zéro configuration | FastEmbed local |
| Stockage | PostgreSQL + pgvector | PostgreSQL + Qdrant | SQLite-vec / Cloudflare Vectorize | SQLite + fichiers Markdown |
| Multi-utilisateur | ✅ | ❌ mono-utilisateur en pratique | ⚠️ portée par agent-ID, pas d'isolation | ❌ |
| Espaces de travail | ✅ partagés + personnels, liens d'invitation | ⚠️ Espace de noms "Apps" | ⚠️ tags + conversation_id | ✅ option par projet |
| Authentification | ✅ OAuth 2.1 | ❌ aucune (auto-hébergé) | ✅ OAuth 2.0 + PKCE | ❌ |
| Interface Web | ✅ parcourir, modifier, exporter | ✅ tableau de bord Next.js | ✅ interface riche, visualisation graphique, scores de qualité | ❌ local ; cloud uniquement |
| Outils MCP | 10 | 5 | 15+ | ~20 |
| Auto-hébergé | ✅ processus unique | ✅ Docker (3 conteneurs) | ✅ | ✅ |
| Entrée de mémoire | Manuelle (stockage explicite) | Extraite automatiquement par le LLM | Manuelle | Manuelle (notes Markdown) |
| Types de mémoire | fait / préférence / instruction / retour d'information | faits extraits automatiquement | — | observations + liens wiki |
| Recherche temporelle | ✅ dates en langage naturel | ⚠️ REST uniquement, pas dans les outils MCP | — | ✅ recent_activity |
| Efficacité des tokens | ✅ divulgation progressive | ❌ | — | ✅ parcours build_context |
| Import / Export | ✅ JSON | ✅ ZIP (JSON + JSONL) | — | ✅ Markdown (lisible par l'humain) |
| Licence | AGPL-3.0 / Commerciale | Apache 2.0 | Apache 2.0 | AGPL-3.0 |
Là où les concurrents ont un réel avantage :
- OpenMemory — extrait automatiquement les souvenirs du texte brut de conversation ; pas besoin de décider quoi stocker manuellement ; bon import/export
- mcp-memory-service — interface Web plus riche (visualisation graphique, notation de qualité, 8 onglets) ; licence plus permissive (Apache 2.0) ; multiples options de transport (stdio, SSE, HTTP)
- basic-memory — les souvenirs sont des fichiers Markdown lisibles par l'humain que vous pouvez modifier, versionner et lire sans aucun serveur ; les liens d'entités de style wiki forment un graphe de connaissances local ; ~20 outils MCP
Quand choisir Memlord :
- Vous voulez des embeddings locaux sans configuration — le modèle ONNX est livré avec le serveur, pas besoin d'Ollama ou d'API externe
- Vous gérez un serveur d'équipe multi-utilisateur avec une authentification OAuth 2.1 appropriée et des espaces de travail basés sur invitation
- Vous voulez une base de données de qualité production (PostgreSQL) qui évolue au-delà du SQLite d'une seule machine
- Vous gérez les souvenirs explicitement — stockez exactement ce qui compte, typé et tagué, pas tout ce que le LLM décide d'extraire
- Vous voulez une interface Web auto-hébergée avec CRUD complet et export JSON, sans abonnement cloud
🚀 Démarrage rapide
🐳 Docker
cp .env.example .env
docker compose up
Serveur HTTP (multi-utilisateur, interface 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
Ouvrez http://localhost:8000 pour l'interface Web. Le point de terminaison MCP est à /mcp.
🔍 Fonctionnement
Chaque requête de recherche exécute BM25 et KNN vectoriel en parallèle, puis fusionne les résultats via 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])
⚙️ Configuration
Tous les paramètres utilisent le préfixe MEMLORD_. Voir .env.example pour la liste complète.
| Variable | Par défaut | Description |
|---|---|---|
MEMLORD_DB_URL | postgresql+asyncpg://postgres:postgres@localhost/memlord | URL de connexion PostgreSQL |
MEMLORD_PORT | 8000 | Port du serveur |
MEMLORD_BASE_URL | http://localhost:8000 | URL publique pour OAuth (mode HTTP) |
MEMLORD_OAUTH_JWT_SECRET | memlord-dev-secret-please-change | Secret de signature JWT (mode HTTP) |
Définissez MEMLORD_BASE_URL sur votre URL publique et changez MEMLORD_OAUTH_JWT_SECRET avant de déployer.
🛠️ Outils MCP
| Outil | Description |
|---|---|
store_memory | Enregistrer un souvenir (idempotent par contenu) ; lève une alerte sur les quasi-doublons ; expires_at optionnel |
retrieve_memory | Recherche hybride sémantique + texte intégral ; renvoie des extraits par défaut |
recall_memory | Recherche par expression temporelle en langage naturel ; renvoie des extraits par défaut |
list_memories | Liste paginée avec filtres de type/tag |
search_by_tag | Recherche de tags ET/OU |
get_memory | Récupérer un seul souvenir par nom avec le contenu complet |
update_memory | Mettre à jour le contenu, le type, les tags, les métadonnées ou l'expiration par nom (et optionnellement renommer) |
delete_memory | Supprimer par nom |
move_memory | Déplacer un souvenir vers un autre espace de travail |
list_workspaces | Lister les espaces de travail dont vous êtes membre (y compris personnels) |
La gestion des espaces de travail (créer, inviter, rejoindre, quitter) est gérée via l'interface Web.
💻 Configuration système requise
- Python 3.12
- PostgreSQL ≥ 15 avec l'extension pgvector
- uv — Gestionnaire de paquets Python
👨💻 Développement
pyright src/ # type check
ruff format . # format
pytest # run tests
alembic-autogen-check # verify migrations are up to date
📄 Licence
Memlord est sous double licence :
- AGPL-3.0 — gratuit pour un usage open source. Si vous exécutez une version modifiée en tant que service réseau, vous devez publier votre code source.
- Licence Commerciale — pour les déploiements propriétaires ou à source fermée. Contactez sergey@memlord.com ou dmitry@memlord.com pour acheter.