Metadata-Version: 2.4
Name: memoraeu-mcp
Version: 0.1.5
Summary: Zero-knowledge persistent memory layer for Claude — MCP server
Project-URL: Homepage, https://app.memoraeu.com
Project-URL: Repository, https://github.com/memoraeu/memoraeu-mcp
Project-URL: Documentation, https://docs.memoraeu.com
Author-email: MemoraEU <contact@memoraeu.com>
License: MIT
License-File: LICENSE
Keywords: ai,claude,llm,mcp,memory,zero-knowledge
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
Requires-Python: >=3.11
Requires-Dist: cryptography>=42.0.0
Requires-Dist: httpx>=0.27.0
Requires-Dist: mcp>=1.0.0
Description-Content-Type: text/markdown

# memoraeu-mcp

<!-- mcp-name: io.github.pquattro/memoraeu-mcp -->

> 🇬🇧 [English](#english) | 🇫🇷 [Français](#français)

---

## English

**Zero-knowledge persistent memory layer for Claude — MCP server**

MemoraEU 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.

### Features

- 🔒 **Zero-knowledge** — AES-256-GCM encryption, key never leaves your machine
- 🧠 **Semantic search** — embeddings generated locally before encryption (Qdrant on server)
- 🔄 **Auto memory** — remembers and recalls context automatically
- 🚫 **Deduplication** — detects near-duplicate memories before storing
- 🇪🇺 **EU hosted** — GDPR compliant infrastructure

### Installation

```bash
pip install memoraeu-mcp
```

Or with `uvx` (no install required, recommended):

```bash
uvx memoraeu-mcp
```

### Claude Desktop configuration

Add to your `claude_desktop_config.json`, under `mcpServers`:

```json
{
  "mcpServers": {
    "memoraeu": {
      "command": "uvx",
      "args": ["memoraeu-mcp"],
      "env": {
        "MEMORAEU_API_URL": "https://api.memoraeu.com",
        "MEMORAEU_API_KEY": "meu-sk-...",
        "MEMORAEU_SECRET": "your-memoraeu-password",
        "MEMORAEU_SALT": "your-kdf-salt",
        "MISTRAL_API_KEY": "your-mistral-key"
      }
    }
  }
}
```

### Understanding the variables

These five variables serve three distinct purposes — they are **not interchangeable**:

| Variable | Purpose | Where to get it |
|---|---|---|
| `MEMORAEU_API_KEY` | HTTP authentication (Bearer token sent with every request) | Dashboard → Settings → API Keys |
| `MEMORAEU_SECRET` | Your MemoraEU login password — used as the PBKDF2 input to derive the encryption key locally | Your account password |
| `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 |
| `MEMORAEU_API_URL` | API endpoint (use `https://api.memoraeu.com` for the hosted service) | — |
| `MISTRAL_API_KEY` | Used to generate embeddings **locally** before encryption — required for zero-knowledge search (see below) | [console.mistral.ai](https://console.mistral.ai) |

> **Why does the MCP need its own Mistral key?**
>
> 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.

### Getting your keys

1. Sign up at [app.memoraeu.com](https://app.memoraeu.com)
2. Go to **Settings → Encryption Keys** → copy `MEMORAEU_SALT`
3. `MEMORAEU_SECRET` is your MemoraEU login password
4. Go to **Settings → API Keys** → create a key → copy `MEMORAEU_API_KEY`
5. Get a Mistral API key at [console.mistral.ai](https://console.mistral.ai)

### Available tools

| Tool | Description |
|------|-------------|
| `remember` | Memorizes important information automatically |
| `recall` | Semantic search across stored memories |
| `forget` | Deletes a memory by ID |
| `list_memories` | Lists recent memories with optional category filter |
| `list_categories` | Returns existing categories sorted by usage |

### Self-hosting

The API is open source. Deploy your own instance with Docker:

```bash
git clone https://github.com/pquattro/memoraEu
cd memoraEu
docker compose up -d
```

---

## Français

**Couche mémoire persistante zero-knowledge pour Claude — serveur MCP**

MemoraEU 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.

### Fonctionnalités

- 🔒 **Zero-knowledge** — chiffrement AES-256-GCM, la clé ne quitte jamais votre machine
- 🧠 **Recherche sémantique** — embeddings générés localement avant chiffrement (Qdrant côté serveur)
- 🔄 **Mémoire automatique** — mémorise et rappelle le contexte sans intervention
- 🚫 **Déduplication** — détecte les doublons avant stockage
- 🇪🇺 **Hébergé en Europe** — infrastructure conforme RGPD

### Installation

```bash
pip install memoraeu-mcp
```

Ou avec `uvx` (sans installation, recommandé) :

```bash
uvx memoraeu-mcp
```

### Configuration Claude Desktop

Ajoutez dans votre `claude_desktop_config.json`, section `mcpServers` :

```json
{
  "mcpServers": {
    "memoraeu": {
      "command": "uvx",
      "args": ["memoraeu-mcp"],
      "env": {
        "MEMORAEU_API_URL": "https://api.memoraeu.com",
        "MEMORAEU_API_KEY": "meu-sk-...",
        "MEMORAEU_SECRET": "votre-mot-de-passe-memoraeu",
        "MEMORAEU_SALT": "votre-kdf-salt",
        "MISTRAL_API_KEY": "votre-clé-mistral"
      }
    }
  }
}
```

### Rôle de chaque variable

Ces cinq variables ont trois rôles distincts — elles **ne sont pas interchangeables** :

| Variable | Rôle | Où la trouver |
|---|---|---|
| `MEMORAEU_API_KEY` | Authentification HTTP (Bearer token envoyé à chaque requête) | Dashboard → Paramètres → Clés API |
| `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 |
| `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 |
| `MEMORAEU_API_URL` | Endpoint API (utilisez `https://api.memoraeu.com` pour le service hébergé) | — |
| `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) |

> **Pourquoi le MCP a-t-il besoin d'une clé Mistral ?**
>
> 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.

### Obtenir vos clés

1. Créez un compte sur [app.memoraeu.com](https://app.memoraeu.com)
2. Allez dans **Paramètres → Clés de chiffrement** → copiez `MEMORAEU_SALT`
3. `MEMORAEU_SECRET` est votre mot de passe de connexion MemoraEU
4. Allez dans **Paramètres → Clés API** → créez une clé → copiez `MEMORAEU_API_KEY`
5. Obtenez une clé Mistral sur [console.mistral.ai](https://console.mistral.ai)

### Outils disponibles

| Outil | Description |
|-------|-------------|
| `remember` | Mémorise automatiquement les informations importantes |
| `recall` | Recherche sémantique dans les mémoires stockées |
| `forget` | Supprime une mémoire par son ID |
| `list_memories` | Liste les mémoires récentes avec filtre optionnel |
| `list_categories` | Retourne les catégories existantes triées par usage |

### Auto-hébergement

L'API est open source. Déployez votre propre instance avec Docker :

```bash
git clone https://github.com/pquattro/memoraEu
cd memoraEu
docker compose up -d
```

---

## License

MIT © 2026 MemoraEU
