rtm-mcp
Provides tools for working with the Requirements and Test Management for Jira (RTM) REST API, including managing requirements, test cases, test plans, test executions, test-case executions, defects, tree structures, and importing automated test results.
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., "@rtm-mcpShow me all test cases in the smoke test plan for the release."
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.
rtm-mcp
An open-source MCP (Model Context Protocol) server for the Requirements and Test Management for Jira REST API v2. Exposes Requirements, Test Cases, Test Plans, Test Executions, Test Case Executions, Defects, Tree Structure and Automation as MCP tools so any MCP-compatible client (Claude Desktop, IDE extensions, custom agents) can drive RTM directly.
Run it with NPX β no install, no clone:
npx rtm-mcpLinks
π¦ npm package: https://www.npmjs.com/package/rtm-mcp
π GitHub repo: https://github.com/ngocdd/rtm-mcp
π Issue tracker: https://github.com/ngocdd/rtm-mcp/issues
π RTM API docs: https://deviniti.com/support/addon/cloud/requirements-test-management/latest/rest-api/
Features
40+ tools covering CRUD and link management for every RTM resource.
Bearer-token auth via
RTM_API_TOKEN. Generate a token in Jira: Apps β Requirements and Test Management β β― β Rest API authentication β Generate Token.US + EU regions β switch via
RTM_BASE_URL.Retries + timeouts + jitter baked into the HTTP client (handles 429/5xx/network).
Typed errors mapped to friendly MCP error messages β never leaks stack traces.
Attachment upload accepts base64 payloads (safe for sandboxed MCP clients).
Stderr-only logging β stdout stays clean for JSON-RPC.
Quick start
1. Generate an RTM API token
Open Jira.
Go to Apps β Requirements and Test Management.
Click the three-dot menu (β―) β Rest API authentication.
Click Generate Token, pick a user, add a label, click Generate.
Copy the token immediately β RTM never shows it again.
2. Run the server
RTM_API_TOKEN=your-token-here npx rtm-mcpThe server speaks MCP over stdio β point your MCP client at it.
Claude Desktop setup
Add to claude_desktop_config.json:
US / Global (default 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 setup
Use the claude mcp add command to register the server with Claude Code.
User scope (recommended β available across all your projects)
claude mcp add --scope user --transport stdio rtm \
-e RTM_API_TOKEN=<your-token-here> \
-e RTM_BASE_URL=https://rtm-us.devinti.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 writes the entry to ~/.claude.json so every Claude Code
project on this machine can see the rtm server.
Project scope (only this project)
claude mcp add --scope project --transport stdio rtm \
-e RTM_API_TOKEN=<your-token-here> \
-e RTM_BASE_URL=https://rtm-us.devinti.com/api \
-- npx -y rtm-mcpWrites to .mcp.json in the current directory (committed to git).
Verify the registration
claude mcp list # see all configured servers
claude mcp get rtm # inspect the rtm entryRemove the server
claude mcp remove rtmConfiguration
Env var | Required | Default | Purpose |
| yes | β | Bearer token from Jira β Apps β RTM β API Tokens. |
| no |
| EU: |
| no |
| One of |
| no |
| Per-request HTTP timeout in milliseconds. |
| no |
| Retries on |
A missing or empty RTM_API_TOKEN aborts startup with a friendly hint.
Available tools
All tools return MCP text content with pretty-printed JSON.
Requirements (REQUIREMENTS)
rtm_list_requirementsβ list withprojectKey, optionalfolder,page,pageSizertm_get_requirementβ fetch byrequirementKeyrtm_create_requirementβ creatertm_update_requirementβ partial updatertm_delete_requirementrtm_set_requirement_covered_test_casesβ replace link setrtm_add_requirement_covered_test_casesβ appendrtm_remove_requirement_covered_test_casesβ remove subset
Test Cases (TEST_CASES)
rtm_list_test_cases,rtm_get_test_case,rtm_create_test_case,rtm_update_test_case,rtm_delete_test_casertm_set_test_case_covered_requirements,rtm_add_test_case_covered_requirements,rtm_remove_test_case_covered_requirements
Test Plans (TEST_PLANS)
rtm_list_test_plans,rtm_get_test_plan,rtm_create_test_plan,rtm_update_test_plan,rtm_delete_test_planrtm_set_test_plan_included_test_cases,rtm_add_test_plan_included_test_cases,rtm_remove_test_plan_included_test_cases
Test Executions (TEST_EXECUTIONS)
rtm_list_test_executions,rtm_get_test_execution,rtm_create_test_execution,rtm_update_test_execution,rtm_delete_test_execution
Test Case Executions (TCE)
rtm_link_defect_to_test_case_executionrtm_unlink_defect_from_test_case_executionrtm_link_defect_to_test_case_execution_steprtm_unlink_defect_from_test_case_execution_steprtm_list_test_case_execution_attachmentsrtm_upload_test_case_execution_attachment(base64 input)
Defects
rtm_list_defects,rtm_get_defect,rtm_create_defect,rtm_update_defect,rtm_delete_defectrtm_set_defect_identifying_test_cases
Tree
rtm_get_tree_structureβ optionalprojectKey, optionalresourceType
Automation
rtm_import_test_resultsβ upload ZIP/TAR.GZ of JUnit/NUnit/Cucumber JSON; returns ataskIdrtm_get_import_statusβ poll untilstatusleavesIMPORTING
Examples
"List the 10 most recent Requirements in project ACME."
> rtm_list_requirements { projectKey: "ACME", pageSize: 10 }"Create a Test Case called 'Login with valid credentials' under folder /Smoke and link it to requirement ACME-42."
> rtm_create_test_case { projectKey: "ACME", name: "Login with valid credentials", folder: "/Smoke", stepGroups: [...] }
> rtm_set_test_case_covered_requirements { testCaseKey: "<new>", requirementKeys: ["ACME-42"] }"Link defect DEF-1 to test-case execution TCE-42 at step 3."
> rtm_link_defect_to_test_case_execution_step { testCaseExecutionKey: "TCE-42", stepId: "3", defectTestKey: "DEF-1" }"Import last night's 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>" }Troubleshooting
Symptom | Likely cause / fix |
Server exits on startup with | Token missing or empty. Set it as |
Tool returns | Token invalid, expired, or generated for a different user. Re-generate in Jira. |
Tool returns | The test key doesn't match any issue β verify it with |
| RTM rejected the payload. The tool message includes the parsed response body. |
| You're hitting the rate limit. Reduce concurrency or wait. |
| Wrong |
Tool hangs / times out | Bump |
Development
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 --noEmitProject layout
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 integration tests
RTM_API_TOKEN=xxx \
RTM_BASE_URL=https://rtm-us.deviniti.com/api \
RTM_LIVE=1 \
RTM_TEST_PROJECT=ACME \
npm run test:integrationUse a sandbox Jira project. The smoke test creates a Requirement, fetches it, lists nearby, and cleans up.
Publishing
npm login
npm version patch # or minor / major
npm publish --access publicprepublishOnly runs typecheck, test, build automatically.
Contributing
This is an open-source project β issues and PRs are welcome!
Fork the repo: https://github.com/ngocdd/rtm-mcp
Create a feature branch:
git checkout -b feat/my-toolInstall + run tests locally:
npm install npm run typecheck npm testAdd tests for any new resource method or tool.
Open a Pull Request against
main: https://github.com/ngocdd/rtm-mcp/compare
Adding a new RTM endpoint
Add a typed method to the matching
src/resources/<resource>.tsmodule.Add a zod input schema to
src/schemas/<resource>.schema.ts.Register an MCP tool in
src/tools/<resource>.ts.Add a unit test in
tests/unit/.Run
npm run typecheck && npm test.
Reporting bugs
Use https://github.com/ngocdd/rtm-mcp/issues β include RTM resource type, endpoint path, expected vs actual response and (redacted) request body.
License
MIT β see LICENSE.
Copyright (c) 2026 rtm-mcp contributors. Released under the MIT License; you are free to use, modify and distribute this project in both open-source and proprietary software, provided the copyright notice is preserved.
This server cannot be installed
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 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.
Search, document and execute authenticated API calls across 700+ apps via one MCP server
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/ngocdd/rtm-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server