Skip to main content
Glama

rtm-mcp

npm version npm downloads License: MIT GitHub repo CI status

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-mcp

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

  1. Öffnen Sie Jira.

  2. Gehen Sie zu Apps → Requirements and Test Management.

  3. Klicken Sie auf das Drei-Punkte-Menü (⋯) → Rest API authentication.

  4. Klicken Sie auf Generate Token, wählen Sie einen Benutzer aus, fügen Sie ein Label hinzu und klicken Sie auf Generate.

  5. Kopieren Sie das Token sofort — RTM zeigt es nie wieder an.

2. Server starten

RTM_API_TOKEN=your-token-here npx rtm-mcp

Der 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-mcp

EU-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-mcp

Schreibt 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 entry

Server entfernen

claude mcp remove rtm

Konfiguration

Umgebungsvariable

Erforderlich

Standard

Zweck

RTM_API_TOKEN

ja

—

Bearer-Token von Jira → Apps → RTM → API Tokens.

RTM_BASE_URL

nein

https://rtm-us.deviniti.com/api

EU: https://rtm-eu-api.hexygen.com/api. Bestätigen Sie dies im Bereich Rest API authentication.

RTM_LOG_LEVEL

nein

info

Einer von debug, info, warn, error. Logs gehen nur an stderr.

RTM_TIMEOUT_MS

nein

30000

HTTP-Timeout pro Anfrage in Millisekunden.

RTM_MAX_RETRIES

nein

2

Wiederholungen bei 429/5xx/Netzwerkfehlern. Beachtet Retry-After.

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 per requirementKey

  • rtm_create_requirement — Erstellen

  • rtm_update_requirement — Teilweises Aktualisieren

  • rtm_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 per testCaseKey

  • rtm_create_test_case — Erstellen (übergeben Sie stepGroups, um Schritte zu definieren)

  • rtm_update_test_case — Teilweises Aktualisieren

  • rtm_update_test_case_covered_requirements — Verwaltung der Links zu abgedeckten Requirements. Übergeben Sie genau eines von set / add / remove. Drahtaufruf: PUT /api/v2/test-case/{key}/covered-requirements mit Body { coveredRequirements: { <op>: [...] } }.

rtm_delete_test_case ist bewusst nicht verfügbar — führen Sie Löschungen über die Jira-Oberfläche durch. RTM hat keinen Listen-Endpunkt — verwenden Sie rtm_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-plan

  • rtm_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-order mit Body { order: [...] }

  • rtm_create_test_plan_folder — POST /api/test-plan/{testKey}/tree/folders

  • rtm_add_test_case_to_test_plan — POST /api/test-plan/{testKey}/testcases mit 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 per testExecutionKey

  • rtm_create_test_execution — Erstellen durch Ausführen eines Test Plans (übergeben Sie testPlanTestKey)

  • rtm_update_test_execution — Teilweises Aktualisieren (akzeptiert status, 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 Sie result: "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üpfen

  • rtm_link_defect_to_test_case_execution_step — Ein Defect mit einem bestimmten Schritt verknüpfen

  • rtm_list_test_case_execution_attachments — Anhänge der TCE auflisten

  • rtm_upload_test_case_execution_attachment (Base64-Eingabe) — Eine Datei zur TCE hochladen

  • rtm_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 auflisten

  • rtm_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 per defectKey

  • rtm_create_defect — Erstellen (übergeben Sie identifyingTestCases, um mit Test Cases zu verknüpfen)

  • rtm_update_defect — Teilweises Aktualisieren

  • rtm_delete_defect — Dauerhaftes Löschen

RTM hat keinen Listen-Endpunkt — verwenden Sie rtm_get_tree_structure oder jira_search über das Atlassian-MCP.

Baumstruktur

  • rtm_get_tree_structure — Ordnerbaum für ein Projekt abrufen. Erfordert numerische projectId (lösen Sie aus projectKey über die Jira-REST-API auf) und treeType ∈ 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 eine taskId zurück

  • rtm_get_import_status — Eine frühere taskId abfragen, bis status den Wert IMPORTING verlässt

Konventionen, die für jede Ressource gelten

Konvention

Beschreibung

Link-Verwaltung

Ein PUT /api/v2/{resource}/{key}/{linkField}-Endpunkt nimmt die Operation (set / add / remove) im Body entgegen. Es gibt keine separaten …/set-, …/add-, …/remove-Pfade.

Test Case Execution-Ergebnis

Der Bestanden/Nicht bestanden-Status wird als { result: { name: "Fail" } } gesendet (nicht als einfacher String). Das MCP-Tool normalisiert result: "Fail" → { result: { name: "Fail" } } automatisch.

Anhänge

Upload über multipart mit file=@…. Listen-, Abruf-per-ID- und Schritt-Varianten werden gemäß dem V2-Layout bereitgestellt.

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 RTM_API_TOKEN is required

Token fehlt oder ist leer. Setzen Sie es als RTM_API_TOKEN=... vor dem Start.

Tool gibt Authentication failed. Verify RTM_API_TOKEN… zurück

Token ungültig, abgelaufen oder für einen anderen Benutzer generiert. Generieren Sie es in Jira neu.

Tool gibt Resource not found zurück

Der Testschlüssel stimmt mit keinem Issue überein – überprüfen Sie ihn mit rtm_get_* oder dem Baumstruktur-Tool.

Validation failed (HTTP 400)

RTM hat die Nutzlast abgelehnt. Die Tool-Nachricht enthält den geparsten Antworttext.

Rate limited by RTM API (HTTP 429). Retry after Ns.

Sie erreichen das Ratelimit. Reduzieren Sie die Parallelität oder warten Sie.

Network error reaching RTM API

Falsche RTM_BASE_URL (US- vs. EU-Abweichung), Firewall oder vorübergehendes Netzwerkproblem.

Tool hängt / Zeitüberschreitung

Erhöhen Sie RTM_TIMEOUT_MS. Standard ist 30s; Automatisierungsimporte können länger dauern.


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 --noEmit

Projektstruktur

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:integration

Verwenden 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 public

prepublishOnly führt typecheck, test, build automatisch aus.


Mitwirken

Dies ist ein Open-Source-Projekt – Issues und PRs sind willkommen!

  1. Forken Sie das Repo: https://github.com/ngocdd/rtm-mcp

  2. Erstellen Sie einen Feature-Branch: git checkout -b feat/my-tool

  3. Installieren und führen Sie Tests lokal aus:

    npm install
    npm run typecheck
    npm test
  4. Fügen Sie Tests für jede neue Ressourcenmethode oder jedes neue Tool hinzu.

  5. Öffnen Sie einen Pull Request gegen main: https://github.com/ngocdd/rtm-mcp/compare

Hinzufügen eines neuen RTM-Endpunkts

  1. Fügen Sie eine typisierte Methode zum passenden Modul src/resources/<resource>.ts hinzu.

  2. Fügen Sie ein Zod-Eingabeschema zu src/schemas/<resource>.schema.ts hinzu.

  3. Registrieren Sie ein MCP-Tool in src/tools/<resource>.ts.

  4. Fügen Sie einen Unit-Test in tests/unit/ hinzu.

  5. Führen Sie npm run typecheck && npm test aus.

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.

Maintenance

ActivitySlowing
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    An 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.
    30
    55 npm
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Jira Cloud MCP server providing Jira-first tools for common workflows and full REST API coverage through a generic request tool.
    454 npm
    MIT
  • F
    license
    Not graded
    quality
    B
    maintenance
    MCP 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.
    -