rtm-mcp
rtm-mcp
Un servidor MCP (Model Context Protocol) de código abierto para la Requirements and Test Management for Jira API REST v2. Expone Requisitos, Casos de Prueba, Planes de Prueba, Ejecuciones de Prueba, Ejecuciones de Casos de Prueba, Defectos, Estructura de Árbol y Automatización como herramientas MCP, de modo que cualquier cliente compatible con MCP (Claude Desktop, extensiones de IDE, agentes personalizados) pueda manejar RTM directamente.
Ejecútalo con NPX — sin instalación, sin clonar:
npx rtm-mcpEnlaces
📦 paquete npm: https://www.npmjs.com/package/rtm-mcp
🐙 repositorio de GitHub: https://github.com/ngocdd/rtm-mcp
🐛 seguimiento de incidencias: https://github.com/ngocdd/rtm-mcp/issues
📚 documentación de la API de RTM: https://deviniti.com/support/addon/cloud/requirements-test-management/latest/rest-api/
Características
32 herramientas MCP que cubren CRUD, gestión de enlaces, adjuntos e importación de resultados de CI para cada recurso de RTM.
Autenticación mediante token Bearer a través de
RTM_API_TOKEN. Genera un token en Jira: Apps → Requirements and Test Management → ⋯ → Rest API authentication → Generate Token.Regiones US + EU — cambia mediante
RTM_BASE_URL.Reintentos + tiempos de espera + jitter integrados en el cliente HTTP (maneja 429/5xx/errores de red).
Errores tipados mapeados a mensajes de error MCP amigables — nunca filtra trazas de pila.
Carga de adjuntos acepta cargas útiles en base64 (seguro para clientes MCP en sandbox).
Registro solo en stderr — stdout permanece limpio para JSON-RPC.
Related MCP server: Jira QMetry MCP Server
Inicio rápido
1. Genera un token de API de RTM
Abre Jira.
Ve a Apps → Requirements and Test Management.
Haz clic en el menú de tres puntos (⋯) → Rest API authentication.
Haz clic en Generate Token, elige un usuario, añade una etiqueta, haz clic en Generate.
Copia el token inmediatamente — RTM nunca lo vuelve a mostrar.
2. Ejecuta el servidor
RTM_API_TOKEN=your-token-here npx rtm-mcpEl servidor habla MCP sobre stdio — apunta tu cliente MCP hacia él.
Configuración de Claude Desktop
Añade a claude_desktop_config.json:
US / Global (URL por defecto):
{
"mcpServers": {
"rtm": {
"command": "npx",
"args": ["-y", "rtm-mcp"],
"env": {
"RTM_API_TOKEN": "<your-token-here>",
"RTM_BASE_URL": "https://rtm-us.deviniti.com/api"
}
}
}
}Región EU:
{
"mcpServers": {
"rtm": {
"command": "npx",
"args": ["-y", "rtm-mcp"],
"env": {
"RTM_API_TOKEN": "<your-token-here>",
"RTM_BASE_URL": "https://rtm-eu-api.hexygen.com/api"
}
}
}
}Configuración de Claude Code CLI
Usa el comando claude mcp add para registrar el servidor con Claude Code.
Ámbito de usuario (recomendado — disponible en todos tus proyectos)
claude mcp add --scope user --transport stdio rtm \
-e RTM_API_TOKEN=<your-token-here> \
-e RTM_BASE_URL=https://rtm-us.deviniti.com/api \
-- npx -y rtm-mcpRegión EU:
claude mcp add --scope user --transport stdio rtm \
-e RTM_API_TOKEN=<your-token-here> \
-e RTM_BASE_URL=https://rtm-eu-api.hexygen.com/api \
-- npx -y rtm-mcp--scope user escribe la entrada en ~/.claude.json para que cada proyecto de Claude Code
en esta máquina pueda ver el servidor rtm.
Ámbito de proyecto (solo este proyecto)
claude mcp add --scope project --transport stdio rtm \
-e RTM_API_TOKEN=<your-token-here> \
-e RTM_BASE_URL=https://rtm-us.deviniti.com/api \
-- npx -y rtm-mcpEscribe en .mcp.json en el directorio actual (se confirma en git).
Verifica el registro
claude mcp list # see all configured servers
claude mcp get rtm # inspect the rtm entryElimina el servidor
claude mcp remove rtmConfiguración
Variable de entorno | Obligatoria | Valor por defecto | Propósito |
| sí | — | Token Bearer de Jira → Apps → RTM → API Tokens. |
| no |
| EU: |
| no |
| Uno de |
| no |
| Tiempo de espera HTTP por solicitud en milisegundos. |
| no |
| Reintentos en errores |
Un RTM_API_TOKEN ausente o vacío aborta el inicio con una pista amigable.
Herramientas disponibles
Todas las herramientas devuelven contenido de texto MCP con JSON bien formateado. 32 herramientas en total, organizadas por recurso de RTM a continuación. Usa el comando de listado de herramientas del host MCP para enumerarlas en tiempo de ejecución.
Requisitos (REQUIREMENTS)
rtm_get_requirement— obtener porrequirementKeyrtm_create_requirement— crearrtm_update_requirement— actualización parcialrtm_delete_requirement— eliminar permanentemente
RTM no tiene un endpoint de listado para requisitos — usa
rtm_get_tree_structurepara enumerarlos por proyecto.
Casos de Prueba (TEST_CASES)
rtm_get_test_case— obtener portestCaseKeyrtm_create_test_case— crear (pasastepGroupspara definir pasos)rtm_update_test_case— actualización parcialrtm_update_test_case_covered_requirements— gestionar enlaces de requisitos cubiertos. Pasa exactamente uno deset/add/remove. Llamada subyacente:PUT /api/v2/test-case/{key}/covered-requirementscon cuerpo{ coveredRequirements: { <op>: [...] } }.
rtm_delete_test_caseno se expone intencionadamente — realiza las eliminaciones a través de la interfaz de Jira. RTM no tiene endpoint de listado — usartm_get_tree_structure.
Planes de Prueba (TEST_PLANS)
Refleja los 8 endpoints documentados en la API REST pública de RTM:
rtm_get_test_plan—GET /api/test-plan/{testKey}rtm_create_test_plan—POST /api/test-planrtm_update_test_plan—PUT /api/test-plan/{testKey}rtm_delete_test_plan—DELETE /api/test-plan/{testKey}rtm_update_test_plan_tc_order—PUT /api/test-plan/{testKey}/tc-ordercon cuerpo{ order: [...] }rtm_create_test_plan_folder—POST /api/test-plan/{testKey}/tree/foldersrtm_add_test_case_to_test_plan—POST /api/test-plan/{testKey}/testcasescon cuerpo{ testKey: "..." }rtm_remove_test_case_from_test_plan—DELETE /api/test-plan/{testKey}/testcases/{tcKey}
RTM no tiene endpoint de listado — usa
rtm_get_tree_structure.
Ejecuciones de Prueba (TEST_EXECUTIONS)
rtm_get_test_execution— obtener portestExecutionKeyrtm_create_test_execution— crear ejecutando un Plan de Prueba (pasatestPlanTestKey)rtm_update_test_execution— actualización parcial (aceptastatus,summary,description,priority,owner,customFields)rtm_delete_test_execution— eliminar permanentemente
RTM no tiene endpoint de listado — usa
rtm_get_tree_structure.
Ejecuciones de Casos de Prueba (TCE)
TCE = una fila en una Ejecución de Prueba que registra el resultado de ejecutar un Caso de Prueba.
rtm_get_test_case_execution— obtener un TCE (resultado, ejecutor, comentario, defectos, pasos)rtm_update_test_case_execution— actualización parcial. Pasaresult: "Fail"(o"Pass","Blocked", …) para cambiar el estado de aprobado/fallido. Llamada subyacente:PUT /api/v2/test-case-execution/{key}con cuerpo{ result: { name: "Fail" } }.rtm_link_defect_to_test_case_execution— enlazar un defecto a todo el TCErtm_link_defect_to_test_case_execution_step— enlazar un defecto a un paso específicortm_list_test_case_execution_attachments— listar adjuntos en el TCErtm_upload_test_case_execution_attachment(entrada base64) — subir un archivo al TCErtm_get_test_case_execution_attachment— obtener metadatos de un adjunto (devuelve URL de descarga)rtm_list_test_case_execution_step_attachments— listar adjuntos en un solo pasortm_upload_test_case_execution_step_attachment(entrada base64) — subir un archivo a un paso específico
Los endpoints DELETE en TCE (
unlink defect,delete attachment) no se exponen intencionadamente — realiza esas acciones a través de la interfaz de Jira o llama directamente a la API REST subyacente. Los endpoints existen; solo se eliminaron los envoltorios MCP de un solo disparo porque las operaciones destructivas deben estar detrás de un flujo de confirmación.
Defectos
rtm_get_defect— obtener pordefectKeyrtm_create_defect— crear (pasaidentifyingTestCasespara enlazar a casos de prueba)rtm_update_defect— actualización parcialrtm_delete_defect— eliminar permanentemente
RTM no tiene endpoint de listado — usa
rtm_get_tree_structureojira_searcha través del MCP de Atlassian.
Árbol
rtm_get_tree_structure— obtener el árbol de carpetas de un proyecto. RequiereprojectIdnumérico (resuélvelo desdeprojectKeymediante la API REST de Jira) ytreeType∈REQUIREMENTS/TEST_CASES/TEST_PLANS/TEST_EXECUTIONS.
Automatización
rtm_import_test_results— subir un archivo ZIP/TAR.GZ de informes JUnit / NUnit / Cucumber JSON; devuelve untaskIdrtm_get_import_status— consultar untaskIdanterior hasta questatussalga deIMPORTING
Convenciones usadas en todos los recursos
Convención | Descripción |
Gestión de enlaces | Un endpoint |
Resultado de Ejecución de Caso de Prueba | El estado de aprobado/fallido se envía como |
Adjuntos | Subida mediante multipart con |
Sin herramientas MCP DELETE para recursos anidados | Desenlazar defectos y eliminar adjuntos pertenecen a un flujo de confirmación explícito en el cliente MCP — no a una llamada de herramienta de un solo disparo. Usa la interfaz de Jira o llama directamente a la API REST. |
Ejemplos
"Enumera los requisitos en el proyecto ACME."
> // No list endpoint — fetch the tree and walk it.
> rtm_get_tree_structure { projectId: 10000, treeType: "REQUIREMENTS" }"Crea un Caso de Prueba llamado 'Login with valid credentials' bajo la carpeta /Smoke y enlázalo al requisito ACME-42."
> rtm_create_test_case { projectKey: "ACME", summary: "Login with valid credentials", folder: "/Smoke", stepGroups: [...] }
> rtm_update_test_case_covered_requirements { testCaseKey: "<new>", set: ["ACME-42"] }"Añade 3 casos de prueba al plan KAN-52 sin reemplazar el conjunto existente."
> rtm_update_test_plan_included_test_cases {
testPlanKey: "KAN-52",
add: ["KAN-30", "KAN-31", "KAN-32"]
}"Enlaza el defecto KAN-100 a la ejecución de caso de prueba KAN-53-KAN-46 en el paso 8517443."
> rtm_link_defect_to_test_case_execution_step {
testCaseExecutionKey: "KAN-53-KAN-46",
stepId: "8517443",
defectTestKey: "KAN-100"
}"Marca el TCE KAN-53-KAN-46 como Fallido y añade un comentario."
> rtm_update_test_case_execution {
testCaseExecutionKey: "KAN-53-KAN-46",
result: "Fail",
comment: "Login button did not respond after 3 retries"
}"Adjunta una captura de pantalla al paso 2 del TCE KAN-53-KAN-46."
> rtm_upload_test_case_execution_step_attachment {
testCaseExecutionKey: "KAN-53-KAN-46",
stepId: "8517444",
filename: "evidence.png",
contentBase64: "<base64 bytes>",
mimeType: "image/png"
}"Importa el JUnit XML de anoche."
> rtm_import_test_results {
projectKey: "ACME",
filename: "junit.zip",
contentBase64: "<base64>",
reportType: "JUNIT",
jobUrl: "https://ci/job/123"
}
> rtm_get_import_status { taskId: "<returned>" }Solución de problemas
Síntoma | Causa / corrección probable |
El servidor se cierra al iniciar con | Token faltante o vacío. Establézcalo como |
La herramienta devuelve | Token inválido, caducado o generado para un usuario diferente. Regénerelo en Jira. |
La herramienta devuelve | La clave de prueba no coincide con ningún issue — verifíquela con |
| RTM rechazó la carga útil. El mensaje de la herramienta incluye el cuerpo de respuesta analizado. |
| Estás alcanzando el límite de tasa. Reduce la concurrencia o espera. |
|
|
La herramienta se cuelga / agota el tiempo | Aumente |
Desarrollo
git clone <repo>
cd rtm-mcp
npm install
npm run build # compile to dist/
npm test # unit tests
npm run dev # run from src/ via tsx
npm run typecheck # tsc --noEmitEstructura del proyecto
src/
├── index.ts # entry point (shebang)
├── server.ts # McpServer wiring
├── config/ # env validation + constants
├── client/
│ ├── http.ts # fetch wrapper w/ retry + timeout
│ ├── errors.ts # RTMError hierarchy
│ └── rtm-client.ts # facade composing all resources
├── resources/ # one file per RTM resource
├── tools/ # MCP tool registrations
├── schemas/ # zod input schemas per tool group
└── utils/ # logger, MCP response helpers
tests/
├── unit/ # mocked fetch tests
└── integration/ # opt-in live tests (gated by RTM_LIVE=1)Pruebas de integración en vivo
RTM_API_TOKEN=xxx \
RTM_BASE_URL=https://rtm-us.deviniti.com/api \
RTM_LIVE=1 \
RTM_TEST_PROJECT=ACME \
npm run test:integrationUse un proyecto Jira de prueba. La prueba de humo crea un Requisito, lo obtiene, lista los cercanos y limpia.
Publicación
npm login
npm version patch # or minor / major
npm publish --access publicprepublishOnly ejecuta typecheck, test, build automáticamente.
Contribuciones
Este es un proyecto de código abierto: ¡los issues y PRs son bienvenidos!
Haz un fork del repositorio: https://github.com/ngocdd/rtm-mcp
Crea una rama de características:
git checkout -b feat/my-toolInstala y ejecuta las pruebas localmente:
npm install npm run typecheck npm testAñade pruebas para cualquier nuevo método de recurso o herramienta.
Abre un Pull Request contra
main: https://github.com/ngocdd/rtm-mcp/compare
Añadir un nuevo endpoint de RTM
Añade un método tipado al módulo
src/resources/<resource>.tscorrespondiente.Añade un esquema de entrada zod a
src/schemas/<resource>.schema.ts.Registra una herramienta MCP en
src/tools/<resource>.ts.Añade una prueba unitaria en
tests/unit/.Ejecuta
npm run typecheck && npm test.
Reportar errores
Usa https://github.com/ngocdd/rtm-mcp/issues — incluye el tipo de recurso RTM, la ruta del endpoint, la respuesta esperada vs. real y el cuerpo de la solicitud (redactado).
Licencia
MIT — ver LICENSE.
Copyright (c) 2026 contribuyentes de rtm-mcp. Publicado bajo la Licencia MIT; eres libre de usar, modificar y distribuir este proyecto tanto en software de código abierto como propietario, siempre que se conserve el aviso de copyright.
This server cannot be deployed
Maintenance
Related MCP Connectors
MCP server for AI access to SmartBear tools, including BugSnag, Reflect, Swagger, PactFlow, QTM4J.
MCP Server for JFrog, providing tools for development and artifact management.
Agile project management over MCP: boards, epics, roadmap, retros, whiteboards, wiki, metrics
MCP server for your apps' tools and custom tools, plus hosted AI agents and approval-gated workflows
Related MCP Servers
- AlicenseAqualityDmaintenanceAn MCP server that exposes the QMetry Test Management for Jira Cloud REST API as tools for MCP-compatible clients. It enables users to manage test cases, test cycles, test executions, test plans, folders, and automation rules through natural language interactions.3055 npmMIT
- AlicenseBqualityCmaintenanceMCP server to interact with the QMetry for Jira API, enabling management of test cases, test cycles, test plans, and more through well-defined tools.9339 npmApache 2.0
- AlicenseNot gradedqualityCmaintenanceJira Cloud MCP server providing Jira-first tools for common workflows and full REST API coverage through a generic request tool.454 npmMIT
- FlicenseNot gradedqualityBmaintenanceMCP server for Jira Data Center / Server (self-hosted Jira, REST API v2) that exposes core work-item project-management operations (platform + Agile) as MCP tools.-