memex-mcp

Sistema de continuidad de contexto para desarrolladores que construye un grafo de conocimiento temporal de tu base de código — módulos, símbolos, decisiones y problemas abiertos — y lo sirve a agentes de codificación de IA a través de 12 herramientas MCP, para que cada sesión de agente comience conociendo tu arquitectura sin necesidad de pegar contexto manualmente.

Documentación

memex — memoria de grafo de conocimiento temporal para agentes de codificación de IA

Memoria persistente y contexto del codebase para agentes de codificación de IA, servidos a través de MCP. Un grafo de conocimiento bitemporal de tu repositorio — módulos, símbolos, decisiones, problemas — para Claude Code, Cursor, Codex, Gemini CLI, y cualquier agente compatible con MCP.

Un demonio y servidor MCP que convierte cada commit y cada cambio de archivo en estado de grafo estructurado: módulos, símbolos, decisiones, problemas, hechos de lockfile. Las sesiones dejan de empezar a ciegas. Los agentes dejan de redescubrir la misma refactorización cada vez que /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

Instalación

A través del marketplace de Claude Code

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

Reinicia tu sesión de 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 de Claude Code/plugin install memex-mcp@stifler-marketplace
npx (sin instalación)npx stifler-memex-mcp <cmd>
uvuv add memex-mcp
pippip install memex-mcp
fuentegit clone github.com/STiFLeR7/memex && uv sync

Despliegue de equipo autogestionado

Para una configuración de equipo compartido (un Neo4j + un servidor memex, autenticación activada por defecto, los puertos de Neo4j nunca expuestos al host):

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

Consulta docker/TEAM-DEPLOY.md para el flujo completo, capturando la clave de administrador inicial, y la down -v trampa a evitar.

De un vistazo

PropiedadValor
SalidaUn grafo Neo4j poblado continuamente desde tu repositorio
AlmacenamientoNeo4j vía Graphiti. Bitemporal — cada arista tiene created_at y opcionalmente expired_at
Sobrevive a/clear, caídas de terminal, reinicios de máquina, transferencias entre compañeros
Se entrega aClaude Code, Cursor, Codex, Gemini CLI, cualquier cliente MCP
GranularidadEscala de 50 a 5000+ módulos mediante clústeres jerárquicos de Leiden
SíntesisGemini Flash destila commits en nodos de Decision; Pro para síntesis fundamentada
ConfianzaCalculada en tiempo de consulta. Decaimiento en dos regímenes (vida media validada ~139d, no validado obsoleto a los 30d)
Gobernanza de escrituraACL por tipo de nodo, confirmación de intención en escrituras de agentes, semánticas explícitas de corroborates / supersedes
Pruebas333 pasando, ~93% de cobertura

El 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

Herramientas MCP

14 herramientas — ocho de lectura, cuatro de escritura, dos analíticas.

Lectura

HerramientaCuándo
get_project_contextInicio de sesión. Devuelve un informe a nivel de clúster de menos de 1500 tokens sin importar el tamaño del repositorio
get_symbol_contextAntes de editar una función o clase. Devuelve llamadores, llamados, decisiones vinculadas
get_recent_decisionsÚltimos N días de decisiones arquitectónicas, opcionalmente limitado por módulo
get_open_problemsBugs activos y deuda técnica, ordenados por severidad
search_contextBúsqueda híbrida: semántica × palabra clave × recorrido de grafo × fusión RRF
get_stale_contextAristas cuya confianza compuesta cayó por debajo del umbral
explain_changeDado un SHA de commit, cruza el diff con los nodos de Decisión/Problema vinculados y pide a Gemini Pro una explicación fundamentada
predict_impactDada una ruta de archivo, devuelve una lista clasificada de módulos probablemente afectados según el acoplamiento del grafo (sin llamada LLM)

Escritura

HerramientaCuándo
record_decisionDespués de tomar una decisión técnica. Soporta corroborates (reforzar) y supersedes (reemplazar)
record_problemAl descubrir un bug o un trozo de deuda técnica
resolve_problemCuando un problema rastreado se arregla
invalidate_edgeCuando un hecho almacenado ya no es verdadero

Confianza bitemporal

La confianza no es un número almacenado que muta. Se calcula en tiempo de consulta a partir de base_confidence, estado de validación, tiempo desde el último refuerzo y contador de accesos.

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
PropiedadValor
Vida media validada~139 días
Umbral de obsolescencia no validado30 días (compuesto < 0.3)
Recencia τ90 días (decaimiento exponencial)
Fórmula compuestaconf × recency × (1 + rehearsal_w × log(1 + access_count))
Umbral de similitud de conflicto0.4 (por debajo + validez superpuesta = conflicto)
Umbral de confirmación de intención0.85 (verificación de similitud en escritura MCP)

Clústeres jerárquicos

memex cluster ejecuta Leiden jerárquico sobre un grafo de aristas híbrido:

Tipo de aristaPeso
Co-ubicación de directorio1.0
Imports de módulos2.0
Llamadas de símbololog(1 + calls)
PropiedadValor
Algoritmograspologic.partition.hierarchical_leiden con semilla fija
NombradoTF-IDF top-3 sobre docstrings de módulos + nombres de símbolos, respaldo de directorio padre
Fijación de IDJaccard ≥ 0.5 entre ejecuciones (los nombres de clúster se mantienen estables a través de renombres)
Anulaciones de usuario.memex/clusters.yaml — cualquier asignación se puede bloquear
Presupuesto de contextoget_project_context se mantiene bajo 1500 tokens ya sea que tu repositorio tenga 50 o 5000 módulos

Mide tus ahorros

memex rastrea métricas de reducción de tokens y acciones de revisión humana localmente en una base de datos SQLite (~/.config/memex/telemetry.db).

Puedes consultar tus ahorros en cualquier momento usando la CLI:

memex stats

O ver el payload JSON crudo:

memex stats --json

O apuntar a un alcance de repositorio específico:

memex stats --repo /path/to/repo

Esto devuelve una agregación de:

  • Resúmenes de período: llamadas, tokens devueltos, tokens ingenuos (tamaño de archivos solicitados), tokens ahorrados y porcentaje de reducción de tokens a través de today, last 7 days, last 30 days y lifetime.
  • Mejores herramientas: las herramientas más valiosas ordenadas por total de tokens ahorrados.
  • Clientes de agentes: agentes activos (Claude Code, Gemini CLI, Cursor, Codex) y su distribución de ahorro de tokens.
  • Salud de validación: total de nodos validados, no validados y corroborados, junto con los días transcurridos desde la última revisión.

Las mismas estadísticas se exponen a través del transporte HTTP MCP:

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

Conecta tu agente

Claude Code

La instalación desde el marketplace de arriba hace esto por ti. Configuración manual en .claude/settings.json:

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

Añade a ~/.cursor/mcp.json:

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

Añade a ~/.gemini/settings.json:

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

Añade a ~/.codex/config.toml:

[mcp_servers.memex]
command = "npx"
args = ["-y", "stifler-memex-mcp", "serve", "--repo", "."]
Herramienta de memoria de Anthropic (memory_20250818)

memex puede respaldar la herramienta de memoria nativa de Claude — los agentes leen de una proyección de grafo por sesión más una zona de borrador escribible.

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])

Principios operativos

#PrincipioLa apuesta
1Bitemporal, nunca destructivoLas aristas se expiran, no se eliminan. WHERE r.expired_at IS NULL filtra el estado vivo
2La confianza se calcula, no se almacenaMutar un número invita a una deriva silenciosa. Recalcular en cada lectura
3Dos regímenes para el decaimientoLos hechos validados decaen lentamente; los hechos no validados deben ganarse su lugar siendo accedidos
4Humano en el buclememex review pone en cola los nodos de Decisión de menor confianza para validación explícita
5Gobernanza de escrituraACL por tipo de nodo. Decision.policy = open, Module.policy = locked. Confirmación de intención en escrituras de contenido similar
6Los tokens tienen presupuestoget_project_context se mantiene bajo 1500 tokens en cualquier tamaño de repositorio mediante clústeres de Leiden
7Síntesis solo en commitsEl watcher agrupa por ventana de debounce. Gemini Flash no está en el camino crítico de una llamada de herramienta
8Pro para síntesis, Flash para extracciónexplain_change usa Pro porque la fundamentación importa. Todo lo demás usa Flash
9Consciente de múltiples reposUn watcher + un servidor MCP pueden gestionar cientos de repos. --repo cambia el alcance
10Primero localNeo4j corre en tu Docker. Gemini es la única llamada saliente, y solo en commits

Cuándo usar memex

Úsalo cuandoOmítelo cuando
Proyecto de varias semanas o mesesScript desechable, prototipo de usar y tirar
Trabajas con múltiples agentes (Claude, Cursor, Codex) y quieres contexto compartidoSolo emparejas con un agente en una tarea
Las decisiones arquitectónicas se toman con el tiempo y necesitan ser recordadasTodo el proyecto cabe en una sola ventana de contexto de 200k tokens
Quieres consultar "¿qué decidimos sobre X?" desde cualquier sesiónTu repositorio ya es lo suficientemente pequeño como para pegarlo en el prompt
Varios desarrolladores usando agentes de IA en el mismo codebaseTrabajo en solitario donde nunca /clear

Estructura del proyecto

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

ComandoQué hace
memex initExtrae el estado base del grafo, ejecuta la primera pasada de clústeres
memex watchDemonio que escucha eventos de archivo + git y escribe en Neo4j
memex serveEjecuta el servidor MCP (stdio, HTTP, o ambos)
memex reviewTUI que recorre decisiones de menor confianza para validación humana
memex graph --output graph.htmlLayout de fuerza D3 autocontenido con superposiciones de clúster
memex cluster [--rerun] [--dry-run]Ejecuta Leiden sobre el grafo de aristas híbrido; fija IDs de clúster por Jaccard ≥ 0.5
memex memory-tool serveRespaldar la herramienta memory_20250818 de Anthropic con una proyección de grafo
memex stats [--json] [--repo <path>]Muestra ahorros de tokens de contexto y estadísticas de telemetría

Licencia

MIT. Consulta LICENSE.

Autor

Hill Patel (@STiFLeR7)

Contribuidores principales y mantenedores

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

Contribuir

Abre un issue o un PR. uv sync --all-extras && uv run pytest tests/ es toda la configuración que necesitas para ejecutar la suite. Los incrementos de versión deben actualizar ambos pyproject.toml y npm/package.json y deben coincidir.

Vannevar Bush, 1945: "Considera un futuro dispositivo para uso individual, que es una especie de archivo privado y biblioteca mecanizados. Necesita un nombre, y para acuñar uno al azar, memex servirá."