Memoria

Evita que tu IA rompa código al revelar dependencias ocultas de archivos mediante análisis forense de git.

Documentación

Memoria Logo

Memoria

La memoria que tu IA necesita.

Un servidor MCP que evita que tu IA rompa código al revelar dependencias ocultas entre archivos mediante análisis forense de git.

npm version License: MIT TypeScript MCP Twitter


⚡ Instalación rápida

Instalación con un clic (Smithery)

Smithery - Install Memoria

Haz clic en la insignia de arriba para instalar Memoria con un solo clic a través de Smithery.

Configuración rápida de copiar y pegar

Añade esto a tu archivo de configuración MCP (funciona con Claude, Cursor, Windsurf, Cline):

{
  "mcpServers": {
    "memoria": {
      "command": "npx",
      "args": ["-y", "@byronwade/memoria"]
    }
  }
}

Comandos de una línea para terminal

HerramientaComando
Claude Codeclaude mcp add memoria -- npx -y @byronwade/memoria
Claude Desktopnpx @anthropic/claude-code mcp add memoria -- npx -y @byronwade/memoria
Cursormkdir -p .cursor && echo '{"mcpServers":{"memoria":{"command":"npx","args":["-y","@byronwade/memoria"]}}}' > .cursor/mcp.json
npm globalnpm install -g @byronwade/memoria
🪟 Instalación en Windows PowerShell
# Claude Desktop
$config = "$env:APPDATA\Claude\claude_desktop_config.json"
$json = if(Test-Path $config){Get-Content $config | ConvertFrom-Json}else{@{}}
$json.mcpServers = @{memoria=@{command="npx";args=@("-y","@byronwade/memoria")}}
$json | ConvertTo-Json -Depth 10 | Set-Content $config
🍎 Instalación manual en macOS
# Claude Desktop (requires jq: brew install jq)
echo '{"mcpServers":{"memoria":{"command":"npx","args":["-y","@byronwade/memoria"]}}}' | \
  jq -s '.[0] * .[1]' ~/Library/Application\ Support/Claude/claude_desktop_config.json - > tmp.json && \
  mv tmp.json ~/Library/Application\ Support/Claude/claude_desktop_config.json

Luego reinicia tu herramienta de IA. ¡Eso es todo!


¿Por qué Memoria?

Le pides a tu IA que refactorice un archivo. Hace un trabajo perfecto. Ejecutas tu aplicación. Se bloquea.

¿Por qué? Algún otro archivo dependía de la implementación anterior, pero no hay ninguna importación entre ellos, así que la IA no lo sabía.

Memoria lo soluciona. Analiza el historial de git para encontrar archivos que cambian juntos, incluso sin importaciones directas.

Without Memoria:                        With Memoria:
─────────────────                       ─────────────
You: "Update route.ts"                  You: "Update route.ts"
AI: "Done!" ✅                           Memoria: "⚠️ 85% coupled with billing.tsx"
Result: 💥 CRASH                         AI: "I'll update both files"
                                        Result: ✅ Works

Privado y local

Memoria se ejecuta 100% en tu máquina.

  • No se sube código a la nube
  • No se requieren claves API
  • Funciona sin conexión
  • Analiza tu carpeta local .git directamente

Tu código nunca sale de tu computadora.


Instalación

Elige tu herramienta de IA:

HerramientaComando de una líneaArchivo de configuración
Claudenpx @anthropic/claude-code mcp add memoria -- npx -y @byronwade/memoriaVer abajo
Claude Codeclaude mcp add memoria -- npx -y @byronwade/memoriaAutomático
Cursormkdir -p .cursor && echo '{"mcpServers":{"memoria":{"command":"npx","args":["-y","@byronwade/memoria"]}}}' > .cursor/mcp.json.cursor/mcp.json
WindsurfConfiguración manual~/.codeium/windsurf/mcp_config.json
VS CodeConfiguración manual~/.continue/config.json
ClineInterfaz de configuraciónConfiguración MCP de Cline

📦 Claude Desktop

Ubicación de la configuración:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
  • Windows: %APPDATA%\Claude\claude_desktop_config.json

Opción 1: CLI de Claude Code (recomendado)

npx @anthropic/claude-code mcp add memoria -- npx -y @byronwade/memoria

Opción 2: Configuración manual

{
  "mcpServers": {
    "memoria": {
      "command": "npx",
      "args": ["-y", "@byronwade/memoria"]
    }
  }
}
📦 Claude Code (CLI)
claude mcp add memoria -- npx -y @byronwade/memoria

¡Listo! Claude Code maneja todo automáticamente.

📦 Cursor

Comando de una línea (nivel de proyecto):

mkdir -p .cursor && echo '{"mcpServers":{"memoria":{"command":"npx","args":["-y","@byronwade/memoria"]}}}' > .cursor/mcp.json

Ubicaciones de configuración:

  • Proyecto: .cursor/mcp.json (en la raíz del proyecto)
  • Global: ~/.cursor/mcp.json
{
  "mcpServers": {
    "memoria": {
      "command": "npx",
      "args": ["-y", "@byronwade/memoria"]
    }
  }
}
📦 Windsurf

Configuración: ~/.codeium/windsurf/mcp_config.json

{
  "mcpServers": {
    "memoria": {
      "command": "npx",
      "args": ["-y", "@byronwade/memoria"]
    }
  }
}
📦 Continue (VS Code)

Configuración: ~/.continue/config.json

{
  "experimental": {
    "modelContextProtocolServers": [
      {
        "transport": {
          "type": "stdio",
          "command": "npx",
          "args": ["-y", "@byronwade/memoria"]
        }
      }
    ]
  }
}
📦 Cline (VS Code)

Abre la configuración de Cline → Servidores MCP → Añadir nuevo servidor:

{
  "mcpServers": {
    "memoria": {
      "command": "npx",
      "args": ["-y", "@byronwade/memoria"]
    }
  }
}
📦 Otros clientes MCP

Cualquier cliente compatible con MCP funciona. Usa esta configuración universal:

{
  "mcpServers": {
    "memoria": {
      "command": "npx",
      "args": ["-y", "@byronwade/memoria"]
    }
  }
}

⚠️ Después de configurar, reinicia tu herramienta de IA.

Verificar la instalación

Después de reiniciar, pregúntale a tu IA:

"What MCP tools do you have available?"

Deberías ver analyze_file y ask_history en la lista.

O prueba directamente:

"Use the analyze_file tool on any file in this project"

Uso

Pídele a tu IA que analice un archivo antes de hacer cambios:

"Analyze src/api/stripe/route.ts before I refactor it"

Memoria devuelve:

  • Archivos acoplados - Archivos que cambian juntos con frecuencia
  • Puntuación de riesgo - Qué tan propenso a errores es este código históricamente
  • Dependencias obsoletas - Archivos acoplados que pueden necesitar actualización
  • Evidencia - Diffs de código reales que muestran por qué los archivos están relacionados

Comandos CLI

Memoria incluye un CLI completo para análisis manual: las mismas capacidades que usa tu IA:

# Full forensic analysis (same as AI's analyze_file)
memoria analyze src/index.ts

# Quick risk assessment
memoria risk src/api/route.ts

# Show coupled files
memoria coupled src/auth.ts

# Find files that import the target
memoria importers src/types.ts

# Search git history (same as AI's ask_history)
memoria history "setTimeout" src/utils.ts
memoria history "fix" --type=message

Opciones de salida

# JSON output for scripting/CI
memoria analyze src/index.ts --json

# Pipe to other tools
memoria risk src/api/route.ts --json | jq '.riskScore'

Ejemplo de salida

$ memoria analyze src/index.ts

Forensics for `index.ts`

RISK: 45/100 (MEDIUM)
Risk factors: High volatility (38%) • Coupled (5 files) • 3 dependents

VOLATILITY
  Panic score: 38% | Commits: 24
  Top author: Dave (72%)

COUPLED FILES
  85% billing/page.tsx [schema]
      References: billing_records table. Schema changes may break queries.
  90% index.test.ts [test]
      Test file matches naming pattern. Update when changing exports.
  75% config.ts [env]
      Shares env vars: API_KEY, DATABASE_URL
  65% hooks/useData.ts [api]
      Calls endpoint: GET /api/data

STATIC DEPENDENTS
  - [ ] Check `cli.ts`
  - [ ] Check `server.ts`
  - [ ] Check `utils.ts`

Analysis completed in 142ms

Configuración (opcional)

Crea un .memoria.json en la raíz de tu proyecto para personalizar los umbrales:

{
  "thresholds": {
    "couplingPercent": 20,
    "driftDays": 14,
    "analysisWindow": 100
  },
  "ignore": [
    "**/*.lock",
    "dist/",
    "legacy/**"
  ],
  "panicKeywords": {
    "postmortem": 3,
    "incident": 3,
    "p0": 3
  },
  "riskWeights": {
    "volatility": 0.35,
    "coupling": 0.30,
    "drift": 0.20,
    "importers": 0.15
  }
}
OpciónPredeterminadoDescripción
thresholds.couplingPercent15Porcentaje mínimo de acoplamiento para informar
thresholds.driftDays7Días antes de que un archivo esté "obsoleto"
thresholds.analysisWindow50Número de commits a analizar
ignore[]Patrones glob adicionales a ignorar
panicKeywords{}Palabras clave personalizadas con pesos de severidad
riskWeights{}Sobrescribir pesos de cálculo de riesgo

Cómo funciona

Motor de volatilidad

Escanea commits en busca de palabras clave de pánico (fix, bug, revert, urgent, hotfix) con decaimiento temporal: los errores recientes importan más que los antiguos. También rastrea el Factor de autobús (quién es dueño del código).

Motor de entrelazamiento

Encuentra archivos que cambian juntos >15% del tiempo. Revela dependencias implícitas que las importaciones no pueden mostrar.

Motor centinela

Detecta cuando los archivos acoplados están desincronizados por más de 7 días. Señala dependencias obsoletas antes de que causen errores.

Motor de importación estática

Usa git grep para encontrar archivos que importan el objetivo, incluso para archivos nuevos sin historial de git.

Búsqueda de historial (El arqueólogo)

Busca en el historial de git para entender por qué se escribió el código. Resuelve el problema de la "Valla de Chesterton" antes de eliminar ese código de aspecto extraño.

Acoplamiento de documentación

Encuentra archivos markdown que referencian tus funciones/tipos exportados. Detecta actualizaciones de README necesarias cuando cambia el formato de salida.

Acoplamiento de tipos

Usa git pickaxe (git log -S) para encontrar archivos que comparten definiciones de tipos, incluso sin importaciones directas.

Acoplamiento de contenido

Encuentra archivos que comparten literales de cadena (mensajes de error, constantes) que deberían mantenerse sincronizados.

Acoplamiento de archivos de prueba

Descubre automáticamente archivos de prueba que coinciden con convenciones de nombres (*.test.*, *.spec.*, *_test.*, etc.) y archivos mock/fixture, sin extensiones codificadas.

Acoplamiento de variables de entorno

Encuentra archivos que comparten variables de entorno ALL_CAPS_UNDERSCORE (API_KEY, DATABASE_URL, etc.): funciona en cualquier lenguaje.

Acoplamiento de esquema/modelo

Detecta definiciones de esquemas de base de datos (SQL, Prisma, TypeORM, Mongoose) y encuentra archivos que consultan esas tablas/modelos.

Acoplamiento de endpoints de API

Encuentra código de cliente que llama a endpoints de API definidos en archivos de rutas. Detecta cambios en la forma de respuesta que rompen a los consumidores.

Acoplamiento de cadenas de re-exportación

Detecta archivos barrel (index.ts) que re-exportan tu módulo y encuentra importadores transitivos a través de esos barrels.


Ejemplo de salida

# Forensics: `route.ts`

**RISK: 65/100** — HIGH
45% volatility · 3 coupled · 8 dependents · 1 stale

> Proceed carefully. Check all coupled files and update stale dependencies.

---

## Coupled Files

**`billing/page.tsx`** — 85% (schema)
> These files share type definitions. If you modify types in one, update the other to match.
  + interface SubscriptionUpdated
  - oldStatus: string

**`route.test.ts`** — 90% [test]
> Test file for this module. Update when changing exports.

**`services/stripe.ts`** — 75% [env]
> Shares env vars: STRIPE_KEY, STRIPE_SECRET

**`README.md`** — 70% [docs]
> Documentation references: generateReport, SubscriptionStatus

**`types/billing.ts`** — 65% [type]
> Shared types: SubscriptionUpdated, PaymentStatus

**`features/billing/index.ts`** — 60% [transitive]
> Re-exports this file. Changes propagate through this barrel.

---

## Static Dependents

These files import `route.ts`. API changes require updating them.

- [ ] `src/components/SubscriptionCard.tsx`
- [ ] `src/hooks/useSubscription.ts`

---

## Pre-flight Checklist

- [ ] Modify `route.ts`
- [ ] Update `billing/page.tsx` (schema)
- [ ] Update `tests/stripe.test.ts` — stale 12d

---

## File History

**Volatile** — 45% panic score
**Expert:** Dave (90% of commits)

Modo piloto automático

¿Quieres que tu IA verifique Memoria automáticamente antes de cada edición? Instala los archivos de reglas:

# Install globally first
npm install -g @byronwade/memoria

# Then in your project directory:
memoria init --all

Esto instala archivos de reglas que le indican a tu IA que siempre llame a analyze_file antes de editar código.

Qué se instala

IndicadorArchivoHerramienta
--cursor.cursor/rules/memoria.mdcCursor
--claude.claude/CLAUDE.mdClaude Code
--windsurf.windsurfrulesWindsurf
--cline.clinerulesCline/Continue
--allTodos los anterioresTodas las herramientas
--forceActualizar reglas existentesSobrescribe la sección de Memoria

Comportamiento de fusión inteligente

memoria init es seguro de ejecutar varias veces: no sobrescribirá tus reglas existentes:

EscenarioQué sucede
El archivo no existeCrea un archivo nuevo con reglas de Memoria
El archivo existe, sin MemoriaAgrega reglas de Memoria (tu contenido se conserva)
El archivo existe, con MemoriaOmite (usa --force para actualizar)
# First run - creates or appends
memoria init --cursor
#   ✓ Created .cursor/rules/memoria.mdc

# Second run - skips (already installed)
memoria init --cursor
#   ⊘ Skipped .cursor/rules/memoria.mdc (already has Memoria rules)
#   Use --force to update existing Memoria rules.

# Force update to latest version
memoria init --cursor --force
#   ✓ Updated .cursor/rules/memoria.mdc (--force)

Detección automática

Ejecutar memoria init sin indicadores detectará automáticamente qué herramientas estás usando:

memoria init
# Detected: Cursor, Claude Code
# Installing Memoria rules...
#   ✓ Created .cursor/rules/memoria.mdc
#   ✓ Appended to .claude/CLAUDE.md (preserved existing content)
# ✓ Installed/updated 2 rule file(s)

Ahora Memoria actúa como un guardia de seguridad obligatorio para cada edición.


Rendimiento

Memoria está optimizado para velocidad y uso mínimo de tokens:

MétricaValor
Tiempo de análisis completo<100ms
Tokens por análisis~600 tokens
Aceleración de caché2000x+ en llamadas repetidas

Desglose de motores

MotorTiempoPropósito
Acoplamiento~45msEncontrar archivos que cambian juntos
Volatilidad~10msCalcular puntuación de propensión a errores
Deriva<1msDetectar dependencias obsoletas
Importadores~8msEncontrar dependientes estáticos
Búsqueda de historial~7msBuscar commits de git

Ejecuta los benchmarks tú mismo:

npm run build
npx tsx benchmarks/run-benchmarks.ts

Requisitos

  • Node.js 18+
  • Repositorio git con historial de commits
  • Herramienta de IA compatible con MCP

Estructura del monorepo (Turbo)

  • apps/mcp-server — Servidor MCP y paquete npm (publica @byronwade/memoria)
  • apps/api — Stub de backend API (placeholder HTTP de Node)
  • apps/web — Stub de frontend web
  • packages — Bibliotecas compartidas (futuro)

Desarrollo

npm install
npm run build                     # turbo build across workspaces
npm test                          # turbo test (runs vitest in mcp-server)

# Focus on a single app/package
npx turbo run build --filter=@byronwade/memoria
npx turbo run dev --filter=@byronwade/memoria

Solución de problemas

❌ "Herramienta no encontrada" o "analyze_file no disponible"
  1. Reinicia tu herramienta de IA - Los servidores MCP solo se cargan al inicio
  2. Verifica la sintaxis de configuración - El JSON debe ser válido (sin comas finales)
  3. Verifica Node.js 18+ - Ejecuta node --version para comprobar
  4. Verifica la ruta del archivo - El archivo de configuración debe estar en la ubicación exacta para tu herramienta
❌ "No es un repositorio git"

Memoria requiere un repositorio git con historial. Asegúrate de:

  1. Estar en un repositorio git (git status debería funcionar)
  2. Que el repositorio tenga al menos algunos commits
  3. Estar pasando una ruta absoluta a analyze_file
❌ npx es lento o se agota el tiempo

Instala globalmente para un inicio más rápido:

npm install -g @byronwade/memoria

Luego actualiza tu configuración para usar memoria directamente:

{
  "mcpServers": {
    "memoria": {
      "command": "memoria"
    }
  }
}
❌ Problemas con rutas de Windows

Usa barras diagonales o barras invertidas escapadas en las rutas:

"args": ["-y", "@byronwade/memoria"]

Si los problemas persisten, instala globalmente y usa el comando directamente.

¿Sigue atascado? Abre un issue con tu configuración y mensaje de error.


Licencia

MIT


Cuando Memoria te salve de una regresión, haznos saber.