Memlord

officiel

Serveur 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_memory pour 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 via search_by_tag.
  • Obtenir le contenu complet d'un souvenir à la demande — Récupérez un souvenir complet par son nom avec get_memory lorsque 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 avec delete_memory, ou déplacez entre les espaces de travail avec move_memory.

Documentation

Serveur MCP de mémoire auto-hébergé avec recherche hybride BM25 + sémantique, propulsé par PostgreSQL +
pgvector

Serveur MCP de mémoire auto-hébergé pour usage personnel et en équipe

License Python Version MCP Ruff MCP score

Démarrage rapideFonctionnementOutils MCPConfigurationPrérequisLicence


✨ 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

MemlordOpenMemorymcp-memory-servicebasic-memory
RechercheBM25 + vectoriel + RRFVectoriel uniquement (Qdrant)BM25 + vectoriel + RRFBM25 + vectoriel
EmbeddingsONNX local, zéro configurationOpenAI par défaut ; Ollama en optionONNX local, zéro configurationFastEmbed local
StockagePostgreSQL + pgvectorPostgreSQL + QdrantSQLite-vec / Cloudflare VectorizeSQLite + 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 MCP10515+~20
Auto-hébergé✅ processus unique✅ Docker (3 conteneurs)
Entrée de mémoireManuelle (stockage explicite)Extraite automatiquement par le LLMManuelleManuelle (notes Markdown)
Types de mémoirefait / préférence / instruction / retour d'informationfaits extraits automatiquementobservations + 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)
LicenceAGPL-3.0 / CommercialeApache 2.0Apache 2.0AGPL-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.

VariablePar défautDescription
MEMLORD_DB_URLpostgresql+asyncpg://postgres:postgres@localhost/memlordURL de connexion PostgreSQL
MEMLORD_PORT8000Port du serveur
MEMLORD_BASE_URLhttp://localhost:8000URL publique pour OAuth (mode HTTP)
MEMLORD_OAUTH_JWT_SECRETmemlord-dev-secret-please-changeSecret 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

OutilDescription
store_memoryEnregistrer un souvenir (idempotent par contenu) ; lève une alerte sur les quasi-doublons ; expires_at optionnel
retrieve_memoryRecherche hybride sémantique + texte intégral ; renvoie des extraits par défaut
recall_memoryRecherche par expression temporelle en langage naturel ; renvoie des extraits par défaut
list_memoriesListe paginée avec filtres de type/tag
search_by_tagRecherche de tags ET/OU
get_memoryRécupérer un seul souvenir par nom avec le contenu complet
update_memoryMettre à jour le contenu, le type, les tags, les métadonnées ou l'expiration par nom (et optionnellement renommer)
delete_memorySupprimer par nom
move_memoryDéplacer un souvenir vers un autre espace de travail
list_workspacesLister 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 :