Skip to main content
Glama
vilaabo

zephyr-scale-mcp

by vilaabo

zephyr-scale-mcp

MCP-сервер (Model Context Protocol) для Zephyr Scale на self-hosted Jira Server / Data Center (бывш. TM4J / Kanoah). Даёт ИИ-агентам (Claude Code, Claude Desktop и другим MCP-клиентам) инструменты для управления тестовой моделью через REST API v1 ({JIRA_BASE_URL}/rest/atm/1.0).

Zephyr Scale Cloud (API v2) и Zephyr Squad — другие API, этим сервером не поддерживаются.

Возможности

Группа

Инструменты

Тест-кейсы

create_test_case, get_test_case, search_test_cases (TQL, GET/POST), update_test_case, add_test_steps, set_test_script, delete_test_case, create_test_cases_bulk, link_issues_to_test_cases, get_test_cases_linked_to_issue

Папки

create_folder (с рекурсивным созданием цепочки), rename_folder

Тест-циклы

create_test_run (с items и результатами), get_test_run, search_test_runs, delete_test_run, get_test_run_results (постранично)

Результаты

create_test_result, update_last_test_result, create_test_results_bulk, get_latest_result_for_test_case

Сервисные

list_environments, create_environment, find_jira_user, health_check

Поддерживаются все три формата скриптов тест-кейсов: STEP_BY_STEP, PLAIN_TEXT, BDD (Gherkin), включая шаги Call to Test (steps[].testCaseKey) и параметры (§parameters).

Related MCP server: mcp-zephyr-scale

Требования

  • Node.js ≥ 20

  • Jira Server / Data Center с установленным плагином Zephyr Scale

  • Персональный токен Jira DC (PAT, Jira 8.14+) или логин/пароль

Установка и сборка

git clone <repo-url> zephyr-scale-mcp
cd zephyr-scale-mcp
npm install
npm run build        # → dist/index.js

Конфигурация (переменные окружения)

Переменная

Обяз.

Default

Назначение

JIRA_BASE_URL

да

Базовый URL Jira без завершающего /, напр. https://jira.example.com

JIRA_AUTH

нет

pat

pat | basic

JIRA_PAT

при pat

Персональный токен доступа Jira DC

JIRA_USERNAME, JIRA_PASSWORD

при basic

Логин/пароль

JIRA_TIMEOUT_MS

нет

30000

Таймаут одного HTTP-запроса

JIRA_MAX_RETRIES

нет

2

Повторы для GET и для ответов 429/503

JIRA_TLS_REJECT_UNAUTHORIZED

нет

true

false разрешает самоподписанные сертификаты (отключает проверку TLS для всех запросов процесса; в stderr выводится предупреждение)

ZEPHYR_DEFAULT_PROJECT_KEY

нет

Подставляется, если инструмент вызван без projectKey

ZEPHYR_READONLY

нет

false

При true инструменты записи возвращают ошибку

ZEPHYR_LOG_LEVEL

нет

info

debug | info | warn | error (весь лог — в stderr)

Секреты (JIRA_PAT, JIRA_PASSWORD) не пишутся в логи и не попадают в ответы инструментов и тексты ошибок.

Подключение к MCP-клиенту

claude_desktop_config.json / .mcp.json:

{
  "mcpServers": {
    "zephyr-scale": {
      "command": "node",
      "args": ["/path/to/zephyr-scale-mcp/dist/index.js"],
      "env": {
        "JIRA_BASE_URL": "https://jira.example.com",
        "JIRA_AUTH": "pat",
        "JIRA_PAT": "<personal access token>",
        "ZEPHYR_DEFAULT_PROJECT_KEY": "PROJ"
      }
    }
  }
}

Claude Code:

claude mcp add zephyr-scale \
  --env JIRA_BASE_URL=https://jira.example.com \
  --env JIRA_PAT=<token> \
  --env ZEPHYR_DEFAULT_PROJECT_KEY=PROJ \
  -- node /path/to/zephyr-scale-mcp/dist/index.js

Проверка: попросите агента вызвать health_check — он должен вернуть { ok: true, jiraUser, baseUrl, zephyrPluginReachable }.

Примеры

Создание кейса с шагами:

{
  "tool": "create_test_case",
  "arguments": {
    "projectKey": "PROJ",
    "name": "Успешный вход",
    "folder": "/Регресс/Авторизация",
    "testScript": {
      "type": "STEP_BY_STEP",
      "steps": [
        { "description": "Открыть страницу логина", "testData": "URL: /login", "expectedResult": "Форма логина отображается" },
        { "testCaseKey": "PROJ-T45" },
        { "description": "Ввести валидные креды", "expectedResult": "Открыт дашборд" }
      ]
    }
  }
}

Поиск по TQL: projectKey = "PROJ" AND folder = "/Регресс" AND status = "Approved" (синтаксис строгий: пробелы вокруг операторов, строки в двойных кавычках, только AND).

Цикл с результатами создаётся одним вызовом create_test_run — см. описание инструмента (поле items, в т.ч. scriptResults с пошаговыми статусами).

Ограничения API v1 (важно)

  1. Тест-циклы неизменяемы после создания. PUT /testrun/{key} не существует: нельзя переименовать цикл, сменить папку, добавить/убрать кейсы. Состав задаётся только в create_test_run (поле items). Инструменты результатов лишь находят существующий item по testCaseKey.

  2. Папки не создаются автоматически при создании кейсов/циклов; публичного листинга папок нет; переименование — только по числовому id (его возвращает create_folder).

  3. owner / executedBy / assignedTo — это Jira user key (JIRAUSER10000), не логин и не e-mail; для резолва используйте find_jira_user.

  4. TQL строгий — только AND, пробелы вокруг операторов, строки в двойных кавычках; для циклов доступны только поля projectKey и folder.

  5. Статусы / приоритеты / окружения регистрозависимы и передаются внутренними (нелокализованными) именами; на инстансе могут быть кастомные наборы.

  6. В labels пробелы заменяются API на _.

  7. Устаревшие поля API не поддерживаются намеренно: issueKeyissueLinks, executionDateactualEndDate, userKeyexecutedBy.

  8. Ключи сущностей: PROJ-T1 — кейс, PROJ-P1 — план, PROJ-R1 — цикл.

  9. Серверный default maxResults = 200; инструменты по умолчанию запрашивают 50.

  10. Шаги STEP_BY_STEP при PUT синхронизируются по id: без id — создать, с id — обновить, отсутствует в списке — удалить. Поэтому update_test_case с testScript.steps требует полный итоговый список; безопасное частичное добавление шагов делает add_test_steps (читает кейс, сливает, записывает).

Если API вашего инстанса ведёт себя иначе (старая версия плагина и т.п.) — зафиксируйте расхождение здесь и сообщите разработчику.

Обработка ошибок

Ошибки API возвращаются в формате Zephyr API error <status> (<METHOD> <path>): <тело до 2 КБ> с подсказкой для типовых причин (несуществующая папка, регистрозависимые статусы, синтаксис TQL, недоступный плагин, права). 429/503 повторяются с учётом Retry-After; сетевые ошибки и 5xx повторяются только для GET (backoff 500ms * 2^n + джиттер).

Разработка

npm run typecheck    # tsc --noEmit
npm test             # unit + contract (vitest + msw), без сети
npm run smoke        # интеграционный сценарий против реального стенда (ZEPHYR_E2E=1)

Smoke-сценарий требует реальных JIRA_BASE_URL/JIRA_PAT и ZEPHYR_DEFAULT_PROJECT_KEY (выделенный тестовый проект!) и оставляет на стенде папки /mcp-smoke-* (API не умеет удалять папки).

Структура

src/
├── index.ts        # bootstrap: конфиг, регистрация инструментов, stdio-транспорт
├── config.ts       # чтение и валидация env
├── http.ts         # zephyrFetch(): auth, таймаут, ретраи, нормализация ошибок
├── schemas.ts      # zod-схемы общих структур (Step, TestScript, поля результатов…)
├── toolkit.ts      # defineTool(): strict-валидация, read-only guard, формат ответов
└── tools/          # testCases, folders, testRuns, testResults, misc
test/               # unit + contract (msw) + smoke.e2e

Фаза 3 (не реализовано, по отдельному запросу)

Вложения, CRUD тест-планов, эндпоинты автоматизации, обход неизменяемости циклов (recreate_test_run_with_items), internal API за флагом — см. §7.6 ТЗ.

Install Server
F
license - not found
A
quality
B
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Latest Blog Posts

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/vilaabo/zephyr-scale-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server