rtm-mcp
rtm-mcp
Ein Open-Source-MCP-Server (Model Context Protocol) für die Requirements and Test Management for Jira REST-API v2. Er stellt Requirements, Test Cases, Test Plans, Test Executions, Test Case Executions, Defects, Baumstruktur und Automatisierung als MCP-Tools bereit, sodass jeder MCP-kompatible Client (Claude Desktop, IDE-Erweiterungen, benutzerdefinierte Agenten) RTM direkt ansteuern kann.
Starten Sie ihn mit NPX — keine Installation, kein Klonen:
npx rtm-mcpLinks
📦 npm-Paket: https://www.npmjs.com/package/rtm-mcp
🐙 GitHub-Repository: https://github.com/ngocdd/rtm-mcp
🐛 Issue-Tracker: https://github.com/ngocdd/rtm-mcp/issues
📚 RTM-API-Dokumentation: https://deviniti.com/support/addon/cloud/requirements-test-management/latest/rest-api/
Funktionen
32 MCP-Tools für CRUD, Link-Verwaltung, Anhänge und CI-Ergebnisimport für jede RTM-Ressource.
Bearer-Token-Authentifizierung über
RTM_API_TOKEN. Generieren Sie ein Token in Jira: Apps → Requirements and Test Management → ⋯ → Rest API authentication → Generate Token.US- und EU-Regionen — umschaltbar über
RTM_BASE_URL.Retries + Timeouts + Jitter im HTTP-Client integriert (behandelt 429/5xx/Netzwerkfehler).
Typisierte Fehler, die auf verständliche MCP-Fehlermeldungen abgebildet werden — niemals werden Stack-Traces preisgegeben.
Anhänge-Upload akzeptiert Base64-Payloads (sicher für sandboxed MCP-Clients).
Nur-Stderr-Logging — stdout bleibt sauber für JSON-RPC.
Related MCP server: Jira QMetry MCP Server
Schnellstart
1. RTM-API-Token generieren
Öffnen Sie Jira.
Gehen Sie zu Apps → Requirements and Test Management.
Klicken Sie auf das Drei-Punkte-Menü (⋯) → Rest API authentication.
Klicken Sie auf Generate Token, wählen Sie einen Benutzer aus, fügen Sie ein Label hinzu und klicken Sie auf Generate.
Kopieren Sie das Token sofort — RTM zeigt es nie wieder an.
2. Server starten
RTM_API_TOKEN=your-token-here npx rtm-mcpDer Server spricht MCP über stdio — richten Sie Ihren MCP-Client darauf aus.
Claude Desktop Einrichtung
Fügen Sie zu claude_desktop_config.json hinzu:
US / Global (Standard-URL):
{
"mcpServers": {
"rtm": {
"command": "npx",
"args": ["-y", "rtm-mcp"],
"env": {
"RTM_API_TOKEN": "<your-token-here>",
"RTM_BASE_URL": "https://rtm-us.deviniti.com/api"
}
}
}
}EU-Region:
{
"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"
}
}
}
}Claude Code CLI Einrichtung
Verwenden Sie den Befehl claude mcp add, um den Server bei Claude Code zu registrieren.
Benutzerbereich (empfohlen — in allen Ihren Projekten verfügbar)
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-mcpEU-Region:
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 schreibt den Eintrag in ~/.claude.json, sodass jedes Claude-Code-Projekt
auf diesem Rechner den rtm-Server sehen kann.
Projektbereich (nur dieses Projekt)
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-mcpSchreibt in .mcp.json im aktuellen Verzeichnis (wird in git committet).
Registrierung überprüfen
claude mcp list # see all configured servers
claude mcp get rtm # inspect the rtm entryServer entfernen
claude mcp remove rtmKonfiguration
Umgebungsvariable | Erforderlich | Standard | Zweck |
| ja | — | Bearer-Token von Jira → Apps → RTM → API Tokens. |
| nein |
| EU: |
| nein |
| Einer von |
| nein |
| HTTP-Timeout pro Anfrage in Millisekunden. |
| nein |
| Wiederholungen bei |
Ein fehlendes oder leeres RTM_API_TOKEN bricht den Start mit einem verständlichen Hinweis ab.
Verfügbare Tools
Alle Tools geben MCP-text-Inhalt mit hübsch formatiertem JSON zurück. 32 Tools insgesamt, unten nach RTM-Ressource organisiert. Verwenden Sie den Tool-Listen-Befehl des MCP-Hosts, um sie zur Laufzeit aufzulisten.
Requirements (REQUIREMENTS)
rtm_get_requirement— Abrufen perrequirementKeyrtm_create_requirement— Erstellenrtm_update_requirement— Teilweises Aktualisierenrtm_delete_requirement— Dauerhaftes Löschen
RTM hat keinen Listen-Endpunkt für Requirements — verwenden Sie
rtm_get_tree_structure, um sie pro Projekt aufzulisten.
Test Cases (TEST_CASES)
rtm_get_test_case— Abrufen pertestCaseKeyrtm_create_test_case— Erstellen (übergeben SiestepGroups, um Schritte zu definieren)rtm_update_test_case— Teilweises Aktualisierenrtm_update_test_case_covered_requirements— Verwaltung der Links zu abgedeckten Requirements. Übergeben Sie genau eines vonset/add/remove. Drahtaufruf:PUT /api/v2/test-case/{key}/covered-requirementsmit Body{ coveredRequirements: { <op>: [...] } }.
rtm_delete_test_caseist bewusst nicht verfügbar — führen Sie Löschungen über die Jira-Oberfläche durch. RTM hat keinen Listen-Endpunkt — verwenden Siertm_get_tree_structure.
Test Plans (TEST_PLANS)
Spiegelt die 8 in der öffentlichen RTM-REST-API dokumentierten Endpunkte wider:
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-ordermit Body{ order: [...] }rtm_create_test_plan_folder—POST /api/test-plan/{testKey}/tree/foldersrtm_add_test_case_to_test_plan—POST /api/test-plan/{testKey}/testcasesmit Body{ testKey: "..." }rtm_remove_test_case_from_test_plan—DELETE /api/test-plan/{testKey}/testcases/{tcKey}
RTM hat keinen Listen-Endpunkt — verwenden Sie
rtm_get_tree_structure.
Test Executions (TEST_EXECUTIONS)
rtm_get_test_execution— Abrufen pertestExecutionKeyrtm_create_test_execution— Erstellen durch Ausführen eines Test Plans (übergeben SietestPlanTestKey)rtm_update_test_execution— Teilweises Aktualisieren (akzeptiertstatus,summary,description,priority,owner,customFields)rtm_delete_test_execution— Dauerhaftes Löschen
RTM hat keinen Listen-Endpunkt — verwenden Sie
rtm_get_tree_structure.
Test Case Executions (TCE)
TCE = eine Zeile in einer Test Execution, die das Ergebnis der Ausführung eines Test Case festhält.
rtm_get_test_case_execution— Eine TCE abrufen (Ergebnis, Ausführender, Kommentar, Defects, Schritte)rtm_update_test_case_execution— Teilweises Aktualisieren. Übergeben Sieresult: "Fail"(oder"Pass","Blocked", …), um den Bestanden/Nicht bestanden-Status zu ändern. Drahtaufruf:PUT /api/v2/test-case-execution/{key}mit Body{ result: { name: "Fail" } }.rtm_link_defect_to_test_case_execution— Ein Defect mit der gesamten TCE verknüpfenrtm_link_defect_to_test_case_execution_step— Ein Defect mit einem bestimmten Schritt verknüpfenrtm_list_test_case_execution_attachments— Anhänge der TCE auflistenrtm_upload_test_case_execution_attachment(Base64-Eingabe) — Eine Datei zur TCE hochladenrtm_get_test_case_execution_attachment— Metadaten eines Anhangs abrufen (gibt Download-URL zurück)rtm_list_test_case_execution_step_attachments— Anhänge eines einzelnen Schritts auflistenrtm_upload_test_case_execution_step_attachment(Base64-Eingabe) — Eine Datei zu einem bestimmten Schritt hochladen
DELETE-Endpunkte auf TCE (Defect-Verknüpfung aufheben, Anhang löschen) sind bewusst nicht verfügbar — führen Sie diese über die Jira-Oberfläche aus oder rufen Sie die zugrunde liegende REST-API direkt auf. Die Endpunkte existieren; nur die MCP-Einmal-Wrapper wurden entfernt, weil destruktive Operationen hinter einem Bestätigungsablauf stehen sollten.
Defects
rtm_get_defect— Abrufen perdefectKeyrtm_create_defect— Erstellen (übergeben SieidentifyingTestCases, um mit Test Cases zu verknüpfen)rtm_update_defect— Teilweises Aktualisierenrtm_delete_defect— Dauerhaftes Löschen
RTM hat keinen Listen-Endpunkt — verwenden Sie
rtm_get_tree_structureoderjira_searchüber das Atlassian-MCP.
Baumstruktur
rtm_get_tree_structure— Ordnerbaum für ein Projekt abrufen. Erfordert numerischeprojectId(lösen Sie ausprojectKeyüber die Jira-REST-API auf) undtreeType∈REQUIREMENTS/TEST_CASES/TEST_PLANS/TEST_EXECUTIONS.
Automatisierung
rtm_import_test_results— Ein ZIP/TAR.GZ-Archiv mit JUnit-/NUnit-/Cucumber-JSON-Berichten hochladen; gibt einetaskIdzurückrtm_get_import_status— Eine früheretaskIdabfragen, bisstatusden WertIMPORTINGverlässt
Konventionen, die für jede Ressource gelten
Konvention | Beschreibung |
Link-Verwaltung | Ein |
Test Case Execution-Ergebnis | Der Bestanden/Nicht bestanden-Status wird als |
Anhänge | Upload über multipart mit |
Keine DELETE-MCP-Tools für verschachtelte Ressourcen | Das Aufheben von Defect-Verknüpfungen und das Löschen von Anhängen gehören hinter einen expliziten Bestätigungsablauf im MCP-Client — nicht in einen Einmal-Tool-Aufruf. Verwenden Sie die Jira-Oberfläche oder rufen Sie die REST-API direkt auf. |
Beispiele
"Listen Sie die Requirements im Projekt ACME auf."
> // No list endpoint — fetch the tree and walk it.
> rtm_get_tree_structure { projectId: 10000, treeType: "REQUIREMENTS" }"Erstellen Sie einen Test Case namens 'Login with valid credentials' unter dem Ordner /Smoke und verknüpfen Sie ihn mit dem Requirement 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"] }"Fügen Sie 3 Test Cases zum Plan KAN-52 hinzu, ohne die vorhandene Menge zu ersetzen."
> rtm_update_test_plan_included_test_cases {
testPlanKey: "KAN-52",
add: ["KAN-30", "KAN-31", "KAN-32"]
}"Verknüpfen Sie das Defect KAN-100 mit der Test-Case-Execution KAN-53-KAN-46 bei Schritt 8517443."
> rtm_link_defect_to_test_case_execution_step {
testCaseExecutionKey: "KAN-53-KAN-46",
stepId: "8517443",
defectTestKey: "KAN-100"
}"Markieren Sie TCE KAN-53-KAN-46 als Fehlgeschlagen und fügen Sie einen Kommentar hinzu."
> rtm_update_test_case_execution {
testCaseExecutionKey: "KAN-53-KAN-46",
result: "Fail",
comment: "Login button did not respond after 3 retries"
}"Hängen Sie einen Screenshot an Schritt 2 der TCE KAN-53-KAN-46 an."
> rtm_upload_test_case_execution_step_attachment {
testCaseExecutionKey: "KAN-53-KAN-46",
stepId: "8517444",
filename: "evidence.png",
contentBase64: "<base64 bytes>",
mimeType: "image/png"
}"Importieren Sie das JUnit-XML von letzter Nacht."
> rtm_import_test_results {
projectKey: "ACME",
filename: "junit.zip",
contentBase64: "<base64>",
reportType: "JUNIT",
jobUrl: "https://ci/job/123"
}
> rtm_get_import_status { taskId: "<returned>" }Fehlerbehebung
Symptom | Wahrscheinliche Ursache / Behebung |
Server beendet sich beim Start mit | Token fehlt oder ist leer. Setzen Sie es als |
Tool gibt | Token ungültig, abgelaufen oder für einen anderen Benutzer generiert. Generieren Sie es in Jira neu. |
Tool gibt | Der Testschlüssel stimmt mit keinem Issue überein – überprüfen Sie ihn mit |
| RTM hat die Nutzlast abgelehnt. Die Tool-Nachricht enthält den geparsten Antworttext. |
| Sie erreichen das Ratelimit. Reduzieren Sie die Parallelität oder warten Sie. |
| Falsche |
Tool hängt / Zeitüberschreitung | Erhöhen Sie |
Entwicklung
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 --noEmitProjektstruktur
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)Live-Integrationstests
RTM_API_TOKEN=xxx \
RTM_BASE_URL=https://rtm-us.deviniti.com/api \
RTM_LIVE=1 \
RTM_TEST_PROJECT=ACME \
npm run test:integrationVerwenden Sie ein Sandbox-Jira-Projekt. Der Smoke-Test erstellt eine Anforderung, ruft sie ab, listet nahegelegene auf und räumt auf.
Veröffentlichung
npm login
npm version patch # or minor / major
npm publish --access publicprepublishOnly führt typecheck, test, build automatisch aus.
Mitwirken
Dies ist ein Open-Source-Projekt – Issues und PRs sind willkommen!
Forken Sie das Repo: https://github.com/ngocdd/rtm-mcp
Erstellen Sie einen Feature-Branch:
git checkout -b feat/my-toolInstallieren und führen Sie Tests lokal aus:
npm install npm run typecheck npm testFügen Sie Tests für jede neue Ressourcenmethode oder jedes neue Tool hinzu.
Öffnen Sie einen Pull Request gegen
main: https://github.com/ngocdd/rtm-mcp/compare
Hinzufügen eines neuen RTM-Endpunkts
Fügen Sie eine typisierte Methode zum passenden Modul
src/resources/<resource>.tshinzu.Fügen Sie ein Zod-Eingabeschema zu
src/schemas/<resource>.schema.tshinzu.Registrieren Sie ein MCP-Tool in
src/tools/<resource>.ts.Fügen Sie einen Unit-Test in
tests/unit/hinzu.Führen Sie
npm run typecheck && npm testaus.
Fehler melden
Verwenden Sie https://github.com/ngocdd/rtm-mcp/issues – geben Sie RTM-Ressourcentyp, Endpunktpfad, erwartete vs. tatsächliche Antwort und (geschwärzten) Anfragetext an.
Lizenz
MIT – siehe LICENSE.
Copyright (c) 2026 rtm-mcp-Mitwirkende. Veröffentlicht unter der MIT-Lizenz; Sie können dieses Projekt sowohl in Open-Source- als auch in proprietärer Software frei verwenden, modifizieren und verbreiten, sofern der Copyright-Hinweis erhalten bleibt.
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.-