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

PyPI memoraeu-mcp PyPI memoraeu License: AGPL v3 Python 3.11+ MCP compatible smithery badge Hosted in EU


🇫🇷 Francês · 🇬🇧 Inglês


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ávelPadrãoDescrição
JWT_SECRETObrigatório. Mínimo de 32 caracteres.
REGISTRATION_OPENtruePermitir novos registros de usuários
EMBED_PROVIDERollamaollama ou mistral
EMBED_MODELnomic-embed-textNome do modelo de embedding
EMBED_URLhttp://localhost:11434URL base do Ollama
MISTRAL_API_KEYObrigatório se EMBED_PROVIDER=mistral
QDRANT_URLhttp://qdrant:6333URL da instância Qdrant
SQLITE_PATH/data/memoraeu.dbCaminho do banco de dados SQLite
MCP_ALLOWED_HOSTSlocalhost,127.0.0.1,localhost:8000,127.0.0.1:8000Hosts 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_ORIGINShttp://localhost,http://127.0.0.1,https://claude.aiOrigens 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?

MemoraEUOutros (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-hospedadoMemoraEU Cloud
InstalaçãoDocker ComposeInscrição, só isso
Localização dos dadosSeu servidorUE (OVH, França)
EmbeddingsOllama (local)
AtualizaçõesManuaisAutomáticas
PreçoGratuito (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ávelFunção
MEMORAEU_API_KEYAutenticação HTTP — token Bearer enviado em cada requisição
MEMORAEU_SECRETSenha — entrada PBKDF2 para derivar a chave AES localmente
MEMORAEU_SALTSalt KDF único por conta, gerado no registro
MISTRAL_API_KEYChave 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

EndpointMétodoDescrição
/gdpr/statusGETEstatísticas dos dados armazenados
/gdpr/exportGETExportação JSON completa (Art. 20)
/gdpr/delete-accountDELETEPurga irreversível Qdrant + SQLite (Art. 17)
/me/gdpr-historyGETHistó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…) smithery badge

  • 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ávelPadrãoDescrição
JWT_SECRETObrigatório. Mínimo de 32 caracteres.
REGISTRATION_OPENtruePermitir registro de novos usuários
EMBED_PROVIDERollamaollama ou mistral
EMBED_MODELnomic-embed-textNome do modelo de embedding
EMBED_URLhttp://localhost:11434URL base do Ollama
MISTRAL_API_KEYObrigatório se EMBED_PROVIDER=mistral
QDRANT_URLhttp://qdrant:6333URL da instância Qdrant
SQLITE_PATH/data/memoraeu.dbCaminho do banco de dados SQLite
MCP_ALLOWED_HOSTSlocalhost,127.0.0.1,localhost:8000,127.0.0.1:8000Hosts 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_ORIGINShttp://localhost,http://127.0.0.1,https://claude.aiOrigens 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?

MemoraEUOutros (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-hospedadoMemoraEU Cloud
ConfiguraçãoDocker ComposeInscreva-se, pronto
Localização dos dadosSeu servidorUE (OVH, França)
EmbeddingsOllama (local)
AtualizaçõesManuaisAutomáticas
PreçoGratuito (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ávelFunção
MEMORAEU_API_KEYAutenticação HTTP — token Bearer enviado em cada requisição
MEMORAEU_SECRETSenha — entrada PBKDF2 para derivar a chave AES localmente
MEMORAEU_SALTSalt KDF por conta, gerado no registro
MISTRAL_API_KEYChave 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

EndpointMétodoDescrição
/gdpr/statusGETEstatísticas dos dados armazenados
/gdpr/exportGETExportação JSON completa (Art. 20)
/gdpr/delete-accountDELETEPurga irreversível Qdrant + SQLite (Art. 17)
/me/gdpr-historyGETHistó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.

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