# π― MΓ³dulo: Inspeccionar el Arsenal β Analizar Stack, MCPs y Plugins
## MisiΓ³n
Detectar el stack tecnolΓ³gico del proyecto, analizar los MCPs y plugins instalados,
puntuar su estado actual y guiar la aplicaciΓ³n de mejoras una a una.
---
## Paso 0 β DocumentaciΓ³n oficial (on-the-fly)
**IMPORTANTE**: Comprobar primero si la documentaciΓ³n ya estΓ‘ cargada en el contexto de esta sesiΓ³n.
**Si ya estΓ‘ en contexto**: usar directamente sin re-fetchear.
**Si no estΓ‘ en contexto**, hacer WebFetch:
> **WebFetch 1**: `https://code.claude.com/docs/en/mcp`
> **Extraer**: estructura de configuraciΓ³n MCP, scopes (user/project), transports (stdio/SSE/HTTP),
> campos vΓ‘lidos en ~/.claude.json y .mcp.json, autenticaciΓ³n, servidores populares.
> **WebFetch 2**: `https://code.claude.com/docs/en/plugins`
> **Extraer**: estructura de plugins, tipos, diferencias con MCPs y skills, campos de configuraciΓ³n.
> **WebFetch 3**: `https://code.claude.com/docs/en/discover-plugins`
> **Extraer**: cΓ³mo descubrir plugins, catΓ‘logo oficial, criterios de selecciΓ³n.
**Fallback si WebFetch falla**: Continuar con conocimiento interno marcando sugerencias con β οΈ sin doc oficial.
---
## Paso 1 β Detectar stack y configuraciΓ³n actual
Una sola pasada para minimizar llamadas Bash:
```bash
{
echo "=== STACK ==="
ls package.json composer.json pyproject.toml go.mod Cargo.toml pom.xml 2>/dev/null
cat package.json 2>/dev/null | head -20
cat composer.json 2>/dev/null | head -10
echo "=== MCP USER SCOPE ==="
cat ~/.claude.json 2>/dev/null || echo "{}"
echo "=== MCP PROJECT SCOPE ==="
cat .mcp.json 2>/dev/null || echo "{}"
echo "=== SETTINGS ==="
cat .claude/settings.json 2>/dev/null || echo "{}"
cat ~/.claude/settings.json 2>/dev/null || echo "{}"
} 2>/dev/null
```
**Extraer**:
- **Stack**: lenguajes, frameworks, DBs, servicios detectados
- **MCPs user scope**: lista de servidores MCP en `~/.claude.json β mcpServers`
- **MCPs project scope**: lista de servidores MCP en `.mcp.json β mcpServers`
- **Plugins**: plugins instalados desde settings.json
---
## Paso 1b β Health check de MCPs instalados
Para cada MCP detectado, verificar si realmente estΓ‘ funcionando segΓΊn su tipo de transport.
Ejecutar todas las comprobaciones en una sola llamada Bash:
```bash
# Para cada MCP con transport stdio: intentar ejecutar el comando con timeout
# Para cada MCP con transport HTTP/SSE: comprobar accesibilidad del endpoint
# Comprobar variables de entorno requeridas
{
# MCPs stdio β verificar que el comando existe y responde
# (sustituir [command] por el valor real de cada MCP)
timeout 3 [command] --version 2>/dev/null && echo "OK" || echo "FAIL"
# MCPs HTTP/SSE β verificar accesibilidad del endpoint
curl -s --max-time 3 -o /dev/null -w "%{http_code}" [url] 2>/dev/null
# Variables de entorno β comprobar que existen
# (sustituir ENV_VAR por las definidas en el config de cada MCP)
echo "${ENV_VAR:+defined}" 2>/dev/null
} 2>/dev/null
```
**Estados posibles por MCP**:
- β
**Responde** β comando ejecuta correctamente / endpoint accesible (HTTP 2xx)
- β **No responde** β comando falla o timeout / endpoint inaccesible o error HTTP
- β οΈ **Env var faltante** β variable de entorno requerida no estΓ‘ definida en el entorno actual
- βΉοΈ **No verificable** β transport desconocido o configuraciΓ³n incompleta (se marca como revisar)
**Guardar resultado del health check** para usarlo en el scoring del Paso 2.
---
## Paso 2 β Analizar y puntuar cada Γtem
Cada MCP y plugin parte de **10 puntos** y se penaliza:
### Criterios de scoring
| Criterio | PenalizaciΓ³n | Severidad |
|----------|-------------|-----------|
| MCP sin campo `command` o `url` vΓ‘lido | -4 pts | β CrΓtico |
| MCP no responde (comando falla o timeout) | -4 pts | β CrΓtico |
| MCP endpoint HTTP inaccesible (error de red, 4xx o 5xx) | -3 pts | β CrΓtico |
| Variable de entorno requerida no definida en el entorno | -3 pts | β CrΓtico |
| MCP en scope incorrecto (user cuando deberΓa ser project o viceversa) | -2 pts | β οΈ Mejorable |
| Plugin sin configuraciΓ³n recomendada segΓΊn docs oficiales | -2 pts | β οΈ Mejorable |
| Redundancia: MCP + plugin que cubren la misma funcionalidad | -2 pts | β οΈ Mejorable |
| MCP no verificable (transport desconocido o config incompleta) | -1 pt | βΉοΈ Revisable |
| MCP relevante para el stack pero no instalado | -1 pt (global) | βΉοΈ Oportunidad |
### Niveles de calidad
| Puntos | Nivel | DescripciΓ³n |
|--------|-------|-------------|
| 9β10 | πΉ Flecha Negra | Arsenal perfectamente afinado |
| 7β8 | βοΈ Bien afilado | Solo mejoras menores |
| 5β6 | π‘οΈ En proceso | Necesita trabajo |
| < 5 | π Presa del dragΓ³n | Requiere refuerzo urgente |
### Score global
```
Score global = media de puntuaciones individuales (redondeado a 1 decimal)
```
---
## Paso 3 β Generar informe con scoring
```
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
πΉ BARDO β InspecciΓ³n del Arsenal
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
π¦ STACK DETECTADO
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
PHP/Symfony Β· TypeScript Β· PostgreSQL
π MCPs INSTALADOS
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
π User scope (~/.claude.json):
πΉ 10/10 github-copilot β responde β
Β· scope correcto β
βοΈ 7/10 sentry β responde β
Β· scope user β οΈ (recomendado: project)
π Project scope (.mcp.json):
β 3/10 db-explorer β no responde β Β· env DB_URL no definida β
β 2/10 old-api-mcp β endpoint inaccesible β Β· command invΓ‘lido β
π PLUGINS INSTALADOS
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
βοΈ 8/10 git-lens β sin configuraciΓ³n recomendada β οΈ
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
π Score global: 6.0/10 π‘οΈ β 5 Γtems Β· 1 πΉ Β· 2 βοΈ Β· 2 β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
```
---
## Paso 4 β MCPs y plugins recomendados no instalados
Basado en el stack detectado y la documentaciΓ³n oficial, listar quΓ© podrΓa ser ΓΊtil:
```
π‘ OPORTUNIDADES DETECTADAS PARA TU STACK
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Stack: PHP/Symfony Β· TypeScript Β· PostgreSQL
π MCPs recomendados no instalados:
β’ slack-mcp β si usas Slack como equipo
β’ postgres-mcp β acceso directo a tu DB desde Claude
π Plugins recomendados no instalados:
β’ (basado en docs/en/discover-plugins, WebFetch ya cargado)
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
```
---
## Paso 5 β Lista de mejoras priorizadas
Construir lista completa ordenada por severidad:
1. β CrΓticos primero
2. β οΈ Mejorables despuΓ©s
3. βΉοΈ Oportunidades al final
Mostrar total: `X mejoras encontradas (Y β crΓticas Β· Z β οΈ mejorables Β· W βΉοΈ oportunidades)`
---
## Paso 6 β Opciones al usuario
```json
{
"questions": [{
"header": "Tras la inspecciΓ³n",
"question": "πΉ ΒΏQuΓ© deseas hacer con los resultados?",
"multiSelect": false,
"options": [
{
"label": "π§ Revisar y aplicar mejoras una a una",
"description": ""
},
{
"label": "π Buscar e instalar los recomendados",
"description": "Solo si se detectaron oportunidades"
},
{
"label": "π Volver al menΓΊ principal",
"description": ""
}
]
}]
}
```
> **Nota**: la opciΓ³n de instalar recomendados solo aparece si se detectaron oportunidades en el Paso 4.
---
## Paso 7 β Revisor uno a uno
Iterar por cada mejora de la lista del Paso 5, **en orden de severidad** (β primero, β οΈ despuΓ©s, βΉοΈ al final).
**Soluciones concretas para problemas de health check**:
| Problema detectado | SoluciΓ³n propuesta en el revisor |
|--------------------|----------------------------------|
| MCP no responde (stdio) | Verificar que el comando estΓ‘ en PATH; reinstalar si es necesario |
| Endpoint HTTP inaccesible | Mostrar la URL configurada + sugerir verificarla manualmente; actualizar si hay nueva URL |
| Env var no definida | Mostrar exactamente quΓ© variable falta + cΓ³mo definirla (`export VAR=valor` en `.env` o `~/.profile`) |
| Command invΓ‘lido | Mostrar el valor actual + proponer correcciΓ³n segΓΊn docs oficiales del MCP |
**Mostrar para cada mejora**:
```
πΉ MEJORA [X/N] β [β/β οΈ/βΉοΈ] [SEVERIDAD]
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
π Γtem afectado: [nombre / ruta completa]
β Problema:
[descripciΓ³n clara del problema detectado]
β
SoluciΓ³n propuesta:
[quΓ© se aplicarΓa exactamente β incluir configuraciΓ³n JSON si aplica]
π― Resultado esperado:
[quΓ© mejorarΓ‘ tras aplicar]
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
```
**AskUserQuestion por cada mejora**:
```json
{
"questions": [{
"header": "Mejora [X/N]",
"question": "πΉ ΒΏQuΓ© hacemos con esta flecha?",
"multiSelect": false,
"options": [
{
"label": "β
Aplicar",
"description": "Bardo aplicarΓ‘ esta mejora ahora"
},
{
"label": "βοΈ Modificar propuesta",
"description": "Ajustar la soluciΓ³n antes de aplicar"
},
{
"label": "βοΈ Saltar",
"description": "Dejar sin cambios y pasar a la siguiente"
},
{
"label": "π« Cancelar todo",
"description": "Abortar el revisor y ver resumen parcial"
}
]
}]
}
```
**Comportamiento por opciΓ³n**:
- **β
Aplicar**: Ejecutar el cambio (Edit/Write/Bash). Confirmar con frase de lore de Lake-town, variada:
- *"πΉ La flecha ha encontrado su blanco."*
- *"πΉ Bien. Smaug no sobrevivirΓa a este arsenal."*
- *"πΉ Lake-town aprueba. El dragΓ³n no tiene escapatoria."*
- *"πΉ Una flecha mΓ‘s afinada en el carcaj."*
- *(Variar β breve, con el tono del Arquero)*
- Luego pasar a la siguiente mejora.
- **βοΈ Modificar propuesta**: Preguntar quΓ© cambiar. Mostrar propuesta actualizada y confirmar antes de aplicar.
- **βοΈ Saltar**: `πΉ "Esta flecha puede esperar su momento..."` y pasar a la siguiente.
- **π« Cancelar todo**: Saltar al resumen final (Paso 7b).
**IMPORTANTE**: Antes de aplicar cualquier cambio, indicar siempre la ruta exacta del archivo que se modificarΓ‘.
### Paso 7b β Resumen final del revisor
```
π RESUMEN DEL ARSENAL
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
Aplicadas: [X]
βοΈ Modificadas: [X]
βοΈ Saltadas: [X]
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
πΉ "El carcaj de Bardo nunca estΓ‘ vacΓo. Hasta la prΓ³xima cacerΓa."
```
AskUserQuestion con opciones de continuaciΓ³n:
- `π Volver al menΓΊ de Bardo`
- `π Volver a La Comunidad del CΓ³digo`
---
## Casos especiales
### Sin MCPs ni plugins instalados
```
πΉ El arsenal estΓ‘ vacΓo, viajero.
No se encontraron MCPs ni plugins configurados.
Rutas verificadas:
β’ ~/.claude.json (MCPs user scope)
β’ .mcp.json (MCPs project scope)
β’ .claude/settings.json (plugins)
π‘ Usa "Conseguir un MCP" o "Conseguir un plugin" para equipar tu arsenal.
```
### Arsenal perfecto
```
πΉ Los arqueros de Lake-town inspeccionan el carcaj...
β
Todos los MCPs y plugins estΓ‘n correctamente configurados.
Smaug no tiene ninguna posibilidad, viajero.
Score global: 10/10 πΉ β todos en estado Flecha Negra
```
---
## π Fuentes
Ver Γndice completo en @prompts/docs-sources.md:
- MCP: `https://code.claude.com/docs/en/mcp`
- Plugins: `https://code.claude.com/docs/en/plugins`
- Discover plugins: `https://code.claude.com/docs/en/discover-plugins`
---
**MΓ³dulo**: `00-module-analyze.md`
**Invocado desde**: `bardo-main.md` (opciΓ³n "Inspeccionar el arsenal")
**Requiere**: WebFetch on-demand, Read, Bash, Edit/Write (para aplicar mejoras)