Prototype · Preview: every server in the official registry, synced every 30 minutes. Reviews and accounts come in a later step.
PopNx MCPMCP servers for people who use AI · explained in plain words

Zephyr Scale MCP

by vilaaboversion 1.0.0i★ –iRuns on your computer
Registry nameio.github.vilaabo/zephyr-scale-mcp

Install

Overview

Description from the maker (original English)

Zephyr Scale on self-hosted Jira Server/DC: test cases, cycles, executions, plans and attachments

PopNx MCP’s three pillars

These three are never merged into one score: opinions, measurements and popularity are different things.

What you can do with it

We have not written a plain-language summary for this one yet. Below are the facts we read from the registry.

  • Connection: Runs on your computer
  • Transport: stdio
  • Category: Developer tools
  • You need to fill in: JIRA_BASE_URL, JIRA_PAT, JIRA_PASSWORD

Install

Pick the AI app you use, then copy the settings.

Before you install

  • Basic checks: 1 of 1 passed
  • Runs on your computer with your user’s permissions (files, network, apps).
  • You fill in yourself: JIRA_BASE_URL, JIRA_PAT, JIRA_AUTH, JIRA_USERNAME, JIRA_PASSWORD, ZEPHYR_DEFAULT_PROJECT_KEY, ZEPHYR_ALLOW_INTERNAL_API, ZEPHYR_READONLY, JIRA_TLS_REJECT_UNAUTHORIZED, JIRA_TIMEOUT_MS, JIRA_MAX_RETRIES, ZEPHYR_LOG_LEVEL

Values marked secret are keys to your account. Never share them or paste them into a chat.

You need

  • npmNode.js installed (for the npx command)

Which app do you use?

Pick your app above. We remember it, so next time the button says “Install in …”.

Open Claude Desktop → Settings → Developer → Edit Config, and paste this into claude_desktop_config.json

{
  "mcpServers": {
    "zephyr-scale": {
      "command": "npx",
      "args": [
        "-y",
        "zephyr-scale-mcp"
      ],
      "env": {
        "JIRA_BASE_URL": "your-value",
        "JIRA_PAT": "your-value",
        "JIRA_AUTH": "your-value",
        "JIRA_USERNAME": "your-value",
        "JIRA_PASSWORD": "your-value",
        "ZEPHYR_DEFAULT_PROJECT_KEY": "your-value",
        "ZEPHYR_ALLOW_INTERNAL_API": "your-value",
        "ZEPHYR_READONLY": "your-value",
        "JIRA_TLS_REJECT_UNAUTHORIZED": "your-value",
        "JIRA_TIMEOUT_MS": "your-value",
        "JIRA_MAX_RETRIES": "your-value",
        "ZEPHYR_LOG_LEVEL": "your-value"
      }
    }
  }
}

Run this in your terminal

claude mcp add zephyr-scale --env JIRA_BASE_URL=your-value --env JIRA_PAT=your-value --env JIRA_AUTH=your-value --env JIRA_USERNAME=your-value --env JIRA_PASSWORD=your-value --env ZEPHYR_DEFAULT_PROJECT_KEY=your-value --env ZEPHYR_ALLOW_INTERNAL_API=your-value --env ZEPHYR_READONLY=your-value --env JIRA_TLS_REJECT_UNAUTHORIZED=your-value --env JIRA_TIMEOUT_MS=your-value --env JIRA_MAX_RETRIES=your-value --env ZEPHYR_LOG_LEVEL=your-value -- npx -y zephyr-scale-mcp

Fill in the empty values before running it.

Open in Cursor

Or copy the settings yourself

Paste into .cursor/mcp.json in your project, or ~/.cursor/mcp.json

{
  "mcpServers": {
    "zephyr-scale": {
      "command": "npx",
      "args": [
        "-y",
        "zephyr-scale-mcp"
      ],
      "env": {
        "JIRA_BASE_URL": "your-value",
        "JIRA_PAT": "your-value",
        "JIRA_AUTH": "your-value",
        "JIRA_USERNAME": "your-value",
        "JIRA_PASSWORD": "your-value",
        "ZEPHYR_DEFAULT_PROJECT_KEY": "your-value",
        "ZEPHYR_ALLOW_INTERNAL_API": "your-value",
        "ZEPHYR_READONLY": "your-value",
        "JIRA_TLS_REJECT_UNAUTHORIZED": "your-value",
        "JIRA_TIMEOUT_MS": "your-value",
        "JIRA_MAX_RETRIES": "your-value",
        "ZEPHYR_LOG_LEVEL": "your-value"
      }
    }
  }
}

Your browser asks to open the app, then the app shows the settings and asks you to confirm. Key values are left empty for you to fill in.

Open in VS Code

Or copy the settings yourself

Paste into .vscode/mcp.json in your project

{
  "servers": {
    "zephyr-scale": {
      "type": "stdio",
      "command": "npx",
      "args": [
        "-y",
        "zephyr-scale-mcp"
      ],
      "env": {
        "JIRA_BASE_URL": "your-value",
        "JIRA_PAT": "your-value",
        "JIRA_AUTH": "your-value",
        "JIRA_USERNAME": "your-value",
        "JIRA_PASSWORD": "your-value",
        "ZEPHYR_DEFAULT_PROJECT_KEY": "your-value",
        "ZEPHYR_ALLOW_INTERNAL_API": "your-value",
        "ZEPHYR_READONLY": "your-value",
        "JIRA_TLS_REJECT_UNAUTHORIZED": "your-value",
        "JIRA_TIMEOUT_MS": "your-value",
        "JIRA_MAX_RETRIES": "your-value",
        "ZEPHYR_LOG_LEVEL": "your-value"
      }
    }
  }
}

Your browser asks to open the app, then the app shows the settings and asks you to confirm. Key values are left empty for you to fill in.

This one runs on your computer, and ChatGPT can only connect to servers on the internet. Pick another app.

Your choice stays on this device in a cookie; no account needed.

Values you fill in

  • JIRA_BASE_URL required env
    Jira base URL without a trailing slash, e.g. https://jira.example.com
  • JIRA_PAT secret env
    Jira Data Center Personal Access Token (used when JIRA_AUTH=pat, the default)
  • JIRA_AUTH env
    Authentication mode: pat (default) or basic
  • JIRA_USERNAME env
    Username for JIRA_AUTH=basic
  • JIRA_PASSWORD secret env
    Password for JIRA_AUTH=basic
  • ZEPHYR_DEFAULT_PROJECT_KEY env
    Project key used when a tool is called without projectKey
  • ZEPHYR_ALLOW_INTERNAL_API env
    true registers 11 UNOFFICIAL tools backed by the internal /rest/tests/1.0 API the vendor does not support: editing a test cycle in place (rename/move, add/remove/reorder its cases), editing or DELETI…
  • ZEPHYR_READONLY env
    true disables all write tools
  • JIRA_TLS_REJECT_UNAUTHORIZED env
    false allows self-signed certificates (disables TLS verification)
  • JIRA_TIMEOUT_MS env
    Timeout of a single HTTP request in milliseconds (default 30000)
  • JIRA_MAX_RETRIES env
    Retries for GET requests and for 429/503 responses, honoring Retry-After (default 2)
  • ZEPHYR_LOG_LEVEL env
    Log verbosity: debug | info | warn | error (default info; all logs go to stderr)

These settings are generated from the maker’s registry entry. If the README says otherwise, follow the README.

What it can do

Runs on your computer; the tool list appears in your AI app after you install it.

Basic checksi

We check information anyone can see; we have not read the code. Checks that do not apply are left out of the count. · Checked Nov 8, 2026

  • ✓ Pass

    Maker matches the repo

    The registry name was verified with the GitHub account vilaabo, which owns the repo

  • … Not checked yet

    Still maintained

    We have not read this repo from GitHub yet

  • … Not checked yet

    Has a licence

    We have not read this repo from GitHub yet

  • – Not applicable

    Endpoint responds

    This one runs on your computer; there is no internet endpoint

  • – Not applicable

    Sign-in with OAuth

    Runs on your computer and uses local settings instead

  • … Not checked yet

    No hidden instructions in tool descriptions

    Runs on your computer; we can only read tool lists from internet endpoints

Compared with others in Developer toolsi

  • More stars than 0% of the other 4937 servers in this category
  • Published to the registry more recently than 30% of the other 4937 servers in this category
  • Basic checks equal to or better than 100% of the other 4937 servers in this category

Compared with every active server in this category in the registry. Stars count only when the publisher owns the repo.

Common questions

Is Zephyr Scale MCP safe?

It passed 1 of 1 applicable basic checks. We have not read the code. Before adding a key or token, see what access the server asks for and use a key with only the permissions you need.

What keys or codes does it need?

You need to fill in: JIRA_BASE_URL, JIRA_PAT, JIRA_PASSWORD

Does it run on my computer or in the cloud?

It runs on your computer. Your AI app starts it when needed, and data does not pass through the maker’s servers (unless it calls an online service itself).

Is it still maintained?

The GitHub repo last changed –, and the latest version (1.0.0) reached the registry 3 months ago.

Which apps can use it?

Apps that support MCP, such as Claude Desktop, Claude Code, Cursor and VS Code. You also need Node.js on your computer.

What can I use instead?

In the same category: GitHub, Desktop Commander, Cloudflare MCP

Alternatives

Servers in the same category from other makers, sorted by stars.

Reading a card:↓ Downloads per weeki★ GitHub starsiThree pillars: reviews · checks · usageiUpdated = latest version published to the registryi

GitHub

GitHub’s official server lets AI read and manage code, issues and pull requests in your account. Use GitHub’s hosted version or run it locally with Docker.

by githubWidely used★ 34.2KUpdated 5 days ago

Computer or cloud

Desktop Commander

MCP server for terminal commands, file operations, and process management

by wonderwhy-erWidely used↓ 709.6K/wk★ 10.2KUpdated 17 days ago

Runs on your computer

Cloudflare MCP

Cloudflare MCP servers

by cloudflareGrowing★ 4.4KUpdated 14 months ago

Runs in the cloud✓ mcp.cloudflare.com

README from the maker

Open the README

Copied from the maker’s repo as written. PopNx MCP has not reviewed or endorsed it. HTML, images and scripts are removed. Links lead off this site.

zephyr-scale-mcp

MCP server for Zephyr Scale on self-hosted Jira Server / Data Center (formerly TM4J). It gives an AI agent — Claude Code, Claude Desktop, Cursor, any MCP client — 54 tools over your test management: test cases, folders, test cycles, executions, test plans, attachments and automation imports, through the Zephyr Scale REST API v1 at {JIRA_BASE_URL}/rest/atm/1.0.

npm: zephyr-scale-mcp · MCP Registry: io.github.vilaabo/zephyr-scale-mcp · Русская версия →

⚠️ Scope: Server / Data Center only. Zephyr Scale Cloud (API v2) and Zephyr Squad are different APIs and are out of scope — this server will not work against them.

Why this exists

Most Zephyr MCP servers target the Cloud API. If your Jira is on-premise you get the v1 API instead, and v1 has teeth: test runs are immutable after creation, folders cannot be listed, statuses are case-sensitive internal names, BDD scripts reject a Feature: header, and older plugin builds are missing whole endpoints. This server encodes that knowledge instead of leaving the agent to discover it one 400 at a time.

  • 54 tools (42 public + 12 opt-in internal-API tools), each with a description that states the endpoint, the constraints a caller cannot guess, and the exact response shape.
  • Composite tools for the API's blind spots — add_test_steps merges steps by id (read → merge → write) so nothing is silently deleted; recreate_test_run_with_items works around run immutability and can carry the last results over; get_issue_test_coverage, get_test_run_summary, clone_test_case, move_test_cases_to_folder.
  • Degradation on older builds — automatic fallback when the paginated results endpoint is absent, and a per-item fallback when the bulk create endpoint is broken. Both were found on a real legacy instance, not in a changelog.
  • Plumbing that fails loudly — strict zod input validation, Retry-After-aware retries with exponential backoff, error messages carrying actionable hints, read-only mode, secrets kept out of logs and tool output.
  • 1181 unit and contract tests (vitest + msw, no network) plus a gated end-to-end scenario against a real instance.

Quick start

Requirements: Node.js >= 20, Jira Server/DC with the Zephyr Scale plugin, and a Personal Access Token (Jira 8.14+) or a username/password pair.

Nothing to clone — the package is on npm. Claude Code:

claude mcp add zephyr-scale \

--env JIRA_BASE_URL=https://jira.example.com \ --env JIRA_PAT= \ --env ZEPHYR_DEFAULT_PROJECT_KEY=PROJ \ --env ZEPHYR_ALLOW_INTERNAL_API=true \ -- npx -y zephyr-scale-mcp

Claude Desktop / any MCP client (claude_desktop_config.json, .mcp.json):

{

"mcpServers": { "zephyr-scale": { "command": "npx", "args": ["-y", "zephyr-scale-mcp"], "env": { "JIRA_BASE_URL": "https://jira.example.com", "JIRA_PAT": " ", "ZEPHYR_DEFAULT_PROJECT_KEY": "PROJ", "ZEPHYR_ALLOW_INTERNAL_API": "true" } } } }

Running from source instead

git clone https://github.com/vilaabo/zephyr-scale-mcp.git

cd zephyr-scale-mcp npm install npm run build # -> dist/index.js

Then point the client at the build: "command": "node", "args": ["/path/to/zephyr-scale-mcp/dist/index.js"].

`ZEPHYR_ALLOW_INTERNAL_API=true` is optional and recommended. It registers 12 extra tools that reach the things the public API cannot do at all: editing a test run in place — renaming or moving it (update_test_run) and adding or removing cases without changing its key (add_test_cases_to_run, remove_test_cases_from_run) — plus listing the folder tree (get_folder_tree), deleting folders (delete_folder), editing older executions (update_test_result_by_id) and reading the exact status names the API silently expects (get_status_options). These call the same undocumented /rest/tests/1.0 endpoints the Jira UI itself uses; the vendor does not support them and they may differ or be absent on another Zephyr Scale version. Leave the flag off if that trade-off is not acceptable — the other 42 tools are unaffected.

Then ask the agent to run health_check. It verifies connectivity and credentials via GET /rest/api/2/myself and, when ZEPHYR_DEFAULT_PROJECT_KEY is set, that the Zephyr plugin answers on /rest/atm/1.0.

What you can ask your agent to do

  • *"Create the folder /Regression/Payments and add step-by-step test cases for the checkout flow described in this document."*
  • *"Find every Draft case in /Regression, review them, and set the ready ones to Approved."*
  • *"Create a cycle for sprint 42 with all smoke cases, then record the results from this report — step by step where the script has steps."*
  • *"Which test cases cover PROJ-123, and when did each of them last pass?"* — traceability from the issue to its cases and their latest executions.
  • *"Take this ZIP of Cucumber JSON reports and publish it as a new cycle in PROJ."* — automation import; scenarios are matched to BDD cases by their @TestCaseKey=PROJ-T1 tag.
  • *"Add two steps to PROJ-T55 after step 3."* — existing steps and their ids survive.
  • *"Recreate cycle PROJ-R7 with three more cases, keep the results, and delete the original."*

Configuration

VariableRequiredDefaultPurpose
JIRA_BASE_URLyes—Jira base URL without a trailing /, e.g. https://jira.example.com
JIRA_AUTHnopatpat \basic
JIRA_PATwith pat—Jira Server/DC Personal Access Token
JIRA_USERNAME, JIRA_PASSWORDwith basic—Basic-auth credentials
JIRA_TIMEOUT_MSno30000Per-request timeout
JIRA_MAX_RETRIESno2Retries for GET and for any 429/503, honoring Retry-After, otherwise exponential backoff with jitter
JIRA_TLS_REJECT_UNAUTHORIZEDnotruefalse accepts self-signed certificates — this disables TLS verification process-wide and prints a warning to stderr
ZEPHYR_DEFAULT_PROJECT_KEYno—Used whenever a tool is called without projectKey
ZEPHYR_READONLYnofalsetrue makes every write tool refuse with an error; read tools keep working
ZEPHYR_ALLOW_INTERNAL_APInofalsetrue registers the 12 UNOFFICIAL tools backed by the internal /rest/tests/1.0 API
ZEPHYR_LOG_LEVELnoinfodebug \info \warn \error

Two guarantees the tests cover: JIRA_PAT and JIRA_PASSWORD never appear in logs, tool output or error messages — in any encoding they can take on the way out: raw, JSON-escaped, or the base64 basic-auth token (error text carries the method and path only — never the query string, which may contain data) — and stdout is reserved for the MCP protocol, every log line goes to stderr. One deliberate exception: a secret shorter than six characters is left alone, because redacting it would corrupt unrelated output while protecting nothing; the server warns about it at startup.

Configuration is validated at startup: all problems are reported at once and the process exits with a non-zero code rather than starting half-configured.

Tools

54 tools. The 42 public ones are always registered; the 12 in the last group only with ZEPHYR_ALLOW_INTERNAL_API=true.

Test cases — 13 tools

ToolWhat it does
create_test_caseCreate a case with a STEP_BY_STEP / PLAIN_TEXT / BDD script, parameters, custom fields, Call-to-Test steps
get_test_caseRead a case, optionally narrowed by fields; step ids come back here
search_test_casesTQL search with pagination; a query longer than 1500 characters is sent as POST /testcase/search (which supports only projectKey, key, name)
update_test_casePartial update; testScript.steps is synchronized by id (see limitation 7)
add_test_stepsInsert steps at a position without losing the existing ones — read, merge by id, write back
set_test_scriptReplace the whole script or change its format; destructive by design
clone_test_caseCopy a case inside its project with fresh step ids; links, attachments and history are not copied
move_test_cases_to_folderBulk-move by explicit keys or by source folder; a failing case does not abort the rest
delete_test_casePermanent delete of the case, its script and its history
create_test_cases_bulkCreate many cases in one call, with a per-case fallback on broken bulk endpoints
link_issues_to_test_casesBulk-link cases to Jira issues (additive)
get_test_cases_linked_to_issueReverse lookup: issue → cases
get_issue_test_coverageTraceability report: issue → linked cases → latest execution of each

Test cycles (test runs) — 7 tools

ToolWhat it does
create_test_runCreate a cycle with its complete item list — optionally with each item's execution result in the same call
get_test_runRead a cycle including its items
search_test_runsTQL search — for runs only projectKey and folder are searchable
delete_test_runPermanent delete of the cycle and all its results
get_test_run_resultsPage through the executions of a cycle, with the legacy flat-endpoint fallback
get_test_run_summaryLast execution per item: byStatus counts verbatim, executionProgressPct, passRatePct when a literal Pass status exists
recreate_test_run_with_itemsThe public workaround for run immutability: rebuild under a new key with cases added or removed, optionally carrying the last results over and deleting the original

Executions (test results) — 4 tools

ToolWhat it does
create_test_resultAppend a new execution to a run item, including per-step scriptResults
update_last_test_resultPartial update of the most recent execution of an item
create_test_results_bulkMany executions for one cycle in a single call
get_latest_result_for_test_caseThe execution of a case with the greatest stored execution date, across all cycles — not necessarily the one recorded last

Items that exist several times in a run (per environment or per assignee) are disambiguated with matchEnvironment / matchUserKey, sent as query parameters.

Test plans — 5 tools

ToolWhat it does
create_test_planCreate a plan; returns { key }, e.g. PROJ-P123
get_test_planRead a plan with its linked runs and issues
update_test_planPartial update
delete_test_planPermanent delete
search_test_plansTQL search; the searchable field set varies by Zephyr Scale version

Folders — 2 tools

ToolWhat it does
create_folderCreate a case / plan / cycle folder from a full path; with recursive (default true) a 400 on the full path triggers creating each parent prefix and one retry — 403, 409 and 5xx propagate untouched
rename_folderRename one folder segment by its numeric id (and optionally set its custom fields)

Attachments</b

Only the beginning is shown; read the rest in the repo

Ask PopNx