MemoraEu
Camada de memória pessoal para assistentes de IA. Armazene, pesquise e recupere preferências, decisões e fatos — disponível em qualquer cliente compatível com MCP.
Documentação
Servidor MemoraEU
Francês
MemoraEU dá à sua IA uma memória persistente e criptografada — soberana, zero-knowledge, hospedada na Europa. Compatível com Claude, Cursor, Windsurf, ChatGPT, GitHub Copilot, n8n via MCP. Auto-hospedagem gratuita (AGPL v3) ou cloud gerenciado na UE
O que ele faz
MemoraEU é um servidor de memória auto-hospedável para assistentes de IA. Ele implementa o Model Context Protocol (MCP) para que qualquer cliente MCP (Claude, Cursor, Windsurf, ChatGPT, GitHub Copilot, n8n…)
- Pesquisa semântica impulsionada por Qdrant + embeddings (Ollama ou Mistral)
- Multi-usuário / multi-org com autenticação JWT
- Transportes MCP: Legacy SSE (Cursor, curl) + HTTP Streamable (claude.ai, Copilot, n8n)
- Fatos temporais com períodos de validade
- Criptografia zero-knowledge AES-256-GCM no lado do cliente (memoraeu-mcp)
- GDPR nativo: endpoints integrados de exportação / exclusão / histórico
- Fusão inteligente: detecção e mesclagem de memórias semelhantes via LLM (Mistral/Ollama)
Início rápido
☁️ Opção A — Cloud gerenciado (zero configuração)
# Installer le client MCP
uvx memoraeu-mcp
# Ajouter dans votre config Claude Desktop :
# Server URL : https://api.memoraeu.com/mcp/sse
# Clé API sur : https://app.memoraeu.com
🏠 Opção B — Auto-hospedagem (gratuita, AGPL v3)
git clone https://github.com/pquattro/memoraeu-server
cd memoraeu-server
cp .env.example .env # remplir MEMORAEU_SECRET, MEMORAEU_SALT, MISTRAL_API_KEY
docker compose up -d
# API disponible sur http://localhost:8000
# Docs : http://localhost:8000/docs
# Serveur MCP : http://localhost:8000/mcp/sse
Configuração
Toda a configuração é feita via variáveis de ambiente (veja .env.example)
| Variável | Padrão | Descrição |
|---|---|---|
JWT_SECRET | — | Obrigatório. Mínimo de 32 caracteres. |
REGISTRATION_OPEN | true | Permitir novos registros de usuários |
EMBED_PROVIDER | ollama | ollama ou mistral |
EMBED_MODEL | nomic-embed-text | Nome do modelo de embedding |
EMBED_URL | http://localhost:11434 | URL base do Ollama |
MISTRAL_API_KEY | — | Obrigatório se EMBED_PROVIDER=mistral |
QDRANT_URL | http://qdrant:6333 | URL da instância Qdrant |
SQLITE_PATH | /data/memoraeu.db | Caminho do banco de dados SQLite |
MCP_ALLOWED_HOSTS | localhost,127.0.0.1,localhost:8000,127.0.0.1:8000 | Hosts aceitos em /mcp/ (proteção contra DNS rebinding). Adicione seu domínio se você expor o servidor, caso contrário as requisições são rejeitadas com 421. |
MCP_ALLOWED_ORIGINS | http://localhost,http://127.0.0.1,https://claude.ai | Origens aceitas em /mcp/. Um Origin ausente é aceito (chamadas servidor-a-servidor). |
Conecte seu cliente MCP
Claude Desktop / Cursor / Windsurf (Legacy SSE)
{
"mcpServers": {
"memoraeu": {
"url": "http://localhost:8000/mcp/sse",
"headers": { "Authorization": "Bearer VOTRE_CLE_API" }
}
}
}
claude.ai (HTTP Streamable, requer uma URL pública + OAuth) Veja a documentação
Mistral AI (conectores beta — La Plateforme)
connector = client.beta.connectors.create(
name="memoraeu",
server="https://api.memoraeu.com/mcp/sse?token=meu-sk-••••",
)
⚠️ Beta — discovery e SSE testados, execução das ferramentas em implantação pela Mistral.
⚠️ Desde a 1.4.0, POST /mcp/sse não aceita mais o token na query string. Se o seu conector usar o transporte HTTP Streamable, passe a chave via o cabeçalho Authorization: Bearer. O ?token= acima permanece válido apenas para o transporte SSE legado (GET /mcp/sse).
Por que MemoraEU?
| MemoraEU | Outros (ex: mem0) | |
|---|---|---|
| Open source | ✅ AGPL v3 | ✅ (core) |
| Hospedado na UE | ✅ OVH França | ❌ EUA |
| Zero-knowledge | ✅ AES-256-GCM no lado do cliente | ❌ |
| Auto-hospedável | ✅ Docker Compose | ✅ |
| MCP nativo | ✅ stdio + SSE + HTTP Streamable | ❌ |
| Conectores Mistral | ✅ compatível (beta) | |
| OAuth 2.0 PKCE | ✅ | ❌ |
| Grafo de conhecimento temporal | ✅ | ❌ |
| Endpoints GDPR | ✅ nativos | ⚠️ parcial |
Auto-hospedagem vs Cloud
| Auto-hospedado | MemoraEU Cloud | |
|---|---|---|
| Instalação | Docker Compose | Inscrição, só isso |
| Localização dos dados | Seu servidor | UE (OVH, França) |
| Embeddings | Ollama (local) | |
| Atualizações | Manuais | Automáticas |
| Preço | Gratuito (AGPL) |
Arquitetura
Claude Desktop / Claude Code claude.ai · Cursor · Windsurf · ChatGPT
│ │
│ stdio (MCP) memoraeu-mcp (uvx)
▼ │ OAuth 2.0 PKCE
memoraeu_mcp/main.py │
│ ▼
├── Mistral API ←── embeddings locaux api/main.py (FastAPI)
│ (avant chiffrement)
│ HTTP + Bearer token ├── POST /mcp/sse ← HTTP Streamable
│ [contenu chiffré AES-256-GCM + vecteur] ├── GET /mcp/sse ← SSE legacy
▼ ├── /oauth/* ← PKCE
api/main.py (FastAPI)
├── Qdrant ← recherche vectorielle
├── SQLite (memories)
└── SQLite (facts)
Stack:
- FastAPI
- Qdrant — base vetorial (Docker)
- Mistral AI
- MCP
- SQLite — persistência de metadados
- AES-256-GCM + PBKDF2-SHA256 (210k iterações)
Fluxo zero-knowledge
| Variável | Função |
|---|---|
MEMORAEU_API_KEY | Autenticação HTTP — token Bearer enviado em cada requisição |
MEMORAEU_SECRET | Senha — entrada PBKDF2 para derivar a chave AES localmente |
MEMORAEU_SALT | Salt KDF único por conta, gerado no registro |
MISTRAL_API_KEY | Chave Mistral no lado do cliente — embeddings calculados antes da criptografia |
remember()
texte clair
→ PBKDF2(SECRET, SALT, 210k)
→ Mistral embed(texte clair)
→ AES-256-GCM(texte, clé)
→ POST /memories { blob chiffré, vecteur } ← le serveur ne voit que l'opaque
Instalar como pacote Python
pip install memoraeu
Com os embeddings Mistral:
pip install "memoraeu[mistral]"
Conformidade GDPR
| Endpoint | Método | Descrição |
|---|---|---|
/gdpr/status | GET | Estatísticas dos dados armazenados |
/gdpr/export | GET | Exportação JSON completa (Art. 20) |
/gdpr/delete-account | DELETE | Purga irreversível Qdrant + SQLite (Art. 17) |
/me/gdpr-history | GET | Histórico das operações GDPR |
Log de administração filtrável por organização e data:
GET /gdpr/admin/log?org_id=...&date_from=YYYY-MM-DD
X-Admin-Key: <MEMORAEU_ADMIN_KEY>
Como funciona
Armazenar uma memória
Texte en clair
→ [LOCAL] Mistral compresse si > 300 caractères
→ [LOCAL] Mistral génère un vecteur d'embedding
→ [LOCAL] PBKDF2(SECRET, SALT, 210k itérations)
→ [LOCAL] AES-256-GCM(texte)
→ POST /memories { blob chiffré, vecteur }
→ [SERVEUR] similarité vectorielle → skip si > 94% doublon
→ [SERVEUR] SQLite ← métadonnées | Qdrant ← vecteur
→ Le serveur ne voit jamais le texte en clair.
Recuperar uma memória
Requête texte (ex. "projet principal")
→ [LOCAL] Mistral génère le vecteur de la requête
→ POST /memories/search { vecteur, limit: 3 }
→ [SERVEUR] Qdrant cosine similarity → top-N blobs chiffrés
→ [LOCAL] AES-256-GCM déchiffre → texte en clair
→ Claude reçoit le contexte. Le serveur n'a vu qu'un vecteur.
Memória automática (modo MCP stdio)
O servidor MCP é projetado para funcionar sem intervenção manual. As descrições das ferramentas recall e remember instruem o Claude a chamá-las automaticamente — recall na primeira mensagem de cada sessão, remember sempre que uma informação merecer ser retida. Na primeira chamada recall, o prompt de sistema completo é injetado no contexto.
Contribuir
MemoraEU é open source (AGPL v3)
git clone https://github.com/pquattro/memoraeu-server
cd memoraeu-server
python -m venv .venv && source .venv/bin/activate
pip install -e .
cp .env.example .env # configurer votre .env local
uvicorn api.main:app --reload
Mantenha os PRs focados — um recurso ou correção por PR.
Áreas onde a ajuda é mais útil: SDK JavaScript/TypeScript, aplicativo móvel, integrações MCP adicionais, traduções.
Licença
AGPL v3 — Copyright (c)
Se você executar uma versão modificada como serviço de rede, deve disponibilizar o código-fonte aos seus usuários.
Inglês
MemoraEU dá à sua IA uma memória persistente e criptografada — soberana, zero-knowledge, hospedada na Europa. Funciona com Claude, Cursor, Windsurf, ChatGPT, GitHub Copilot, n8n via MCP. Auto-hospede gratuitamente (AGPL v3) ou use o cloud gerenciado na UE
O que ele faz
MemoraEU é um servidor de memória auto-hospedável para assistentes de IA. Ele implementa o Model Context Protocol (MCP) para que qualquer cliente compatível com MCP (Claude, Cursor, Windsurf, ChatGPT, GitHub Copilot, n8n…)
- Pesquisa semântica impulsionada por Qdrant + embeddings (Ollama ou Mistral)
- Multi-usuário / multi-org com autenticação JWT
- Transportes MCP: Legacy SSE (Cursor, curl) + HTTP Streamable (claude.ai, Copilot, n8n)
- Fatos temporais com períodos de validade
- Criptografia zero-knowledge AES-256-GCM no lado do cliente (memoraeu-mcp)
- GDPR nativo: endpoints integrados de exportação / exclusão / histórico
- Fusão inteligente: detecção de memórias semelhantes e fusão via LLM (Mistral/Ollama)
Início rápido
☁️ Opção A — Cloud gerenciado (zero configuração)
# Install the MCP client
uvx memoraeu-mcp
# Add to your Claude Desktop config:
# Server URL: https://api.memoraeu.com/mcp/sse
# Get your API key at: https://app.memoraeu.com
🏠 Opção B — Auto-hospedagem (gratuita, AGPL v3)
git clone https://github.com/pquattro/memoraeu-server
cd memoraeu-server
cp .env.example .env # fill MEMORAEU_SECRET, MEMORAEU_SALT, MISTRAL_API_KEY
docker compose up -d
# API running at http://localhost:8000
# Docs: http://localhost:8000/docs
# MCP server: http://localhost:8000/mcp/sse
Configuração
Toda a configuração é feita via variáveis de ambiente (veja .env.example)
| Variável | Padrão | Descrição |
|---|---|---|
JWT_SECRET | — | Obrigatório. Mínimo de 32 caracteres. |
REGISTRATION_OPEN | true | Permitir registro de novos usuários |
EMBED_PROVIDER | ollama | ollama ou mistral |
EMBED_MODEL | nomic-embed-text | Nome do modelo de embedding |
EMBED_URL | http://localhost:11434 | URL base do Ollama |
MISTRAL_API_KEY | — | Obrigatório se EMBED_PROVIDER=mistral |
QDRANT_URL | http://qdrant:6333 | URL da instância Qdrant |
SQLITE_PATH | /data/memoraeu.db | Caminho do banco de dados SQLite |
MCP_ALLOWED_HOSTS | localhost,127.0.0.1,localhost:8000,127.0.0.1:8000 | Hosts aceitos em /mcp/ (proteção contra DNS rebinding). Adicione seu próprio domínio se você expor o servidor, caso contrário as requisições são rejeitadas com 421. |
MCP_ALLOWED_ORIGINS | http://localhost,http://127.0.0.1,https://claude.ai | Origens aceitas em /mcp/. Um Origin ausente é aceito (chamadas servidor-a-servidor). |
Conecte seu cliente MCP
Claude Desktop / Cursor / Windsurf (Legacy SSE)
{
"mcpServers": {
"memoraeu": {
"url": "http://localhost:8000/mcp/sse",
"headers": { "Authorization": "Bearer YOUR_API_KEY" }
}
}
}
claude.ai (HTTP Streamable, requer URL pública + OAuth) Veja a documentação
Mistral AI (conectores beta — La Plateforme)
connector = client.beta.connectors.create(
name="memoraeu",
server="https://api.memoraeu.com/mcp/sse?token=meu-sk-••••",
)
⚠️ Beta — discovery e SSE testados, execução de ferramentas em implantação pela Mistral.
⚠️ Desde a 1.4.0, POST /mcp/sse não aceita mais o token como parâmetro de consulta. Se o seu conector usar o transporte HTTP Streamable, passe a chave via o cabeçalho Authorization: Bearer. O ?token= acima permanece válido apenas para o transporte SSE legado (GET /mcp/sse).
Por que MemoraEU?
| MemoraEU | Outros (ex: mem0) | |
|---|---|---|
| Open source | ✅ AGPL v3 | ✅ (core) |
| Hospedado na UE | ✅ OVH França | ❌ EUA |
| Zero-knowledge | ✅ AES-256-GCM no lado do cliente | ❌ |
| Auto-hospedável | ✅ Docker Compose | ✅ |
| MCP nativo | ✅ stdio + SSE + HTTP Streamable | ❌ |
| Conectores Mistral | ✅ compatível (beta) | |
| OAuth 2.0 PKCE | ✅ | ❌ |
| Grafo de conhecimento temporal | ✅ | ❌ |
| Endpoints GDPR | ✅ nativos | ⚠️ parcial |
Auto-hospedagem vs Cloud
| Auto-hospedado | MemoraEU Cloud | |
|---|---|---|
| Configuração | Docker Compose | Inscreva-se, pronto |
| Localização dos dados | Seu servidor | UE (OVH, França) |
| Embeddings | Ollama (local) | |
| Atualizações | Manuais | Automáticas |
| Preço | Gratuito (AGPL) |
Arquitetura
Claude Desktop / Claude Code claude.ai · Cursor · Windsurf · ChatGPT
│ │
│ stdio (MCP) memoraeu-mcp (uvx)
▼ │ OAuth 2.0 PKCE
memoraeu_mcp/main.py │
│ ▼
├── Mistral API ←── local embeddings api/main.py (FastAPI)
│ (before encryption)
│ HTTP + Bearer token ├── POST /mcp/sse ← HTTP Streamable
│ [AES-256-GCM ciphertext + vector] ├── GET /mcp/sse ← SSE legacy
▼ ├── /oauth/* ← PKCE
api/main.py (FastAPI)
├── Qdrant ← vector search
├── SQLite (memories)
└── SQLite (facts)
Stack:
- FastAPI
- Qdrant — banco de dados vetorial (Docker)
- Mistral AI
- MCP
- SQLite — persistência de metadados
- AES-256-GCM + PBKDF2-SHA256 (210k iterações)
Fluxo zero-knowledge
| Variável | Função |
|---|---|
MEMORAEU_API_KEY | Autenticação HTTP — token Bearer enviado em cada requisição |
MEMORAEU_SECRET | Senha — entrada PBKDF2 para derivar a chave AES localmente |
MEMORAEU_SALT | Salt KDF por conta, gerado no registro |
MISTRAL_API_KEY | Chave Mistral no lado do cliente — embeddings calculados antes da criptografia |
remember()
plaintext
→ PBKDF2(SECRET, SALT, 210k)
→ Mistral embed(plaintext)
→ AES-256-GCM(plaintext, key)
→ POST /memories { ciphertext, vector } ← server only sees opaque blobs
Instalar como pacote Python
pip install memoraeu
Com os embeddings Mistral:
pip install "memoraeu[mistral]"
Conformidade GDPR
| Endpoint | Método | Descrição |
|---|---|---|
/gdpr/status | GET | Estatísticas dos dados armazenados |
/gdpr/export | GET | Exportação JSON completa (Art. 20) |
/gdpr/delete-account | DELETE | Purga irreversível Qdrant + SQLite (Art. 17) |
/me/gdpr-history | GET | Histórico de operações GDPR |
Log de administração filtrável por organização e data:
GET /gdpr/admin/log?org_id=...&date_from=YYYY-MM-DD
X-Admin-Key: <MEMORAEU_ADMIN_KEY>
Como funciona
Armazenar uma memória
Plaintext
→ [LOCAL] Mistral compresses if > 300 chars
→ [LOCAL] Mistral generates an embedding vector
→ [LOCAL] PBKDF2(SECRET, SALT, 210k iterations)
→ [LOCAL] AES-256-GCM(plaintext)
→ POST /memories { encrypted blob, vector }
→ [SERVER] vector similarity check → skip if > 94% duplicate
→ [SERVER] SQLite ← metadata | Qdrant ← vector
→ Server never sees plaintext. Ever.
Recuperar uma memória
Text query (e.g. "main project")
→ [LOCAL] Mistral generates query embedding
→ POST /memories/search { vector, limit: 3 }
→ [SERVER] Qdrant cosine similarity → top-N encrypted blobs
→ [LOCAL] AES-256-GCM decrypt → plaintext
→ Claude receives context. Server only ever saw a vector.
Memória automática (modo MCP stdio)
O servidor MCP é projetado para funcionar sem intervenção manual. As descrições das ferramentas recall e remember instruem o Claude a chamá-las automaticamente — recall na primeira mensagem de cada sessão, remember sempre que uma informação merecer ser retida. Na primeira chamada recall, o prompt de sistema completo é injetado no contexto do Claude.
Contribuindo
MemoraEU é open source (AGPL v3)
git clone https://github.com/pquattro/memoraeu-server
cd memoraeu-server
python -m venv .venv && source .venv/bin/activate
pip install -e .
cp .env.example .env # configure your local .env
uvicorn api.main:app --reload
Por favor, mantenha os PRs focados — um recurso ou correção por PR.
- 🐛 Abra um problema
- 💬 Inicie uma discussão
- 📖 Leia a documentação da API
- ☁️ Experimente a nuvem gerenciada
Áreas onde a ajuda é mais bem-vinda: SDK JavaScript/TypeScript, aplicativo móvel, integrações adicionais de clientes MCP, traduções.
Licença
AGPL-3.0 — Copyright (C)
Se você executar uma versão modificada como um serviço de rede, deve disponibilizar o código-fonte aos seus usuários.