Zephyr Scale on self-hosted Jira Server/DC: test cases, cycles, executions, plans and attachments
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent β or use 1-click editor setup below.
We haven't yet run this listing's install command through our automated sandbox check. This isn't a red flag β we're steadily working through the catalog.
π‘ Paste the JSON block into your client's configuration file under mcpServers, then restart the application.
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 Desktop / any MCP client (claude_desktop_config.json, .mcp.json):
Then point the client at the build: "command": "node", "args": ["/path/to/zephyr-scale-mcp/dist/index.js"].
ZEPHYR_ALLOW_INTERNAL_API=trueis 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.
| 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 |
No reviews yet β be the first to share how this listing worked for you.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/zephyr-scale-mcp)<a href="https://allmcps.com/mcp/zephyr-scale-mcp"><img src="https://allmcps.com/api/badge/zephyr-scale-mcp?style=directory" alt="Zephyr Scale MCP on AllMCPs" /></a>