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 — contexto de ingeniería confiable para ingeniería de software agéntica

Una capa de contexto de ingeniería neutral al protocolo para agentes de codificación de IA. memex construye un grafo de conocimiento bitemporal de tu repositorio — módulos, símbolos, decisiones, problemas, evidencia y evolución del código — y expone contexto acotado y consciente de procedencia a través de Hermes MemoryProvider o MCP.

Un daemon y servidor MCP que convierte commits y cambios de archivos en conocimiento de ingeniería estructurado. Los agentes pueden recibir contexto relevante del repositorio antes de una tarea, con frescura y procedencia preservadas, sin convertir a memex en una fuente de memoria personal o estado de sesión crudo.

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

Memex on AI Agents Listing

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[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

Instalación

Vía el 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 .

Integración con Hermes

La integración con Hermes v0.9 es de solo lectura. Hermes retiene memoria personal, estado de sesión crudo y estado de ejecución. memex suministra contexto de ingeniería del repositorio a través de un ContextPacket acotado; no ingiere state.db de Hermes, transcripciones, prompts ni resultados de herramientas.

Agrega el proveedor de memex a la configuración de perfil de Hermes:

memory:
  provider: memex
plugins:
  memex:
    repo_path: /absolute/path/to/repository
    prefetch_timeout_seconds: 7
    max_items: 8
    max_chars: 12000

Si Hermes no está instalado, usa el mismo selector de contexto a través de la herramienta get_engineering_context de MCP. Ambas rutas comparten el núcleo de memex neutral al protocolo y fallan abiertamente cuando la recuperación no está disponible.

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 autoalojado

Para una configuración de equipo compartida (un Neo4j + un memex-server, autenticación activada por defecto, 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 el down -v 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 expired_at opcional
ContextoContextPacket acotado, clasificado y consciente de procedencia
IntegracionesHermes MemoryProvider, recursos/herramientas MCP, Claude Code, Cursor, Codex, Gemini CLI
Modo de falloFallo abierto; la ejecución del agente continúa sin memex
GranularidadEscala de 50 a 5000+ módulos mediante clústeres jerárquicos de Leiden
SíntesisGemini Flash destila commits en nodos Decision; Pro para síntesis fundamentada
ConfianzaCalculada en tiempo de consulta. Decaimiento de dos regímenes (vida media validada ~139d, no validada obsoleta a 30d)
Gobernanza de escrituraACL por tipo de nodo, confirmación de intención en escrituras de agentes, semántica explícita de corroborates / supersedes
Evidencia del objetivo 108/8 ejecuciones pareadas válidas, 0 fallos de tratamiento, 0 regresiones de tratamiento

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 en menos de 1500 tokens sin importar el tamaño del repositorio
get_symbol_contextAntes de editar una función o clase. Devuelve llamadores, llamados y decisiones vinculadas
get_recent_decisionsÚltimos N días de decisiones arquitectónicas, opcionalmente con alcance de 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 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. Admite corroborates (reforzar) y supersedes (reemplazar)
record_problemAl descubrir un bug o deuda técnica
resolve_problemCuando un problema rastreado se corrige
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 recuento 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 validada30 días (compuesta < 0.3)
τ de actualidad90 días (decaimiento exponencial)
Fórmula compuestaconf × recency × (1 + rehearsal_w × log(1 + access_count))
Umbral de similitud de conflicto0.4 (por debajo de esto + validez superpuesta = conflicto)
Umbral de confirmación de intención0.85 (verificación de similitud de 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
Importaciones de módulos2.0
Llamadas de símboloslog(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 renombrados)
Anulaciones de usuario.memex/clusters.yaml — cualquier asignación puede bloquearse
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 en today, last 7 days, last 30 days y lifetime.
  • Herramientas principales: Las herramientas más valiosas ordenadas por tokens totales ahorrados.
  • Clientes de agentes: Agentes activos (Claude Code, Gemini CLI, Cursor, Codex) y su distribución de ahorro de tokens.
  • Salud de validación: Nodos totales 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 del marketplace anterior hace esto por ti. Cableado manual en .claude/settings.json:

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

Agrega a ~/.cursor/mcp.json:

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

Agrega a ~/.gemini/settings.json:

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

Agrega 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 desde 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 la deriva silenciosa. Recalcula en cada lectura
3Dos regímenes de decaimientoLos hechos validados decaen lentamente; los hechos no validados deben ganarse su lugar siendo accedidos
4Humano en el circuitomemex 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 están presupuestadosget_project_context se mantiene bajo 1500 tokens en cualquier tamaño de repositorio mediante clústeres de Leiden
7Síntesis solo en commitsEl observador agrupa por ventana de rebote. Gemini Flash no está en la ruta crítica 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 repositoriosUn observador + un servidor MCP pueden gestionar cientos de repositorios. --repo cambia el alcance
10Local primeroNeo4j se ejecuta 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 de una sola vez, prototipo desechable
Trabajas con múltiples agentes (Claude, Cursor, Codex) y quieres contexto compartidoSolo te emparejas con un agente en una tarea
Las decisiones arquitectónicas se toman con el tiempo y necesitan recordarseTodo 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 para pegarlo en el prompt
Múltiples desarrolladores usan agentes de IA en el mismo código baseTrabajo 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/                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

ComandoQué hace
memex initExtrae el estado base del grafo, ejecuta la primera pasada de clústeres
memex watchDaemon que escucha eventos de archivos + 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.htmlDiseño de fuerza D3 autocontenido con superposiciones de clústeres
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)

Contribuyentes principales y mantenedores

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

Contribuciones

Abre un issue o PR. uv sync --all-extras instala el toolchain de desarrollo. Ejecuta uv run pytest -m "not integration" para la suite sin conexión y uv run ruff check . before opening a PR. Version bumps must update pyproject.toml, npm/package.json, server.json y la etiqueta de imagen Docker del equipo juntos.

El registro de la versión v0.9 está en CHANGELOG.md, con la arquitectura y la evidencia de evaluación bajo docs/architecture/v0.9/.

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