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 — contexto de engenharia confiável para engenharia de software agêntica
Uma camada de contexto de engenharia neutra em protocolo para agentes de codificação de IA. memex constrói um grafo de conhecimento bitemporal do seu repositório — módulos, símbolos, decisões, problemas, evidências e evolução de código — e expõe contexto limitado, com consciência de proveniência através do Hermes MemoryProvider ou MCP.
Um daemon e servidor MCP que transforma commits e alterações de arquivos em conhecimento de engenharia estruturado. Agentes podem receber contexto relevante do repositório antes de uma tarefa, com frescor e proveniência preservados, sem tornar o memex uma fonte de memória pessoal ou estado bruto de sessão.

flowchart LR
A[Your repository<br/>files + git] --> B[memex watcher<br/>tree-sitter + Gemini]
B --> C[Neo4j graph<br/>bitemporal facts]
C --> D[memex core<br/>ContextPacket selection]
D --> E[Hermes MemoryProvider<br/>automatic read-only prefetch]
D --> F[MCP fallback<br/>explicit lookup]
E --> G[AI coding agent]
F --> G
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 .
Integração com Hermes
A integração Hermes v0.9 é somente leitura. Hermes retém memória pessoal, estado bruto
de sessão e estado de execução. memex fornece contexto de engenharia do repositório
através de um ContextPacket limitado; ele não ingere state.db do Hermes,
transcrições, prompts ou resultados de ferramentas.
Adicione o provedor memex à configuração de perfil do Hermes:
memory:
provider: memex
plugins:
memex:
repo_path: /absolute/path/to/repository
prefetch_timeout_seconds: 7
max_items: 8
max_chars: 12000
Se o Hermes não estiver instalado, use o mesmo seletor de contexto através da ferramenta
get_engineering_context do MCP. Ambos os caminhos compartilham o núcleo memex neutro em
protocolo e falham abertamente quando a recuperação não está disponível.
| Canal | Comando |
|---|---|
| Marketplace do Claude Code | /plugin install memex-mcp@stifler-marketplace |
| npx (sem instalação) | npx stifler-memex-mcp <cmd> |
| uv | uv add memex-mcp |
| pip | pip install memex-mcp |
| fonte | git 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 o problema down -v a evitar.
De relance
| Propriedade | Valor |
|---|---|
| Saída | Um grafo Neo4j populado continuamente a partir do seu repositório |
| Armazenamento | Neo4j via Graphiti. Bitemporal — cada aresta tem created_at e expired_at opcional |
| Contexto | ContextPacket limitado, classificado, com consciência de proveniência |
| Integrações | Hermes MemoryProvider, recursos/ferramentas MCP, Claude Code, Cursor, Codex, Gemini CLI |
| Modo de falha | Falha aberta; a execução do agente continua sem memex |
| Granularidade | Escala de 50 a 5000+ módulos via clusters hierárquicos Leiden |
| Síntese | Gemini Flash destila commits em nós Decision; Pro para síntese fundamentada |
| Confiança | Calculada no momento da consulta. Decaimento de dois regimes (meia-vida validada ~139d, não validada obsoleta em 30d) |
| Governança de escrita | ACL por tipo de nó, confirmação de intenção em escritas de agente, semântica explícita de corroborates / supersedes |
| Evidência da Meta 10 | 8/8 execuções pareadas válidas, 0 falhas de tratamento, 0 regressões de tratamento |
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
| Ferramenta | Quando |
|---|---|
get_project_context | Início da sessão. Retorna um briefing em nível de cluster abaixo de 1500 tokens independentemente do tamanho do repositório |
get_symbol_context | Antes de editar uma função ou classe. Retorna chamadores, chamados, decisões vinculadas |
get_recent_decisions | Últimos N dias de decisões arquiteturais, opcionalmente com escopo de módulo |
get_open_problems | Bugs ativos e dívida técnica, ordenados por severidade |
search_context | Busca híbrida: semântica × palavra-chave × travessia de grafo × mesclagem RRF |
get_stale_context | Arestas cuja confiança composta caiu abaixo do limite |
explain_change | Dado 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_impact | Dado um caminho de arquivo, retorna uma lista classificada de módulos provavelmente afetados com base no acoplamento do grafo (sem chamada LLM) |
Escrita
| Ferramenta | Quando |
|---|---|
record_decision | Após fazer uma escolha técnica. Suporta corroborates (reforçar) e supersedes (substituir) |
record_problem | Ao descobrir um bug ou um pedaço de dívida técnica |
resolve_problem | Quando um problema rastreado é corrigido |
invalidate_edge | Quando um fato armazenado não é mais verdadeiro |
Confiança bitemporal
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
| Propriedade | Valor |
|---|---|
| Meia-vida validada | ~139 dias |
| Limite de obsolescência não validada | 30 dias (composto < 0,3) |
| τ de recência | 90 dias (decaimento exponencial) |
| Fórmula composta | conf × recency × (1 + rehearsal_w × log(1 + access_count)) |
| Limite de similaridade de conflito | 0,4 (abaixo disso + validade sobreposta = conflito) |
| Limite de confirmação de intenção | 0,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 aresta | Peso |
|---|---|
| Colocalização de diretório | 1,0 |
| Importações de módulo | 2,0 |
| Chamadas de símbolo | log(1 + calls) |
| Propriedade | Valor |
|---|---|
| Algoritmo | graspologic.partition.hierarchical_leiden com semente fixa |
| Nomenclatura | TF-IDF top-3 sobre docstrings de módulo + nomes de símbolo, fallback de diretório pai |
| Fixação de ID | Jaccard ≥ 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 contexto | get_project_context permanece abaixo de 1500 tokens, quer seu repositório tenha 50 ou 5000 módulos |
Meça suas economias
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 dayselifetime. - 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 Anthropic (memory_20250818)
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ípio | A aposta |
|---|---|---|
| 1 | Bitemporal, nunca destrutivo | Arestas são expiradas, não excluídas. WHERE r.expired_at IS NULL filtra o estado ativo |
| 2 | Confiança é calculada, não armazenada | Mutar um número convida à deriva silenciosa. Recalcule a cada leitura |
| 3 | Dois regimes para decaimento | Fatos validados decaem lentamente; fatos não validados devem ganhar seu lugar sendo acessados |
| 4 | Humano no circuito | memex review enfileira nós de Decisão de menor confiança para validação explícita |
| 5 | Governança de escrita | ACL por tipo de nó. Decision.policy = open, Module.policy = locked. Confirmação de intenção em escritas de conteúdo similar |
| 6 | Tokens são orçados | get_project_context permanece abaixo de 1500 tokens em qualquer tamanho de repositório via clusters Leiden |
| 7 | Síntese apenas em commits | O observador agrupa por janela de debounce. Gemini Flash não está no caminho crítico de uma chamada de ferramenta |
| 8 | Pro para síntese, Flash para extração | explain_change usa Pro porque a fundamentação importa. Todo o resto usa Flash |
| 9 | Consciente de múltiplos repositórios | Um observador + um servidor MCP podem gerenciar centenas de repositórios. --repo alterna o escopo |
| 10 | Local primeiro | Neo4j roda no seu Docker. Gemini é a única chamada de saída, e apenas em commits |
Quando usar memex
| Use quando | Pule quando |
|---|---|
| Projeto de várias semanas ou meses | Script de uso único, protótipo descartável |
| Você trabalha com múltiplos agentes (Claude, Cursor, Codex) e quer contexto compartilhado | Você só pareia com um agente em uma tarefa |
| Decisões arquiteturais são tomadas ao longo do tempo e precisam ser lembradas | O projeto inteiro cabe em uma única janela de contexto de 200k tokens |
| Você quer consultar "o que decidimos sobre X" de qualquer sessão | Seu repositório já é pequeno o suficiente para colar no prompt |
| Múltiplos desenvolvedores usando agentes de IA no mesmo código | Trabalho 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/ unit, integration, and objective evaluation suites
├── docker/ Neo4j compose
├── npm/ npx wrapper (publishes as stifler-memex-mcp)
└── Dockerfile introspection-only image for MCP directory sandboxes
Comandos
| Comando | O que faz |
|---|---|
memex init | Extrai o estado base do grafo, executa a primeira passada de cluster |
memex watch | Daemon que escuta eventos de arquivo + git e escreve no Neo4j |
memex serve | Executa o servidor MCP (stdio, HTTP ou ambos) |
memex review | TUI que percorre decisões de menor confiança para validação humana |
memex graph --output graph.html | Layout 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 serve | Dá suporte à ferramenta memory_20250818 da 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 instala o toolchain de desenvolvimento.
Execute uv run pytest -m "not integration" para a suíte offline e uv run ruff check . before opening a PR. Version bumps must update pyproject.toml,
npm/package.json, server.json e a tag da imagem Docker da equipe juntos.
O registro da versão v0.9 está em CHANGELOG.md, com a
arquitetura e evidências de avaliação sob docs/architecture/v0.9/.
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á."