@machina.ai/maven-quality-mcp 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1210 -0
- package/config/plugin-versions.json +123 -0
- package/config/rewrite-recipes.json +366 -0
- package/dist/config/plugin-versions.json +123 -0
- package/dist/config/rewrite-recipes.json +366 -0
- package/dist/core/backup_manager.d.ts +48 -0
- package/dist/core/backup_manager.d.ts.map +1 -0
- package/dist/core/backup_manager.js +129 -0
- package/dist/core/backup_manager.js.map +1 -0
- package/dist/core/framework_detector.d.ts +46 -0
- package/dist/core/framework_detector.d.ts.map +1 -0
- package/dist/core/framework_detector.js +271 -0
- package/dist/core/framework_detector.js.map +1 -0
- package/dist/core/java_detector.d.ts +70 -0
- package/dist/core/java_detector.d.ts.map +1 -0
- package/dist/core/java_detector.js +334 -0
- package/dist/core/java_detector.js.map +1 -0
- package/dist/core/maven_executor.d.ts +189 -0
- package/dist/core/maven_executor.d.ts.map +1 -0
- package/dist/core/maven_executor.js +375 -0
- package/dist/core/maven_executor.js.map +1 -0
- package/dist/core/pom_modifier.d.ts +85 -0
- package/dist/core/pom_modifier.d.ts.map +1 -0
- package/dist/core/pom_modifier.js +452 -0
- package/dist/core/pom_modifier.js.map +1 -0
- package/dist/core/recipe_manager.d.ts +66 -0
- package/dist/core/recipe_manager.d.ts.map +1 -0
- package/dist/core/recipe_manager.js +372 -0
- package/dist/core/recipe_manager.js.map +1 -0
- package/dist/core/rewrite_executor.d.ts +36 -0
- package/dist/core/rewrite_executor.d.ts.map +1 -0
- package/dist/core/rewrite_executor.js +156 -0
- package/dist/core/rewrite_executor.js.map +1 -0
- package/dist/core/rewrite_version_manager.d.ts +46 -0
- package/dist/core/rewrite_version_manager.d.ts.map +1 -0
- package/dist/core/rewrite_version_manager.js +197 -0
- package/dist/core/rewrite_version_manager.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +67 -0
- package/dist/index.js.map +1 -0
- package/dist/parsers/checkstyle_parser.d.ts +29 -0
- package/dist/parsers/checkstyle_parser.d.ts.map +1 -0
- package/dist/parsers/checkstyle_parser.js +105 -0
- package/dist/parsers/checkstyle_parser.js.map +1 -0
- package/dist/parsers/dependency_parser.d.ts +42 -0
- package/dist/parsers/dependency_parser.d.ts.map +1 -0
- package/dist/parsers/dependency_parser.js +233 -0
- package/dist/parsers/dependency_parser.js.map +1 -0
- package/dist/parsers/jacoco_parser.d.ts +39 -0
- package/dist/parsers/jacoco_parser.d.ts.map +1 -0
- package/dist/parsers/jacoco_parser.js +144 -0
- package/dist/parsers/jacoco_parser.js.map +1 -0
- package/dist/parsers/migration_todo_generator.d.ts +24 -0
- package/dist/parsers/migration_todo_generator.d.ts.map +1 -0
- package/dist/parsers/migration_todo_generator.js +195 -0
- package/dist/parsers/migration_todo_generator.js.map +1 -0
- package/dist/parsers/pmd_parser.d.ts +121 -0
- package/dist/parsers/pmd_parser.d.ts.map +1 -0
- package/dist/parsers/pmd_parser.js +178 -0
- package/dist/parsers/pmd_parser.js.map +1 -0
- package/dist/parsers/rewrite_issues_parser.d.ts +39 -0
- package/dist/parsers/rewrite_issues_parser.d.ts.map +1 -0
- package/dist/parsers/rewrite_issues_parser.js +173 -0
- package/dist/parsers/rewrite_issues_parser.js.map +1 -0
- package/dist/parsers/rewrite_result_parser.d.ts +48 -0
- package/dist/parsers/rewrite_result_parser.d.ts.map +1 -0
- package/dist/parsers/rewrite_result_parser.js +266 -0
- package/dist/parsers/rewrite_result_parser.js.map +1 -0
- package/dist/parsers/spotbugs_parser.d.ts +22 -0
- package/dist/parsers/spotbugs_parser.d.ts.map +1 -0
- package/dist/parsers/spotbugs_parser.js +76 -0
- package/dist/parsers/spotbugs_parser.js.map +1 -0
- package/dist/server.d.ts +23 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +393 -0
- package/dist/server.js.map +1 -0
- package/dist/tools/analyze.d.ts +82 -0
- package/dist/tools/analyze.d.ts.map +1 -0
- package/dist/tools/analyze.js +401 -0
- package/dist/tools/analyze.js.map +1 -0
- package/dist/tools/analyze_test_coverage.d.ts +128 -0
- package/dist/tools/analyze_test_coverage.d.ts.map +1 -0
- package/dist/tools/analyze_test_coverage.js +291 -0
- package/dist/tools/analyze_test_coverage.js.map +1 -0
- package/dist/tools/dependency_analyze.d.ts +31 -0
- package/dist/tools/dependency_analyze.d.ts.map +1 -0
- package/dist/tools/dependency_analyze.js +159 -0
- package/dist/tools/dependency_analyze.js.map +1 -0
- package/dist/tools/fix_style.d.ts +98 -0
- package/dist/tools/fix_style.d.ts.map +1 -0
- package/dist/tools/fix_style.js +182 -0
- package/dist/tools/fix_style.js.map +1 -0
- package/dist/tools/generate_tests.d.ts +128 -0
- package/dist/tools/generate_tests.d.ts.map +1 -0
- package/dist/tools/generate_tests.js +291 -0
- package/dist/tools/generate_tests.js.map +1 -0
- package/dist/tools/rewrite_apply.d.ts +7 -0
- package/dist/tools/rewrite_apply.d.ts.map +1 -0
- package/dist/tools/rewrite_apply.js +249 -0
- package/dist/tools/rewrite_apply.js.map +1 -0
- package/dist/tools/rewrite_discover.d.ts +7 -0
- package/dist/tools/rewrite_discover.d.ts.map +1 -0
- package/dist/tools/rewrite_discover.js +227 -0
- package/dist/tools/rewrite_discover.js.map +1 -0
- package/dist/tools/rewrite_preview.d.ts +7 -0
- package/dist/tools/rewrite_preview.d.ts.map +1 -0
- package/dist/tools/rewrite_preview.js +230 -0
- package/dist/tools/rewrite_preview.js.map +1 -0
- package/dist/tools/setup_quality.d.ts +84 -0
- package/dist/tools/setup_quality.d.ts.map +1 -0
- package/dist/tools/setup_quality.js +177 -0
- package/dist/tools/setup_quality.js.map +1 -0
- package/dist/tools/vulnerability_scan.d.ts +38 -0
- package/dist/tools/vulnerability_scan.d.ts.map +1 -0
- package/dist/tools/vulnerability_scan.js +365 -0
- package/dist/tools/vulnerability_scan.js.map +1 -0
- package/dist/types/analysis.d.ts +127 -0
- package/dist/types/analysis.d.ts.map +1 -0
- package/dist/types/analysis.js +5 -0
- package/dist/types/analysis.js.map +1 -0
- package/dist/types/index.d.ts +29 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +5 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/rewrite.d.ts +254 -0
- package/dist/types/rewrite.d.ts.map +1 -0
- package/dist/types/rewrite.js +5 -0
- package/dist/types/rewrite.js.map +1 -0
- package/dist/utils/error_classifier.d.ts +34 -0
- package/dist/utils/error_classifier.d.ts.map +1 -0
- package/dist/utils/error_classifier.js +184 -0
- package/dist/utils/error_classifier.js.map +1 -0
- package/dist/utils/llm_error_classifier.d.ts +36 -0
- package/dist/utils/llm_error_classifier.d.ts.map +1 -0
- package/dist/utils/llm_error_classifier.js +258 -0
- package/dist/utils/llm_error_classifier.js.map +1 -0
- package/dist/utils/logger.d.ts +100 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +192 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/ollama_classifier.d.ts +28 -0
- package/dist/utils/ollama_classifier.d.ts.map +1 -0
- package/dist/utils/ollama_classifier.js +267 -0
- package/dist/utils/ollama_classifier.js.map +1 -0
- package/dist/utils/version_comparator.d.ts +129 -0
- package/dist/utils/version_comparator.d.ts.map +1 -0
- package/dist/utils/version_comparator.js +232 -0
- package/dist/utils/version_comparator.js.map +1 -0
- package/package.json +63 -0
- package/scripts/check-nvd-status.js +89 -0
- package/scripts/copy-config.cjs +56 -0
- package/scripts/nvd-background-download.js +118 -0
package/README.md
ADDED
|
@@ -0,0 +1,1210 @@
|
|
|
1
|
+
# Maven Quality MCP Server
|
|
2
|
+
|
|
3
|
+
[](.)
|
|
4
|
+
[](.)
|
|
5
|
+
[](.)
|
|
6
|
+
[](https://nodejs.org)
|
|
7
|
+
[](https://www.typescriptlang.org/)
|
|
8
|
+
[](.)
|
|
9
|
+
|
|
10
|
+
Servidor MCP (Model Context Protocol) para análisis automático de calidad de código, migraciones Java/Spring Boot y corrección asistida por IA en proyectos Maven.
|
|
11
|
+
|
|
12
|
+
## 📋 Tabla de Contenidos
|
|
13
|
+
|
|
14
|
+
- [¿Qué es Maven Quality MCP?](#-qué-es-maven-quality-mcp)
|
|
15
|
+
- [Características](#-características)
|
|
16
|
+
- [Requisitos](#-requisitos)
|
|
17
|
+
- [Instalación](#-instalación)
|
|
18
|
+
- [Configuración](#-configuración)
|
|
19
|
+
- [Uso](#-uso)
|
|
20
|
+
- [Herramientas Disponibles](#-herramientas-disponibles)
|
|
21
|
+
- [Arquitectura del Proyecto](#-arquitectura-del-proyecto)
|
|
22
|
+
- [Desarrollo](#-desarrollo)
|
|
23
|
+
- [Testing](#-testing)
|
|
24
|
+
- [Solución de Problemas](#-solución-de-problemas)
|
|
25
|
+
|
|
26
|
+
## 🎯 ¿Qué es Maven Quality MCP?
|
|
27
|
+
|
|
28
|
+
Maven Quality MCP es un servidor que implementa el protocolo MCP (Model Context Protocol), permitiendo que asistentes de IA puedan:
|
|
29
|
+
|
|
30
|
+
✅ **Configurar automáticamente** herramientas de calidad en proyectos Maven
|
|
31
|
+
✅ **Analizar código** usando SpotBugs, Checkstyle, PMD y JaCoCo
|
|
32
|
+
✅ **Corregir automáticamente** problemas de estilo de código
|
|
33
|
+
✅ **Analizar dependencias** y detectar vulnerabilidades de seguridad (CVEs)
|
|
34
|
+
✅ **Migrar proyectos Java/Spring Boot** usando OpenRewrite con detectores inteligentes
|
|
35
|
+
|
|
36
|
+
**¿Por qué usarlo?**
|
|
37
|
+
|
|
38
|
+
- ⚡ **Ahorra tiempo**: 30-60 segundos vs 10-15 minutos manualmente
|
|
39
|
+
- 🤖 **Integración con IA**: Usa lenguaje natural con tu asistente MCP
|
|
40
|
+
- 🔒 **100% local**: Tu código nunca sale de tu máquina
|
|
41
|
+
- 📊 **Análisis completo**: 4 herramientas de calidad integradas
|
|
42
|
+
|
|
43
|
+
## ✨ Características
|
|
44
|
+
|
|
45
|
+
### Análisis de Calidad
|
|
46
|
+
|
|
47
|
+
- **SpotBugs**: Detección de bugs y problemas de seguridad
|
|
48
|
+
- **Checkstyle**: Verificación de estándares de código Java
|
|
49
|
+
- **PMD**: Análisis de código problemático y duplicado
|
|
50
|
+
- **JaCoCo**: Medición de cobertura de tests
|
|
51
|
+
|
|
52
|
+
### Corrección Automática
|
|
53
|
+
|
|
54
|
+
- Formateo automático de código según Google Java Format
|
|
55
|
+
- Corrección de imports no utilizados
|
|
56
|
+
- Normalización de indentación y espacios
|
|
57
|
+
- 100% seguro: solo aplica cambios de formato, sin modificar lógica
|
|
58
|
+
|
|
59
|
+
### Configuración Inteligente
|
|
60
|
+
|
|
61
|
+
- Detecta versión de Java automáticamente (8, 11, 17, 21, 23)
|
|
62
|
+
- Configura plugins compatibles con la versión detectada
|
|
63
|
+
- Mantiene configuración existente del proyecto
|
|
64
|
+
- No sobrescribe personalizaciones del usuario
|
|
65
|
+
|
|
66
|
+
## 📦 Requisitos
|
|
67
|
+
|
|
68
|
+
### Requisitos del Sistema
|
|
69
|
+
|
|
70
|
+
- **Node.js**: 18.0.0 o superior
|
|
71
|
+
- **Maven**: 3.6.0 o superior
|
|
72
|
+
- **Java**: 8 o superior (para ejecutar Maven)
|
|
73
|
+
|
|
74
|
+
### Clientes MCP Compatibles
|
|
75
|
+
|
|
76
|
+
- [Cell CLI](https://cell-cli.xyz/) (Terminal) - **Recomendado**
|
|
77
|
+
- Cualquier cliente compatible con MCP
|
|
78
|
+
|
|
79
|
+
## 🚀 Instalación
|
|
80
|
+
|
|
81
|
+
### Desde npm (Recomendado)
|
|
82
|
+
|
|
83
|
+
```bash
|
|
84
|
+
# Instalación global
|
|
85
|
+
npm install -g maven-quality-mcp
|
|
86
|
+
|
|
87
|
+
# Verificar instalación
|
|
88
|
+
maven-quality-mcp --version
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
### Desde Código Fuente
|
|
92
|
+
|
|
93
|
+
```bash
|
|
94
|
+
# 1. Clonar el repositorio
|
|
95
|
+
git clone <url-del-repositorio>
|
|
96
|
+
cd maven-quality-mcp
|
|
97
|
+
|
|
98
|
+
# 2. Instalar dependencias
|
|
99
|
+
npm install
|
|
100
|
+
|
|
101
|
+
# 3. Compilar el proyecto
|
|
102
|
+
npm run build
|
|
103
|
+
|
|
104
|
+
# 4. Verificar instalación
|
|
105
|
+
node dist/index.js
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
## ⚙️ Configuración
|
|
109
|
+
|
|
110
|
+
### Configuración en Cell CLI (Instalación Global)
|
|
111
|
+
|
|
112
|
+
**Opción 1: Usando comando (Recomendado)**
|
|
113
|
+
|
|
114
|
+
```bash
|
|
115
|
+
cell mcp add maven-quality maven-quality-mcp
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
**Opción 2: Configuración manual**
|
|
119
|
+
|
|
120
|
+
1. **Localiza el archivo de configuración:**
|
|
121
|
+
- `~/.cell/settings.json` (Linux/macOS)
|
|
122
|
+
- `%USERPROFILE%\.cell\settings.json` (Windows)
|
|
123
|
+
|
|
124
|
+
2. **Agrega el servidor MCP:**
|
|
125
|
+
|
|
126
|
+
```json
|
|
127
|
+
{
|
|
128
|
+
"mcpServers": {
|
|
129
|
+
"maven-quality": {
|
|
130
|
+
"command": "maven-quality-mcp",
|
|
131
|
+
"env": {
|
|
132
|
+
"MCP_ROOT": "/ruta/donde/guardar/logs",
|
|
133
|
+
"LOG_LEVEL": "info"
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
**Ejemplo Windows:**
|
|
141
|
+
```json
|
|
142
|
+
{
|
|
143
|
+
"mcpServers": {
|
|
144
|
+
"maven-quality": {
|
|
145
|
+
"command": "maven-quality-mcp",
|
|
146
|
+
"env": {
|
|
147
|
+
"MCP_ROOT": "C:\\Users\\TuUsuario\\maven-quality-logs",
|
|
148
|
+
"LOG_LEVEL": "info"
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
3. **Reinicia Cell CLI**
|
|
156
|
+
|
|
157
|
+
---
|
|
158
|
+
|
|
159
|
+
### Configuración en Cell CLI (Instalación desde Código Fuente)
|
|
160
|
+
|
|
161
|
+
**Opción 1: Usando comando**
|
|
162
|
+
|
|
163
|
+
```bash
|
|
164
|
+
cell mcp add maven-quality node /ruta/completa/maven-quality-mcp/dist/index.js
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
**Opción 2: Configuración manual**
|
|
168
|
+
|
|
169
|
+
```json
|
|
170
|
+
{
|
|
171
|
+
"mcpServers": {
|
|
172
|
+
"maven-quality": {
|
|
173
|
+
"command": "node",
|
|
174
|
+
"args": ["/ruta/completa/maven-quality-mcp/dist/index.js"],
|
|
175
|
+
"env": {
|
|
176
|
+
"MCP_ROOT": "/ruta/completa/maven-quality-mcp",
|
|
177
|
+
"LOG_LEVEL": "info"
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
### Variables de Entorno
|
|
185
|
+
|
|
186
|
+
| Variable | Valores | Descripción |
|
|
187
|
+
|----------|---------|-------------|
|
|
188
|
+
| `MCP_ROOT` | Ruta absoluta | **Requerido**. Directorio raíz del MCP donde se escriben los logs |
|
|
189
|
+
| `LOG_LEVEL` | `debug`, `info`, `warn`, `error` | Nivel de detalle de logs (default: `info`) |
|
|
190
|
+
| `NVD_API_KEY` | API key string | **Opcional**. API key de NVD para escaneos 10x más rápidos (gratis en https://nvd.nist.gov/developers/request-an-api-key) |
|
|
191
|
+
|
|
192
|
+
**Niveles de Log:**
|
|
193
|
+
- `debug` - Muestra todos los logs (debug, info, warn, error) - **Recomendado para desarrollo**
|
|
194
|
+
- `info` - Muestra info, warn, error (default)
|
|
195
|
+
- `warn` - Muestra solo warn y error
|
|
196
|
+
- `error` - Muestra solo errores críticos
|
|
197
|
+
|
|
198
|
+
**NVD API Key:**
|
|
199
|
+
- **Sin API key**: Escaneos funcionan pero son lentos (10-15 min primera vez, 30-60 seg después)
|
|
200
|
+
- **Con API key**: Escaneos 10x más rápidos (2-3 min primera vez, 10-20 seg después)
|
|
201
|
+
- **Es gratis**: Obtén uno en 5 minutos en https://nvd.nist.gov/developers/request-an-api-key
|
|
202
|
+
- Ver instrucciones detalladas en la sección de `maven_dependency_analyze`
|
|
203
|
+
|
|
204
|
+
### Verificar Configuración
|
|
205
|
+
|
|
206
|
+
```bash
|
|
207
|
+
# Ver servidores MCP configurados (Cell CLI)
|
|
208
|
+
cell mcp list
|
|
209
|
+
|
|
210
|
+
# Probar conexión
|
|
211
|
+
cell "Hola, ¿qué herramientas Maven tienes disponibles?"
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
## 💡 Uso
|
|
215
|
+
|
|
216
|
+
### Uso Básico con Cell CLI
|
|
217
|
+
|
|
218
|
+
Una vez configurado, simplemente usa lenguaje natural:
|
|
219
|
+
|
|
220
|
+
```bash
|
|
221
|
+
cd /ruta/a/tu/proyecto
|
|
222
|
+
cell "Analiza la calidad de mi proyecto Maven"
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
Cell CLI automáticamente usará las herramientas MCP según sea necesario.
|
|
226
|
+
|
|
227
|
+
### Ejemplos de Comandos
|
|
228
|
+
|
|
229
|
+
#### Configurar Herramientas de Calidad
|
|
230
|
+
|
|
231
|
+
```bash
|
|
232
|
+
cell "Configura las herramientas de calidad en mi proyecto"
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
Cell CLI ejecutará `maven_setup_quality` y configurará todos los plugins necesarios.
|
|
236
|
+
|
|
237
|
+
#### Analizar Código
|
|
238
|
+
|
|
239
|
+
```bash
|
|
240
|
+
cell "¿Qué problemas de calidad tiene mi código?"
|
|
241
|
+
```
|
|
242
|
+
|
|
243
|
+
Cell CLI ejecutará `maven_analyze` y te mostrará un reporte detallado.
|
|
244
|
+
|
|
245
|
+
#### Corregir Problemas de Estilo
|
|
246
|
+
|
|
247
|
+
```bash
|
|
248
|
+
cell "Arregla los problemas de formateo en mi código"
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
Cell CLI ejecutará `maven_fix_style` y aplicará las correcciones.
|
|
252
|
+
|
|
253
|
+
### Flujo de Trabajo Completo
|
|
254
|
+
|
|
255
|
+
```bash
|
|
256
|
+
$ cd /home/user/mi-proyecto
|
|
257
|
+
$ cell "Mejora la calidad de mi proyecto Maven"
|
|
258
|
+
|
|
259
|
+
Cell CLI: "Voy a analizar y mejorar la calidad de tu proyecto..."
|
|
260
|
+
|
|
261
|
+
[Ejecuta maven_setup_quality]
|
|
262
|
+
✅ Plugins configurados
|
|
263
|
+
|
|
264
|
+
[Ejecuta maven_analyze]
|
|
265
|
+
📊 Encontrados:
|
|
266
|
+
- 23 bugs (5 críticos)
|
|
267
|
+
- 156 violaciones de estilo
|
|
268
|
+
- 45% cobertura de código
|
|
269
|
+
|
|
270
|
+
[Ejecuta maven_fix_style]
|
|
271
|
+
✅ Corregidas 156 violaciones de estilo
|
|
272
|
+
|
|
273
|
+
Cell CLI: "He mejorado el formateo del código. Quedan 5 bugs críticos que requieren revisión manual:
|
|
274
|
+
1. PaymentService.java:45 - Posible NullPointerException
|
|
275
|
+
[Muestra código y sugerencia]
|
|
276
|
+
..."
|
|
277
|
+
```
|
|
278
|
+
|
|
279
|
+
## 🛠️ Herramientas Disponibles
|
|
280
|
+
|
|
281
|
+
El servidor proporciona **8 herramientas MCP** (5 para análisis de calidad + 3 para migraciones Java/Spring):
|
|
282
|
+
|
|
283
|
+
### 1. `maven_setup_quality`
|
|
284
|
+
|
|
285
|
+
**Descripción**: Configura automáticamente los plugins de calidad en el `pom.xml`
|
|
286
|
+
|
|
287
|
+
**Parámetros**:
|
|
288
|
+
- `projectPath` (string, requerido): Ruta al proyecto Maven
|
|
289
|
+
|
|
290
|
+
**Qué hace**:
|
|
291
|
+
- Detecta versión de Java del proyecto
|
|
292
|
+
- Configura SpotBugs, Checkstyle, PMD, JaCoCo
|
|
293
|
+
- Usa versiones compatibles con la versión de Java
|
|
294
|
+
- Mantiene configuración existente
|
|
295
|
+
|
|
296
|
+
**Ejemplo de salida**:
|
|
297
|
+
```json
|
|
298
|
+
{
|
|
299
|
+
"success": true,
|
|
300
|
+
"javaVersion": "17",
|
|
301
|
+
"pluginsConfigured": ["spotbugs", "checkstyle", "pmd", "jacoco"],
|
|
302
|
+
"message": "Quality plugins configured successfully for Java 17"
|
|
303
|
+
}
|
|
304
|
+
```
|
|
305
|
+
|
|
306
|
+
### 2. `maven_analyze`
|
|
307
|
+
|
|
308
|
+
**Descripción**: Ejecuta análisis completo de calidad y retorna reporte estructurado
|
|
309
|
+
|
|
310
|
+
**Parámetros**:
|
|
311
|
+
- `projectPath` (string, requerido): Ruta al proyecto Maven
|
|
312
|
+
|
|
313
|
+
**Qué hace**:
|
|
314
|
+
- Ejecuta `mvn clean verify -Pquality -fn` (`-fn` = fail-never)
|
|
315
|
+
- Continúa análisis incluso si tests fallan (enfoque híbrido)
|
|
316
|
+
- Parsea reportes de SpotBugs, Checkstyle, PMD, JaCoCo
|
|
317
|
+
- Detecta tests fallidos y marca cobertura como "unreliable" si aplica
|
|
318
|
+
- **Manejo inteligente de errores**: Detecta y reporta errores específicos de Maven
|
|
319
|
+
- Agrupa y prioriza problemas
|
|
320
|
+
- Retorna JSON estructurado con advertencias claras
|
|
321
|
+
|
|
322
|
+
**Detección de Errores Maven**:
|
|
323
|
+
Cuando Maven falla o no genera reportes, el sistema detecta automáticamente el tipo de error:
|
|
324
|
+
- **Errores de red**: Timeout, conexión rechazada, repositorios inaccesibles
|
|
325
|
+
- **Errores de compilación**: Errores de sintaxis en código Java
|
|
326
|
+
- **Dependencias faltantes**: Artefactos no encontrados en repositorios
|
|
327
|
+
- **Configuración faltante**: Perfil de calidad no configurado (sugiere `maven_setup_quality`)
|
|
328
|
+
- **Problemas de recursos**: Memoria insuficiente, espacio en disco, permisos
|
|
329
|
+
- **Timeout**: Comando Maven excede tiempo máximo de ejecución
|
|
330
|
+
|
|
331
|
+
Esto evita mensajes confusos y proporciona soluciones específicas para cada tipo de error.
|
|
332
|
+
|
|
333
|
+
**Manejo de Tests Fallidos**:
|
|
334
|
+
- Los tests pueden fallar sin detener el análisis
|
|
335
|
+
- Se detectan y reportan tests fallidos
|
|
336
|
+
- Las métricas de cobertura se marcan como potencialmente inexactas
|
|
337
|
+
- Se incluyen advertencias visibles en el reporte formateado
|
|
338
|
+
- La IA recibe toda la información para tomar decisiones informadas
|
|
339
|
+
|
|
340
|
+
**Ejemplo de salida (tests pasando)**:
|
|
341
|
+
```json
|
|
342
|
+
{
|
|
343
|
+
"success": true,
|
|
344
|
+
"spotbugs": {
|
|
345
|
+
"totalBugs": 23,
|
|
346
|
+
"critical": [
|
|
347
|
+
{
|
|
348
|
+
"type": "NP_NULL_ON_SOME_PATH",
|
|
349
|
+
"file": "PaymentService.java",
|
|
350
|
+
"line": 45,
|
|
351
|
+
"message": "Posible null pointer dereference"
|
|
352
|
+
}
|
|
353
|
+
],
|
|
354
|
+
"high": [...],
|
|
355
|
+
"medium": [...]
|
|
356
|
+
},
|
|
357
|
+
"checkstyle": {
|
|
358
|
+
"totalViolations": 156,
|
|
359
|
+
"errors": [...],
|
|
360
|
+
"warnings": [...],
|
|
361
|
+
"autoFixable": 142
|
|
362
|
+
},
|
|
363
|
+
"pmd": {
|
|
364
|
+
"totalIssues": 18,
|
|
365
|
+
"issues": [...]
|
|
366
|
+
},
|
|
367
|
+
"jacoco": {
|
|
368
|
+
"lineCoverage": 45.2,
|
|
369
|
+
"branchCoverage": 38.7,
|
|
370
|
+
"uncoveredClasses": [...]
|
|
371
|
+
},
|
|
372
|
+
"formattedReport": "# 🔍 ANÁLISIS DE CALIDAD\n\n..."
|
|
373
|
+
}
|
|
374
|
+
```
|
|
375
|
+
|
|
376
|
+
**Ejemplo de salida (con tests fallidos)**:
|
|
377
|
+
```json
|
|
378
|
+
{
|
|
379
|
+
"success": true,
|
|
380
|
+
"spotbugs": { ... },
|
|
381
|
+
"checkstyle": { ... },
|
|
382
|
+
"pmd": { ... },
|
|
383
|
+
"jacoco": {
|
|
384
|
+
"lineCoverage": 45.2,
|
|
385
|
+
"branchCoverage": 38.7,
|
|
386
|
+
"uncoveredClasses": [...],
|
|
387
|
+
"unreliable": true
|
|
388
|
+
},
|
|
389
|
+
"warnings": {
|
|
390
|
+
"testFailures": {
|
|
391
|
+
"testsRun": 150,
|
|
392
|
+
"failures": 2,
|
|
393
|
+
"errors": 1,
|
|
394
|
+
"failedTestDetails": [
|
|
395
|
+
"UserServiceTest.shouldValidateEmail",
|
|
396
|
+
"PaymentProcessorTest.shouldProcessPayment",
|
|
397
|
+
"ValidationUtilsTest.shouldCheckFormat"
|
|
398
|
+
]
|
|
399
|
+
},
|
|
400
|
+
"message": "3 test(s) failed. Coverage metrics may be unreliable."
|
|
401
|
+
},
|
|
402
|
+
"formattedReport": "# 🔍 ANÁLISIS DE CALIDAD\n\n## ⚠️ ADVERTENCIA - Tests Fallidos\n\n**3 test(s) fallaron de 150 ejecutados**\n\n⚠️ La cobertura de código reportada puede ser **INEXACTA**..."
|
|
403
|
+
}
|
|
404
|
+
```
|
|
405
|
+
|
|
406
|
+
### 3. `maven_fix_style`
|
|
407
|
+
|
|
408
|
+
**Descripción**: Aplica correcciones automáticas de estilo
|
|
409
|
+
|
|
410
|
+
**Parámetros**:
|
|
411
|
+
- `projectPath` (string, requerido): Ruta al proyecto Maven
|
|
412
|
+
|
|
413
|
+
**Qué hace**:
|
|
414
|
+
- Ejecuta `mvn spotless:apply`
|
|
415
|
+
- Aplica Google Java Format
|
|
416
|
+
- Corrige imports no utilizados
|
|
417
|
+
- Normaliza indentación y espacios en blanco
|
|
418
|
+
- 100% seguro: solo cambios de formato, sin tocar lógica
|
|
419
|
+
|
|
420
|
+
**Ejemplo de salida**:
|
|
421
|
+
```json
|
|
422
|
+
{
|
|
423
|
+
"success": true,
|
|
424
|
+
"filesModified": 34,
|
|
425
|
+
"breakdown": {
|
|
426
|
+
"imports": 45,
|
|
427
|
+
"indentation": 78,
|
|
428
|
+
"whitespace": 19
|
|
429
|
+
}
|
|
430
|
+
}
|
|
431
|
+
```
|
|
432
|
+
|
|
433
|
+
### 4. `maven_dependency_analyze`
|
|
434
|
+
|
|
435
|
+
**Descripción**: Analiza dependencias del proyecto para encontrar actualizaciones, problemas y vulnerabilidades de seguridad
|
|
436
|
+
|
|
437
|
+
**Parámetros**:
|
|
438
|
+
- `projectPath` (string, requerido): Ruta al proyecto Maven
|
|
439
|
+
- `checkVulnerabilities` (boolean, opcional, default: false): Escanear vulnerabilidades CVE conocidas
|
|
440
|
+
- `timeout` (number, opcional): Timeout en milisegundos
|
|
441
|
+
|
|
442
|
+
**Qué hace**:
|
|
443
|
+
- Detecta dependencias desactualizadas con versiones disponibles
|
|
444
|
+
- Identifica dependencias declaradas pero no usadas
|
|
445
|
+
- Encuentra dependencias usadas pero no declaradas explícitamente
|
|
446
|
+
- Escanea vulnerabilidades CVE con OWASP Dependency-Check (opcional)
|
|
447
|
+
|
|
448
|
+
**Análisis Rápido (sin vulnerabilidades, ~20 segundos)**:
|
|
449
|
+
```json
|
|
450
|
+
{
|
|
451
|
+
"success": true,
|
|
452
|
+
"executionTime": 18.5,
|
|
453
|
+
"summary": {
|
|
454
|
+
"total": 45,
|
|
455
|
+
"direct": 12,
|
|
456
|
+
"transitive": 33
|
|
457
|
+
},
|
|
458
|
+
"outdated": [
|
|
459
|
+
{
|
|
460
|
+
"groupId": "junit",
|
|
461
|
+
"artifactId": "junit",
|
|
462
|
+
"currentVersion": "4.12",
|
|
463
|
+
"latestVersion": "4.13.2"
|
|
464
|
+
}
|
|
465
|
+
],
|
|
466
|
+
"unused": [
|
|
467
|
+
{
|
|
468
|
+
"groupId": "commons-lang3",
|
|
469
|
+
"artifactId": "commons-lang3",
|
|
470
|
+
"version": "3.12.0"
|
|
471
|
+
}
|
|
472
|
+
],
|
|
473
|
+
"undeclared": [],
|
|
474
|
+
"formattedReport": "# 📦 ANÁLISIS DE DEPENDENCIAS\n\n..."
|
|
475
|
+
}
|
|
476
|
+
```
|
|
477
|
+
|
|
478
|
+
**Análisis Completo con CVEs (primera vez: 10-15 min, luego: 30-60 seg)**:
|
|
479
|
+
```json
|
|
480
|
+
{
|
|
481
|
+
"success": true,
|
|
482
|
+
"executionTime": 45.2,
|
|
483
|
+
"summary": { ... },
|
|
484
|
+
"outdated": [ ... ],
|
|
485
|
+
"unused": [ ... ],
|
|
486
|
+
"undeclared": [ ... ],
|
|
487
|
+
"vulnerabilities": {
|
|
488
|
+
"scanned": true,
|
|
489
|
+
"critical": [
|
|
490
|
+
{
|
|
491
|
+
"name": "CVE-2021-44228",
|
|
492
|
+
"severity": "CRITICAL",
|
|
493
|
+
"cvssScore": 10.0,
|
|
494
|
+
"cve": "CVE-2021-44228",
|
|
495
|
+
"description": "Apache Log4j2 Remote Code Execution (Log4Shell)",
|
|
496
|
+
"dependency": "log4j-core-2.14.1.jar",
|
|
497
|
+
"references": ["https://nvd.nist.gov/vuln/detail/CVE-2021-44228"]
|
|
498
|
+
}
|
|
499
|
+
],
|
|
500
|
+
"high": [ ... ],
|
|
501
|
+
"medium": [ ... ],
|
|
502
|
+
"low": [ ... ],
|
|
503
|
+
"totalCount": 5
|
|
504
|
+
},
|
|
505
|
+
"formattedReport": "..."
|
|
506
|
+
}
|
|
507
|
+
```
|
|
508
|
+
|
|
509
|
+
**Nota sobre Vulnerabilidades**:
|
|
510
|
+
⚠️ La primera ejecución con `checkVulnerabilities: true` descarga la base de datos de CVE (~250MB) que toma 10-15 minutos. Esta descarga se hace automáticamente en background durante `npm install`, pero puede que aún no esté lista. Ejecuciones posteriores son rápidas (30-60 seg).
|
|
511
|
+
|
|
512
|
+
**⚡ Acelera los Scans 10x con NVD API Key (Recomendado)**:
|
|
513
|
+
|
|
514
|
+
El escaneo de vulnerabilidades puede ser **10x más rápido** con un API key gratuito de NVD:
|
|
515
|
+
|
|
516
|
+
| Operación | Sin API Key 🐌 | Con API Key 🚀 |
|
|
517
|
+
|-----------|----------------|----------------|
|
|
518
|
+
| Primera descarga | 10-15 min | 2-3 min |
|
|
519
|
+
| Scan normal | 30-60 seg | 10-20 seg |
|
|
520
|
+
|
|
521
|
+
**Cómo obtener tu API Key (5 minutos):**
|
|
522
|
+
|
|
523
|
+
1. **Solicitar**: https://nvd.nist.gov/developers/request-an-api-key
|
|
524
|
+
2. **Llenar formulario**: Nombre, email, tipo de organización
|
|
525
|
+
3. **Recibir email** con link de activación (inmediato)
|
|
526
|
+
4. **Activar y copiar** el API key (solo se muestra una vez)
|
|
527
|
+
5. **Configurar en Cell CLI**:
|
|
528
|
+
|
|
529
|
+
```json
|
|
530
|
+
{
|
|
531
|
+
"mcpServers": {
|
|
532
|
+
"maven-quality": {
|
|
533
|
+
"command": "node",
|
|
534
|
+
"args": ["/ruta/maven-quality-mcp/dist/index.js"],
|
|
535
|
+
"env": {
|
|
536
|
+
"MCP_ROOT": "/ruta/maven-quality-mcp",
|
|
537
|
+
"LOG_LEVEL": "info",
|
|
538
|
+
"NVD_API_KEY": "tu-api-key-aqui"
|
|
539
|
+
}
|
|
540
|
+
}
|
|
541
|
+
}
|
|
542
|
+
}
|
|
543
|
+
```
|
|
544
|
+
|
|
545
|
+
6. **Reiniciar Cell CLI** y listo!
|
|
546
|
+
|
|
547
|
+
**Comandos útiles**:
|
|
548
|
+
```bash
|
|
549
|
+
# Ver estado de descarga de CVE database
|
|
550
|
+
npm run nvd-status
|
|
551
|
+
|
|
552
|
+
# Descargar manualmente base de datos CVE
|
|
553
|
+
npm run download-nvd
|
|
554
|
+
|
|
555
|
+
# Limpiar base de datos CVE (libera ~250MB)
|
|
556
|
+
npm run nvd-purge
|
|
557
|
+
```
|
|
558
|
+
|
|
559
|
+
---
|
|
560
|
+
|
|
561
|
+
## 🔄 Herramientas de Migración (OpenRewrite)
|
|
562
|
+
|
|
563
|
+
### 5. `maven_rewrite_discover`
|
|
564
|
+
|
|
565
|
+
**Descripción**: Descubre migraciones disponibles y recomienda path óptimo según tu proyecto
|
|
566
|
+
|
|
567
|
+
**Parámetros**:
|
|
568
|
+
- `projectPath` (string, requerido): Ruta al proyecto Maven
|
|
569
|
+
- `currentJavaVersion` (string, opcional): Versión actual de Java (se detecta automáticamente)
|
|
570
|
+
- `targetJavaVersion` (string, opcional): Versión objetivo (se sugiere automáticamente)
|
|
571
|
+
- `detectFrameworks` (boolean, opcional, default: true): Detectar frameworks usados
|
|
572
|
+
|
|
573
|
+
**Qué hace**:
|
|
574
|
+
- Detecta versión actual de Java del proyecto y del sistema
|
|
575
|
+
- Escanea frameworks: Spring Boot, JUnit, Mockito, Hibernate, Swagger, Logging
|
|
576
|
+
- Recomienda migraciones según frameworks detectados
|
|
577
|
+
- Sugiere target version automático (Java 8→11, 11→17, 17→21, 21→25)
|
|
578
|
+
- Genera advertencias sobre cambios incompatibles (Jakarta EE, SecurityManager, Log4j CVEs)
|
|
579
|
+
- Usa versiones dinámicas de OpenRewrite desde Maven Central (cache de 24h)
|
|
580
|
+
|
|
581
|
+
**Ejemplo de salida**:
|
|
582
|
+
```json
|
|
583
|
+
{
|
|
584
|
+
"success": true,
|
|
585
|
+
"currentJavaVersion": "11",
|
|
586
|
+
"frameworksDetected": {
|
|
587
|
+
"spring": { "version": "5.3.20", "springBoot": "2.7.0" },
|
|
588
|
+
"junit": { "version": "4" },
|
|
589
|
+
"logging": { "framework": "log4j", "version": "1.2.17" }
|
|
590
|
+
},
|
|
591
|
+
"availableMigrations": [
|
|
592
|
+
{
|
|
593
|
+
"id": "java-17",
|
|
594
|
+
"name": "Migrate to Java 17",
|
|
595
|
+
"category": "java",
|
|
596
|
+
"recommended": true,
|
|
597
|
+
"breakingChanges": true
|
|
598
|
+
},
|
|
599
|
+
{
|
|
600
|
+
"id": "spring-boot-2-to-3",
|
|
601
|
+
"name": "Spring Boot 2 to 3",
|
|
602
|
+
"category": "spring",
|
|
603
|
+
"recommended": true,
|
|
604
|
+
"requires": "java-17+"
|
|
605
|
+
},
|
|
606
|
+
{
|
|
607
|
+
"id": "junit4-to-junit5",
|
|
608
|
+
"name": "JUnit 4 to 5",
|
|
609
|
+
"category": "testing",
|
|
610
|
+
"recommended": true
|
|
611
|
+
}
|
|
612
|
+
],
|
|
613
|
+
"warnings": [
|
|
614
|
+
"Spring Boot 3.x requires Java 17+",
|
|
615
|
+
"Spring Boot 3.x uses Jakarta EE namespace (jakarta.* instead of javax.*)",
|
|
616
|
+
"⚠️ CRITICAL: Log4j 1.x has security vulnerabilities (CVE-2021-44228)"
|
|
617
|
+
],
|
|
618
|
+
"suggestedPath": [
|
|
619
|
+
"1. Migrate to Java 17 first (required for Spring Boot 3)",
|
|
620
|
+
"2. Upgrade to Spring Boot 3 (includes javax → jakarta migration)",
|
|
621
|
+
"3. Migrate JUnit 4 → JUnit 5 (modern testing best practices)",
|
|
622
|
+
"4. Update Log4j to 2.x (CRITICAL security fix)"
|
|
623
|
+
],
|
|
624
|
+
"versionsUsed": {
|
|
625
|
+
"rewrite-migrate-java": "2.35.0",
|
|
626
|
+
"rewrite-spring": "5.28.0",
|
|
627
|
+
"rewrite-testing-frameworks": "2.24.0"
|
|
628
|
+
}
|
|
629
|
+
}
|
|
630
|
+
```
|
|
631
|
+
|
|
632
|
+
### 6. `maven_rewrite_preview`
|
|
633
|
+
|
|
634
|
+
**Descripción**: Previsualiza cambios SIN modificar archivos (dry-run)
|
|
635
|
+
|
|
636
|
+
**Parámetros**:
|
|
637
|
+
- `projectPath` (string, requerido): Ruta al proyecto Maven
|
|
638
|
+
- `recipes` (string[], requerido): Recetas OpenRewrite a aplicar
|
|
639
|
+
|
|
640
|
+
**Qué hace**:
|
|
641
|
+
- Ejecuta OpenRewrite en modo `dryRun` (no modifica archivos)
|
|
642
|
+
- Muestra qué archivos cambiarán y estadísticas de líneas
|
|
643
|
+
- Identifica issues que requieren migración manual
|
|
644
|
+
- Parsea cambios en pom.xml (plugins, properties, dependencies)
|
|
645
|
+
- Genera reporte con top 5 errores críticos
|
|
646
|
+
- Timeout: 15 minutos
|
|
647
|
+
|
|
648
|
+
**Ejemplo de salida**:
|
|
649
|
+
```json
|
|
650
|
+
{
|
|
651
|
+
"success": true,
|
|
652
|
+
"executionTime": 45200,
|
|
653
|
+
"summary": {
|
|
654
|
+
"totalFilesAnalyzed": 120,
|
|
655
|
+
"filesWillChange": 45,
|
|
656
|
+
"linesAdded": 350,
|
|
657
|
+
"linesRemoved": 280
|
|
658
|
+
},
|
|
659
|
+
"fileChanges": [
|
|
660
|
+
{ "path": "src/main/java/App.java", "changeType": "modified" },
|
|
661
|
+
{ "path": "pom.xml", "changeType": "modified" }
|
|
662
|
+
],
|
|
663
|
+
"buildFileChanges": {
|
|
664
|
+
"pomUpdates": {
|
|
665
|
+
"propertiesChanged": {
|
|
666
|
+
"java.version": { "old": "11", "new": "17" }
|
|
667
|
+
},
|
|
668
|
+
"pluginsUpdated": ["maven-compiler-plugin: 3.8.1 → 3.10.1"]
|
|
669
|
+
}
|
|
670
|
+
},
|
|
671
|
+
"unmigratableIssues": [
|
|
672
|
+
{
|
|
673
|
+
"file": "src/main/java/Security.java",
|
|
674
|
+
"line": 100,
|
|
675
|
+
"issue": "SecurityManager removed",
|
|
676
|
+
"severity": "error",
|
|
677
|
+
"reason": "SecurityManager API removed in Java 21",
|
|
678
|
+
"suggestedAction": "Refactor to use alternative security mechanisms"
|
|
679
|
+
}
|
|
680
|
+
],
|
|
681
|
+
"unmigratableStats": {
|
|
682
|
+
"totalIssues": 5,
|
|
683
|
+
"errors": 2,
|
|
684
|
+
"warnings": 3,
|
|
685
|
+
"manualRequired": 2
|
|
686
|
+
}
|
|
687
|
+
}
|
|
688
|
+
```
|
|
689
|
+
|
|
690
|
+
### 7. `maven_rewrite_apply`
|
|
691
|
+
|
|
692
|
+
**Descripción**: Aplica migraciones con backup automático y validación
|
|
693
|
+
|
|
694
|
+
**Parámetros**:
|
|
695
|
+
- `projectPath` (string, requerido): Ruta al proyecto Maven
|
|
696
|
+
- `recipes` (string[], requerido): Recetas OpenRewrite a aplicar
|
|
697
|
+
- `createBackup` (boolean, opcional, default: true): Crear backup antes de aplicar
|
|
698
|
+
- `createGitCommit` (boolean, opcional, default: false): Crear commit de Git
|
|
699
|
+
- `validateAfter` (boolean, opcional, default: true): Validar compilación después
|
|
700
|
+
- `generateTodoFile` (boolean, opcional, default: true): Generar MIGRATION-TODO.md
|
|
701
|
+
- `insertCodeComments` (boolean, opcional, default: true): Insertar TODOs en código
|
|
702
|
+
|
|
703
|
+
**Qué hace**:
|
|
704
|
+
1. **Backup automático**: Copia el proyecto a `backup-{timestamp}/`
|
|
705
|
+
2. **Ejecución OpenRewrite**: Aplica recetas en modo `run`
|
|
706
|
+
3. **Parsing de resultados**: Extrae archivos modificados y estadísticas
|
|
707
|
+
4. **Detección de issues**: Identifica código que requiere migración manual
|
|
708
|
+
5. **Generación de TODO**: Crea `MIGRATION-TODO.md` con tareas pendientes
|
|
709
|
+
6. **Comentarios en código**: Inserta `// MIGRATION TODO:` en líneas problemáticas
|
|
710
|
+
7. **Validación**: Ejecuta `mvn clean compile -DskipTests` (5 min timeout)
|
|
711
|
+
8. **Git commit** (opcional): Crea commit con mensaje estructurado
|
|
712
|
+
9. **Rollback automático**: Restaura backup si falla
|
|
713
|
+
|
|
714
|
+
**Ejemplo de salida (migración exitosa)**:
|
|
715
|
+
```json
|
|
716
|
+
{
|
|
717
|
+
"success": true,
|
|
718
|
+
"executionTime": 52300,
|
|
719
|
+
"filesModified": 48,
|
|
720
|
+
"backupLocation": "/proyecto/backup-2025-01-15T10-30-00/",
|
|
721
|
+
"validationResult": {
|
|
722
|
+
"compiles": true
|
|
723
|
+
},
|
|
724
|
+
"todoFileGenerated": "/proyecto/MIGRATION-TODO.md",
|
|
725
|
+
"gitCommit": {
|
|
726
|
+
"hash": "a1b2c3d",
|
|
727
|
+
"message": "feat: Apply OpenRewrite migrations..."
|
|
728
|
+
},
|
|
729
|
+
"partialMigration": true,
|
|
730
|
+
"unmigratableIssues": [
|
|
731
|
+
{
|
|
732
|
+
"file": "src/main/java/Security.java",
|
|
733
|
+
"line": 100,
|
|
734
|
+
"issue": "SecurityManager removed",
|
|
735
|
+
"severity": "error",
|
|
736
|
+
"autoFixable": false
|
|
737
|
+
}
|
|
738
|
+
],
|
|
739
|
+
"postMigrationSteps": [
|
|
740
|
+
"1. Review MIGRATION-TODO.md for 2 manual tasks",
|
|
741
|
+
"2. Fix issues marked as errors (blockers)",
|
|
742
|
+
"3. Run full test suite: mvn clean verify",
|
|
743
|
+
"4. Test application startup and basic functionality",
|
|
744
|
+
"5. Review and update documentation"
|
|
745
|
+
]
|
|
746
|
+
}
|
|
747
|
+
```
|
|
748
|
+
|
|
749
|
+
**Recetas OpenRewrite más comunes**:
|
|
750
|
+
```bash
|
|
751
|
+
# Java Migrations
|
|
752
|
+
org.openrewrite.java.migrate.Java11
|
|
753
|
+
org.openrewrite.java.migrate.Java17
|
|
754
|
+
org.openrewrite.java.migrate.Java21
|
|
755
|
+
|
|
756
|
+
# Spring Boot
|
|
757
|
+
org.openrewrite.java.spring.boot3.UpgradeSpringBoot_3_0
|
|
758
|
+
org.openrewrite.java.spring.boot3.UpgradeSpringBoot_3_1
|
|
759
|
+
org.openrewrite.java.spring.boot3.UpgradeSpringBoot_3_2
|
|
760
|
+
|
|
761
|
+
# Jakarta EE (javax → jakarta)
|
|
762
|
+
org.openrewrite.java.migrate.jakarta.JavaxMigrationToJakarta
|
|
763
|
+
|
|
764
|
+
# Testing
|
|
765
|
+
org.openrewrite.java.testing.junit5.JUnit5BestPractices
|
|
766
|
+
org.openrewrite.java.testing.mockito.Mockito1to5Migration
|
|
767
|
+
```
|
|
768
|
+
|
|
769
|
+
**Notas importantes**:
|
|
770
|
+
- ⚠️ El backup consume espacio en disco temporal
|
|
771
|
+
- 🔄 Usa `validateAfter: true` para detectar problemas de compilación inmediatamente
|
|
772
|
+
- 📝 El archivo MIGRATION-TODO.md incluye enlaces a documentación oficial
|
|
773
|
+
- 🔍 Los comentarios insertados tienen formato `// MIGRATION TODO (error): {descripción}`
|
|
774
|
+
- ⏱️ Primera ejecución descarga dependencias de OpenRewrite (~2-5 min)
|
|
775
|
+
|
|
776
|
+
---
|
|
777
|
+
|
|
778
|
+
## 🏗️ Arquitectura del Proyecto
|
|
779
|
+
|
|
780
|
+
### Estructura de Directorios
|
|
781
|
+
|
|
782
|
+
```
|
|
783
|
+
maven-quality-mcp-server/
|
|
784
|
+
├── src/
|
|
785
|
+
│ ├── index.ts # Punto de entrada del servidor MCP
|
|
786
|
+
│ ├── server.ts # Clase principal MavenQualityServer
|
|
787
|
+
│ ├── core/ # 8 componentes core
|
|
788
|
+
│ │ ├── backup_manager.ts # Gestor de backups y rollback
|
|
789
|
+
│ │ ├── framework_detector.ts # Detector de frameworks (Spring, JUnit, etc.)
|
|
790
|
+
│ │ ├── java_detector.ts # Detector de versión Java
|
|
791
|
+
│ │ ├── maven_executor.ts # Ejecutor de comandos Maven con timeout
|
|
792
|
+
│ │ ├── pom_modifier.ts # Modificador de pom.xml
|
|
793
|
+
│ │ ├── recipe_manager.ts # Gestor de recetas OpenRewrite
|
|
794
|
+
│ │ ├── rewrite_executor.ts # Ejecutor de migraciones OpenRewrite
|
|
795
|
+
│ │ └── rewrite_version_manager.ts # Gestor de versiones dinámicas
|
|
796
|
+
│ ├── parsers/ # 8 parsers especializados
|
|
797
|
+
│ │ ├── checkstyle_parser.ts # Parser de reportes Checkstyle
|
|
798
|
+
│ │ ├── dependency_parser.ts # Parser de análisis de dependencias
|
|
799
|
+
│ │ ├── jacoco_parser.ts # Parser de reportes JaCoCo
|
|
800
|
+
│ │ ├── migration_todo_generator.ts # Generador de MIGRATION-TODO.md
|
|
801
|
+
│ │ ├── pmd_parser.ts # Parser de reportes PMD
|
|
802
|
+
│ │ ├── rewrite_issues_parser.ts # Parser de issues no migrables
|
|
803
|
+
│ │ ├── rewrite_result_parser.ts # Parser de resultados OpenRewrite
|
|
804
|
+
│ │ └── spotbugs_parser.ts # Parser de reportes SpotBugs
|
|
805
|
+
│ ├── tools/ # 8 herramientas MCP
|
|
806
|
+
│ │ ├── analyze.ts # Herramienta: analizar calidad
|
|
807
|
+
│ │ ├── dependency_analyze.ts # Herramienta: analizar dependencias
|
|
808
|
+
│ │ ├── fix_style.ts # Herramienta: corregir estilo
|
|
809
|
+
│ │ ├── rewrite_apply.ts # Herramienta: aplicar migraciones
|
|
810
|
+
│ │ ├── rewrite_discover.ts # Herramienta: descubrir migraciones
|
|
811
|
+
│ │ ├── rewrite_preview.ts # Herramienta: previsualizar migraciones
|
|
812
|
+
│ │ ├── setup_quality.ts # Herramienta: configurar plugins
|
|
813
|
+
│ │ └── vulnerability_scan.ts # Herramienta: escanear vulnerabilidades
|
|
814
|
+
│ ├── types/ # Definiciones TypeScript
|
|
815
|
+
│ │ ├── analysis.ts # Tipos de análisis
|
|
816
|
+
│ │ ├── index.ts # Tipos base
|
|
817
|
+
│ │ └── rewrite.ts # Tipos de OpenRewrite
|
|
818
|
+
│ └── utils/ # 3 utilidades
|
|
819
|
+
│ ├── error_classifier.ts # Clasificador de errores Maven
|
|
820
|
+
│ ├── logger.ts # Sistema de logging (Winston)
|
|
821
|
+
│ └── version_comparator.ts # Comparador de versiones semánticas
|
|
822
|
+
├── tests/ # 26 suites, 545 tests, 91.69% cobertura
|
|
823
|
+
│ ├── core/ # 8 test suites
|
|
824
|
+
│ ├── parsers/ # 8 test suites
|
|
825
|
+
│ ├── tools/ # 8 test suites
|
|
826
|
+
│ └── utils/ # 2 test suites
|
|
827
|
+
├── config/
|
|
828
|
+
│ ├── plugin-versions.json # Versiones de plugins por Java version
|
|
829
|
+
│ └── rewrite-recipes.json # 40+ recetas OpenRewrite catalogadas
|
|
830
|
+
├── scripts/ # Scripts de utilidad
|
|
831
|
+
│ ├── check-nvd-status.js # Verificar estado de descarga CVE
|
|
832
|
+
│ ├── copy-config.cjs # Copiar config al directorio dist
|
|
833
|
+
│ └── nvd-background-download.js # Descarga CVE database en background
|
|
834
|
+
├── docs/ # Documentación técnica (C4 diagrams)
|
|
835
|
+
│ ├── c4-component.md # C4 Component diagram
|
|
836
|
+
│ ├── c4-container.md # C4 Container diagram
|
|
837
|
+
│ ├── c4-context.md # C4 Context diagram
|
|
838
|
+
│ ├── openrewrite-integration-plan.md # Plan de integración OpenRewrite
|
|
839
|
+
│ ├── README.md # Índice de documentación
|
|
840
|
+
│ └── sequence-diagrams.md # Diagramas de secuencia de las 8 herramientas
|
|
841
|
+
├── dist/ # Código compilado (generado por TypeScript)
|
|
842
|
+
├── coverage/ # Reportes de cobertura de tests
|
|
843
|
+
├── CHANGELOG.md # Log de desarrollo
|
|
844
|
+
├── IMPLEMENTATION_STATUS.md # Estado de implementación de features
|
|
845
|
+
├── MVP_DELIVERY_SUMMARY.md # Resumen de entrega del MVP
|
|
846
|
+
├── package.json # Dependencias y scripts
|
|
847
|
+
├── tsconfig.json # Configuración de TypeScript
|
|
848
|
+
└── jest.config.js # Configuración de Jest (ESM mode)
|
|
849
|
+
```
|
|
850
|
+
|
|
851
|
+
### Diagrama de Arquitectura (C4 - Contexto)
|
|
852
|
+
|
|
853
|
+
```mermaid
|
|
854
|
+
graph TB
|
|
855
|
+
Dev[Desarrollador Java] -->|Comandos| Cell[Cell CLI]
|
|
856
|
+
Cell -->|MCP/stdio| MCP[Maven Quality MCP Server]
|
|
857
|
+
MCP -->|Ejecuta| Maven[Apache Maven]
|
|
858
|
+
Maven -->|Invoca| Tools[Herramientas de Calidad<br/>SpotBugs, Checkstyle, PMD, JaCoCo]
|
|
859
|
+
MCP -->|Lee reportes| Tools
|
|
860
|
+
|
|
861
|
+
style MCP fill:#90EE90
|
|
862
|
+
style Cell fill:#87CEEB
|
|
863
|
+
style Maven fill:#FFB6C1
|
|
864
|
+
style Tools fill:#DDA0DD
|
|
865
|
+
```
|
|
866
|
+
|
|
867
|
+
### Flujo de Datos Detallado
|
|
868
|
+
|
|
869
|
+
```mermaid
|
|
870
|
+
sequenceDiagram
|
|
871
|
+
participant Cell as Cell CLI
|
|
872
|
+
participant MCP as MCP Server
|
|
873
|
+
participant Tool as Tool Handler
|
|
874
|
+
participant Exec as Maven Executor
|
|
875
|
+
participant Parser as XML Parsers
|
|
876
|
+
|
|
877
|
+
Cell->>MCP: Invoca herramienta MCP
|
|
878
|
+
MCP->>Tool: Delega ejecución
|
|
879
|
+
Tool->>Exec: Ejecuta Maven
|
|
880
|
+
Exec-->>Tool: Resultado
|
|
881
|
+
Tool->>Parser: Parsea reportes XML
|
|
882
|
+
Parser-->>Tool: Datos estructurados
|
|
883
|
+
Tool-->>MCP: Respuesta JSON
|
|
884
|
+
MCP-->>Cell: Resultado final
|
|
885
|
+
```
|
|
886
|
+
|
|
887
|
+
### 📐 Documentación Completa de Arquitectura
|
|
888
|
+
|
|
889
|
+
Para una comprensión profunda de la arquitectura, consulta la [documentación técnica completa](./docs/):
|
|
890
|
+
|
|
891
|
+
- **[Diagrama C4 - Contexto](./docs/c4-context.md)**: Vista general del sistema
|
|
892
|
+
- **[Diagrama C4 - Contenedores](./docs/c4-container.md)**: Módulos y aplicaciones
|
|
893
|
+
- **[Diagrama C4 - Componentes](./docs/c4-component.md)**: Componentes internos
|
|
894
|
+
- **[Diagramas de Secuencia](./docs/sequence-diagrams.md)**: Flujos de ejecución de cada herramienta
|
|
895
|
+
|
|
896
|
+
## 👨💻 Desarrollo
|
|
897
|
+
|
|
898
|
+
### Configurar Entorno de Desarrollo
|
|
899
|
+
|
|
900
|
+
```bash
|
|
901
|
+
# 1. Instalar dependencias
|
|
902
|
+
npm install
|
|
903
|
+
|
|
904
|
+
# 2. Compilar en modo watch
|
|
905
|
+
npm run dev
|
|
906
|
+
|
|
907
|
+
# 3. En otra terminal, ejecutar tests en modo watch
|
|
908
|
+
npm run test:watch
|
|
909
|
+
```
|
|
910
|
+
|
|
911
|
+
### Scripts Disponibles
|
|
912
|
+
|
|
913
|
+
```bash
|
|
914
|
+
# Compilar proyecto
|
|
915
|
+
npm run build
|
|
916
|
+
|
|
917
|
+
# Compilar en modo watch (desarrollo)
|
|
918
|
+
npm run dev
|
|
919
|
+
|
|
920
|
+
# Ejecutar tests
|
|
921
|
+
npm test
|
|
922
|
+
|
|
923
|
+
# Ejecutar tests con cobertura
|
|
924
|
+
npm run test:coverage
|
|
925
|
+
|
|
926
|
+
# Ejecutar tests en modo watch
|
|
927
|
+
npm run test:watch
|
|
928
|
+
|
|
929
|
+
# Linting
|
|
930
|
+
npm run lint
|
|
931
|
+
|
|
932
|
+
# Corregir problemas de linting
|
|
933
|
+
npm run lint:fix
|
|
934
|
+
|
|
935
|
+
# Formatear código
|
|
936
|
+
npm run format
|
|
937
|
+
```
|
|
938
|
+
|
|
939
|
+
### Estructura de un Test
|
|
940
|
+
|
|
941
|
+
```typescript
|
|
942
|
+
describe('ToolName', () => {
|
|
943
|
+
beforeEach(() => {
|
|
944
|
+
jest.clearAllMocks();
|
|
945
|
+
});
|
|
946
|
+
|
|
947
|
+
it('should do something', async () => {
|
|
948
|
+
// Arrange
|
|
949
|
+
const input = 'test';
|
|
950
|
+
|
|
951
|
+
// Act
|
|
952
|
+
const result = await tool.execute(input);
|
|
953
|
+
|
|
954
|
+
// Assert
|
|
955
|
+
expect(result).toBe(expected);
|
|
956
|
+
});
|
|
957
|
+
});
|
|
958
|
+
```
|
|
959
|
+
|
|
960
|
+
### Agregar Nueva Herramienta
|
|
961
|
+
|
|
962
|
+
1. **Crear archivo en `src/tools/`**:
|
|
963
|
+
|
|
964
|
+
```typescript
|
|
965
|
+
// src/tools/my_tool.ts
|
|
966
|
+
export const myToolDefinition = {
|
|
967
|
+
name: 'maven_my_tool',
|
|
968
|
+
description: 'Description of my tool',
|
|
969
|
+
inputSchema: {
|
|
970
|
+
type: 'object',
|
|
971
|
+
properties: {
|
|
972
|
+
projectPath: {
|
|
973
|
+
type: 'string',
|
|
974
|
+
description: 'Path to Maven project'
|
|
975
|
+
}
|
|
976
|
+
},
|
|
977
|
+
required: ['projectPath']
|
|
978
|
+
}
|
|
979
|
+
};
|
|
980
|
+
|
|
981
|
+
export async function handleMyTool(args: any) {
|
|
982
|
+
// Implementación
|
|
983
|
+
return { success: true };
|
|
984
|
+
}
|
|
985
|
+
```
|
|
986
|
+
|
|
987
|
+
2. **Registrar en `src/index.ts`**:
|
|
988
|
+
|
|
989
|
+
```typescript
|
|
990
|
+
import { myToolDefinition, handleMyTool } from './tools/my_tool';
|
|
991
|
+
|
|
992
|
+
server.setRequestHandler(ListToolsRequestSchema, async () => ({
|
|
993
|
+
tools: [
|
|
994
|
+
// ... otras herramientas
|
|
995
|
+
myToolDefinition
|
|
996
|
+
]
|
|
997
|
+
}));
|
|
998
|
+
|
|
999
|
+
server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
1000
|
+
if (request.params.name === 'maven_my_tool') {
|
|
1001
|
+
return await handleMyTool(request.params.arguments);
|
|
1002
|
+
}
|
|
1003
|
+
// ...
|
|
1004
|
+
});
|
|
1005
|
+
```
|
|
1006
|
+
|
|
1007
|
+
3. **Crear tests en `tests/tools/`**:
|
|
1008
|
+
|
|
1009
|
+
```typescript
|
|
1010
|
+
// tests/tools/my_tool.test.ts
|
|
1011
|
+
import { handleMyTool } from '../../src/tools/my_tool';
|
|
1012
|
+
|
|
1013
|
+
describe('MyTool', () => {
|
|
1014
|
+
it('should work correctly', async () => {
|
|
1015
|
+
// Test implementation
|
|
1016
|
+
});
|
|
1017
|
+
});
|
|
1018
|
+
```
|
|
1019
|
+
|
|
1020
|
+
## 🧪 Testing
|
|
1021
|
+
|
|
1022
|
+
### Ejecutar Tests
|
|
1023
|
+
|
|
1024
|
+
```bash
|
|
1025
|
+
# Todos los tests
|
|
1026
|
+
npm test
|
|
1027
|
+
|
|
1028
|
+
# Con cobertura
|
|
1029
|
+
npm run test:coverage
|
|
1030
|
+
|
|
1031
|
+
# Modo watch (desarrollo)
|
|
1032
|
+
npm run test:watch
|
|
1033
|
+
|
|
1034
|
+
# Test específico
|
|
1035
|
+
npm test -- spotbugs_parser.test.ts
|
|
1036
|
+
```
|
|
1037
|
+
|
|
1038
|
+
### Cobertura Actual
|
|
1039
|
+
|
|
1040
|
+
```
|
|
1041
|
+
--------------------|---------|----------|---------|---------|
|
|
1042
|
+
File | % Stmts | % Branch | % Funcs | % Lines |
|
|
1043
|
+
--------------------|---------|----------|---------|---------|
|
|
1044
|
+
All files | 91.69 | 84.6 | 92.09 | 92.2 |
|
|
1045
|
+
core | 83.92 | 77.17 | 83.63 | 84.52 |
|
|
1046
|
+
parsers | 96.01 | 87.29 | 97.61 | 97.15 |
|
|
1047
|
+
tools | 96.36 | 88.72 | 97.18 | 96.57 |
|
|
1048
|
+
utils | 90.9 | 87.3 | 96.15 | 90.37 |
|
|
1049
|
+
--------------------|---------|----------|---------|---------|
|
|
1050
|
+
```
|
|
1051
|
+
|
|
1052
|
+
✅ **545 tests pasando** en 26 suites con 0 fallos
|
|
1053
|
+
|
|
1054
|
+
### Tests por Componente
|
|
1055
|
+
|
|
1056
|
+
- **Parsers (8 suites)**: SpotBugs, Checkstyle, PMD, JaCoCo, Dependency, Rewrite Issues, Rewrite Result, Migration TODO Generator
|
|
1057
|
+
- **Core (8 suites)**: Maven Executor, Java Detector, POM Modifier, Backup Manager, Framework Detector, Recipe Manager, Rewrite Executor, Rewrite Version Manager
|
|
1058
|
+
- **Tools (8 suites)**: Setup Quality, Analyze, Fix Style, Dependency Analyze, Vulnerability Scan, Rewrite Discover, Rewrite Preview, Rewrite Apply
|
|
1059
|
+
- **Utils (2 suites)**: Logger, Error Classifier, Version Comparator
|
|
1060
|
+
|
|
1061
|
+
## 🔧 Solución de Problemas
|
|
1062
|
+
|
|
1063
|
+
### Detección Automática de Errores
|
|
1064
|
+
|
|
1065
|
+
El servidor detecta automáticamente diferentes tipos de errores Maven y proporciona soluciones específicas:
|
|
1066
|
+
|
|
1067
|
+
#### Error de Red
|
|
1068
|
+
**Síntoma**: "Network error while downloading Maven dependencies"
|
|
1069
|
+
|
|
1070
|
+
**Causa**: Problemas de conectividad, proxy, o repositorio inaccesible
|
|
1071
|
+
|
|
1072
|
+
**Solución automática sugerida**:
|
|
1073
|
+
- Verificar conexión a internet
|
|
1074
|
+
- Configurar proxy en `~/.m2/settings.xml` si corresponde
|
|
1075
|
+
- Ejecutar Maven con flag `-U` para forzar actualización
|
|
1076
|
+
|
|
1077
|
+
#### Error de Compilación
|
|
1078
|
+
**Síntoma**: "Java code has compilation errors"
|
|
1079
|
+
|
|
1080
|
+
**Causa**: Errores de sintaxis o tipos en código Java
|
|
1081
|
+
|
|
1082
|
+
**Solución automática sugerida**:
|
|
1083
|
+
- Revisar los errores específicos en la salida de Maven
|
|
1084
|
+
- Corregir errores de compilación antes del análisis de calidad
|
|
1085
|
+
|
|
1086
|
+
#### Perfil de Calidad Faltante
|
|
1087
|
+
**Síntoma**: "Quality profile not configured in pom.xml"
|
|
1088
|
+
|
|
1089
|
+
**Causa**: El proyecto no tiene configurado el perfil `-Pquality`
|
|
1090
|
+
|
|
1091
|
+
**Solución automática sugerida**:
|
|
1092
|
+
- Ejecutar `maven_setup_quality` para configurar automáticamente
|
|
1093
|
+
|
|
1094
|
+
#### Dependencias Faltantes
|
|
1095
|
+
**Síntoma**: "Maven dependency not found in any repository"
|
|
1096
|
+
|
|
1097
|
+
**Causa**: Coordenadas incorrectas o repositorio no configurado
|
|
1098
|
+
|
|
1099
|
+
**Solución automática sugerida**:
|
|
1100
|
+
- Verificar groupId, artifactId, version en pom.xml
|
|
1101
|
+
- Configurar repositorios necesarios
|
|
1102
|
+
|
|
1103
|
+
### Error: "Maven not found"
|
|
1104
|
+
|
|
1105
|
+
**Problema**: El servidor no encuentra Maven
|
|
1106
|
+
|
|
1107
|
+
**Solución**:
|
|
1108
|
+
```bash
|
|
1109
|
+
# Verificar que Maven está instalado
|
|
1110
|
+
mvn --version
|
|
1111
|
+
|
|
1112
|
+
# Si no está instalado:
|
|
1113
|
+
# macOS: brew install maven
|
|
1114
|
+
# Ubuntu: sudo apt install maven
|
|
1115
|
+
# Windows: Descargar de https://maven.apache.org/
|
|
1116
|
+
```
|
|
1117
|
+
|
|
1118
|
+
### Error: "Cannot find module '@modelcontextprotocol/sdk'"
|
|
1119
|
+
|
|
1120
|
+
**Problema**: Dependencias no instaladas
|
|
1121
|
+
|
|
1122
|
+
**Solución**:
|
|
1123
|
+
```bash
|
|
1124
|
+
npm install
|
|
1125
|
+
npm run build
|
|
1126
|
+
```
|
|
1127
|
+
|
|
1128
|
+
### Error: "Permission denied" (Linux/macOS)
|
|
1129
|
+
|
|
1130
|
+
**Problema**: Permisos incorrectos
|
|
1131
|
+
|
|
1132
|
+
**Solución**:
|
|
1133
|
+
```bash
|
|
1134
|
+
chmod +x build/index.js
|
|
1135
|
+
```
|
|
1136
|
+
|
|
1137
|
+
### Tests Fallan Localmente
|
|
1138
|
+
|
|
1139
|
+
**Problema**: Entorno de test no configurado
|
|
1140
|
+
|
|
1141
|
+
**Solución**:
|
|
1142
|
+
```bash
|
|
1143
|
+
# Limpiar caché de Jest
|
|
1144
|
+
npm test -- --clearCache
|
|
1145
|
+
|
|
1146
|
+
# Reinstalar dependencias
|
|
1147
|
+
rm -rf node_modules package-lock.json
|
|
1148
|
+
npm install
|
|
1149
|
+
```
|
|
1150
|
+
|
|
1151
|
+
### Cell CLI no ve el servidor
|
|
1152
|
+
|
|
1153
|
+
**Problema**: Configuración incorrecta
|
|
1154
|
+
|
|
1155
|
+
**Solución**:
|
|
1156
|
+
1. Verifica la ruta absoluta en la configuración
|
|
1157
|
+
2. Compila el proyecto: `npm run build`
|
|
1158
|
+
3. Verifica que el archivo `dist/index.js` existe
|
|
1159
|
+
4. Lista los servidores: `cell mcp list`
|
|
1160
|
+
5. Reinicia Cell CLI
|
|
1161
|
+
|
|
1162
|
+
### Logs para Debugging
|
|
1163
|
+
|
|
1164
|
+
El servidor genera logs en el directorio configurado en `MCP_ROOT`:
|
|
1165
|
+
|
|
1166
|
+
```
|
|
1167
|
+
{MCP_ROOT}/logs/
|
|
1168
|
+
├── combined.log # Todos los logs (info, warn, error, debug)
|
|
1169
|
+
└── error.log # Solo errores
|
|
1170
|
+
```
|
|
1171
|
+
|
|
1172
|
+
**Ver logs en tiempo real:**
|
|
1173
|
+
|
|
1174
|
+
```bash
|
|
1175
|
+
# Linux/macOS
|
|
1176
|
+
tail -f /ruta/al/mcp/logs/combined.log
|
|
1177
|
+
|
|
1178
|
+
# Windows (PowerShell)
|
|
1179
|
+
Get-Content C:\ruta\al\mcp\logs\combined.log -Wait -Tail 50
|
|
1180
|
+
```
|
|
1181
|
+
|
|
1182
|
+
**Filtrar logs por nivel:**
|
|
1183
|
+
|
|
1184
|
+
```bash
|
|
1185
|
+
# Solo errores
|
|
1186
|
+
tail -f logs/error.log
|
|
1187
|
+
|
|
1188
|
+
# Solo INFO y superiores
|
|
1189
|
+
grep "INFO\|WARN\|ERROR" logs/combined.log
|
|
1190
|
+
|
|
1191
|
+
# Solo DEBUG
|
|
1192
|
+
grep "DEBUG" logs/combined.log
|
|
1193
|
+
```
|
|
1194
|
+
|
|
1195
|
+
**Configurar nivel de log:**
|
|
1196
|
+
|
|
1197
|
+
Para ver más detalles durante debugging, configura `LOG_LEVEL=debug` en tu archivo de configuración de Cell CLI y reinicia.
|
|
1198
|
+
|
|
1199
|
+
**Ejemplo de logs:**
|
|
1200
|
+
|
|
1201
|
+
```log
|
|
1202
|
+
[2025-10-30T04:05:14.867Z] INFO: Quality profile added to pom.xml
|
|
1203
|
+
[2025-10-30T04:05:15.123Z] INFO: SpotBugs: Upgrading from 4.7.3.0 to 4.9.3.0
|
|
1204
|
+
[2025-10-30T04:05:15.456Z] WARN: Java version not specified in pom.xml
|
|
1205
|
+
[2025-10-30T04:05:16.789Z] ERROR: Failed to parse JaCoCo report
|
|
1206
|
+
[2025-10-30T04:05:17.012Z] DEBUG: Parsing XML with 1500 lines
|
|
1207
|
+
```
|
|
1208
|
+
|
|
1209
|
+
---
|
|
1210
|
+
|