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.
Description from the maker (original English)
Zephyr Scale on self-hosted Jira Server/DC: test cases, cycles, executions, plans and attachments
These three are never merged into one score: opinions, measurements and popularity are different things.
We have not written a plain-language summary for this one yet. Below are the facts we read from the registry.
Pick the AI app you use, then copy the settings.
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_LEVELValues marked secret are keys to your account. Never share them or paste them into a chat.
You need
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-mcpFill in the empty values before running it.
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.
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.
JIRA_AUTH envJIRA_USERNAME envZEPHYR_DEFAULT_PROJECT_KEY envZEPHYR_ALLOW_INTERNAL_API envZEPHYR_READONLY envJIRA_TLS_REJECT_UNAUTHORIZED envJIRA_TIMEOUT_MS envJIRA_MAX_RETRIES envZEPHYR_LOG_LEVEL envThese settings are generated from the maker’s registry entry. If the README says otherwise, follow the README.
Runs on your computer; the tool list appears in your AI app after you install it.
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
The registry name was verified with the GitHub account vilaabo, which owns the repo
We have not read this repo from GitHub yet
We have not read this repo from GitHub yet
This one runs on your computer; there is no internet endpoint
Runs on your computer and uses local settings instead
Runs on your computer; we can only read tool lists from internet endpoints
Compared with every active server in this category in the registry. Stars count only when the publisher owns the repo.
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.
You need to fill in: JIRA_BASE_URL, JIRA_PAT, JIRA_PASSWORD
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).
The GitHub repo last changed –, and the latest version (1.0.0) reached the registry 3 months ago.
Apps that support MCP, such as Claude Desktop, Claude Code, Cursor and VS Code. You also need Node.js on your computer.
In the same category: GitHub, Desktop Commander, Cloudflare MCP
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’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.
MCP server for terminal commands, file operations, and process management
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.
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.
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.
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.Retry-After-aware retries with exponential backoff, error messages carrying actionable hints, read-only mode, secrets kept out of logs and tool output.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.0endpoints 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.
/Regression/Payments and add step-by-step test cases for the checkout flow described in this document."*/Regression, review them, and set the ready ones to Approved."*@TestCaseKey=PROJ-T1 tag.| Variable | Required | Default | Purpose | |||
|---|---|---|---|---|---|---|
JIRA_BASE_URL | yes | — | Jira base URL without a trailing /, e.g. https://jira.example.com | |||
JIRA_AUTH | no | pat | pat \ | basic | ||
JIRA_PAT | with pat | — | Jira Server/DC Personal Access Token | |||
JIRA_USERNAME, JIRA_PASSWORD | with basic | — | Basic-auth credentials | |||
JIRA_TIMEOUT_MS | no | 30000 | Per-request timeout | |||
JIRA_MAX_RETRIES | no | 2 | Retries for GET and for any 429/503, honoring Retry-After, otherwise exponential backoff with jitter | |||
JIRA_TLS_REJECT_UNAUTHORIZED | no | true | false accepts self-signed certificates — this disables TLS verification process-wide and prints a warning to stderr | |||
ZEPHYR_DEFAULT_PROJECT_KEY | no | — | Used whenever a tool is called without projectKey | |||
ZEPHYR_READONLY | no | false | true makes every write tool refuse with an error; read tools keep working | |||
ZEPHYR_ALLOW_INTERNAL_API | no | false | true registers the 12 UNOFFICIAL tools backed by the internal /rest/tests/1.0 API | |||
ZEPHYR_LOG_LEVEL | no | info | debug \ | 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.
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
| Tool | What it does |
|---|---|
create_test_case | Create a case with a STEP_BY_STEP / PLAIN_TEXT / BDD script, parameters, custom fields, Call-to-Test steps |
get_test_case | Read a case, optionally narrowed by fields; step ids come back here |
search_test_cases | TQL search with pagination; a query longer than 1500 characters is sent as POST /testcase/search (which supports only projectKey, key, name) |
update_test_case | Partial update; testScript.steps is synchronized by id (see limitation 7) |
add_test_steps | Insert steps at a position without losing the existing ones — read, merge by id, write back |
set_test_script | Replace the whole script or change its format; destructive by design |
clone_test_case | Copy a case inside its project with fresh step ids; links, attachments and history are not copied |
move_test_cases_to_folder | Bulk-move by explicit keys or by source folder; a failing case does not abort the rest |
delete_test_case | Permanent delete of the case, its script and its history |
create_test_cases_bulk | Create many cases in one call, with a per-case fallback on broken bulk endpoints |
link_issues_to_test_cases | Bulk-link cases to Jira issues (additive) |
get_test_cases_linked_to_issue | Reverse lookup: issue → cases |
get_issue_test_coverage | Traceability report: issue → linked cases → latest execution of each |
Test cycles (test runs) — 7 tools
| Tool | What it does |
|---|---|
create_test_run | Create a cycle with its complete item list — optionally with each item's execution result in the same call |
get_test_run | Read a cycle including its items |
search_test_runs | TQL search — for runs only projectKey and folder are searchable |
delete_test_run | Permanent delete of the cycle and all its results |
get_test_run_results | Page through the executions of a cycle, with the legacy flat-endpoint fallback |
get_test_run_summary | Last execution per item: byStatus counts verbatim, executionProgressPct, passRatePct when a literal Pass status exists |
recreate_test_run_with_items | The 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
| Tool | What it does |
|---|---|
create_test_result | Append a new execution to a run item, including per-step scriptResults |
update_last_test_result | Partial update of the most recent execution of an item |
create_test_results_bulk | Many executions for one cycle in a single call |
get_latest_result_for_test_case | The 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
| Tool | What it does |
|---|---|
create_test_plan | Create a plan; returns { key }, e.g. PROJ-P123 |
get_test_plan | Read a plan with its linked runs and issues |
update_test_plan | Partial update |
delete_test_plan | Permanent delete |
search_test_plans | TQL search; the searchable field set varies by Zephyr Scale version |
Folders — 2 tools
| Tool | What it does |
|---|---|
create_folder | Create 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_folder | Rename 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