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.

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.
| Canal | Comando |
|---|---|
| Marketplace de Claude Code | /plugin install memex-mcp@stifler-marketplace |
| npx (sin instalación) | npx stifler-memex-mcp <cmd> |
| uv | uv add memex-mcp |
| pip | pip install memex-mcp |
| fuente | git 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
| Propiedad | Valor |
|---|---|
| Salida | Un grafo Neo4j poblado continuamente desde tu repositorio |
| Almacenamiento | Neo4j vía Graphiti. Bitemporal — cada arista tiene created_at y expired_at opcional |
| Contexto | ContextPacket acotado, clasificado y consciente de procedencia |
| Integraciones | Hermes MemoryProvider, recursos/herramientas MCP, Claude Code, Cursor, Codex, Gemini CLI |
| Modo de fallo | Fallo abierto; la ejecución del agente continúa sin memex |
| Granularidad | Escala de 50 a 5000+ módulos mediante clústeres jerárquicos de Leiden |
| Síntesis | Gemini Flash destila commits en nodos Decision; Pro para síntesis fundamentada |
| Confianza | Calculada en tiempo de consulta. Decaimiento de dos regímenes (vida media validada ~139d, no validada obsoleta a 30d) |
| Gobernanza de escritura | ACL por tipo de nodo, confirmación de intención en escrituras de agentes, semántica explícita de corroborates / supersedes |
| Evidencia del objetivo 10 | 8/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
| Herramienta | Cuándo |
|---|---|
get_project_context | Inicio 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_context | Antes 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_problems | Bugs activos y deuda técnica, ordenados por severidad |
search_context | Búsqueda híbrida: semántica × palabra clave × recorrido de grafo × fusión RRF |
get_stale_context | Aristas cuya confianza compuesta cayó por debajo del umbral |
explain_change | Dado un SHA de commit, cruza el diff con nodos de Decisión/Problema vinculados y pide a Gemini Pro una explicación fundamentada |
predict_impact | Dada una ruta de archivo, devuelve una lista clasificada de módulos probablemente afectados según el acoplamiento del grafo (sin llamada LLM) |
Escritura
| Herramienta | Cuándo |
|---|---|
record_decision | Después de tomar una decisión técnica. Admite corroborates (reforzar) y supersedes (reemplazar) |
record_problem | Al descubrir un bug o deuda técnica |
resolve_problem | Cuando un problema rastreado se corrige |
invalidate_edge | Cuando 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
| Propiedad | Valor |
|---|---|
| Vida media validada | ~139 días |
| Umbral de obsolescencia no validada | 30 días (compuesta < 0.3) |
| τ de actualidad | 90 días (decaimiento exponencial) |
| Fórmula compuesta | conf × recency × (1 + rehearsal_w × log(1 + access_count)) |
| Umbral de similitud de conflicto | 0.4 (por debajo de esto + validez superpuesta = conflicto) |
| Umbral de confirmación de intención | 0.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 arista | Peso |
|---|---|
| Co-ubicación de directorio | 1.0 |
| Importaciones de módulos | 2.0 |
| Llamadas de símbolos | log(1 + calls) |
| Propiedad | Valor |
|---|---|
| Algoritmo | graspologic.partition.hierarchical_leiden con semilla fija |
| Nombrado | TF-IDF top-3 sobre docstrings de módulos + nombres de símbolos, respaldo de directorio padre |
| Fijación de ID | Jaccard ≥ 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 contexto | get_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 daysylifetime. - 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
| # | Principio | La apuesta |
|---|---|---|
| 1 | Bitemporal, nunca destructivo | Las aristas se expiran, no se eliminan. WHERE r.expired_at IS NULL filtra el estado vivo |
| 2 | La confianza se calcula, no se almacena | Mutar un número invita a la deriva silenciosa. Recalcula en cada lectura |
| 3 | Dos regímenes de decaimiento | Los hechos validados decaen lentamente; los hechos no validados deben ganarse su lugar siendo accedidos |
| 4 | Humano en el circuito | memex review pone en cola los nodos de Decisión de menor confianza para validación explícita |
| 5 | Gobernanza de escritura | ACL por tipo de nodo. Decision.policy = open, Module.policy = locked. Confirmación de intención en escrituras de contenido similar |
| 6 | Los tokens están presupuestados | get_project_context se mantiene bajo 1500 tokens en cualquier tamaño de repositorio mediante clústeres de Leiden |
| 7 | Síntesis solo en commits | El observador agrupa por ventana de rebote. Gemini Flash no está en la ruta crítica de una llamada de herramienta |
| 8 | Pro para síntesis, Flash para extracción | explain_change usa Pro porque la fundamentación importa. Todo lo demás usa Flash |
| 9 | Consciente de múltiples repositorios | Un observador + un servidor MCP pueden gestionar cientos de repositorios. --repo cambia el alcance |
| 10 | Local primero | Neo4j se ejecuta en tu Docker. Gemini es la única llamada saliente, y solo en commits |
Cuándo usar memex
| Úsalo cuando | Omítelo cuando |
|---|---|
| Proyecto de varias semanas o meses | Script de una sola vez, prototipo desechable |
| Trabajas con múltiples agentes (Claude, Cursor, Codex) y quieres contexto compartido | Solo te emparejas con un agente en una tarea |
| Las decisiones arquitectónicas se toman con el tiempo y necesitan recordarse | Todo el proyecto cabe en una sola ventana de contexto de 200k tokens |
| Quieres consultar "qué decidimos sobre X" desde cualquier sesión | Tu repositorio ya es lo suficientemente pequeño para pegarlo en el prompt |
| Múltiples desarrolladores usan agentes de IA en el mismo código base | Trabajo 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
| Comando | Qué hace |
|---|---|
memex init | Extrae el estado base del grafo, ejecuta la primera pasada de clústeres |
memex watch | Daemon que escucha eventos de archivos + git y escribe en Neo4j |
memex serve | Ejecuta el servidor MCP (stdio, HTTP o ambos) |
memex review | TUI que recorre decisiones de menor confianza para validación humana |
memex graph --output graph.html | Diseñ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 serve | Respaldar 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á."