{
  "markdown": "# memoraeu-mcp\n\n<!-- mcp-name: io.github.pquattro/memoraeu-mcp -->\n\n> 🇬🇧 [English](#english) | 🇫🇷 [Français](#français)\n\n---\n\n## English\n\n**Zero-knowledge persistent memory layer for Claude — MCP server**\n\nMemoraEU gives Claude a persistent, encrypted memory. All content is encrypted **client-side** with AES-256-GCM before reaching the server — the server never sees your plaintext. Semantic search is powered by Mistral embeddings generated locally on your machine, before encryption.\n\n### Features\n\n- 🔒 **Zero-knowledge** — AES-256-GCM encryption, key never leaves your machine\n- 🧠 **Semantic search** — embeddings generated locally before encryption (Qdrant on server)\n- 🔄 **Auto memory** — remembers and recalls context automatically\n- 🚫 **Deduplication** — detects near-duplicate memories before storing\n- 🇪🇺 **EU hosted** — GDPR compliant infrastructure\n\n### Installation\n\n```bash\npip install memoraeu-mcp\n```\n\nOr with `uvx` (no install required, recommended):\n\n```bash\nuvx memoraeu-mcp\n```\n\n### Claude Desktop configuration\n\nAdd to your `claude_desktop_config.json`, under `mcpServers`:\n\n```json\n{\n  \"mcpServers\": {\n    \"memoraeu\": {\n      \"command\": \"uvx\",\n      \"args\": [\"memoraeu-mcp\"],\n      \"env\": {\n        \"MEMORAEU_API_URL\": \"https://api.memoraeu.com\",\n        \"MEMORAEU_API_KEY\": \"meu-sk-...\",\n        \"MEMORAEU_SECRET\": \"your-memoraeu-password\",\n        \"MEMORAEU_SALT\": \"your-kdf-salt\",\n        \"MISTRAL_API_KEY\": \"your-mistral-key\"\n      }\n    }\n  }\n}\n```\n\n### Understanding the variables\n\nThese five variables serve three distinct purposes — they are **not interchangeable**:\n\n| Variable | Purpose | Where to get it |\n|---|---|---|\n| `MEMORAEU_API_KEY` | HTTP authentication (Bearer token sent with every request) | Dashboard → Settings → API Keys |\n| `MEMORAEU_SECRET` | Your MemoraEU login password — used as the PBKDF2 input to derive the encryption key locally | Your account password |\n| `MEMORAEU_SALT` | KDF salt generated by the server, unique to your account — combined with `MEMORAEU_SECRET` to produce the encryption key | Dashboard → Settings → Encryption Keys |\n| `MEMORAEU_API_URL` | API endpoint (use `https://api.memoraeu.com` for the hosted service) | — |\n| `MISTRAL_API_KEY` | Used to generate embeddings **locally** before encryption — required for zero-knowledge search (see below) | [console.mistral.ai](https://console.mistral.ai) |\n\n> **Why does the MCP need its own Mistral key?**\n>\n> Zero-knowledge means the server never sees your plaintext. To enable semantic search, embeddings must be computed **before** the content is encrypted — on your machine. The MCP calls Mistral directly with the plaintext, gets the embedding vector, encrypts the content, then sends both to the server. The server stores the opaque blob and the vector, but cannot reconstruct the original text. Without `MISTRAL_API_KEY`, semantic search will not work.\n\n> **Without `MISTRAL_API_KEY`:** The MCP will still work — `remember` and `recall` will function, but semantic search will fall back to keyword-based search on the server side. Zero-knowledge encryption is unaffected.\n\n### Getting your keys\n\n1. Sign up at [app.memoraeu.com](https://app.memoraeu.com)\n2. Go to **Settings → Encryption Keys** → copy `MEMORAEU_SALT`\n3. `MEMORAEU_SECRET` is your MemoraEU login password\n4. Go to **Settings → API Keys** → create a key → copy `MEMORAEU_API_KEY`\n5. Get a Mistral API key at [console.mistral.ai](https://console.mistral.ai)\n\n### Remote MCP via SSE (no local install)\n\nYou can connect directly from claude.ai web, Cursor, Windsurf or any remote MCP client without installing anything locally:\n\n```\nSSE endpoint: https://api.memoraeu.com/mcp/sse\nAuth: Authorization: Bearer meu-sk-...\n```\n\nExample config for Cursor / Windsurf:\n\n```json\n{\n  \"mcpServers\": {\n    \"memoraeu\": {\n      \"type\": \"sse\",\n      \"url\": \"https://api.memoraeu.com/mcp/sse\",\n      \"headers\": {\n        \"Authorization\": \"Bearer meu-sk-...\"\n      }\n    }\n  }\n}\n```\n\n> **Note:** In SSE remote mode, content is not zero-knowledge encrypted (the server handles plaintext). Use the local `stdio` install for full zero-knowledge guarantees.\n\n### Available tools\n\n| Tool | Description |\n|------|-------------|\n| `remember` | Memorizes important information automatically |\n| `recall` | Semantic search across stored memories |\n| `forget` | Deletes a memory by ID |\n| `list_memories` | Lists recent memories with optional category filter |\n| `list_categories` | Returns existing categories sorted by usage |\n| `remember_fact` | Stores a structured fact (subject/predicate/object) with temporal validity |\n| `recall_facts` | Retrieves active facts for a subject |\n| `invalidate_fact` | Marks a fact as expired by its ID |\n\n### Auto-memory behavior\n\nThe MCP server is designed to work without manual intervention:\n\n**Automatic recall** — On the first user message of each session, `recall` is called automatically\nwith the detected topic as query. Recent memories are also loaded via the `memoraeu://context`\nresource and injected as session context.\n\n**Automatic remember** — When Claude detects a memorable piece of information (preference, decision,\nbiographical fact, technical constraint), it calls `remember` autonomously without waiting to be asked.\nIt confirms with a single discreet line.\n\n**System prompt injection** — On the first `recall` call, the full behavior system prompt is injected\ninto Claude's context, reinforcing the auto-memory rules for the rest of the session.\n\nThis behavior is encoded directly in the tool descriptions. Claude models follow these instructions\nas part of tool use — no additional configuration is required.\n\n### Deduplication & compression\n\nBefore storing a memory, the MCP checks for near-duplicates using vector similarity:\n\n| Similarity | Action |\n|---|---|\n| ≥ 94% | Memory skipped — exact duplicate detected |\n| 85–94% | Warning logged, memory stored anyway |\n| < 85% | Memory stored normally |\n\nLong memories (> 300 characters) are compressed by Mistral before encryption, reducing token usage\nand improving search relevance. Compression happens in plaintext, before the content is encrypted —\nthe server never sees the uncompressed original either.\n\n### Self-hosting\n\nThe API is open source. Deploy your own instance with Docker:\n\n```bash\ngit clone https://github.com/pquattro/memoraEu\ncd memoraEu\ndocker compose up -d\n```\n\n---\n\n## Français\n\n**Couche mémoire persistante zero-knowledge pour Claude — serveur MCP**\n\nMemoraEU donne à Claude une mémoire persistante et chiffrée. Tout le contenu est chiffré **côté client** en AES-256-GCM avant d'atteindre le serveur — le serveur ne voit jamais le texte en clair. La recherche sémantique repose sur des embeddings Mistral générés localement, avant chiffrement.\n\n### Fonctionnalités\n\n- 🔒 **Zero-knowledge** — chiffrement AES-256-GCM, la clé ne quitte jamais votre machine\n- 🧠 **Recherche sémantique** — embeddings générés localement avant chiffrement (Qdrant côté serveur)\n- 🔄 **Mémoire automatique** — mémorise et rappelle le contexte sans intervention\n- 🚫 **Déduplication** — détecte les doublons avant stockage\n- 🇪🇺 **Hébergé en Europe** — infrastructure conforme RGPD\n\n### Installation\n\n```bash\npip install memoraeu-mcp\n```\n\nOu avec `uvx` (sans installation, recommandé) :\n\n```bash\nuvx memoraeu-mcp\n```\n\n### Configuration Claude Desktop\n\nAjoutez dans votre `claude_desktop_config.json`, section `mcpServers` :\n\n```json\n{\n  \"mcpServers\": {\n    \"memoraeu\": {\n      \"command\": \"uvx\",\n      \"args\": [\"memoraeu-mcp\"],\n      \"env\": {\n        \"MEMORAEU_API_URL\": \"https://api.memoraeu.com\",\n        \"MEMORAEU_API_KEY\": \"meu-sk-...\",\n        \"MEMORAEU_SECRET\": \"votre-mot-de-passe-memoraeu\",\n        \"MEMORAEU_SALT\": \"votre-kdf-salt\",\n        \"MISTRAL_API_KEY\": \"votre-clé-mistral\"\n      }\n    }\n  }\n}\n```\n\n### Rôle de chaque variable\n\nCes cinq variables ont trois rôles distincts — elles **ne sont pas interchangeables** :\n\n| Variable | Rôle | Où la trouver |\n|---|---|---|\n| `MEMORAEU_API_KEY` | Authentification HTTP (Bearer token envoyé à chaque requête) | Dashboard → Paramètres → Clés API |\n| `MEMORAEU_SECRET` | Votre mot de passe MemoraEU — utilisé comme entrée PBKDF2 pour dériver la clé de chiffrement localement | Votre mot de passe de connexion |\n| `MEMORAEU_SALT` | Salt KDF généré par le serveur, unique à votre compte — combiné avec `MEMORAEU_SECRET` pour produire la clé de chiffrement | Dashboard → Paramètres → Clés de chiffrement |\n| `MEMORAEU_API_URL` | Endpoint API (utilisez `https://api.memoraeu.com` pour le service hébergé) | — |\n| `MISTRAL_API_KEY` | Génération des embeddings **localement** avant chiffrement — requis pour la recherche zero-knowledge (voir ci-dessous) | [console.mistral.ai](https://console.mistral.ai) |\n\n> **Pourquoi le MCP a-t-il besoin d'une clé Mistral ?**\n>\n> Le zero-knowledge signifie que le serveur ne voit jamais votre texte en clair. Pour permettre la recherche sémantique, les embeddings doivent être calculés **avant** le chiffrement — sur votre machine. Le MCP appelle Mistral directement avec le texte clair, obtient le vecteur d'embedding, chiffre le contenu, puis envoie les deux au serveur. Le serveur stocke le blob opaque et le vecteur, mais ne peut pas reconstituer le texte original. Sans `MISTRAL_API_KEY`, la recherche sémantique ne fonctionnera pas.\n\n> **Sans `MISTRAL_API_KEY` :** Le MCP continue de fonctionner — `remember` et `recall` restent opérationnels, mais la recherche sémantique bascule sur une recherche par mots-clés côté serveur. Le chiffrement zero-knowledge n'est pas affecté.\n\n### Obtenir vos clés\n\n1. Créez un compte sur [app.memoraeu.com](https://app.memoraeu.com)\n2. Allez dans **Paramètres → Clés de chiffrement** → copiez `MEMORAEU_SALT`\n3. `MEMORAEU_SECRET` est votre mot de passe de connexion MemoraEU\n4. Allez dans **Paramètres → Clés API** → créez une clé → copiez `MEMORAEU_API_KEY`\n5. Obtenez une clé Mistral sur [console.mistral.ai](https://console.mistral.ai)\n\n### MCP Remote via SSE (sans installation locale)\n\nConnectez-vous directement depuis claude.ai web, Cursor, Windsurf ou tout client MCP distant sans rien installer :\n\n```\nEndpoint SSE : https://api.memoraeu.com/mcp/sse\nAuth : Authorization: Bearer meu-sk-...\n```\n\nExemple de config Cursor / Windsurf :\n\n```json\n{\n  \"mcpServers\": {\n    \"memoraeu\": {\n      \"type\": \"sse\",\n      \"url\": \"https://api.memoraeu.com/mcp/sse\",\n      \"headers\": {\n        \"Authorization\": \"Bearer meu-sk-...\"\n      }\n    }\n  }\n}\n```\n\n> **Note :** En mode SSE distant, le contenu n'est pas chiffré zero-knowledge (le serveur traite le texte en clair). Utilisez l'installation locale `stdio` pour les garanties zero-knowledge complètes.\n\n### Outils disponibles\n\n| Outil | Description |\n|-------|-------------|\n| `remember` | Mémorise automatiquement les informations importantes |\n| `recall` | Recherche sémantique dans les mémoires stockées |\n| `forget` | Supprime une mémoire par son ID |\n| `list_memories` | Liste les mémoires récentes avec filtre optionnel |\n| `list_categories` | Retourne les catégories existantes triées par usage |\n| `remember_fact` | Stocke un fait structuré (sujet/prédicat/objet) avec validité temporelle |\n| `recall_facts` | Récupère les faits actifs pour un sujet |\n| `invalidate_fact` | Marque un fait comme expiré par son ID |\n\n### Comportement de mémoire automatique\n\nLe serveur MCP est conçu pour fonctionner sans intervention manuelle :\n\n**Rappel automatique** — Au premier message de chaque session, `recall` est appelé automatiquement\navec le sujet détecté comme requête. Les mémoires récentes sont également chargées via la ressource\n`memoraeu://context` et injectées dans le contexte de session.\n\n**Mémorisation automatique** — Lorsque Claude détecte une information durable (préférence, décision,\nfait biographique, contrainte technique), il appelle `remember` de façon autonome, sans attendre qu'on\nle lui demande. Il confirme par une simple ligne discrète.\n\n**Injection du prompt système** — Au premier appel à `recall`, le prompt système complet de comportement\nest injecté dans le contexte de Claude, renforçant les règles de mémoire automatique pour le reste\nde la session.\n\nCe comportement est encodé directement dans les descriptions des outils. Les modèles Claude suivent\nces instructions dans le cadre de l'utilisation des outils — aucune configuration supplémentaire\nn'est requise.\n\n### Déduplication et compression\n\nAvant de stocker une mémoire, le MCP vérifie les quasi-doublons par similarité vectorielle :\n\n| Similarité | Action |\n|---|---|\n| ≥ 94 % | Mémoire ignorée — doublon exact détecté |\n| 85–94 % | Avertissement journalisé, mémoire stockée quand même |\n| < 85 % | Mémoire stockée normalement |\n\nLes mémoires longues (> 300 caractères) sont compressées par Mistral avant chiffrement, réduisant\nla consommation de tokens et améliorant la pertinence des recherches. La compression s'effectue en\ntexte clair, avant chiffrement du contenu — le serveur ne voit jamais l'original non compressé non plus.\n\n### Auto-hébergement\n\nL'API est open source. Déployez votre propre instance avec Docker :\n\n```bash\ngit clone https://github.com/pquattro/memoraEu\ncd memoraEu\ndocker compose up -d\n```\n\n---\n\n## License\n\nMIT © 2026 MemoraEU\n",
  "bytes": 13204,
  "sha": "062ab308c0b05a3b0a6e666bc85e14c308f3018cd7097058e27f4fbbd903e956",
  "repo_slug": "pquattro/memoraeu-memoraeu-mcp",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_pquattro_memoraeu_mcp_bdfbe609/readme"
}