rtm-mcp
rtm-mcp
open-source MCP-сервер (Model Context Protocol) для REST API v2 Requirements and Test Management for Jira. Предоставляет требования, тест-кейсы, тест-планы, тестовые выполнения, выполнения тест-кейсов, дефекты, древовидную структуру и автоматизацию как MCP-инструменты, чтобы любой MCP-совместимый клиент (Claude Desktop, IDE-расширения, кастомные агенты) мог управлять RTM напрямую.
Запускается через NPX — без установки и клонирования:
npx rtm-mcpСсылки
📦 npm-пакет: https://www.npmjs.com/package/rtm-mcp
🐙 Репозиторий GitHub: https://github.com/ngocdd/rtm-mcp
🐛 Трекер задач: https://github.com/ngocdd/rtm-mcp/issues
📚 Документация RTM API: https://deviniti.com/support/addon/cloud/requirements-test-management/latest/rest-api/
Возможности
40+ инструментов для CRUD-операций и управления связями для каждого ресурса RTM.
Аутентификация по Bearer-токену через
RTM_API_TOKEN. Токен генерируется в Jira: Apps → Requirements and Test Management → ⋯ → Rest API authentication → Generate Token.Регионы US + EU — переключение через
RTM_BASE_URL.Повторные попытки + таймауты + джиттер встроены в HTTP-клиент (обрабатывает 429/5xx/сетевые ошибки).
Типизированные ошибки сопоставляются с понятными сообщениями MCP — без утечки стектрейсов.
Загрузка вложений принимает base64-данные (безопасно для изолированных MCP-клиентов).
Логирование только в stderr — stdout остаётся чистым для JSON-RPC.
Быстрый старт
1. Сгенерируйте API-токен RTM
Откройте Jira.
Перейдите в Apps → Requirements and Test Management.
Нажмите меню с тремя точками (⋯) → Rest API authentication.
Нажмите Generate Token, выберите пользователя, добавьте метку, нажмите Generate.
Скопируйте токен сразу — RTM больше не покажет его.
2. Запустите сервер
RTM_API_TOKEN=your-token-here npx rtm-mcpСервер говорит по MCP через stdio — укажите его вашему MCP-клиенту.
Настройка Claude Desktop
Добавьте в claude_desktop_config.json:
US / Global (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.devinti.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.devinti.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Конфигурация
Переменная окружения | Обязательна | По умолчанию | Назначение |
| да | — | Bearer-токен из Jira → Apps → RTM → API Tokens. |
| нет |
| EU: |
| нет |
| Одно из: |
| нет |
| HTTP-таймаут на запрос в миллисекундах. |
| нет |
| Повторы при ошибках |
Если RTM_API_TOKEN отсутствует или пуст, запуск прекращается с понятной подсказкой.
Доступные инструменты
Все инструменты возвращают MCP text с отформатированным JSON.
Требования (REQUIREMENTS)
rtm_list_requirements— список сprojectKey, необязательныеfolder,page,pageSizertm_get_requirement— получить поrequirementKeyrtm_create_requirement— создатьrtm_update_requirement— частично обновитьrtm_delete_requirementrtm_set_requirement_covered_test_cases— заменить набор связейrtm_add_requirement_covered_test_cases— дополнитьrtm_remove_requirement_covered_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)
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)
rtm_list_test_executions,rtm_get_test_execution,rtm_create_test_execution,rtm_update_test_execution,rtm_delete_test_execution
Выполнения тест-кейсов (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)
Дефекты
rtm_list_defects,rtm_get_defect,rtm_create_defect,rtm_update_defect,rtm_delete_defectrtm_set_defect_identifying_test_cases
Дерево
rtm_get_tree_structure— необязательныеprojectKey,resourceType
Автоматизация
rtm_import_test_results— загружает ZIP/TAR.GZ с JUnit/NUnit/Cucumber JSON; возвращаетtaskIdrtm_get_import_status— опрашивает, покаstatusне выйдет изIMPORTING
Примеры
«Перечисли 10 последних требований в проекте ACME.»
> rtm_list_requirements { projectKey: "ACME", pageSize: 10 }«Создай тест-кейс под названием „Login with valid credentials“ в папке /Smoke и привяжи его к требованию 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"] }«Свяжи дефект DEF-1 с выполнением теста TCE-42 на шаге 3.»
> rtm_link_defect_to_test_case_execution_step { testCaseExecutionKey: "TCE-42", stepId: "3", defectTestKey: "DEF-1" }«Импортируй вчерашний 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>" }Поиск и устранение неполадок
Симптом | Вероятная причина / решение |
Сервер падает при запуске с | Токен отсутствует или пуст. Задайте |
Инструмент возвращает | Токен недействителен, истёк или создан для другого пользователя. Перегенерируйте его в Jira. |
Инструмент возвращает | Ключ теста не соответствует ни одному issue — сначала проверьте его через |
| RTM отклонил отправленные данные. В сообщении инструмента содержится разобранное тело ответа. |
| Достигнут лимит запросов. Уменьшите параллельность или подождите. |
| Неверный |
Инструмент зависает / превышает время ожидания | Увеличьте |
Разработка
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-проект. Smoke-тест создаёт требование, получает его, показывает список рядом и затем чистит.
Публикация
npm login
npm version patch # or minor / major
npm publish --access publicprepublishOnly автоматически запускает typecheck, test, build.
Вклад в проект
Это open-source проект — приветствуются issues и PR!
Либо форке репозитория: https://github.com/ngocdd/rtm-mcp
Создайте новую ветку:
git checkout -b feat/my-toolУстановите зависимости и запустите тесты локально:
npm install npm run typecheck npm testДобавьте тесты для любого нового метода ресурса или инструмента.
Отправьте Pull Request в
main: https://github.com/ngocdd/rtm-mcp/compare
Добавление нового endpoint RTM
Добавьте типизированный метод в модуль
src/resources/<resource>.ts.Добавьте zod-схему входных данных в
src/schemas/<resource>.schema.ts.Зарегистрируйте инструмент MCP в
src/tools/<resource>.ts.Добавьте unit-тест в
tests/unit/.Запустите
npm run typecheck && npm test.
Сообщение о багах
Используйте https://github.com/ngocdd/rtm-mcp/issues — указывайте тип ресурса RTM, путь endpoint, ожидаемый и фактический ответ, а также переданное тело запроса (без конфиденциальных данных).
Лицензия
MIT — см. LICENSE.
Copyright (c) 2026 контрибьюторы rtm-mcp. Проект выпущен под MIT License — вы можете свободно использовать, модифицировать и распространять его в любом проекте, включая open-source и проприетарный, при условии сохранения уведомления об авторстве.
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