@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.
Files changed (153) hide show
  1. package/README.md +1210 -0
  2. package/config/plugin-versions.json +123 -0
  3. package/config/rewrite-recipes.json +366 -0
  4. package/dist/config/plugin-versions.json +123 -0
  5. package/dist/config/rewrite-recipes.json +366 -0
  6. package/dist/core/backup_manager.d.ts +48 -0
  7. package/dist/core/backup_manager.d.ts.map +1 -0
  8. package/dist/core/backup_manager.js +129 -0
  9. package/dist/core/backup_manager.js.map +1 -0
  10. package/dist/core/framework_detector.d.ts +46 -0
  11. package/dist/core/framework_detector.d.ts.map +1 -0
  12. package/dist/core/framework_detector.js +271 -0
  13. package/dist/core/framework_detector.js.map +1 -0
  14. package/dist/core/java_detector.d.ts +70 -0
  15. package/dist/core/java_detector.d.ts.map +1 -0
  16. package/dist/core/java_detector.js +334 -0
  17. package/dist/core/java_detector.js.map +1 -0
  18. package/dist/core/maven_executor.d.ts +189 -0
  19. package/dist/core/maven_executor.d.ts.map +1 -0
  20. package/dist/core/maven_executor.js +375 -0
  21. package/dist/core/maven_executor.js.map +1 -0
  22. package/dist/core/pom_modifier.d.ts +85 -0
  23. package/dist/core/pom_modifier.d.ts.map +1 -0
  24. package/dist/core/pom_modifier.js +452 -0
  25. package/dist/core/pom_modifier.js.map +1 -0
  26. package/dist/core/recipe_manager.d.ts +66 -0
  27. package/dist/core/recipe_manager.d.ts.map +1 -0
  28. package/dist/core/recipe_manager.js +372 -0
  29. package/dist/core/recipe_manager.js.map +1 -0
  30. package/dist/core/rewrite_executor.d.ts +36 -0
  31. package/dist/core/rewrite_executor.d.ts.map +1 -0
  32. package/dist/core/rewrite_executor.js +156 -0
  33. package/dist/core/rewrite_executor.js.map +1 -0
  34. package/dist/core/rewrite_version_manager.d.ts +46 -0
  35. package/dist/core/rewrite_version_manager.d.ts.map +1 -0
  36. package/dist/core/rewrite_version_manager.js +197 -0
  37. package/dist/core/rewrite_version_manager.js.map +1 -0
  38. package/dist/index.d.ts +3 -0
  39. package/dist/index.d.ts.map +1 -0
  40. package/dist/index.js +67 -0
  41. package/dist/index.js.map +1 -0
  42. package/dist/parsers/checkstyle_parser.d.ts +29 -0
  43. package/dist/parsers/checkstyle_parser.d.ts.map +1 -0
  44. package/dist/parsers/checkstyle_parser.js +105 -0
  45. package/dist/parsers/checkstyle_parser.js.map +1 -0
  46. package/dist/parsers/dependency_parser.d.ts +42 -0
  47. package/dist/parsers/dependency_parser.d.ts.map +1 -0
  48. package/dist/parsers/dependency_parser.js +233 -0
  49. package/dist/parsers/dependency_parser.js.map +1 -0
  50. package/dist/parsers/jacoco_parser.d.ts +39 -0
  51. package/dist/parsers/jacoco_parser.d.ts.map +1 -0
  52. package/dist/parsers/jacoco_parser.js +144 -0
  53. package/dist/parsers/jacoco_parser.js.map +1 -0
  54. package/dist/parsers/migration_todo_generator.d.ts +24 -0
  55. package/dist/parsers/migration_todo_generator.d.ts.map +1 -0
  56. package/dist/parsers/migration_todo_generator.js +195 -0
  57. package/dist/parsers/migration_todo_generator.js.map +1 -0
  58. package/dist/parsers/pmd_parser.d.ts +121 -0
  59. package/dist/parsers/pmd_parser.d.ts.map +1 -0
  60. package/dist/parsers/pmd_parser.js +178 -0
  61. package/dist/parsers/pmd_parser.js.map +1 -0
  62. package/dist/parsers/rewrite_issues_parser.d.ts +39 -0
  63. package/dist/parsers/rewrite_issues_parser.d.ts.map +1 -0
  64. package/dist/parsers/rewrite_issues_parser.js +173 -0
  65. package/dist/parsers/rewrite_issues_parser.js.map +1 -0
  66. package/dist/parsers/rewrite_result_parser.d.ts +48 -0
  67. package/dist/parsers/rewrite_result_parser.d.ts.map +1 -0
  68. package/dist/parsers/rewrite_result_parser.js +266 -0
  69. package/dist/parsers/rewrite_result_parser.js.map +1 -0
  70. package/dist/parsers/spotbugs_parser.d.ts +22 -0
  71. package/dist/parsers/spotbugs_parser.d.ts.map +1 -0
  72. package/dist/parsers/spotbugs_parser.js +76 -0
  73. package/dist/parsers/spotbugs_parser.js.map +1 -0
  74. package/dist/server.d.ts +23 -0
  75. package/dist/server.d.ts.map +1 -0
  76. package/dist/server.js +393 -0
  77. package/dist/server.js.map +1 -0
  78. package/dist/tools/analyze.d.ts +82 -0
  79. package/dist/tools/analyze.d.ts.map +1 -0
  80. package/dist/tools/analyze.js +401 -0
  81. package/dist/tools/analyze.js.map +1 -0
  82. package/dist/tools/analyze_test_coverage.d.ts +128 -0
  83. package/dist/tools/analyze_test_coverage.d.ts.map +1 -0
  84. package/dist/tools/analyze_test_coverage.js +291 -0
  85. package/dist/tools/analyze_test_coverage.js.map +1 -0
  86. package/dist/tools/dependency_analyze.d.ts +31 -0
  87. package/dist/tools/dependency_analyze.d.ts.map +1 -0
  88. package/dist/tools/dependency_analyze.js +159 -0
  89. package/dist/tools/dependency_analyze.js.map +1 -0
  90. package/dist/tools/fix_style.d.ts +98 -0
  91. package/dist/tools/fix_style.d.ts.map +1 -0
  92. package/dist/tools/fix_style.js +182 -0
  93. package/dist/tools/fix_style.js.map +1 -0
  94. package/dist/tools/generate_tests.d.ts +128 -0
  95. package/dist/tools/generate_tests.d.ts.map +1 -0
  96. package/dist/tools/generate_tests.js +291 -0
  97. package/dist/tools/generate_tests.js.map +1 -0
  98. package/dist/tools/rewrite_apply.d.ts +7 -0
  99. package/dist/tools/rewrite_apply.d.ts.map +1 -0
  100. package/dist/tools/rewrite_apply.js +249 -0
  101. package/dist/tools/rewrite_apply.js.map +1 -0
  102. package/dist/tools/rewrite_discover.d.ts +7 -0
  103. package/dist/tools/rewrite_discover.d.ts.map +1 -0
  104. package/dist/tools/rewrite_discover.js +227 -0
  105. package/dist/tools/rewrite_discover.js.map +1 -0
  106. package/dist/tools/rewrite_preview.d.ts +7 -0
  107. package/dist/tools/rewrite_preview.d.ts.map +1 -0
  108. package/dist/tools/rewrite_preview.js +230 -0
  109. package/dist/tools/rewrite_preview.js.map +1 -0
  110. package/dist/tools/setup_quality.d.ts +84 -0
  111. package/dist/tools/setup_quality.d.ts.map +1 -0
  112. package/dist/tools/setup_quality.js +177 -0
  113. package/dist/tools/setup_quality.js.map +1 -0
  114. package/dist/tools/vulnerability_scan.d.ts +38 -0
  115. package/dist/tools/vulnerability_scan.d.ts.map +1 -0
  116. package/dist/tools/vulnerability_scan.js +365 -0
  117. package/dist/tools/vulnerability_scan.js.map +1 -0
  118. package/dist/types/analysis.d.ts +127 -0
  119. package/dist/types/analysis.d.ts.map +1 -0
  120. package/dist/types/analysis.js +5 -0
  121. package/dist/types/analysis.js.map +1 -0
  122. package/dist/types/index.d.ts +29 -0
  123. package/dist/types/index.d.ts.map +1 -0
  124. package/dist/types/index.js +5 -0
  125. package/dist/types/index.js.map +1 -0
  126. package/dist/types/rewrite.d.ts +254 -0
  127. package/dist/types/rewrite.d.ts.map +1 -0
  128. package/dist/types/rewrite.js +5 -0
  129. package/dist/types/rewrite.js.map +1 -0
  130. package/dist/utils/error_classifier.d.ts +34 -0
  131. package/dist/utils/error_classifier.d.ts.map +1 -0
  132. package/dist/utils/error_classifier.js +184 -0
  133. package/dist/utils/error_classifier.js.map +1 -0
  134. package/dist/utils/llm_error_classifier.d.ts +36 -0
  135. package/dist/utils/llm_error_classifier.d.ts.map +1 -0
  136. package/dist/utils/llm_error_classifier.js +258 -0
  137. package/dist/utils/llm_error_classifier.js.map +1 -0
  138. package/dist/utils/logger.d.ts +100 -0
  139. package/dist/utils/logger.d.ts.map +1 -0
  140. package/dist/utils/logger.js +192 -0
  141. package/dist/utils/logger.js.map +1 -0
  142. package/dist/utils/ollama_classifier.d.ts +28 -0
  143. package/dist/utils/ollama_classifier.d.ts.map +1 -0
  144. package/dist/utils/ollama_classifier.js +267 -0
  145. package/dist/utils/ollama_classifier.js.map +1 -0
  146. package/dist/utils/version_comparator.d.ts +129 -0
  147. package/dist/utils/version_comparator.d.ts.map +1 -0
  148. package/dist/utils/version_comparator.js +232 -0
  149. package/dist/utils/version_comparator.js.map +1 -0
  150. package/package.json +63 -0
  151. package/scripts/check-nvd-status.js +89 -0
  152. package/scripts/copy-config.cjs +56 -0
  153. package/scripts/nvd-background-download.js +118 -0
package/README.md ADDED
@@ -0,0 +1,1210 @@
1
+ # Maven Quality MCP Server
2
+
3
+ [![Tests](https://img.shields.io/badge/tests-545%20passing-brightgreen)](.)
4
+ [![Test Suites](https://img.shields.io/badge/test%20suites-26%20passed-brightgreen)](.)
5
+ [![Coverage](https://img.shields.io/badge/coverage-91.69%25-brightgreen)](.)
6
+ [![Node](https://img.shields.io/badge/node-%3E%3D18.0.0-brightgreen)](https://nodejs.org)
7
+ [![TypeScript](https://img.shields.io/badge/TypeScript-5.3.3-blue)](https://www.typescriptlang.org/)
8
+ [![License](https://img.shields.io/badge/license-UNLICENSED-red)](.)
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
+