memex-mcp

Sistema de continuidade de contexto para desenvolvedores que constrói um grafo de conhecimento temporal do seu código — módulos, símbolos, decisões e problemas em aberto — e o disponibiliza para agentes de IA de codificação por meio de 12 ferramentas MCP, para que cada sessão do agente comece conhecendo sua arquitetura sem necessidade de colagem manual de contexto.

Documentação

memex — memória de grafo temporal para agentes de codificação de IA

Memória persistente e contexto de código para agentes de codificação de IA, servidos via MCP. Um grafo de conhecimento bitemporal do seu repositório — módulos, símbolos, decisões, problemas — para Claude Code, Cursor, Codex, Gemini CLI e qualquer agente compatível com MCP.

Um daemon e servidor MCP que transforma cada commit e cada alteração de arquivo em estado de grafo estruturado: módulos, símbolos, decisões, problemas, fatos de lockfile. Sessões param de começar às cegas. Agentes param de redescobrir o mesmo refactor toda vez que você /clear.

PyPI PyPI downloads npm npm downloads Claude Code marketplace memex MCP server GitHub stars Tests CodeQL OpenSSF Scorecard License: MIT

memex — temporal knowledge graph MCP server for AI coding agents, built on Graphiti and Neo4j

flowchart LR
    A[Your repository<br/>files + git] --> B[memex watcher<br/>tree-sitter + Gemini]
    B --> C[Neo4j graph<br/>bitemporal facts]
    C --> D[MCP server<br/>stdio / HTTP]
    D --> E[AI agent<br/>Claude · Cursor · Codex · Gemini CLI]
    E -.->|writes decisions back| C

    style B fill:#cfe8ff,stroke:#0066cc,color:#000
    style C fill:#fff4cf,stroke:#cc9900,color:#000
    style E fill:#d4f5d4,stroke:#2d8f2d,color:#000

Instalação

Via marketplace do Claude Code

/plugin marketplace add STiFLeR7/claude-plugins
/plugin install memex-mcp@stifler-marketplace

Reinicie sua sessão do Claude Code.

Manual

docker compose -f docker/docker-compose.yml up -d
cat > .env <<EOF
NEO4J_URI=bolt://localhost:7687
NEO4J_USER=neo4j
NEO4J_PASSWORD=memex-local
GEMINI_API_KEY=your-key-here
EOF
npx stifler-memex-mcp init --repo .
npx stifler-memex-mcp watch --repo .
npx stifler-memex-mcp serve --repo .
CanalComando
Marketplace do Claude Code/plugin install memex-mcp@stifler-marketplace
npx (sem instalação)npx stifler-memex-mcp <cmd>
uvuv add memex-mcp
pippip install memex-mcp
fontegit clone github.com/STiFLeR7/memex && uv sync

Implantação de equipe auto-hospedada

Para uma configuração de equipe compartilhada (um Neo4j + um memex-server, autenticação ativada por padrão, portas do Neo4j nunca expostas ao host):

bash docker/bootstrap-team-env.sh
docker compose -f docker/docker-compose.team.yml up -d

Veja docker/TEAM-DEPLOY.md para o fluxo completo, capturando a chave de administrador inicial e a armadilha down -v a evitar.

De relance

PropriedadeValor
SaídaUm grafo Neo4j populado continuamente a partir do seu repositório
ArmazenamentoNeo4j via Graphiti. Bitemporal — cada aresta tem created_at e expired_at opcional
Sobrevive a/clear, travamentos de terminal, reinicializações de máquina, transferências entre colegas
Entrega paraClaude Code, Cursor, Codex, Gemini CLI, qualquer cliente MCP
GranularidadeEscala de 50 a 5000+ módulos via clusters hierárquicos Leiden
SínteseGemini Flash destila commits em nós Decision; Pro para síntese fundamentada
ConfiançaCalculada no momento da consulta. Decaimento em dois regimes (meia-vida validada ~139d, não validada obsoleta em 30d)
Governança de escritaACL por tipo de nó, confirmação de intenção em escritas de agente, semântica explícita de corroborates / supersedes
Testes333 passando, ~93% de cobertura

O ciclo de vida

flowchart TD
    Init[memex init<br/>extract baseline] --> Watch[memex watch<br/>daemon + git hooks]
    Watch -->|commit| Extract[tree-sitter extract<br/>symbols, imports, lockfile]
    Extract --> Synth[Gemini Flash<br/>diff → Decision nodes]
    Synth --> Write[Graphiti add_episode<br/>+ post-hoc bitemporal SET]
    Write --> Decay[Scheduler<br/>nightly confidence decay]
    Decay -->|stale edges| Archive[expired_at = now]

    Serve[memex serve<br/>MCP stdio/HTTP] -.->|reads| Write
    Agent[AI agent] -->|14 MCP tools| Serve
    Serve -->|record_decision / record_problem| Write

    Cluster[memex cluster<br/>Leiden over hybrid edges] -.->|every N commits| Write

    style Init fill:#e8f4ff,color:#000
    style Watch fill:#fff4cf,color:#000
    style Synth fill:#ffe0cc,color:#000
    style Serve fill:#d4f5d4,color:#000

Ferramentas MCP

14 ferramentas — oito de leitura, quatro de escrita, duas analíticas.

Leitura

FerramentaQuando
get_project_contextInício de sessão. Retorna um briefing em nível de cluster abaixo de 1500 tokens, independentemente do tamanho do repositório
get_symbol_contextAntes de editar uma função ou classe. Retorna chamadores, chamados e decisões vinculadas
get_recent_decisionsÚltimos N dias de decisões arquiteturais, opcionalmente com escopo de módulo
get_open_problemsBugs ativos e dívida técnica, ordenados por severidade
search_contextBusca híbrida: semântica × palavra-chave × travessia de grafo × fusão RRF
get_stale_contextArestas cuja confiança composta caiu abaixo do limite
explain_changeDado um SHA de commit, cruza o diff com nós vinculados de Decisão/Problema e pede ao Gemini Pro uma explicação fundamentada
predict_impactDado um caminho de arquivo, retorna uma lista classificada de módulos provavelmente afetados com base no acoplamento do grafo (sem chamada de LLM)

Escrita

FerramentaQuando
record_decisionApós fazer uma escolha técnica. Suporta corroborates (reforçar) e supersedes (substituir)
record_problemAo descobrir um bug ou um pedaço de dívida técnica
resolve_problemQuando um problema rastreado é corrigido
invalidate_edgeQuando um fato armazenado não é mais verdadeiro

Confiança bitemporal

A confiança não é um número armazenado que muda. Ela é calculada no momento da consulta a partir de base_confidence, status de validação, tempo desde o último reforço e contagem de acessos.

flowchart LR
    Edge[Edge created<br/>base_confidence] --> Q{Validated by<br/>a human?}
    Q -->|yes| Slow[Slow regime<br/>half-life ~139d]
    Q -->|no| Fast[Fast regime<br/>stale at exactly 30d]
    Slow --> Score[Composite score<br/>conf × recency × rehearsal]
    Fast --> Score
    Score -->|below floor| Stale[get_stale_context surfaces it]
    Score -->|access| Bump[last_reinforced_at updated]
    Bump --> Score

    style Slow fill:#d4f5d4,color:#000
    style Fast fill:#ffd4d4,color:#000
PropriedadeValor
Meia-vida validada~139 dias
Limite de obsolescência não validada30 dias (composta < 0,3)
Recência τ90 dias (decaimento exponencial)
Fórmula compostaconf × recency × (1 + rehearsal_w × log(1 + access_count))
Limite de similaridade de conflito0,4 (abaixo disso + validade sobreposta = conflito)
Limite de confirmação de intenção0,85 (verificação de similaridade de escrita MCP)

Clusters hierárquicos

memex cluster executa Leiden hierárquico sobre um grafo de arestas híbrido:

Tipo de arestaPeso
Colocalização de diretório1,0
Importações de módulo2,0
Chamadas de símbololog(1 + calls)
PropriedadeValor
Algoritmograspologic.partition.hierarchical_leiden com semente fixa
NomenclaturaTF-IDF top-3 sobre docstrings de módulo + nomes de símbolos, fallback de diretório pai
Fixação de IDJaccard ≥ 0,5 entre execuções (nomes de cluster permanecem estáveis através de renomeações)
Substituições do usuário.memex/clusters.yaml — qualquer atribuição pode ser bloqueada
Orçamento de contextoget_project_context permanece abaixo de 1500 tokens, quer seu repositório tenha 50 ou 5000 módulos

Meça suas economias

O memex rastreia métricas de redução de tokens e ações de revisão humana localmente em um banco de dados SQLite (~/.config/memex/telemetry.db).

Você pode consultar suas economias a qualquer momento usando a CLI:

memex stats

Ou visualizar o payload JSON bruto:

memex stats --json

Ou direcionar um escopo específico de repositório:

memex stats --repo /path/to/repo

Isso retorna uma agregação de:

  • Resumos de período: Chamadas, tokens retornados, tokens ingênuos (tamanho dos arquivos solicitados), tokens economizados e porcentagem de redução de tokens em today, last 7 days, last 30 days e lifetime.
  • Principais ferramentas: As ferramentas mais valiosas ordenadas por total de tokens economizados.
  • Clientes de agente: Agentes ativos (Claude Code, Gemini CLI, Cursor, Codex) e sua distribuição de economia de tokens.
  • Saúde de validação: Total de nós validados, não validados e corroborados, juntamente com os dias decorridos desde a última revisão.

As mesmas estatísticas são expostas via transporte HTTP MCP:

GET /stats?repo=/path/to/repo
Authorization: Bearer <your-key>

Conecte seu agente

Claude Code

A instalação via marketplace acima faz isso por você. Conexão manual em .claude/settings.json:

{
  "mcpServers": {
    "memex": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "stifler-memex-mcp", "serve", "--repo", "."]
    }
  }
}
Cursor

Adicione a ~/.cursor/mcp.json:

{
  "mcpServers": {
    "memex": {
      "command": "npx",
      "args": ["-y", "stifler-memex-mcp", "serve", "--repo", "."]
    }
  }
}
Gemini CLI

Adicione a ~/.gemini/settings.json:

{
  "mcpServers": {
    "memex": {
      "command": "npx",
      "args": ["-y", "stifler-memex-mcp", "serve", "--repo", "."]
    }
  }
}
Codex

Adicione a ~/.codex/config.toml:

[mcp_servers.memex]
command = "npx"
args = ["-y", "stifler-memex-mcp", "serve", "--repo", "."]
Ferramenta de memória do Anthropic (memory_20250818)

O memex pode dar suporte à ferramenta de memória nativa do Claude — agentes leem de uma projeção de grafo por sessão mais uma zona de rascunho gravável.

memex memory-tool serve --repo .                     # in-process
memex memory-tool serve --repo . --transport http    # FastAPI on :7464
from memex.memory_tool import MemexAsyncMemoryTool
memory_tool = MemexAsyncMemoryTool(repo_root=".")
client.beta.messages.run_tools(..., tools=[memory_tool])

Princípios operacionais

#PrincípioA aposta
1Bitemporal, nunca destrutivoArestas são expiradas, não excluídas. WHERE r.expired_at IS NULL filtra o estado ativo
2Confiança é calculada, não armazenadaMutar um número convida à deriva silenciosa. Recalcule a cada leitura
3Dois regimes para decaimentoFatos validados decaem lentamente; fatos não validados devem ganhar seu lugar sendo acessados
4Humano no circuitomemex review enfileira nós de Decisão de menor confiança para validação explícita
5Governança de escritaACL por tipo de nó. Decision.policy = open, Module.policy = locked. Confirmação de intenção em escritas de conteúdo semelhante
6Tokens são orçadosget_project_context permanece abaixo de 1500 tokens em qualquer tamanho de repositório via clusters Leiden
7Síntese apenas em commitsO watcher agrupa por janela de debounce. Gemini Flash não está no caminho crítico de uma chamada de ferramenta
8Pro para síntese, Flash para extraçãoexplain_change usa Pro porque a fundamentação importa. Todo o resto usa Flash
9Ciente de múltiplos repositóriosUm watcher + um servidor MCP podem gerenciar centenas de repositórios. --repo alterna o escopo
10Local-firstNeo4j roda no seu Docker. Gemini é a única chamada de saída, e apenas em commits

Quando usar o memex

Use quandoPule quando
Projeto de várias semanas ou mesesScript de uso único, protótipo descartável
Você trabalha com vários agentes (Claude, Cursor, Codex) e quer contexto compartilhadoVocê só trabalha com um agente em uma tarefa
Decisões arquiteturais são tomadas ao longo do tempo e precisam ser lembradasO projeto inteiro cabe em uma única janela de contexto de 200k tokens
Você quer consultar "o que decidimos sobre X" de qualquer sessãoSeu repositório já é pequeno o suficiente para colar no prompt
Vários desenvolvedores usando agentes de IA no mesmo códigoTrabalho solo onde você nunca /clear

Estrutura do projeto

memex/
├── memex/
│   ├── extractor/        tree-sitter + lockfile parsers
│   ├── graph/            Neo4j writes, confidence, archive, cluster engine
│   ├── synthesizer/      Gemini Flash → Decision nodes
│   ├── mcp_server/       14 MCP tools (read + write + analytic)
│   ├── memory_tool/      Anthropic memory_20250818 adapter
│   ├── watcher/          daemon + git hooks
│   └── cli.py            init / watch / serve / review / graph / cluster
├── tests/                333 passing, ~93% coverage
├── docker/               Neo4j compose
├── npm/                  npx wrapper (publishes as stifler-memex-mcp)
└── Dockerfile            introspection-only image for MCP directory sandboxes

Comandos

ComandoO que faz
memex initExtrai o estado base do grafo, executa a primeira passada de cluster
memex watchDaemon que escuta eventos de arquivo + git e escreve no Neo4j
memex serveExecuta o servidor MCP (stdio, HTTP ou ambos)
memex reviewTUI que percorre decisões de menor confiança para validação humana
memex graph --output graph.htmlLayout de força D3 autocontido com sobreposições de cluster
memex cluster [--rerun] [--dry-run]Executa Leiden sobre o grafo de arestas híbrido; fixa IDs de cluster por Jaccard ≥ 0,5
memex memory-tool serveDá suporte à ferramenta memory_20250818 do Anthropic com uma projeção de grafo
memex stats [--json] [--repo <path>]Mostra economias de tokens de contexto e estatísticas de telemetria

Licença

MIT. Veja LICENSE.

Autor

Hill Patel (@STiFLeR7)

Principais contribuidores e mantenedores

  • Hill Patel (@STiFLeR7) — arquiteto, mantenedor
  • Nirvaan Lagishetty (@Nirvaan05) — contribuidor principal, mantenedor

Contribuindo

Abra uma issue ou PR. uv sync --all-extras && uv run pytest tests/ é toda a configuração que você precisa para executar a suíte. Bumps de versão devem atualizar ambos pyproject.toml e npm/package.json e eles devem concordar.

Vannevar Bush, 1945: "Considere um dispositivo futuro para uso individual, que é uma espécie de arquivo e biblioteca privada mecanizada. Ele precisa de um nome, e para cunhar um aleatoriamente, memex servirá."