使用说明
MCP Playwright Test Playground
Plataforma local para ejecutar escenarios Gherkin contra múltiples servidores MCP, comparar resultados de automatización E2E, detectar señales de alucinación y analizar costo/tokens por ejecución.
Tabla de contenido
- 1. Resumen ejecutivo
- 2. Objetivo del proyecto
- 3. Arquitectura de alto nivel
- 4. Stack tecnológico
- 5. Estructura del repositorio
- 6. Flujo funcional end-to-end
- 7. Backend API (Fastify)
- 8. CLI
mcp-bench - 9. Frontend (React)
- 10. Persistencia y datos
- 11. Instalación y puesta en marcha
- 12. Variables de entorno
- 13. Scripts de desarrollo
- 14. Uso guiado (UI)
- 15. Uso guiado (CLI)
- 16. Exportaciones e historial
- 17. Calidad y pruebas
- 18. Requisitos funcionales (trazabilidad)
- 19. Estado actual y limitaciones conocidas
- 20. Troubleshooting
- 21. Roadmap y planificación
- 22. Convenciones de contribución
- 23. Licencia
1. Resumen ejecutivo
mcp-playwright es una herramienta local-first para evaluar la calidad de ejecución E2E de distintos proveedores MCP sobre el mismo escenario Gherkin.
El sistema permite:
- Definir un escenario (
.feature) y base URL. - Seleccionar uno o varios MCP targets.
- Estimar costo/tokens antes de ejecutar.
- Ejecutar y visualizar progreso en tiempo real vía SSE.
- Persistir resultados en SQLite.
- Consultar historial y exportar en JSON/CSV.
- Ejecutar en modo headless desde CLI para integración CI.
2. Objetivo del proyecto
El objetivo central es ofrecer una comparación honesta, reproducible y trazable de la automatización E2E basada en MCP, detectando diferencias de:
- estabilidad de ejecución,
- latencia,
- costo,
- tokens,
- y señales de posible alucinación.
Este repositorio prioriza iteración rápida en entorno local, observabilidad del flujo y trazabilidad por fases en .planning/.
3. Arquitectura de alto nivel
Arquitectura lógica:
-
Frontend React
- Editor de escenario
- Selector MCP
- Panel live de ejecución
- Historial y detalle de run
-
Backend Fastify
- Endpoints REST para estimación, inicio de run, historial, export, screenshots
- Endpoint SSE
/stream/:runId - Coordinación de ejecución mediante
PhaseOneRunManager
-
Orquestador y parsing
- Parseo de Gherkin
- Ejecución de pasos
- Integración con proveedor LLM
- Validación visual básica
-
Persistencia local
- SQLite (
.data/runs.db) - Metadatos de runs, pasos y screenshots
- SQLite (
-
CLI
mcp-bench runpara ejecución headlessmcp-bench debugpara inspección de runs persistidos
4. Stack tecnológico
Runtime y lenguaje
- Node.js + TypeScript
Backend
- Fastify
- pino / pino-pretty
- better-sqlite3
Frontend
- React 19
- Vite
- Tailwind CSS
- Radix / Base UI / Lucide
Parsing / dominio
@cucumber/gherkin@cucumber/messages
Tooling
tsxpara ejecución TS en desarrollo y tests- TypeScript (
tsc) para chequeo estático concurrentlypara levantar frontend + backend
5. Estructura del repositorio
Estructura relevante (resumen):
src/client/- UI principal (
App.tsx) - componentes de historial y detalle
- UI principal (
src/server/index.ts(servidor Fastify)api/history.ts(historial/export/screenshots)runManager.ts(coordinación de runs)orchestrator/(ejecución de escenarios)storage/(SQLite + screenshots)
src/cli/mcp-bench.ts- comandos CLI
runydebug
- comandos CLI
bin/mcp-bench.js- bootstrap del binario npm
.planning/- requisitos, roadmap, fases, resúmenes y verificaciones
.data/- base de datos local de ejecuciones
6. Flujo funcional end-to-end
- Usuario define
baseUrl, escenario Gherkin y MCPs. - Frontend solicita estimación (
POST /api/runs/estimate). - Usuario confirma y dispara ejecución (
POST /api/runs/start). - Frontend se suscribe por SSE (
/stream/:runId). - Backend emite eventos de progreso por paso/MCP.
- Resultados se persisten en SQLite.
- Frontend consulta historial y detalle (
/api/history*). - Usuario exporta resultados (JSON/CSV).
7. Backend API (Fastify)
Servidor en src/server/index.ts.
Endpoints principales
-
GET /- health y metadata de HTTP/2.
-
POST /api/runs/estimate- calcula estimación de tokens/costo.
-
POST /api/runs/start- inicia run y devuelve streamPath.
-
GET /stream/:runId- SSE de eventos de ejecución.
-
GET /api/history- lista paginada de runs.
-
GET /api/history/:id- detalle completo de un run.
-
GET /api/history/:id/export.json- export JSON detallado.
-
GET /api/history/:id/export.csv- export CSV del run.
-
GET /api/history/export.csv- export CSV de múltiples runs (resumen).
-
GET /api/history/cost/total- costo acumulado total.
-
GET /api/screenshots/:id- contenido de screenshot por id.
SSE
Características implementadas:
- cabeceras de streaming (
text/event-stream,X-Accel-Buffering: no), - heartbeats periódicos,
- cierre limpio al desconectar cliente.
8. CLI mcp-bench
Binario declarado en package.json:
mcp-bench→bin/mcp-bench.js→src/cli/mcp-bench.ts
Comandos
mcp-bench run --url <url> --feature <file.feature> [--mcp a,b] [--tokenCap 12000]mcp-bench debug [--runId <runId>] [--mcp <filter>]
Comportamiento
runproduce JSON estructurado por stdout.runretorna exit code0o1según resultados.debugimprime resumen legible de pasos para runs persistidos.
9. Frontend (React)
UI principal en src/client/App.tsx.
Capacidades visibles
- Editor de escenario con carga de archivo
.feature. - Selector de MCP targets.
- Estimación previa con confirmación.
- Consola live de eventos.
- Progreso por MCP (pasos/tokens/latencia red).
- Historial de runs y detalle.
- Dashboard de costo acumulado.
- Tema dark/light.
10. Persistencia y datos
Se usa SQLite local (.data/runs.db) con tablas de:
runsstepsscreenshots
Persistencia orientada a auditoría operativa:
- estado, tokens, costo, timestamps,
- validación por paso,
- relación run-step-screenshot.
11. Instalación y puesta en marcha
Requisitos
- Node.js 20+ (recomendado 22+)
- npm
Instalación
- Clonar repositorio.
- Instalar dependencias.
- Levantar entorno de desarrollo.
12. Variables de entorno
El backend soporta variables opcionales:
ENABLE_HTTP2truepara habilitar modo HTTP/2 en Fastify.
HTTP2_TLS_KEY- contenido/ruta de llave TLS (si aplica).
HTTP2_TLS_CERT- contenido/ruta de certificado TLS (si aplica).
DATA_DIR- directorio de datos/snapshots para storage de screenshots.
Nota: en entorno local típico, puede ejecutarse sin configuración TLS especial.
13. Scripts de desarrollo
Definidos en package.json:
npm run dev- levanta frontend y backend en paralelo.
npm run build- build frontend.
npm run typecheck- chequeo estricto TypeScript sin emisión.
npm test- suite de pruebas TS.
npm run cli- invoca wrapper de CLI.
14. Uso guiado (UI)
- Ejecuta
npm run dev. - Abre la app en navegador.
- Define
Base URL. - Pega o sube un
.featureválido. - Selecciona MCPs a comparar.
- Ajusta
Token Cap. - Clic en Estimar y ejecutar.
- Confirma ejecución.
- Observa progreso y consola live.
- Revisa historial y detalle al finalizar.
15. Uso guiado (CLI)
Run headless
Ejemplo conceptual:
- ejecutar
mcp-bench runcon URL y archivo.featureválido. - consumir JSON en pipeline CI.
Debug de run persistido
Ejemplo conceptual:
- ejecutar
mcp-bench debugpara inspeccionar un run. - filtrar por MCP si es necesario.
16. Exportaciones e historial
Desde UI
En detalle de run:
- Export JSON
- Export CSV
Desde API
- JSON detallado por run
- CSV por run
- CSV resumen de runs (rango opcional por fecha)
17. Calidad y pruebas
Comandos base de calidad:
- typecheck: validación de tipos
- test: lane rápida y determinista para el trabajo rutinario
- test:smoke: lane secundaria con seams reales de persistencia y filesystem
- test:ci: ejecuta
fastysmokeen orden
Modelo de lanes
La suite ya no depende de un único glob amplio. El repositorio usa un manifiesto explícito en scripts/test/test-manifest.mjs y un único entrypoint en scripts/test/run-lane.mjs.
Política:
npm test- ejecuta la lane
fast, pensada para checks rutinarios, deterministas y rápidos
- ejecuta la lane
npm run test:fast- ejecuta explícitamente la misma lane rápida
npm run test:smoke- ejecuta la lane lenta para seams reales: persistencia SQLite, filesystem de screenshots y API de historial sobre datos persistidos
npm run test:ci- ejecuta
fasty despuéssmoke, manteniendo visible cuándo falla la cobertura lenta
- ejecuta
node scripts/test/run-lane.mjs fast --list- lista el inventario exacto de la lane rápida sin ejecutar tests
node scripts/test/run-lane.mjs smoke --list- lista el inventario exacto de la lane smoke sin ejecutar tests
Inventario smoke inicial:
src/server/api/history.smoke.test.tssrc/server/storage/sqlite.smoke.test.tssrc/server/storage/screenshots.smoke.test.ts
La regla operativa de Phase 13 es:
- la lane
fastabsorbe tests conductuales, contract tests y evidence tests aislados - la lane
smokese reserva para un conjunto pequeño de pruebas con I/O real o seams de mayor costo, para proteger la velocidad diaria sin perder validación sobre persistencia real
El repositorio incluye pruebas en módulos críticos:
- parser Gherkin,
- orquestación,
- almacenamiento SQLite,
- validación visual,
- API de historial,
- harness de seguridad (timeout/loop/tokens),
- adapters/provider factory.
18. Requisitos funcionales (trazabilidad)
La especificación principal está en:
.planning/REQUIREMENTS.md
Incluye cobertura de requisitos v1/v2 por áreas:
- infraestructura,
- parser,
- orquestación LLM,
- registry MCP,
- ejecución,
- validación anti-alucinación,
- UI,
- CLI,
- historial/export.
19. Estado actual y limitaciones conocidas
Estado funcional general: alto, con trazabilidad de fases en .planning/phases.
Limitaciones observables en estado actual del repositorio:
- Existe desalineación entre “completado” declarado en planning y estructura de algunos planes legacy.
- La calidad del modo
debugde CLI puede requerir mayor detalle de trazas por tool-call para auditoría profunda. - El formato CSV puede requerir evolución adicional para scorecards por MCP según criterios estrictos de reporting.
Estas limitaciones no bloquean uso local base, pero sí son relevantes para endurecimiento de CI/auditoría.
20. Troubleshooting
Error de parseo Gherkin en CLI
Si ves errores tipo:
expected ... got 'Given ...'
revisa que el archivo .feature tenga estructura válida, por ejemplo:
- cabecera
Feature: - al menos un
Scenario: - pasos
Given/When/Thenindentados dentro del escenario
SSE se corta o no emite
- verificar backend activo,
- comprobar
runIdexistente, - revisar logs de servidor,
- validar que no haya proxy intermedio cortando streams.
Historial vacío
- confirmar que hubo runs finalizados,
- revisar
.data/runs.db, - inspeccionar errores backend en consola.
21. Roadmap y planificación
Artefactos de planificación:
.planning/REQUIREMENTS.md.planning/phases/**- resúmenes por plan/fase y verificaciones puntuales
Se recomienda mantener trazabilidad consistente entre:
- roadmap,
- planes estructurados,
- summaries,
- verification reports.
22. Convenciones de contribución
Sugerencias operativas:
- Cambios pequeños y atómicos.
- Ejecutar
npm run typecheckynpm testantes de merge. - Mantener sincronía entre código y
.planning/. - Documentar decisiones técnicas relevantes en el historial de fase.
23. Licencia
Actualmente package.json declara licencia ISC.
Anexo A — Ejemplo mínimo de .feature válido
Feature: Búsqueda
Scenario: Buscar un término
Given User is on google page
When User search for "Cucumber BDD"
Then User should see results related to "Cucumber BDD"
Importante: aunque los pasos estén en inglés natural, el parser requiere cabeceras Gherkin (
Feature,Scenario) para que el archivo sea válido.
Anexo B — Referencias internas útiles
src/server/index.tssrc/server/api/history.tssrc/server/runManager.tssrc/server/orchestrator/OrchestratorService.tssrc/cli/mcp-bench.tssrc/client/App.tsx.planning/REQUIREMENTS.md
