Memlord

oficial

Servidor de memória MCP auto-hospedado para uso pessoal e equipes

O que você pode fazer com Memlord MCP?

  • Armazenar uma memória com tipo e tags — Salve fatos, preferências, instruções ou feedback usando store_memory, com detecção automática de quase duplicatas.
  • Pesquisar memórias com recuperação híbrida — Use retrieve_memory para encontrar memórias por meio da combinação de busca em texto completo BM25 e busca vetorial semântica.
  • Recuperar memórias por expressão de tempo — Encontre memórias usando consultas de tempo em linguagem natural, como "semana passada" ou "ontem", com recall_memory.
  • Listar e filtrar memórias — Navegue por memórias por tipo ou tag com list_memories, ou combine tags com lógica AND/OR via search_by_tag.
  • Obter conteúdo completo da memória sob demanda — Busque uma memória completa pelo nome com get_memory quando precisar de detalhes além dos trechos da pesquisa.
  • Atualizar, excluir ou mover memórias — Modifique conteúdo, tags ou expiração com update_memory, remova com delete_memory ou realoque entre espaços de trabalho com move_memory.

Documentação

Servidor de memória MCP auto-hospedado com busca híbrida BM25 + semântica, com PostgreSQL +
pgvector

Servidor de memória MCP auto-hospedado para uso pessoal e equipes

License Python Version MCP Ruff MCP score

Início RápidoComo FuncionaFerramentas MCPConfiguraçãoRequisitosLicença


✨ Funcionalidades

  • 🔍 Busca híbrida — BM25 (texto completo) + KNN vetorial (pgvector) fundidos via Reciprocal Rank Fusion
  • 📂 Multiusuário — cada usuário vê apenas suas próprias memórias; espaços de trabalho para conhecimento compartilhado da equipe
  • 🛠️ 10 ferramentas MCP — armazenar, recuperar, recordar, listar, buscar por tag, obter, atualizar, excluir, mover, listar espaços de trabalho
  • 🌐 Interface Web — navegue, busque, edite e exclua memórias no navegador; exportar/importar JSON
  • 🔒 OAuth 2.1 — servidor de autorização completo em processo, sempre ativo
  • 🐘 PostgreSQL — pgvector para embeddings, tsvector para busca de texto completo
  • 📊 Divulgação progressiva — a busca retorna trechos compactos por padrão; chame get_memory(name) apenas para o que você precisa, reduzindo o uso de tokens
  • 🔁 Deduplicação — detecta automaticamente memórias quase idênticas antes de salvar, prevenindo acúmulo de ruído

🆚 Como o Memlord se compara

MemlordOpenMemorymcp-memory-servicebasic-memory
BuscaBM25 + vetorial + RRFApenas vetorial (Qdrant)BM25 + vetorial + RRFBM25 + vetorial
EmbeddingsONNX local, configuração zeroOpenAI padrão; Ollama opcionalONNX local, configuração zeroFastEmbed local
ArmazenamentoPostgreSQL + pgvectorPostgreSQL + QdrantSQLite-vec / Cloudflare VectorizeSQLite + arquivos Markdown
Multiusuário❌ usuário único na prática⚠️ escopo por agent-ID, sem isolamento
Espaços de trabalho✅ compartilhado + pessoal, links de convite⚠️ Namespace "Apps"⚠️ tags + conversation_id✅ flag por projeto
Autenticação✅ OAuth 2.1❌ nenhuma (auto-hospedado)✅ OAuth 2.0 + PKCE
Interface Web✅ navegar, editar, exportar✅ painel Next.js✅ interface rica, visualização de grafo, pontuações de qualidade❌ local; apenas nuvem
Ferramentas MCP10515+~20
Auto-hospedado✅ processo único✅ Docker (3 contêineres)
Entrada de memóriaManual (armazenamento explícito)Extração automática por LLMManualManual (notas Markdown)
Tipos de memóriafato / preferência / instrução / feedbackfatos extraídos automaticamenteobservações + links wiki
Busca temporal✅ datas em linguagem natural⚠️ apenas REST, não nas ferramentas MCP✅ recent_activity
Eficiência de tokens✅ divulgação progressiva✅ build_context traversal
Importar / Exportar✅ JSON✅ ZIP (JSON + JSONL)✅ Markdown (legível por humanos)
LicençaAGPL-3.0 / ComercialApache 2.0Apache 2.0AGPL-3.0

Onde os concorrentes têm uma vantagem real:

  • OpenMemory — extrai memórias automaticamente de texto de conversa bruto; sem necessidade de decidir o que armazenar manualmente; boa importação/exportação
  • mcp-memory-service — interface web mais rica (visualização de grafo, pontuação de qualidade, 8 abas); licença mais permissiva (Apache 2.0); múltiplas opções de transporte (stdio, SSE, HTTP)
  • basic-memory — memórias são arquivos Markdown legíveis por humanos que você pode editar, versionar e ler sem nenhum servidor; links de entidade estilo wiki formam um grafo de conhecimento local; ~20 ferramentas MCP

Quando escolher o Memlord:

  • Você quer embeddings locais com configuração zero — o modelo ONNX vem com o servidor, sem necessidade de Ollama ou API externa
  • Você executa um servidor de equipe multiusuário com autenticação OAuth 2.1 adequada e espaços de trabalho baseados em convite
  • Você quer um banco de dados de nível de produção (PostgreSQL) que escala além do SQLite de uma única máquina
  • Você gerencia memórias explicitamente — armazena exatamente o que importa, tipado e etiquetado, não tudo o que o LLM decide extrair
  • Você quer uma Interface Web auto-hospedada com CRUD completo e exportação JSON, sem assinatura na nuvem

🚀 Início Rápido

🐳 Docker

cp .env.example .env
docker compose up

Servidor HTTP (multiusuário, 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

Abra http://localhost:8000 para a Interface Web. O endpoint MCP está em /mcp.


🔍 Como Funciona

Cada solicitação de busca executa BM25 e KNN vetorial em paralelo, depois mescla os resultados 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])

⚙️ Configuração

Todas as configurações usam o prefixo MEMLORD_. Veja .env.example para a lista completa.

VariávelPadrãoDescrição
MEMLORD_DB_URLpostgresql+asyncpg://postgres:postgres@localhost/memlordURL de conexão PostgreSQL
MEMLORD_PORT8000Porta do servidor
MEMLORD_BASE_URLhttp://localhost:8000URL pública para OAuth (modo HTTP)
MEMLORD_OAUTH_JWT_SECRETmemlord-dev-secret-please-changeSegredo de assinatura JWT (modo HTTP)

Defina MEMLORD_BASE_URL para sua URL pública e altere MEMLORD_OAUTH_JWT_SECRET antes de implantar.


🛠️ Ferramentas MCP

FerramentaDescrição
store_memorySalvar uma memória (idempotente por conteúdo); gera erro em quase duplicatas; expires_at opcional
retrieve_memoryBusca híbrida semântica + texto completo; retorna trechos por padrão
recall_memoryBuscar por expressão de tempo em linguagem natural; retorna trechos por padrão
list_memoriesLista paginada com filtros de tipo/tag
search_by_tagBusca de tags E/OU
get_memoryObter uma única memória por nome com conteúdo completo
update_memoryAtualizar conteúdo, tipo, tags, metadados ou expiração por nome (e opcionalmente renomear)
delete_memoryExcluir por nome
move_memoryMover uma memória para um espaço de trabalho diferente
list_workspacesListar espaços de trabalho dos quais você é membro (incluindo pessoal)

O gerenciamento de espaços de trabalho (criar, convidar, entrar, sair) é feito via Interface Web.


💻 Requisitos do Sistema

  • Python 3.12
  • PostgreSQL ≥ 15 com extensão pgvector
  • uv — Gerenciador de pacotes Python

👨‍💻 Desenvolvimento

pyright src/           # type check
ruff format .          # format
pytest                 # run tests
alembic-autogen-check  # verify migrations are up to date

📄 Licença

Memlord é licenciado duplamente: