Skip to main content
Glama

rtm-mcp

npm version npm downloads License: MIT GitHub repo CI status

Requirements and Test Management for Jira REST API v2용 오픈소스 MCP(Model Context Protocol) 서버입니다. 요구사항, 테스트 케이스, 테스트 계획, 테스트 실행, 테스트 케이스 실행, 결함, 트리 구조 및 자동화를 MCP 도구로 노출하므로 MCP 호환 클라이언트(Claude Desktop, IDE 확장, 커스텀 에이전트)라면 누구나 RTM을 직접 구동할 수 있습니다.

NPX로 실행하세요 — 설치나 클론이 필요 없습니다:

npx rtm-mcp

링크


기능

  • 모든 RTM 리소스에 대한 CRUD, 링크 관리, 첨부 파일, CI 결과 가져오기를 포함한 32개의 MCP 도구.

  • RTM_API_TOKEN을 통한 Bearer 토큰 인증. Jira에서 토큰 생성: 앱 → Requirements and Test Management → ⋯ → Rest API authentication → Generate Token.

  • US + EU 리전 — RTM_BASE_URL로 전환.

  • HTTP 클라이언트에 내장된 재시도 + 타임아웃 + 지터(429/5xx/네트워크 오류 처리).

  • 친숙한 MCP 오류 메시지로 매핑되는 타입화된 오류 — 스택 트레이스가 절대 유출되지 않습니다.

  • 첨부 파일 업로드는 base64 페이로드를 허용합니다(샌드박스 MCP 클라이언트에 안전).

  • stderr 전용 로깅 — stdout은 JSON-RPC용으로 깨끗하게 유지됩니다.


Related MCP server: Jira QMetry MCP Server

빠른 시작

1. RTM API 토큰 생성

  1. Jira를 엽니다.

  2. 앱 → Requirements and Test Management로 이동합니다.

  3. 점 3개 메뉴(⋯) → Rest API authentication을 클릭합니다.

  4. Generate Token을 클릭하고, 사용자를 선택하고, 라벨을 추가한 다음 Generate를 클릭합니다.

  5. 토큰을 즉시 복사하세요 — RTM은 토큰을 다시 표시하지 않습니다.

2. 서버 실행

RTM_API_TOKEN=your-token-here npx rtm-mcp

서버는 stdio를 통해 MCP를 사용합니다 — MCP 클라이언트를 이 서버에 연결하세요.


Claude Desktop 설정

claude_desktop_config.json에 추가:

US / 글로벌(기본 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 리전:

{
  "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 설정

claude mcp add 명령을 사용하여 서버를 Claude Code에 등록합니다.

사용자 범위(권장 — 모든 프로젝트에서 사용 가능)

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 리전:

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는 항목을 ~/.claude.json에 기록하므로 이 머신의 모든 Claude Code 프로젝트에서 rtm 서버를 볼 수 있습니다.

프로젝트 범위(이 프로젝트만 해당)

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

현재 디렉터리의 .mcp.json에 기록됩니다(git에 커밋됨).

등록 확인

claude mcp list           # see all configured servers
claude mcp get rtm        # inspect the rtm entry

서버 제거

claude mcp remove rtm

구성

환경 변수

필수

기본값

용도

RTM_API_TOKEN

예

—

Jira → 앱 → RTM → API 토큰에서 가져온 Bearer 토큰.

RTM_BASE_URL

아니요

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

EU: https://rtm-eu-api.hexygen.com/api. Rest API authentication 패널에서 확인하세요.

RTM_LOG_LEVEL

아니요

info

debug, info, warn, error 중 하나. 로그는 stderr로만 출력됩니다.

RTM_TIMEOUT_MS

아니요

30000

요청당 HTTP 타임아웃(밀리초).

RTM_MAX_RETRIES

아니요

2

429/5xx/네트워크 오류 시 재시도 횟수. Retry-After를 존중합니다.

RTM_API_TOKEN이 없거나 비어 있으면 친숙한 안내와 함께 시작이 중단됩니다.


사용 가능한 도구

모든 도구는 보기 좋게 출력된 JSON과 함께 MCP text 콘텐츠를 반환합니다. 총 32개 도구이며, 아래에 RTM 리소스별로 정리되어 있습니다. 런타임에 MCP 호스트의 도구 목록 명령을 사용하여 열거하세요.

요구사항(REQUIREMENTS)

  • rtm_get_requirement — requirementKey로 조회

  • rtm_create_requirement — 생성

  • rtm_update_requirement — 부분 업데이트

  • rtm_delete_requirement — 영구 삭제

RTM에는 요구사항 목록 엔드포인트가 없습니다 — 프로젝트별로 열거하려면 rtm_get_tree_structure를 사용하세요.

테스트 케이스(TEST_CASES)

  • rtm_get_test_case — testCaseKey로 조회

  • rtm_create_test_case — 생성(stepGroups를 전달하여 단계 정의)

  • rtm_update_test_case — 부분 업데이트

  • rtm_update_test_case_covered_requirements — 커버된 요구사항 링크 관리. set / add / remove 중 정확히 하나를 전달하세요. 실제 호출: PUT /api/v2/test-case/{key}/covered-requirements, 본문 { coveredRequirements: { <op>: [...] } }.

rtm_delete_test_case는 의도적으로 노출되지 않습니다 — 삭제는 Jira UI에서 수행하세요. RTM에는 목록 엔드포인트가 없습니다 — rtm_get_tree_structure를 사용하세요.

테스트 계획(TEST_PLANS)

공개 RTM REST API에 문서화된 8개 엔드포인트를 그대로 반영합니다:

  • 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, 본문 { 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, 본문 { testKey: "..." }

  • rtm_remove_test_case_from_test_plan — DELETE /api/test-plan/{testKey}/testcases/{tcKey}

RTM에는 목록 엔드포인트가 없습니다 — rtm_get_tree_structure를 사용하세요.

테스트 실행(TEST_EXECUTIONS)

  • rtm_get_test_execution — testExecutionKey로 조회

  • rtm_create_test_execution — 테스트 계획을 실행하여 생성(testPlanTestKey 전달)

  • rtm_update_test_execution — 부분 업데이트(status, summary, description, priority, owner, customFields 허용)

  • rtm_delete_test_execution — 영구 삭제

RTM에는 목록 엔드포인트가 없습니다 — rtm_get_tree_structure를 사용하세요.

테스트 케이스 실행(TCE)

TCE = 테스트 실행에서 하나의 테스트 케이스를 실행한 결과를 기록하는 한 행입니다.

  • rtm_get_test_case_execution — TCE 하나 조회(결과, 실행자, 코멘트, 결함, 단계)

  • rtm_update_test_case_execution — 부분 업데이트. result: "Fail"(또는 "Pass", "Blocked" 등)을 전달하여 통과/실패 상태를 변경하세요. 실제 호출: PUT /api/v2/test-case-execution/{key}, 본문 { result: { name: "Fail" } }.

  • rtm_link_defect_to_test_case_execution — TCE 전체에 결함 링크

  • rtm_link_defect_to_test_case_execution_step — 특정 단계에 결함 링크

  • rtm_list_test_case_execution_attachments — TCE의 첨부 파일 목록

  • rtm_upload_test_case_execution_attachment(base64 입력) — TCE에 파일 업로드

  • rtm_get_test_case_execution_attachment — 첨부 파일 하나의 메타데이터 조회(다운로드 URL 반환)

  • rtm_list_test_case_execution_step_attachments — 단일 단계의 첨부 파일 목록

  • rtm_upload_test_case_execution_step_attachment(base64 입력) — 특정 단계에 파일 업로드

TCE의 DELETE 엔드포인트(결함 연결 해제, 첨부 파일 삭제)는 의도적으로 노출되지 않습니다 — 해당 작업은 Jira UI에서 수행하거나 기본 REST API를 직접 호출하세요. 엔드포인트 자체는 존재합니다. 파괴적 작업은 확인 흐름 뒤에 있어야 하므로 MCP 원샷 래퍼만 제거되었습니다.

결함

  • rtm_get_defect — defectKey로 조회

  • rtm_create_defect — 생성(identifyingTestCases를 전달하여 테스트 케이스에 링크)

  • rtm_update_defect — 부분 업데이트

  • rtm_delete_defect — 영구 삭제

RTM에는 목록 엔드포인트가 없습니다 — rtm_get_tree_structure 또는 Atlassian MCP의 jira_search를 사용하세요.

트리

  • rtm_get_tree_structure — 프로젝트의 폴더 트리 조회. 숫자 projectId(Jira REST API를 통해 projectKey에서 확인)와 treeType ∈ REQUIREMENTS / TEST_CASES / TEST_PLANS / TEST_EXECUTIONS가 필요합니다.

자동화

  • rtm_import_test_results — JUnit / NUnit / Cucumber JSON 보고서의 ZIP/TAR.GZ 아카이브 업로드; taskId 반환

  • rtm_get_import_status — 이전 taskId를 status가 IMPORTING을 벗어날 때까지 폴링

모든 리소스에 적용되는 규칙

규칙

설명

링크 관리

하나의 PUT /api/v2/{resource}/{key}/{linkField} 엔드포인트가 본문에서 연산(set / add / remove)을 받습니다. 별도의 …/set, …/add, …/remove 경로는 없습니다.

테스트 케이스 실행 결과

통과/실패 상태는 { result: { name: "Fail" } }로 전송됩니다(일반 문자열이 아님). MCP 도구는 result: "Fail" → { result: { name: "Fail" } }을 자동으로 정규화합니다.

첨부 파일

file=@…이 포함된 multipart로 업로드합니다. 목록, ID별 조회, 단계별 변형은 V2 레이아웃에 따라 노출됩니다.

중첩 리소스에 대한 DELETE MCP 도구 없음

결함 연결 해제와 첨부 파일 삭제는 MCP 클라이언트의 명시적 확인 흐름 뒤에 있어야 합니다 — 원샷 도구 호출이 아닙니다. Jira UI를 사용하거나 REST API를 직접 호출하세요.


예시

"프로젝트 ACME의 요구사항을 열거해 줘."

> // No list endpoint — fetch the tree and walk it.
> rtm_get_tree_structure { projectId: 10000, treeType: "REQUIREMENTS" }

"'유효한 자격 증명으로 로그인'이라는 테스트 케이스를 /Smoke 폴더 아래에 만들고 요구사항 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"] }

"기존 세트를 교체하지 않고 테스트 케이스 3개를 계획 KAN-52에 추가해 줘."

> rtm_update_test_plan_included_test_cases {
    testPlanKey: "KAN-52",
    add: ["KAN-30", "KAN-31", "KAN-32"]
  }

"결함 KAN-100을 테스트 케이스 실행 KAN-53-KAN-46의 8517443 단계에 링크해 줘."

> rtm_link_defect_to_test_case_execution_step {
    testCaseExecutionKey: "KAN-53-KAN-46",
    stepId: "8517443",
    defectTestKey: "KAN-100"
  }

"TCE KAN-53-KAN-46을 실패로 표시하고 코멘트를 추가해 줘."

> rtm_update_test_case_execution {
    testCaseExecutionKey: "KAN-53-KAN-46",
    result: "Fail",
    comment: "Login button did not respond after 3 retries"
  }

"TCE KAN-53-KAN-46의 2단계에 스크린샷을 첨부해 줘."

> rtm_upload_test_case_execution_step_attachment {
    testCaseExecutionKey: "KAN-53-KAN-46",
    stepId: "8517444",
    filename: "evidence.png",
    contentBase64: "<base64 bytes>",
    mimeType: "image/png"
  }

"어젯밤 JUnit XML을 가져와 줘."

> rtm_import_test_results {
    projectKey: "ACME",
    filename: "junit.zip",
    contentBase64: "<base64>",
    reportType: "JUNIT",
    jobUrl: "https://ci/job/123"
  }
> rtm_get_import_status { taskId: "<returned>" }

문제 해결

증상

예상 원인 / 해결 방법

서버가 시작 시 RTM_API_TOKEN is required 오류로 종료됨

토큰이 없거나 비어 있음. 실행 전에 RTM_API_TOKEN=...으로 설정하세요.

도구가 Authentication failed. Verify RTM_API_TOKEN… 오류를 반환함

토큰이 유효하지 않거나 만료되었거나 다른 사용자용으로 생성됨. Jira에서 다시 생성하세요.

도구가 Resource not found 오류를 반환함

테스트 키가 어떤 이슈와도 일치하지 않음 — rtm_get_* 또는 트리 구조 도구로 확인하세요.

Validation failed (HTTP 400)

RTM이 페이로드를 거부함. 도구 메시지에 파싱된 응답 본문이 포함됩니다.

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

속도 제한에 도달했습니다. 동시성을 줄이거나 기다리세요.

Network error reaching RTM API

잘못된 RTM_BASE_URL(US vs EU 불일치), 방화벽 또는 일시적인 네트워크 문제.

도구가 멈추거나 시간 초과됨

RTM_TIMEOUT_MS를 늘리세요. 기본값은 30초이며, 자동화 가져오기는 더 오래 걸릴 수 있습니다.


개발

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

프로젝트 구조

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)

실시간 통합 테스트

RTM_API_TOKEN=xxx \
RTM_BASE_URL=https://rtm-us.deviniti.com/api \
RTM_LIVE=1 \
RTM_TEST_PROJECT=ACME \
npm run test:integration

샌드박스 Jira 프로젝트를 사용하세요. 스모크 테스트는 Requirement를 생성하고, 가져오고, 주변 항목을 나열한 후 정리합니다.


게시

npm login
npm version patch   # or minor / major
npm publish --access public

prepublishOnly가 typecheck, test, build를 자동으로 실행합니다.


기여

이 프로젝트는 오픈소스입니다 — 이슈와 PR을 환영합니다!

  1. 저장소를 포크하세요: https://github.com/ngocdd/rtm-mcp

  2. 기능 브랜치를 생성하세요: git checkout -b feat/my-tool

  3. 로컬에서 설치 및 테스트 실행:

    npm install
    npm run typecheck
    npm test
  4. 새 리소스 메서드나 도구에 대한 테스트를 추가하세요.

  5. main에 대해 Pull Request를 여세요: https://github.com/ngocdd/rtm-mcp/compare

새 RTM 엔드포인트 추가

  1. 해당 src/resources/<resource>.ts 모듈에 타입이 지정된 메서드를 추가하세요.

  2. src/schemas/<resource>.schema.ts에 zod 입력 스키마를 추가하세요.

  3. src/tools/<resource>.ts에 MCP 도구를 등록하세요.

  4. tests/unit/에 단위 테스트를 추가하세요.

  5. npm run typecheck && npm test를 실행하세요.

버그 신고

https://github.com/ngocdd/rtm-mcp/issues를 사용하세요 — RTM 리소스 유형, 엔드포인트 경로, 예상 응답과 실제 응답, (편집된) 요청 본문을 포함하세요.


라이선스

MIT — LICENSE 참조.

Copyright (c) 2026 rtm-mcp 기여자. MIT License에 따라 배포됩니다. 저작권 고지가 유지되는 한 이 프로젝트를 오픈소스 및 독점 소프트웨어에서 자유롭게 사용, 수정, 배포할 수 있습니다.

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