qa-mcp
The qa-mcp server automates the generation and execution of QA artifacts for software projects, integrating with LLMs via MCP sampling or assisted mode. It provides the following tools:
autoCompleteRfCu: Completes or generates therf-cu.mdrequirements document by inferring functional requirements (RF) from OpenAPI specs and frontend app routing, and estimating use cases (CU) using LLM analysis. Supports both sampling and assisted (prompt-based) modes.generateRestTests: Generates API tests using Rest Assured (Java) based on the configured OpenAPI specification, outputting to the designated path.generateE2ETests: Generates end-to-end tests with Cypress, automatically setting up the Cypress environment (config, helpers, baselines). Features an iterative auto-fix loop that runs generated tests, captures failures, and requests corrections until tests pass or iteration limits are reached. Supports LLM-guided generation (with sampling) and assisted mode (providing prompts for one RF at a time, with persistent state on disk for resumable workflows). Includes automatic detection and repair of Cypress cache errors.exportETPAsExcel: Exports the Execution Test Plan (ETP) to an Excel file using a configured template and exceljs.exportETPAsWord: Exports the ETP to a Word document using docx.
Additional capabilities include configuration via mcp.config.json (paths, templates, proxy, Cypress execution settings), context-clean subtask delegation for orchestration tools (e.g., Roo Code), and dual-mode operation (sampling or assisted) for environments with or without LLM integration.
Generates E2E tests for Cypress, including baseline snapshots and configuration.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@qa-mcpgenerate E2E tests for the login page"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
QA MCP
Servidor MCP para automatizar generación de artefactos de QA:
tests API con Rest Assured (
generateRestTests)tests E2E con Cypress (
generateE2ETests) y ejecución/feedback (runE2ETests)documentación ETP en Excel (
exportETPAsExcel) y Word (exportETPAsWord)autocompletado de
rf-cu.md(autoCompleteRfCu)
Usa mcp.config.json en la raíz del proyecto para localizar OpenAPI, frontend, rutas de salida y plantillas.
Para generateE2ETests, la generación es genérica y guiada por LLM (MCP sampling): para cada RF/CU, el modelo del cliente genera un spec Cypress real (con cy.intercept, interacción con selectores derivados del código frontend y aserciones), no un esqueleto de cy.log.
Puedes definir las reglas de estilo/interacción con
prompts.e2eenmcp.config.json(opcional). Si no se indica, usaprompts/e2e.mddel servidor MCP.También puedes pasar
promptOverrideen la invocación de la tool para ajustar una ejecución puntual.Requiere un cliente MCP que soporte sampling (p. ej. VS Code Copilot 1.102+). Si el cliente no soporta sampling (Roo Code, Cline, opencode…), la tool pasa a modo asistido (ver más abajo).
Modo asistido (sin MCP sampling): si el cliente conectado no declara la capacidad sampling, generateE2ETests y autoCompleteRfCu no pueden pedir la generación al modelo por sí mismas. En su lugar:
generateE2ETestsprepara el entorno Cypress (helpers, config y baseline) y devuelve el prompt de generación + la ruta de salida exacta de UN RF por llamada (el primero cuyo spec aún no existe). En vez de embeber el código frontend (que desborda el contexto del cliente), el prompt lista las rutas de los ficheros relevantes para que el agente los abra con sus propias herramientas de fichero. El agente genera el spec, lo escribe y vuelve a llamar para el siguiente RF pendiente, hasta completarlos todos.autoCompleteRfCudevuelve el prompt y la ruta de salida para que el agente genere y escribarf-cu.md.El modo asistido se activa automáticamente al detectar la falta de sampling. También puedes forzarlo con el parámetro
assisted: trueen la invocación.
Bucle de auto-corrección en modo asistido (runE2ETests), RF a RF hasta verde: aunque el cliente no tenga sampling, el servidor sí puede ejecutar Cypress y devolver el resultado como feedback. El flujo trabaja un RF en curso cada vez (el primero que no está en verde) y no avanza al siguiente hasta que el actual pasa:
generateE2ETests(modo asistido) → devuelve el prompt de generación del RF en curso (si su.cy.jsno existe). El agente lo escribe.runE2ETests→ el servidor ejecuta SOLO ese RF (limpiando el baseline entre intentos). Si pasa, lo marca en verde (estado persistido en disco) y te indica avanzar; si falla, devuelve la salida real de Cypress + un PROMPT DE CORRECCIÓN.El agente aplica el prompt reescribiendo el fichero y vuelve a llamar a
runE2ETests(mismo RF) hasta que pase.Con el RF en verde, se llama de nuevo a
generateE2ETestspara el siguiente RF. Repetir hasta que todos estén en verde.
Contexto limpio por RF: todo el estado vive en disco (los .cy.js + .qa-mcp-e2e-status.json con los RF en verde), no en la conversación del cliente. Por eso el bucle es reanudable desde una tarea nueva: cuando el contexto del cliente empiece a llenarse (p. ej. al llegar a RF-10/RF-11), inicia una tarea nueva y vuelve a llamar a generateE2ETests; el servidor detecta el siguiente RF pendiente automáticamente y continúa desde ahí con contexto limpio. Cada llamada emite solo el RF en curso (frontend como lista de rutas, no código embebido) para minimizar el footprint.
Automatizar el contexto limpio con subtasks (Roo Code / Orchestrator): en clientes con orquestación de subtasks (Boomerang / Orchestrator, p. ej. Roo Code), no hace falta iniciar la tarea nueva a mano. Cada respuesta de generateE2ETests / runE2ETests incluye una SEÑAL DE SUBTASK con un campo QUEDA_TRABAJO (sí/no) y la instrucción de si seguir en el mismo subtask o delegar el siguiente paso en un new_task con contexto limpio. Como todo el estado está en disco, cada subtask arranca limpio y el servidor resuelve solo el RF pendiente.
Higiene de contexto en el bucle de corrección: el contexto se llena sobre todo al iterar correcciones dentro de un mismo RF (cada vuelta reinyecta spec + salida de Cypress + reglas, y el agente reescribe el fichero entero). Por eso se delega un subtask por RF (contexto limpio para cada RF), y dentro de ese subtask el agente itera corrección→
runE2ETestshasta que ESE RF pase. Si aun así el contexto de un RF muy largo se llena, hay un offload OPCIONAL: cierra la tarea y deja que una tarea/subtask NUEVA reanude EL MISMO RF (el.cy.jsy el estado quedan en disco; el servidor reengancha el primer RF no verde). El offload es un alivio puntual, no un fin del bucle: nunca cierres un RF en rojo dándolo por terminado.
IMPORTANTE — modos de Roo y acceso MCP: el modo Orchestrator NO tiene acceso directo a tools MCP (solo delega vía
new_task); si le pides que llame aautoCompleteRfCu/generateE2ETestsdirectamente, responderá que "no es una tool reconocida". La llamada a la tool debe ocurrir dentro del subtask, en un modo con el grupomcpyedit. Usa modo Code (mode: "code") para los subtasks: como Roo no soporta sampling, las tools corren en modo asistido y el agente debe escribir los ficheros (rf-cu.md,.cy.js), así que hace falta editar. (Architect solo edita markdown; Ask no edita.)
Prompt listo para pegar en la tarea padre (Roo en modo Orchestrator):
Eres el orquestador del bucle E2E de qa-mcp. Objetivo: dejar TODOS los RF en verde.
Delega UN subtask por RF (contexto limpio por RF); el estado vive en disco y el
servidor reengancha el RF pendiente en cada subtask.
Repite este ciclo:
1. Crea un new_task EN MODO CODE (mode: "code") con contexto limpio y este objetivo
(el modo Code es obligatorio: tiene acceso a las tools MCP y puede escribir ficheros;
tú, como Orchestrator, NO puedes llamar a las tools qa-mcp directamente):
"Deja EN VERDE el RF pendiente de qa-mcp (se resuelve solo desde disco):
- Si no tiene spec: llama a generateE2ETests, escribe el .cy.js en la ruta EXACTA
indicada y llama a runE2ETests.
- Si ya tiene spec: llama a runE2ETests.
Si FALLA, aplica el PROMPT DE CORRECCIÓN (reescribe el .cy.js completo) y VUELVE A
LLAMAR a runE2ETests. Repite corrección→runE2ETests hasta que ESTE RF pase. NO cierres
la tarea con el RF en rojo. (Solo si el contexto se te llena, puedes cerrar y dejar
que otra tarea reanude ESTE MISMO RF desde disco.) Cuando pase, termina con
attempt_completion indicando 'RF en verde' y copia la línea QUEDA_TRABAJO de la
SEÑAL DE SUBTASK."
2. Cuando el subtask termine, lee su resultado (la línea QUEDA_TRABAJO).
3. Si QUEDA_TRABAJO: sí (siguiente RF), vuelve al paso 1.
4. Si QUEDA_TRABAJO: no (TODOS los RF en verde), termina.
No generes ni ejecutes tests tú mismo: delega SIEMPRE cada RF en un subtask en modo
Code con contexto limpio.En clientes CON sampling no hace falta ni el bucle manual ni los subtasks: generateE2ETests ya genera, ejecuta e itera RF a RF por sí misma.
Ejecución iterativa (auto-fix): por defecto, tras generar la primera versión de cada spec, generateE2ETests ejecuta Cypress sobre ese fichero y, si algún it() falla, vuelve a pedir al modelo que corrija el spec usando la salida de error real de Cypress, repitiendo hasta que todos los tests pasen o se agoten los intentos. Parámetros de la tool:
runTests(bool, por defectotrue): ejecuta Cypress e itera. Ponlo afalsepara solo generar.maxIterations(número, por defecto3): intentos máximos por RF (1 generación + N-1 correcciones).rfFilter(array de ids, opcional): limita a ciertos RF, p. ej.["RF-01","RF-03"].promptOverride(string, opcional). Entre cada intento se limpian las claves de baseline del RF en curso para que la re-ejecución vuelva a autocapturar (evita falsos fallos por deriva del baseline). El comando de Cypress se puede personalizar cone2eRunCommandenmcp.config.json(por defectonpx cypress run). La tool devuelve un informe con qué RF pasan/fallan y, para los que fallan, un extracto de la salida de Cypress.
Para autoCompleteRfCu, la generación es genérica y guiada por LLM (no usa plantillas ni heurísticas de dominio) y es UI-first: los RF/CU describen lo que el usuario puede reproducir DESDE LA UI, no la API completa.
Con
frontend.rootconfigurado (modo UI-first): los RF se derivan de lo que la UI expone (rutas deappRouting, componentes/pantallas y acciones que el usuario puede disparar) y los CU son los flujos concretos ejercitables desde la interfaz. OpenAPI se usa solo como referencia para entender el comportamiento, no como checklist de cobertura: no se crea un RF por endpoint ni se prueban casos que la UI no permite. La cobertura exhaustiva de la API es tarea degenerateRestTests.Sin
frontend.root(modo fallback OpenAPI-first):frontend.rootes opcional; si no se define, no hay UI que analizar y los RF se infieren directamente de los endpoints de OpenAPI (un RF por operación/funcionalidad relevante), con CU a nivel de comportamiento esperado del endpoint.Los CU los estima el modelo del cliente analizando el código frontend real (componentes, plantillas, servicios), vía MCP sampling (
sampling/createMessage).Requiere un cliente MCP que soporte sampling (p. ej. VS Code Copilot 1.102+). Sin sampling, la tool devuelve el prompt para que el agente del cliente genere y escriba
rf-cu.md(modo asistido; ver arriba).El prompt de instrucciones está externalizado en
prompts/rfcu.md(configurable conprompts.rfcuenmcp.config.json, opcional). Si no se indica, usa elprompts/rfcu.mddel servidor MCP.Si ya existe un
rf-cu.mdparcial, se completa respetando lo ya definido.
La generación E2E incluye baseline autocapturable de snapshots genéricos (API/UI):
asegura Cypress en el frontend (
devDependencies.cypress) y scriptse2e/e2e:openasegura
cypress.config.jsy registraregisterBaselineTasks(on)ensetupNodeEvents(omite la inyección si tu config ya define las tareasreadBaseline/writeBaseline, para no duplicarlas)usa
e2eBaseUrldemcp.config.jsonparacy.visit(...)en los specs generadoscrea
cypress/support/e2e-baseline.jscrea
cypress/fixtures/e2e-baseline.jsoncrea
cypress/support/baseline-tasks.jscon tareasreadBaselineywriteBaselinecrea
cypress/support/e2e-helpers.js: librería compartida y agnóstica de dominio que todos los specs importan (../support/e2e-helpers). IncluyenormalizeAmount, selectores de opciones robustos a controles custom (resolveNativeSelect/getSelectOptions/selectFirstSelectableOption/selectRequiredOptionByTextOrValue, que resuelven el<select>nativo aunque esté envuelto en un web component comoempresas-ui-dropdown),setInputValue/setNumericFieldValue/setValueByFormControl,dismissKnownOverlays,openAccordionByComponentypersistOrAssertBaseline, para no reimplementar utilidades en cada test.
Antes de lanzar Cypress, es necesario ejecutar:
set NO_PROXY=localhost,127.0.0.1,.aena.es
Además, en la configuración de proxy del sistema, la IP/host del proxy debe ser:
proxym.aena.es
sin incluir http://.
En cypress.config.js, registra esas tareas desde setupNodeEvents(on):
const { registerBaselineTasks } = require('./cypress/support/baseline-tasks'); registerBaselineTasks(on);
Configuración en VS Code Copilot (MCP)
Configuración recomendada: por proyecto, en .vscode/mcp.json (no en configuración global de usuario).
En la raíz del proyecto que quieres documentar, crea .vscode/mcp.json con:
{
"servers": {
"qa-mcp": {
"type": "stdio",
"command": "C:\\Program Files\\nodejs\\node.exe",
"args": ["C:\\EnvAena\\workspace\\qa-mcp\\dist\\index.js"],
"cwd": "${workspaceFolder}"
}
}
}Y elimina qa-mcp de la configuración global (MCP: Open User Configuration) para evitar conflictos entre proyectos.
Related MCP server: API Tester MCP
Uso en un proyecto (guía rápida)
En el proyecto a documentar, crea/ajusta
mcp.config.jsonen su raíz con rutas de backend, frontend, OpenAPI y salidas de tests/evidencias.Si quieres controlar explícitamente de dónde derivar CU, añade
appRoutingcon la ruta delapp-routing.module.ts.Para fijar la URL de ejecución E2E, añade
e2eBaseUrl(ej.https://mi-entorno.aena.es).Para ejecutar Cypress con un Node concreto (p. ej. instalación nvm), añade
e2eNodePathcon el directorio que contienenode.exe/npx(por defectoC:\Users\aena\AppData\Roaming\nvm\v24.16.0); se antepone alPATHde la ejecución de Cypress.Para pasar variables de entorno a la ejecución de Cypress (proxy, etc.), añade
e2eEnvcomo objeto clave/valor. Por defecto se estableceNO_PROXY=localhost,127.0.0.1,.aena.es; puedes sobreescribirlo o añadir más variables. Ej.:"e2eEnv": { "NO_PROXY": "localhost,127.0.0.1,.aena.es", "HTTP_PROXY": "" }.Para ver el navegador mientras Cypress ejecuta (modo headed), añade
"e2eHeaded": true: el runner del MCP añade--headed, así que ves cada spec en un navegador visible (se cierra al terminar; NO se usa--no-exitpara no colgar la llamada MCP). Opcionalmente"e2eBrowser": "chrome"(oedge/firefox/electron) para elegir navegador — debe estar instalado; por defecto Electron.
⚠️ Timeout MCP en Roo/Cline (
MCP error -32001: Request timed out): una corrida real de Cypress (arranque + navegador + tests) supera con facilidad el timeout por defecto de 60 s de las llamadas MCP. Sube eltimeoutdel servidorqa-mcpen la config MCP del cliente (Roo permite hasta 3600 s; recomendado 600). Es imprescindible además si la tool tiene que reparar la caché de Cypress (descarga del binario, ver abajo).⚠️
Invalid or incompatible cached data (cachedDataRejected)al lanzar Cypress: es un error de ENTORNO (caché V8 del binario de Cypress corrupta/incompatible con la versión de Node), no del spec.runE2ETests/generateE2ETestslo detectan y reparan automáticamente una vez (cypress cache clear+install+verify) y reintentan; si persiste, devuelven un aviso claro (NO reescriben el test). Repara manualmente en el frontend, con el Node configurado en el PATH:npx cypress cache clear && npx cypress install && npx cypress verify. La reparación descarga el binario: asegura conectividad adownload.cypress.io(revisaNO_PROXY) y sube el timeout MCP (arriba).En VS Code Copilot, configura y arranca el servidor MCP
qa-mcpconcwdapuntando a ese proyecto.En Copilot Chat (modo Agent), ejecuta las tools según necesidad:
autoCompleteRfCu: completarf-cu.md. Infiere RF desde OpenAPI +appRoutingy estima los CU con el LLM del cliente (MCP sampling) analizando el frontend.generateRestTests: genera tests API (Rest Assured).generateE2ETests: genera tests E2E (Cypress) y deja Cypress/baseline configurado en frontend.exportETPAsExcel/exportETPAsWord: exportan el plan de pruebas con evidencias.
Revisa los artefactos generados en:
tests API: ruta configurada en
restTeststests E2E: ruta configurada en
e2eTestsevidencias: carpeta configurada en
evidence.output
Nota: las tools usan siempre mcp.config.json desde la raíz del proyecto en el que se ejecuta el MCP (cwd).
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseBqualityCmaintenanceEnables LLM clients to generate standardized test cases, perform quality control with lint scoring, convert to Xray/Jira format, and compose test suites (Smoke/Regression/E2E) with coverage analysis.Last updated92MIT
- AlicenseBqualityCmaintenanceEnables QA/SDET engineers to test APIs by ingesting Swagger/OpenAPI specs and Postman collections, generating and executing tests in multiple languages and frameworks with real-time progress tracking.Last updated11926MIT
- FlicenseAqualityDmaintenanceGenerates structured, comprehensive test cases from user stories, API specs, or raw text, with automatic Excel export and Playwright automation code generation.Last updated61
- Flicense-qualityBmaintenanceEnables automated QA testing by running a pipeline of AI agents that generate test scenarios, architect test layers, write Playwright tests, and review code, all grounded in feature requirements and API contracts.Last updated
Related MCP Connectors
AI Agent with Architectural Memory. Impact analysis (free), tests and code from the graph (pro).
Compiles structured specs into SCORM 1.2/2004 e-learning packages. 30 tools, quality gate, no LLM.
Generate AGENTS.md, AP2 compliance docs, checkout rules, debug playbook & MCP configs from any repo.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/davidpoza/qa-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server