hakalab-mcp 2.0.0 → 2.0.1

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 CHANGED
@@ -1,208 +1,228 @@
1
- # Hakalab-Selenium-MCP
1
+ # Hakalab-MCP v2.0
2
2
 
3
- Este MCP (Model Context Protocol) está diseñado específicamente para trabajar con el framework de pruebas de Selenium de Haka Lab, siguiendo sus patrones y estructura establecidos.
3
+ **Servidor MCP completo para automatización web con Selenium y Playwright**
4
4
 
5
- ## 🚀 Características
5
+ [![npm version](https://img.shields.io/npm/v/hakalab-mcp.svg)](https://www.npmjs.com/package/hakalab-mcp)
6
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
6
7
 
7
- - **Creación automática de suites de pruebas** completas (Feature + Steps + Page Objects)
8
- - **Ejecución de pruebas** con filtros por tags y archivos específicos
9
- - **Generación de reportes Allure** integrada
10
- - **Sanitización y validación** de archivos de prueba
11
- - **Gestión de Page Objects** independientes
12
- - **Listado y organización** de archivos de prueba
8
+ ## 🚀 Descripción
13
9
 
14
- ## 📋 Herramientas Disponibles
10
+ Hakalab-MCP es un servidor Model Context Protocol (MCP) que proporciona automatización web completa con soporte para **Selenium** y **Playwright**. Incluye 20 herramientas para controlar navegadores, interactuar con elementos, y crear suites de pruebas automatizadas.
15
11
 
16
- ### 1. `create_test_suite`
17
- Crea una suite completa de pruebas siguiendo los patrones del framework.
12
+ ## Características
18
13
 
19
- **Parámetros:**
20
- - `feature_name` (string): Nombre del feature
21
- - `scenarios` (array): Lista de escenarios con steps
22
- - `page_elements` (array, opcional): Elementos para Page Object
23
- - `tags` (array, opcional): Tags del feature
14
+ - ✅ **Doble Motor**: Selenium WebDriver + Playwright
15
+ - **Múltiples Navegadores**: Chrome, Firefox, Edge, Safari, Chromium, WebKit
16
+ - **20 Herramientas**: Gestión completa de navegadores e interacciones
17
+ - **Múltiples Selectores**: CSS, XPath, ID, Name, Class, Tag
18
+ - **Esperas Inteligentes**: Configurable por herramienta
19
+ - ✅ **Modo Headless**: Para ejecución sin interfaz
20
+ - ✅ **Screenshots**: Capturas automáticas con timestamp
21
+ - ✅ **Framework BDD**: Integración con Behave y Allure
22
+ - ✅ **Súper Liviano**: Solo 13.7 KB
24
23
 
25
- **Ejemplo:**
26
- ```json
27
- {
28
- "feature_name": "Login de Usuario",
29
- "scenarios": [
30
- {
31
- "name": "Login exitoso",
32
- "description": "Usuario se autentica correctamente",
33
- "tags": ["critical", "selenium"],
34
- "steps": [
35
- "Given ingreso a la página de login",
36
- "When ingreso usuario \"admin\"",
37
- "And ingreso contraseña \"password123\"",
38
- "And hago click en iniciar sesión",
39
- "Then veo el dashboard principal"
40
- ]
41
- }
42
- ],
43
- "page_elements": [
44
- {
45
- "name": "txt_usuario",
46
- "type": "ID",
47
- "locator": "username"
48
- },
49
- {
50
- "name": "txt_password",
51
- "type": "ID",
52
- "locator": "password"
53
- },
54
- {
55
- "name": "btn_login",
56
- "type": "XPATH",
57
- "locator": "//button[@type='submit']"
58
- }
59
- ],
60
- "tags": ["login", "authentication"]
61
- }
62
- ```
24
+ ## 📦 Instalación
63
25
 
64
- ### 2. `execute_tests`
65
- Ejecuta pruebas del framework con filtros opcionales.
26
+ ### Opción 1: Uso Directo con npx (Recomendado)
66
27
 
67
- **Parámetros:**
68
- - `tags` (array, opcional): Tags para filtrar (ej: ["selenium", "critical"])
69
- - `feature_file` (string, opcional): Archivo específico a ejecutar
70
- - `parallel` (boolean, opcional): Ejecución paralela
28
+ No requiere instalación previa. Simplemente agrega la configuración a tu cliente MCP:
71
29
 
72
- **Ejemplo:**
73
30
  ```json
74
31
  {
75
- "tags": ["selenium", "critical"],
76
- "parallel": false
32
+ "mcpServers": {
33
+ "hakalab-mcp": {
34
+ "command": "npx",
35
+ "args": ["-y", "hakalab-mcp"]
36
+ }
37
+ }
77
38
  }
78
39
  ```
79
40
 
80
- ### 3. `generate_allure_report`
81
- Genera el reporte de Allure después de ejecutar pruebas.
41
+ ### Opción 2: Instalación Global
82
42
 
83
- ### 4. `sanitize_tests`
84
- Valida y sanitiza archivos de prueba, detectando problemas comunes.
43
+ ```bash
44
+ npm install -g hakalab-mcp
45
+ ```
85
46
 
86
- ### 5. `create_page_object`
87
- Crea un Page Object independiente.
47
+ ### Opción 3: Instalación Local
88
48
 
89
- **Parámetros:**
90
- - `page_name` (string): Nombre de la página
91
- - `elements` (array): Lista de elementos
49
+ ```bash
50
+ npm install hakalab-mcp
51
+ ```
92
52
 
93
- ### 6. `list_test_files`
94
- Lista archivos del framework por tipo.
53
+ ## 🔧 Configuración
95
54
 
96
- **Parámetros:**
97
- - `file_type` (string): "feature", "steps", "pages", o "all"
55
+ ### Para Kiro IDE
98
56
 
99
- ## 🛠️ Instalación y Configuración
57
+ Agrega esta configuración a `~/.kiro/settings/mcp.json`:
100
58
 
101
- ### 1. Instalar dependencias
102
- ```bash
103
- pip install -r requirements_mcp.txt
59
+ ```json
60
+ {
61
+ "mcpServers": {
62
+ "hakalab-mcp": {
63
+ "command": "npx",
64
+ "args": ["-y", "hakalab-mcp"],
65
+ "disabled": false,
66
+ "autoApprove": [
67
+ "open_browser",
68
+ "close_browser",
69
+ "navigate_to_url",
70
+ "click_element",
71
+ "fill_input",
72
+ "take_screenshot"
73
+ ]
74
+ }
75
+ }
76
+ }
104
77
  ```
105
78
 
106
- ### 2. Configurar en Kiro
107
- Copia el contenido de `mcp_config.json` a tu archivo de configuración MCP de Kiro:
79
+ ### Para Claude Desktop
108
80
 
109
- **Para workspace específico:**
110
- ```bash
111
- # Crear/editar .kiro/settings/mcp.json
112
- ```
81
+ Agrega esta configuración a `~/.claude_desktop_config.json`:
113
82
 
114
- **Para configuración global:**
115
- ```bash
116
- # Editar ~/.kiro/settings/mcp.json
83
+ ```json
84
+ {
85
+ "mcpServers": {
86
+ "hakalab-mcp": {
87
+ "command": "npx",
88
+ "args": ["-y", "hakalab-mcp"]
89
+ }
90
+ }
91
+ }
117
92
  ```
118
93
 
119
- ### 3. Verificar instalación
120
- En Kiro, ejecuta:
94
+ ## 🛠️ Herramientas Disponibles (20 Total)
95
+
96
+ ### 🌐 Gestión de Navegadores (6)
97
+ - `open_browser` - Abre un navegador con Selenium o Playwright
98
+ - `close_browser` - Cierra el navegador actual
99
+ - `navigate_to_url` - Navega a una URL específica
100
+ - `go_back` - Navega hacia atrás en el historial
101
+ - `go_forward` - Navega hacia adelante en el historial
102
+ - `refresh_page` - Recarga la página actual
103
+
104
+ ### 🎯 Interacciones Básicas (6)
105
+ - `click_element` - Hace clic en un elemento
106
+ - `double_click_element` - Hace doble clic en un elemento
107
+ - `right_click_element` - Hace clic derecho en un elemento
108
+ - `fill_input` - Completa un campo de texto
109
+ - `select_option` - Selecciona una opción en un select/combobox
110
+ - `hover_element` - Pasa el mouse sobre un elemento
111
+
112
+ ### 🔧 Interacciones Avanzadas (4)
113
+ - `drag_and_drop` - Arrastra un elemento y lo suelta en otro
114
+ - `scroll_to_element` - Hace scroll hasta un elemento
115
+ - `take_screenshot` - Toma una captura de pantalla
116
+ - `get_current_url` - Obtiene la URL actual
117
+ - `get_page_title` - Obtiene el título de la página
118
+
119
+ ### 🧪 Framework BDD (6)
120
+ - `create_test_suite` - Crea suite completa (feature, steps, page object)
121
+ - `execute_tests` - Ejecuta pruebas del framework
122
+ - `list_test_files` - Lista archivos de prueba
123
+ - `create_page_object` - Crea un Page Object independiente
124
+ - `sanitize_tests` - Valida archivos de prueba
125
+ - `generate_allure_report` - Genera reporte de Allure
126
+
127
+ ## 📝 Ejemplos de Uso
128
+
129
+ ### Ejemplo 1: Búsqueda en Google
130
+
121
131
  ```
122
- Listar herramientas MCP disponibles
132
+ 1. "Abre Chrome con Playwright"
133
+ 2. "Ve a https://www.google.com"
134
+ 3. "Completa el campo de búsqueda con 'hola mundo'"
135
+ 4. "Haz click en el botón de búsqueda"
136
+ 5. "Toma una captura de pantalla"
137
+ 6. "Cierra el navegador"
123
138
  ```
124
139
 
125
- Deberías ver las 6 herramientas del Hakalab-Selenium-MCP.
126
-
127
- ## 📁 Estructura Generada
128
-
129
- El MCP mantiene la estructura del framework original:
140
+ ### Ejemplo 2: Automatización de Formulario
130
141
 
131
142
  ```
132
- framework/
133
- ├── features/
134
- │ ├── __init__.py
135
- │ ├── *.feature # Archivos Gherkin
136
- │ └── steps/
137
- │ ├── __init__.py
138
- │ └── *_steps.py # Implementación de steps
139
- ├── helper/
140
- │ └── pages/
141
- │ ├── __init__.py
142
- │ └── page_*.py # Page Objects
143
- └── allure-results/ # Resultados de ejecución
143
+ 1. "Abre Firefox con Selenium"
144
+ 2. "Ve a https://example.com/form"
145
+ 3. "Completa el campo 'nombre' con 'Juan'"
146
+ 4. "Completa el campo 'email' con 'juan@example.com'"
147
+ 5. "Selecciona 'Opción 1' en el combobox"
148
+ 6. "Haz click en el botón 'Enviar'"
149
+ 7. "Toma una captura del resultado"
144
150
  ```
145
151
 
146
- ## 🎯 Casos de Uso Comunes
152
+ ### Ejemplo 3: Interacciones Complejas
147
153
 
148
- ### Crear una nueva funcionalidad completa
149
154
  ```
150
- Usar herramienta: create_test_suite
151
- - Definir feature name
152
- - Agregar escenarios con steps
153
- - Incluir elementos de página
154
- - Especificar tags apropiados
155
+ 1. "Abre Chrome con Playwright en modo headless"
156
+ 2. "Ve a https://example.com"
157
+ 3. "Pasa el mouse sobre el menú principal"
158
+ 4. "Haz click en 'Productos'"
159
+ 5. "Haz scroll hasta el producto deseado"
160
+ 6. "Arrastra el producto al carrito"
161
+ 7. "Toma una captura"
155
162
  ```
156
163
 
157
- ### Ejecutar pruebas de regresión
158
- ```
159
- Usar herramienta: execute_tests
160
- - Tags: ["selenium", "regression"]
161
- - Generar reporte después
162
- ```
164
+ ## 📋 Requisitos
163
165
 
164
- ### Validar calidad del código de pruebas
165
- ```
166
- Usar herramienta: sanitize_tests
167
- - Revisa sintaxis Gherkin
168
- - Valida imports de Python
169
- - Detecta problemas comunes
170
- ```
166
+ - **Node.js**: 18.0.0 o superior
167
+ - **npm**: 8.0.0 o superior
168
+ - **Navegadores**: Chrome, Firefox, Edge, Safari (según el motor)
169
+
170
+ ## 🎯 Casos de Uso
171
+
172
+ - ✅ Automatización de pruebas web
173
+ - ✅ Web scraping
174
+ - ✅ Pruebas de regresión
175
+ - ✅ Pruebas de UI
176
+ - ✅ Automatización de tareas repetitivas
177
+ - ✅ Validación de funcionalidad
178
+ - ✅ Pruebas de compatibilidad
179
+
180
+ ## 🐛 Solución de Problemas
181
+
182
+ ### Error: "Browser not found"
183
+ - Asegúrate de tener el navegador instalado
184
+ - Para Playwright: ejecuta `npx playwright install`
185
+
186
+ ### Error: "Timeout waiting for element"
187
+ - Aumenta el `wait_time` en los parámetros
188
+ - Verifica que el selector sea correcto
189
+
190
+ ### Error: "Connection refused"
191
+ - Verifica que el MCP esté correctamente configurado
192
+ - Reinicia tu cliente MCP
193
+
194
+ ## 📚 Documentación Completa
195
+
196
+ Para documentación detallada, consulta [README_MCP.md](README_MCP.md)
197
+
198
+ ## 🤝 Contribuciones
171
199
 
172
- ## 🔧 Integración con el Framework
200
+ Las contribuciones son bienvenidas. Por favor:
173
201
 
174
- El MCP respeta completamente los patrones del framework:
202
+ 1. Fork el repositorio
203
+ 2. Crea una rama para tu feature
204
+ 3. Commit tus cambios
205
+ 4. Push a la rama
206
+ 5. Abre un Pull Request
175
207
 
176
- - **Behave + Gherkin**: Genera archivos .feature válidos
177
- - **Page Object Model**: Crea clases siguiendo el patrón establecido
178
- - **Plugins modulares**: Compatible con SeleniumPlugin, AllurePlugin, etc.
179
- - **Variables de entorno**: Utiliza configuración del .env
180
- - **Estructura de carpetas**: Mantiene la organización original
208
+ ## 📄 Licencia
181
209
 
182
- ## 📊 Reportes y Monitoreo
210
+ MIT License - ver [LICENSE](LICENSE) para más detalles
183
211
 
184
- - **Allure Reports**: Generación automática integrada
185
- - **Ejecución con tags**: Filtrado por criticidad, tipo, etc.
186
- - **Validación continua**: Sanitización de archivos
187
- - **Feedback detallado**: Mensajes informativos en cada operación
212
+ ## 👨‍💻 Autor
188
213
 
189
- ## 🚨 Consideraciones
214
+ **Haka Lab** - [Felipe Farías](https://gitlab.com/felipe_farias)
190
215
 
191
- - El MCP asume que existe la estructura base del framework
192
- - Requiere Python 3.7+ y las dependencias del framework
193
- - Los archivos generados siguen las convenciones de naming del framework
194
- - Compatible con ejecución local, hub y saucelabs (según configuración .env)
216
+ ## 🔗 Enlaces
195
217
 
196
- ## 🤝 Soporte
218
+ - **npm**: https://www.npmjs.com/package/hakalab-mcp
219
+ - **GitLab**: https://gitlab.com/felipe_farias/hakalab-mcp
220
+ - **Issues**: https://gitlab.com/felipe_farias/hakalab-mcp/-/issues
197
221
 
198
- Este MCP está diseñado específicamente para el framework de Haka Lab. Para soporte:
222
+ ## 📞 Soporte
199
223
 
200
- 1. Verificar que la estructura del framework esté presente
201
- 2. Revisar configuración de variables de entorno (.env)
202
- 3. Validar dependencias instaladas
203
- 4. Consultar logs de ejecución para debugging
224
+ Para reportar bugs o solicitar features, abre un issue en el repositorio de GitLab.
204
225
 
205
226
  ---
206
227
 
207
- **Desarrollado para Haka Lab Framework de Selenium**
208
- *Automatización inteligente de pruebas funcionales*
228
+ **¡Disfruta automatizando con Hakalab-MCP! 🚀**
package/index.js CHANGED
@@ -1,4 +1,4 @@
1
- #!/usr/bin/env node
1
+ #!/usr/bin/env node
2
2
 
3
3
  /**
4
4
  * Hakalab-MCP v2.0
@@ -137,7 +137,7 @@ class WebAutomationMCP {
137
137
  }
138
138
 
139
139
  async openPlaywrightBrowser(browser, options) {
140
- const { headless = false } = options;
140
+ const { headless = false } = options; // Por defecto NO headless (visible)
141
141
 
142
142
  switch (browser.toLowerCase()) {
143
143
  case 'chrome':
@@ -1154,9 +1154,11 @@ server.setRequestHandler(ListToolsRequestSchema, async () => {
1154
1154
  });
1155
1155
 
1156
1156
  server.setRequestHandler(CallToolRequestSchema, async (request) => {
1157
+ console.error(`[DEBUG] Received request: ${JSON.stringify(request)}`);
1157
1158
  const { name, arguments: args } = request.params;
1158
1159
 
1159
1160
  try {
1161
+ console.error(`[DEBUG] Executing tool: ${name} with args: ${JSON.stringify(args)}`);
1160
1162
  let result;
1161
1163
 
1162
1164
  switch (name) {
@@ -1166,7 +1168,7 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
1166
1168
  args.engine || 'selenium',
1167
1169
  args.browser || 'chrome',
1168
1170
  {
1169
- headless: args.headless || false,
1171
+ headless: args.headless || false, // Por defecto NO headless
1170
1172
  windowSize: args.window_size || '1920,1080'
1171
1173
  }
1172
1174
  );
@@ -1395,6 +1397,8 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
1395
1397
  };
1396
1398
  }
1397
1399
 
1400
+ console.error(`[DEBUG] Tool result: ${JSON.stringify(result)}`);
1401
+
1398
1402
  return {
1399
1403
  content: [
1400
1404
  {
@@ -1407,6 +1411,7 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
1407
1411
  };
1408
1412
 
1409
1413
  } catch (error) {
1414
+ console.error(`[DEBUG] Error in handler: ${error.message}`);
1410
1415
  return {
1411
1416
  content: [
1412
1417
  {
@@ -1420,9 +1425,62 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
1420
1425
 
1421
1426
  // Iniciar servidor
1422
1427
  async function main() {
1428
+ // Verificar si se está ejecutando como comando CLI
1429
+ if (process.argv.length > 2) {
1430
+ // Modo CLI - ejecutar comando directamente
1431
+ const command = process.argv[2];
1432
+ const args = process.argv.slice(3);
1433
+
1434
+ console.error(`[CLI] Executing command: ${command} with args: ${args.join(' ')}`);
1435
+
1436
+ const automation = new WebAutomationMCP();
1437
+ let result;
1438
+
1439
+ try {
1440
+ switch (command) {
1441
+ case 'open_browser':
1442
+ const browser = args.find(arg => arg.startsWith('--browser='))?.split('=')[1] || 'chrome';
1443
+ const engine = args.find(arg => arg.startsWith('--engine='))?.split('=')[1] || 'selenium';
1444
+ const headless = args.includes('--headless'); // Solo headless si se especifica explícitamente
1445
+
1446
+ result = await automation.openBrowser(engine, browser, { headless });
1447
+ break;
1448
+
1449
+ case 'navigate_to_url':
1450
+ const url = args.find(arg => arg.startsWith('--url='))?.split('=')[1];
1451
+ if (!url) {
1452
+ console.log('❌ Error: Missing --url parameter');
1453
+ process.exit(1);
1454
+ }
1455
+ result = await automation.navigateToUrl(url);
1456
+ break;
1457
+
1458
+ default:
1459
+ console.log(`❌ Error: Unknown command: ${command}`);
1460
+ process.exit(1);
1461
+ }
1462
+
1463
+ if (result.success) {
1464
+ console.log(`✅ ${result.message || 'Command executed successfully'}`);
1465
+ } else {
1466
+ console.log(`❌ ${result.error || 'Command failed'}`);
1467
+ process.exit(1);
1468
+ }
1469
+ } catch (error) {
1470
+ console.log(`❌ Error: ${error.message}`);
1471
+ process.exit(1);
1472
+ }
1473
+
1474
+ return;
1475
+ }
1476
+
1477
+ // Modo servidor MCP
1423
1478
  const transport = new StdioServerTransport();
1424
1479
  await server.connect(transport);
1425
1480
  console.error('Hakalab-MCP v2.0 server running on stdio');
1481
+
1482
+ // Mantener el proceso vivo
1483
+ process.stdin.resume();
1426
1484
  }
1427
1485
 
1428
1486
  if (require.main === module) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hakalab-mcp",
3
- "version": "2.0.0",
3
+ "version": "2.0.1",
4
4
  "description": "Hakalab-MCP - Servidor MCP completo para automatización web con Selenium y Playwright",
5
5
  "main": "index.js",
6
6
  "bin": {
package/test_simple.js ADDED
@@ -0,0 +1,34 @@
1
+ const { Server } = require('@modelcontextprotocol/sdk/server/index.js');
2
+ const { StdioServerTransport } = require('@modelcontextprotocol/sdk/server/stdio.js');
3
+ const { CallToolRequestSchema } = require('@modelcontextprotocol/sdk/types.js');
4
+
5
+ const server = new Server(
6
+ { name: 'test-mcp', version: '1.0.0' },
7
+ { capabilities: { tools: {} } }
8
+ );
9
+
10
+ server.setRequestHandler(CallToolRequestSchema, async (request) => {
11
+ console.error(`[DEBUG] Received request: ${JSON.stringify(request)}`);
12
+
13
+ return {
14
+ content: [
15
+ {
16
+ type: 'text',
17
+ text: `✅ Test successful: ${request.params.name}`
18
+ }
19
+ ]
20
+ };
21
+ });
22
+
23
+ async function main() {
24
+ const transport = new StdioServerTransport();
25
+ await server.connect(transport);
26
+ console.error('Test MCP server running');
27
+
28
+ // Mantener el proceso vivo
29
+ process.stdin.resume();
30
+ }
31
+
32
+ if (require.main === module) {
33
+ main().catch(console.error);
34
+ }
package/README_MCP.md DELETED
@@ -1,436 +0,0 @@
1
- # Hakalab-MCP v2.0
2
-
3
- **Servidor MCP completo para automatización web con Selenium y Playwright**
4
-
5
- [![npm version](https://img.shields.io/npm/v/hakalab-mcp.svg)](https://www.npmjs.com/package/hakalab-mcp)
6
- [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
7
-
8
- ## 🚀 Descripción
9
-
10
- Hakalab-MCP es un servidor Model Context Protocol (MCP) que proporciona automatización web completa con soporte para **Selenium** y **Playwright**. Incluye 20 herramientas para controlar navegadores, interactuar con elementos, y crear suites de pruebas automatizadas.
11
-
12
- ## ✨ Características
13
-
14
- - ✅ **Doble Motor**: Selenium WebDriver + Playwright
15
- - ✅ **Múltiples Navegadores**: Chrome, Firefox, Edge, Safari, Chromium, WebKit
16
- - ✅ **20 Herramientas**: Gestión completa de navegadores e interacciones
17
- - ✅ **Múltiples Selectores**: CSS, XPath, ID, Name, Class, Tag
18
- - ✅ **Esperas Inteligentes**: Configurable por herramienta
19
- - ✅ **Modo Headless**: Para ejecución sin interfaz
20
- - ✅ **Screenshots**: Capturas automáticas con timestamp
21
- - ✅ **Framework BDD**: Integración con Behave y Allure
22
- - ✅ **Súper Liviano**: Solo 11.1 KB
23
-
24
- ## 📦 Instalación
25
-
26
- ### Opción 1: Uso Directo con npx (Recomendado)
27
-
28
- No requiere instalación previa. Simplemente agrega la configuración a tu cliente MCP:
29
-
30
- ```json
31
- {
32
- "mcpServers": {
33
- "hakalab-mcp": {
34
- "command": "npx",
35
- "args": ["-y", "hakalab-mcp"]
36
- }
37
- }
38
- }
39
- ```
40
-
41
- ### Opción 2: Instalación Global
42
-
43
- ```bash
44
- npm install -g hakalab-mcp
45
- ```
46
-
47
- ### Opción 3: Instalación Local
48
-
49
- ```bash
50
- npm install hakalab-mcp
51
- ```
52
-
53
- ## 🔧 Configuración
54
-
55
- ### Para Kiro IDE
56
-
57
- Agrega esta configuración a `~/.kiro/settings/mcp.json`:
58
-
59
- ```json
60
- {
61
- "mcpServers": {
62
- "hakalab-mcp": {
63
- "command": "npx",
64
- "args": ["-y", "hakalab-mcp"],
65
- "disabled": false,
66
- "autoApprove": [
67
- "open_browser",
68
- "close_browser",
69
- "navigate_to_url",
70
- "click_element",
71
- "fill_input",
72
- "take_screenshot"
73
- ]
74
- }
75
- }
76
- }
77
- ```
78
-
79
- ### Para Claude Desktop
80
-
81
- Agrega esta configuración a `~/.claude_desktop_config.json`:
82
-
83
- ```json
84
- {
85
- "mcpServers": {
86
- "hakalab-mcp": {
87
- "command": "npx",
88
- "args": ["-y", "hakalab-mcp"]
89
- }
90
- }
91
- }
92
- ```
93
-
94
- ### Para Otros Clientes MCP
95
-
96
- Usa la configuración estándar:
97
-
98
- ```json
99
- {
100
- "mcpServers": {
101
- "hakalab-mcp": {
102
- "command": "npx",
103
- "args": ["-y", "hakalab-mcp"]
104
- }
105
- }
106
- }
107
- ```
108
-
109
- ## 🛠️ Herramientas Disponibles
110
-
111
- ### 🌐 Gestión de Navegadores
112
-
113
- #### `open_browser`
114
- Abre un navegador con el motor especificado.
115
-
116
- **Parámetros:**
117
- - `engine` (string): `selenium` o `playwright` (default: `selenium`)
118
- - `browser` (string): `chrome`, `firefox`, `edge`, `safari`, `webkit`, `chromium` (default: `chrome`)
119
- - `headless` (boolean): Ejecutar sin interfaz (default: `false`)
120
- - `window_size` (string): Tamaño de ventana (default: `1920,1080`)
121
-
122
- **Ejemplo:**
123
- ```
124
- "Abre Chrome con Playwright"
125
- "Abre Firefox con Selenium en modo headless"
126
- ```
127
-
128
- #### `close_browser`
129
- Cierra el navegador actual.
130
-
131
- #### `navigate_to_url`
132
- Navega a una URL específica.
133
-
134
- **Parámetros:**
135
- - `url` (string): URL a navegar
136
-
137
- **Ejemplo:**
138
- ```
139
- "Ve a https://www.google.com"
140
- ```
141
-
142
- #### `go_back`
143
- Navega hacia atrás en el historial.
144
-
145
- #### `go_forward`
146
- Navega hacia adelante en el historial.
147
-
148
- #### `refresh_page`
149
- Recarga la página actual.
150
-
151
- ### 🎯 Interacciones Básicas
152
-
153
- #### `click_element`
154
- Hace clic en un elemento.
155
-
156
- **Parámetros:**
157
- - `selector` (string): Selector del elemento
158
- - `selector_type` (string): `css`, `xpath`, `id`, `name`, `class`, `tag` (default: `css`)
159
- - `wait_time` (number): Tiempo de espera en ms (default: `5000`)
160
-
161
- **Ejemplo:**
162
- ```
163
- "Haz click en el botón con id 'submit'"
164
- "Haz click en el elemento con selector '.btn-primary'"
165
- ```
166
-
167
- #### `double_click_element`
168
- Hace doble clic en un elemento.
169
-
170
- #### `right_click_element`
171
- Hace clic derecho en un elemento.
172
-
173
- #### `fill_input`
174
- Completa un campo de texto.
175
-
176
- **Parámetros:**
177
- - `selector` (string): Selector del campo
178
- - `text` (string): Texto a ingresar
179
- - `selector_type` (string): Tipo de selector (default: `css`)
180
- - `clear` (boolean): Limpiar antes de escribir (default: `true`)
181
- - `wait_time` (number): Tiempo de espera en ms (default: `5000`)
182
-
183
- **Ejemplo:**
184
- ```
185
- "Completa el campo 'username' con 'admin'"
186
- "Ingresa 'hola' en el campo de búsqueda"
187
- ```
188
-
189
- #### `select_option`
190
- Selecciona una opción en un select/combobox.
191
-
192
- **Parámetros:**
193
- - `selector` (string): Selector del select
194
- - `value` (string): Valor o texto de la opción
195
- - `selector_type` (string): Tipo de selector (default: `css`)
196
- - `by_value` (boolean): Seleccionar por valor (default: `true`)
197
- - `wait_time` (number): Tiempo de espera en ms (default: `5000`)
198
-
199
- **Ejemplo:**
200
- ```
201
- "Selecciona 'Opción 1' en el combobox"
202
- ```
203
-
204
- #### `hover_element`
205
- Pasa el mouse sobre un elemento.
206
-
207
- **Ejemplo:**
208
- ```
209
- "Pasa el mouse sobre el menú principal"
210
- ```
211
-
212
- ### 🔧 Interacciones Avanzadas
213
-
214
- #### `drag_and_drop`
215
- Arrastra un elemento y lo suelta en otro.
216
-
217
- **Parámetros:**
218
- - `source_selector` (string): Selector del elemento origen
219
- - `target_selector` (string): Selector del elemento destino
220
- - `selector_type` (string): Tipo de selector (default: `css`)
221
- - `wait_time` (number): Tiempo de espera en ms (default: `5000`)
222
-
223
- **Ejemplo:**
224
- ```
225
- "Arrastra el elemento '.item' al área '.drop-zone'"
226
- ```
227
-
228
- #### `scroll_to_element`
229
- Hace scroll hasta un elemento.
230
-
231
- **Parámetros:**
232
- - `selector` (string): Selector del elemento
233
- - `selector_type` (string): Tipo de selector (default: `css`)
234
- - `wait_time` (number): Tiempo de espera en ms (default: `5000`)
235
-
236
- **Ejemplo:**
237
- ```
238
- "Haz scroll hasta el footer"
239
- ```
240
-
241
- #### `take_screenshot`
242
- Toma una captura de pantalla.
243
-
244
- **Parámetros:**
245
- - `filename` (string): Nombre del archivo (opcional)
246
-
247
- **Ejemplo:**
248
- ```
249
- "Toma una captura de pantalla"
250
- "Haz screenshot como 'resultado.png'"
251
- ```
252
-
253
- ### 📊 Utilidades
254
-
255
- #### `get_current_url`
256
- Obtiene la URL actual.
257
-
258
- #### `get_page_title`
259
- Obtiene el título de la página.
260
-
261
- ### 🧪 Framework (Behave + Allure)
262
-
263
- #### `create_test_suite`
264
- Crea una suite completa de pruebas (feature, steps, page object).
265
-
266
- **Parámetros:**
267
- - `feature_name` (string): Nombre del feature
268
- - `scenarios` (array): Lista de escenarios
269
- - `page_elements` (array): Elementos para Page Object
270
- - `tags` (array): Tags del feature
271
-
272
- #### `execute_tests`
273
- Ejecuta pruebas del framework.
274
-
275
- **Parámetros:**
276
- - `tags` (array): Tags para filtrar
277
- - `feature_file` (string): Archivo específico
278
- - `parallel` (boolean): Ejecutar en paralelo
279
-
280
- #### `list_test_files`
281
- Lista archivos de prueba.
282
-
283
- **Parámetros:**
284
- - `file_type` (string): `feature`, `steps`, `pages`, `all`
285
-
286
- #### `create_page_object`
287
- Crea un Page Object independiente.
288
-
289
- #### `sanitize_tests`
290
- Valida archivos de prueba.
291
-
292
- #### `generate_allure_report`
293
- Genera reporte de Allure.
294
-
295
- ## 📝 Ejemplos de Uso
296
-
297
- ### Ejemplo 1: Búsqueda en Google
298
-
299
- ```
300
- 1. "Abre Chrome con Playwright"
301
- 2. "Ve a https://www.google.com"
302
- 3. "Completa el campo de búsqueda con 'hola mundo'"
303
- 4. "Haz click en el botón de búsqueda"
304
- 5. "Toma una captura de pantalla"
305
- 6. "Cierra el navegador"
306
- ```
307
-
308
- ### Ejemplo 2: Automatización de Formulario
309
-
310
- ```
311
- 1. "Abre Firefox con Selenium"
312
- 2. "Ve a https://example.com/form"
313
- 3. "Completa el campo 'nombre' con 'Juan'"
314
- 4. "Completa el campo 'email' con 'juan@example.com'"
315
- 5. "Selecciona 'Opción 1' en el combobox"
316
- 6. "Haz click en el botón 'Enviar'"
317
- 7. "Toma una captura del resultado"
318
- ```
319
-
320
- ### Ejemplo 3: Interacciones Complejas
321
-
322
- ```
323
- 1. "Abre Chrome con Playwright en modo headless"
324
- 2. "Ve a https://example.com"
325
- 3. "Pasa el mouse sobre el menú principal"
326
- 4. "Haz click en 'Productos'"
327
- 5. "Haz scroll hasta el producto deseado"
328
- 6. "Arrastra el producto al carrito"
329
- 7. "Toma una captura"
330
- ```
331
-
332
- ## 🔄 Flujo de Trabajo Típico
333
-
334
- 1. **Abrir navegador** → `open_browser`
335
- 2. **Navegar** → `navigate_to_url`
336
- 3. **Interactuar** → `click_element`, `fill_input`, etc.
337
- 4. **Capturar** → `take_screenshot`
338
- 5. **Cerrar** → `close_browser`
339
-
340
- ## 🎯 Casos de Uso
341
-
342
- - ✅ Automatización de pruebas web
343
- - ✅ Web scraping
344
- - ✅ Pruebas de regresión
345
- - ✅ Pruebas de UI
346
- - ✅ Automatización de tareas repetitivas
347
- - ✅ Validación de funcionalidad
348
- - ✅ Pruebas de compatibilidad
349
-
350
- ## 📋 Requisitos
351
-
352
- - **Node.js**: 18.0.0 o superior
353
- - **npm**: 8.0.0 o superior
354
- - **Navegadores**: Chrome, Firefox, Edge, Safari (según el motor)
355
-
356
- ## 🔧 Configuración Avanzada
357
-
358
- ### Variables de Entorno
359
-
360
- ```bash
361
- # Aumentar timeout global
362
- export MCP_TIMEOUT=30000
363
-
364
- # Modo debug
365
- export DEBUG=hakalab-mcp:*
366
- ```
367
-
368
- ### Opciones de Ejecución
369
-
370
- ```json
371
- {
372
- "mcpServers": {
373
- "hakalab-mcp": {
374
- "command": "npx",
375
- "args": ["-y", "hakalab-mcp"],
376
- "env": {
377
- "NODE_ENV": "production",
378
- "DEBUG": "false"
379
- }
380
- }
381
- }
382
- }
383
- ```
384
-
385
- ## 🐛 Solución de Problemas
386
-
387
- ### Error: "Browser not found"
388
- - Asegúrate de tener el navegador instalado
389
- - Para Playwright: ejecuta `npx playwright install`
390
-
391
- ### Error: "Timeout waiting for element"
392
- - Aumenta el `wait_time` en los parámetros
393
- - Verifica que el selector sea correcto
394
-
395
- ### Error: "Connection refused"
396
- - Verifica que el MCP esté correctamente configurado
397
- - Reinicia tu cliente MCP
398
-
399
- ## 📚 Documentación Adicional
400
-
401
- - [Model Context Protocol](https://modelcontextprotocol.io/)
402
- - [Selenium WebDriver](https://www.selenium.dev/)
403
- - [Playwright](https://playwright.dev/)
404
- - [Behave BDD](https://behave.readthedocs.io/)
405
-
406
- ## 🤝 Contribuciones
407
-
408
- Las contribuciones son bienvenidas. Por favor:
409
-
410
- 1. Fork el repositorio
411
- 2. Crea una rama para tu feature
412
- 3. Commit tus cambios
413
- 4. Push a la rama
414
- 5. Abre un Pull Request
415
-
416
- ## 📄 Licencia
417
-
418
- MIT License - ver [LICENSE](LICENSE) para más detalles
419
-
420
- ## 👨‍💻 Autor
421
-
422
- **Haka Lab** - [Felipe Farías](https://gitlab.com/felipe_farias)
423
-
424
- ## 🔗 Enlaces
425
-
426
- - **npm**: https://www.npmjs.com/package/hakalab-mcp
427
- - **GitLab**: https://gitlab.com/felipe_farias/hakalab-mcp
428
- - **Issues**: https://gitlab.com/felipe_farias/hakalab-mcp/-/issues
429
-
430
- ## 📞 Soporte
431
-
432
- Para reportar bugs o solicitar features, abre un issue en el repositorio de GitLab.
433
-
434
- ---
435
-
436
- **¡Disfruta automatizando con Hakalab-MCP! 🚀**