Skip to content
Agentmart
Submit a tool

Zephyr Scale MCP

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

Connector by vilaabo · GitHub account verified by the MCP Registry

IndexedMITLocal (stdio)
Write a review

Chalk Labs

Need help deploying Zephyr Scale MCP?

Chalk Labs sets up agents like this inside real teams: connected to your tools, tested on your data, with a human in the loop where it matters.

Book a call

Install

Works with Claude Code, Codex, VS Code, Cursor, Windsurf, Claude Desktop. Read the repository before you give any tool access to your data.

npx agentmarket install connector/vilaabo-zephyr-scale-mcp

Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.

Get the weekly diff

The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.

We use your email only for this newsletter. Privacy

About

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

No reviews yet. Installed it? Reviews come from verified installers only. How reviews work

Permissions

What this server can do and what it asks for, from its tool list and install config. Checked Oct 25, 2026.

Tools
20 read · 23 write · 10 delete · 1 not yet classified
Secrets
4 (API keys, tokens or passwords)
Install scripts
Not scanned yet
Runs as
Node.js package

Tools by what they do 54

Read from the source code; the running server may list different tools.

Read 20 · Look things up without changing anything.

  • download_attachment
  • download_feature_files
  • find_jira_user
  • get_custom_field_definitions
  • get_folder_tree
  • get_issue_test_coverage
  • get_latest_result_for_test_case
  • get_status_options
  • get_test_case
  • get_test_cases_linked_to_issue
  • get_test_plan
  • get_test_run
Show 8 more tools
  • get_test_run_results
  • get_test_run_summary
  • health_check
  • list_attachments
  • list_environments
  • search_test_cases
  • search_test_plans
  • search_test_runs

Write 23 · Create, change, send or run things.

  • add_test_cases_to_run
  • clone_test_case
  • create_environment
  • create_folder
  • create_test_case
  • create_test_cases_bulk
  • create_test_plan
  • create_test_result
  • create_test_results_bulk
  • create_test_run
  • link_issues_to_test_run
  • link_test_run_to_plan
Show 11 more tools
  • move_test_cases_to_folder
  • rename_folder
  • reorder_test_run_items
  • update_last_test_result
  • update_test_case
  • update_test_plan
  • update_test_result_by_id
  • update_test_run
  • upload_attachment
  • upload_automation_results
  • upload_cucumber_results

Delete 10 · Delete, drop, revoke or wipe things.

  • add_test_steps
  • delete_attachment
  • delete_folder
  • delete_test_case
  • delete_test_plan
  • delete_test_results
  • delete_test_run
  • recreate_test_run_with_items
  • remove_test_cases_from_run
  • set_test_script

Not yet classified 1 · We could not tell from the name and description.

  • link_issues_to_test_cases

Secrets and settings it asks for

Secrets: values you paste in that let it act as you.

  • JIRA_AUTH
  • JIRA_PASSWORD
  • JIRA_PAT
  • ZEPHYR_DEFAULT_PROJECT_KEY

Other settings (environment variables or headers).

  • JIRA_BASE_URL
  • JIRA_MAX_RETRIES
  • JIRA_TIMEOUT_MS
  • JIRA_TLS_REJECT_UNAUTHORIZED
  • JIRA_USERNAME
  • ZEPHYR_ALLOW_INTERNAL_API
  • ZEPHYR_LOG_LEVEL
  • ZEPHYR_READONLY

Files it touches

  • Any path the agent passes to its tools

Tools (54)

Read from the source code; the running server may differ. Descriptions are the server’s own words; hidden characters are shown as [U+…].

  • add_test_cases_to_run

    UNOFFICIAL — internal API: this tool calls /rest/tests/1.0, the same undocumented API the Jira UI uses. The vendor does NOT support it: endpoints may differ or be absent on another Zephyr Scale version. Registered only because ZEPHYR_ALLOW_INTERNAL_API=true. Append test cases to an EXISTING test run (cycle) IN PLACE (GET /testrun/{key} and GET /testcase/{key} to resolve numeric ids, then PUT /testrunitem/bulk/save) — the run keeps its key and the existing items keep their execution results. The public API cannot do this at all; its only workaround, recreate_test_run_with_items, changes the key…

  • add_test_steps

    Insert steps into a STEP_BY_STEP script without losing the existing ones (GET then PUT /testcase/{testCaseKey}): reads the current steps, keeps their ids, splices the new ones in and writes the whole list back — needed because PUT deletes every step missing from the list it receives. The stored steps are ordered by their authoritative `index` before merging, because GET /testcase serves them in an arbitrary array order once a case has been edited; only the insertion changes, existing step ids and their sequence are preserved. position selects the insertion point: "append" (the default), "prepe…

  • clone_test_case

    Description is built at runtime.

  • create_environment

    Create a Zephyr Scale environment in a project (POST /environments). The name must be unique within the project — a duplicate is rejected with 400 — and is the string other tools use to reference the environment, so create it with the exact casing you intend to pass to test results. Returns the created environment object as the API sends it.

  • create_folder

    Create a folder for test cases, test plans or test runs / test cycles (POST /folder). name is the FULL path from the root, not a single segment, and every segment must be non-empty and not blank — "/" alone, "/A//B", a trailing "/" and a whitespace-only segment ("/A/ ") are rejected before any HTTP call because the API would create a permanently nameless folder from them. Spaces around a real name are legal and are NOT trimmed. The two rules surface differently: a missing leading "/" is caught by the input schema (an MCP input-validation error), while empty or blank segments are caught by the …

  • create_test_case

    Description is built at runtime.

  • create_test_cases_bulk

    Description is built at runtime.

  • create_test_plan

    Create a test plan (POST /testplan). folder must be a TEST_PLAN folder (create_folder with type TEST_PLAN) — The folder MUST already exist — the API never creates folders implicitly (use create_folder first). status is a case-sensitive internal name. owner: Jira *user key* (e.g. 'JIRAUSER10000'), NOT a username or e-mail — resolve it with find_jira_user. Returns { key } (e.g. "PROJ-P123") — no UI url, because the test plan page has no stable address across Zephyr Scale versions.

  • create_test_result

    Record a NEW execution of a run item (POST /testrun/{runKey}/testcase/{caseKey}/testresult). Appends to the execution history of that item — to amend the newest execution instead, use update_last_test_result. Only the fields you pass are sent, and the execution keeps the project default for everything you omit. The test case should already be an item of the run; if it is not, the behavior is VERSION-SPECIFIC — some Server builds silently ADD it to the run as a new item (verified live: testCaseCount grows; the new item's POSITION in items[] is not the head and not the tail — it landed second of…

  • create_test_results_bulk

    Record NEW executions for several items of ONE test run in a single call (POST /testrun/{runKey}/testresults). The body is the `results` array itself; in each entry only the fields you pass are sent, and the returned ids are positionally aligned with it. The test case should already be an item of the run; if it is not, the behavior is VERSION-SPECIFIC — some Server builds silently ADD it to the run as a new item (verified live: testCaseCount grows; the new item's POSITION in items[] is not the head and not the tail — it landed second of three and second of four in two separate runs, so do not …

  • create_test_run

    Create a test run / test cycle (POST /testrun). Pass the COMPLETE list of test cases in `items` now — API v1 limitation: a test run is IMMUTABLE — there is no PUT /testrun, so it cannot be renamed, moved or have cases added/removed through the public API; its items are fixed at creation and the run status is derived from item statuses. Escape hatches: recreate_test_run_with_items (public, new key) or the internal-API tools update_test_run / add_test_cases_to_run / remove_test_cases_from_run (same key, require ZEPHYR_ALLOW_INTERNAL_API=true). Each item may also carry its execution result (statu…

  • delete_attachmentcan change or delete data

    Permanently delete one attachment by its numeric id (DELETE /attachments/{id}). Irreversible, and there is no bulk form — one call per attachment. Ids come from list_attachments or from an upload_attachment response; the entity the attachment belongs to is not needed (ids are global, not per-entity). The DELETE itself answers 2xx even for an id that never existed or was already deleted, so the id is verified FIRST with GET /rest/tests/1.0/attachment/{id} (the one endpoint that 404s for a missing attachment): an unknown id fails without deleting anything, at the cost of downloading the attachme…

  • delete_foldercan change or delete data

    UNOFFICIAL — internal API: this tool calls /rest/tests/1.0, the same undocumented API the Jira UI uses. The vendor does NOT support it: endpoints may differ or be absent on another Zephyr Scale version. Registered only because ZEPHYR_ALLOW_INTERNAL_API=true. Permanently delete a Zephyr Scale folder by its numeric id (DELETE /folder/{id}) — the public API v1 cannot delete folders at all. CANNOT BE UNDONE. CAUTION: what happens to a NON-empty folder is version-specific (its contents may be deleted or orphaned). Verified live on the reference build: CHILD FOLDERS are deleted with it (the whole su…

  • delete_test_casecan change or delete data

    Permanently delete a test case (DELETE /testcase/{testCaseKey}). Irreversible: the case, its script and its execution history cannot be restored through the API. Inbound references are NOT checked: a case that other cases invoke as a "Call to Test" step is deleted anyway and those steps keep pointing at a key that no longer resolves. Returns { deleted: true, key }.

  • delete_test_plancan change or delete data

    Permanently delete a test plan (DELETE /testplan/{testPlanKey}). Irreversible — there is no trash and no undo. NOT idempotent and it never confirms a deletion it did not perform: an unknown, mistyped or already-deleted key answers 404 and this tool fails instead of returning { deleted: true } (verified live). The key is not reused afterwards — the next create_test_plan gets a fresh number. Does NOT cascade to the test runs linked to the plan (verified live): the runs survive with their names, testCaseCount and status intact, only the plan↔run trace links die. Delete the runs separately with de…

Show 39 more tools
  • delete_test_resultscan change or delete data

    UNOFFICIAL — internal API: this tool calls /rest/tests/1.0, the same undocumented API the Jira UI uses. The vendor does NOT support it: endpoints may differ or be absent on another Zephyr Scale version. Registered only because ZEPHYR_ALLOW_INTERNAL_API=true. Permanently delete individual test executions (results) by their numeric ids (POST /testresult/bulk/delete with a bare JSON array of ids) — the public API v1 cannot delete results at all, they normally die only together with their run. CANNOT BE UNDONE. CONSTRAINT: the LAST execution of a run item cannot be deleted — the API rejects it wit…

  • delete_test_runcan change or delete data

    Permanently delete a test run / test cycle together with ALL its execution results, its attachments and its test-plan links (DELETE /testrun/{key}). Cannot be undone. API v1 limitation: a test run is IMMUTABLE — there is no PUT /testrun, so it cannot be renamed, moved or have cases added/removed through the public API; its items are fixed at creation and the run status is derived from item statuses. Escape hatches: recreate_test_run_with_items (public, new key) or the internal-API tools update_test_run / add_test_cases_to_run / remove_test_cases_from_run (same key, require ZEPHYR_ALLOW_INTERNA…

  • download_attachmentread-only

    Download the content of an attachment to a local file (GET /rest/tests/1.0/attachment/{id}). Address it by attachmentId or by the exact url list_attachments returns — pass exactly one of the two. Attachment content lives outside API v1: /rest/tests/1.0/attachment/{id} is the url the official list endpoint itself hands out, so this tool follows it without requiring ZEPHYR_ALLOW_INTERNAL_API. A supplied url must be on the configured Jira host — credentials are never sent to another host. A query string on the url is sent as request parameters rather than kept in the path, so it is never echoed i…

  • download_feature_filesread-only

    Export BDD test cases as Gherkin .feature files packed in a ZIP archive (GET /automation/testcases). tql is REQUIRED — the API rejects the call without it — and this endpoint uses the testCase.-prefixed TQL dialect, which supports ONLY the fields testCase.key, testCase.projectKey and testCase.name (= and IN) joined by AND: testCase.folder, testCase.status, testCase.priority and testCase.labels are rejected with 400 "Error executing TQL", so a whole folder cannot be exported — select the cases with testCase.key IN (...) instead. Values must be quoted, single or double quotes both work, and spac…

  • find_jira_userread-only

    Search Jira users (GET /rest/api/2/user/search). Use it to resolve the Jira USER KEY (e.g. "JIRAUSER10000") that the owner / executedBy / assignedTo fields of the other tools require — those fields reject usernames and e-mail addresses. Needs the Jira "Browse users" permission, otherwise Jira answers 403. Returns an array of { key, name, displayName, emailAddress }, empty when nothing matches; emailAddress is absent when Jira hides it.

  • get_custom_field_definitionsread-only

    UNOFFICIAL — internal API: this tool calls /rest/tests/1.0, the same undocumented API the Jira UI uses. The vendor does NOT support it: endpoints may differ or be absent on another Zephyr Scale version. Registered only because ZEPHYR_ALLOW_INTERNAL_API=true. List the custom field DEFINITIONS of a project — names, types, required flags and allowed options (GET /rest/api/2/project/{projectKey}, then GET /project/{id}/customfields/{testcase|testplan|testrun}) — so the customFields parameter of the create/update tools can be filled with valid keys and values. The public API v1 has no such endpoint…

  • get_folder_treeread-only

    UNOFFICIAL — internal API: this tool calls /rest/tests/1.0, the same undocumented API the Jira UI uses. The vendor does NOT support it: endpoints may differ or be absent on another Zephyr Scale version. Registered only because ZEPHYR_ALLOW_INTERNAL_API=true. List the complete folder tree of a project (GET /rest/api/2/project/{projectKey} for the numeric project id, then GET /project/{id}/foldertree/{testcase|testplan|testrun}) — the public API v1 cannot list folders at all. Each entity type has its OWN tree: test case folders are not test run folders, so a path that exists for one entity type …

  • get_issue_test_coverageread-only

    Description is built at runtime.

  • get_latest_result_for_test_caseread-only

    Read ONE execution of a test case across ALL test runs (GET /testcase/{key}/testresult/latest). WHICH one is the API's choice and it is not the plain "newest": measured live with three executions of one case, it returned the most recently CREATED one (highest id) even though another carried a later execution date, and back-dating the winner did not dislodge it — so neither "latest by date" nor "latest by date you set" is a safe reading. Treat the answer as "an execution the API considers current" and, whenever the specific execution matters, read the run with get_test_run_results instead. Answ…

  • get_status_optionsread-only

    UNOFFICIAL — internal API: this tool calls /rest/tests/1.0, the same undocumented API the Jira UI uses. The vendor does NOT support it: endpoints may differ or be absent on another Zephyr Scale version. Registered only because ZEPHYR_ALLOW_INTERNAL_API=true. List the EXACT internal names of a project's execution statuses, test case statuses or test case priorities (GET /rest/api/2/project/{projectKey}, then GET /project/{id}/testresultstatus | testcasestatus | testcasepriority, falling back to GET /{segment}?projectId={id} on older builds). The public API v1 has no such endpoint, so this is th…

  • get_test_caseread-only

    Read one test case (GET /testcase/{testCaseKey}). A STEP_BY_STEP script comes back with a numeric id on every step; those ids are what update_test_case and set_test_script match on, so read them before editing steps by hand (add_test_steps does it for you). Returns the test case object as the API sends it, restricted to fields when given.

  • get_test_cases_linked_to_issueread-only

    List the test cases linked to a Jira issue (GET /issuelink/{issueKey}/testcases) — traceability from a requirement or bug to its tests. Create such links with link_issues_to_test_cases, or with the issueLinks field of create_test_case. Use get_issue_test_coverage instead to also see the latest execution of each case. Returns the API array of test case objects, one entry per LINK: a case linked to the issue twice appears twice, and the order is not stable between calls — de-duplicate by key before counting. Entries carry the API fields, including lastTestResultStatus — a DENORMALIZED value that…

  • get_test_planread-only

    Read a test plan by key (GET /testplan/{testPlanKey}). The payload embeds the linked test runs and Jira issues when the plan has any; narrow it with fields. Returns the test plan object as the API sends it.

  • get_test_runread-only

    Read one test run / test cycle including its items (GET /testrun/{key}). API v1 limitation: a test run is IMMUTABLE — there is no PUT /testrun, so it cannot be renamed, moved or have cases added/removed through the public API; its items are fixed at creation and the run status is derived from item statuses. Escape hatches: recreate_test_run_with_items (public, new key) or the internal-API tools update_test_run / add_test_cases_to_run / remove_test_cases_from_run (same key, require ZEPHYR_ALLOW_INTERNAL_API=true). Use get_test_run_results for the executions of the run and get_test_run_summary f…

  • get_test_run_resultsread-only

    Page through the execution results of a test run / test cycle (GET /testrun/{key}/testresults/page). An item can have several executions; onlyLastExecutions=true keeps only the most recent one per item, so it never returns more values than the run has items. Creating a run already seeds one 'Not Executed' execution per item (that execution IS the item's last one), so with onlyLastExecutions=false — the default — `total` starts at the item count, not at 0. Older Zephyr Scale builds have no /page endpoint: the deprecated flat GET /testrun/{key}/testresults is then read and paginated client-side,…

  • get_test_run_summaryread-only

    Aggregated execution summary of a test run / test cycle: composite read-only call of GET /testrun/{key} plus every page of its results (with the flat-endpoint fallback of get_test_run_results). Counts the LAST execution of each item — the run object names them, so latestResults and executed never exceed itemCount — grouping by status name verbatim in `byStatus`; nothing is normalized. Default statuses: 'Not Executed', 'In Progress', 'Pass', 'Fail', 'Blocked' — case-sensitive internal names; instances may define custom ones. `runStatus` is the status of the RUN itself (e.g. 'In Progress', 'Done…

  • health_checkread-only

    Verify connectivity and credentials (GET /rest/api/2/myself) and, when ZEPHYR_DEFAULT_PROJECT_KEY is configured, whether the Zephyr Scale plugin answers on /rest/atm/1.0 (GET /environments). Any JSON error from the plugin — including 403 for a project without Zephyr — still counts as reachable; only Jira's generic HTML 404 page or a network failure counts as unreachable. The tool itself fails only when Jira does not answer or rejects the credentials. Returns { ok: true, jiraUser, baseUrl, zephyrPluginReachable } — zephyrPluginReachable is omitted when no default project key is set.

  • link_issues_to_test_cases

    Description is built at runtime.

  • link_issues_to_test_run

    UNOFFICIAL — internal API: this tool calls /rest/tests/1.0, the same undocumented API the Jira UI uses. The vendor does NOT support it: endpoints may differ or be absent on another Zephyr Scale version. Registered only because ZEPHYR_ALLOW_INTERNAL_API=true. Link Jira issues to an EXISTING test run (cycle) — the traceability the public API cannot express at all: POST /testrun rejects an issueLinks field outright (HTTP 500 "Unrecognized field 'issueLinks' (TestRunDTO)"), so this endpoint is the only way. Resolves the run id (GET /testrun/{key}), each issue id (GET /rest/api/2/issue/{key}) and t…

  • link_test_run_to_plan

    UNOFFICIAL — internal API: this tool calls /rest/tests/1.0, the same undocumented API the Jira UI uses. The vendor does NOT support it: endpoints may differ or be absent on another Zephyr Scale version. Registered only because ZEPHYR_ALLOW_INTERNAL_API=true. Associate an EXISTING test run (cycle) with a test plan after creation (GET /testrun/{key} and GET /testplan/{key} for the numeric ids, GET /tracelinktype/default/testrun for the link type, then POST /tracelink/bulk/create with a flat [{ testRunId, testPlanId, typeId }] triple). The public API only accepts testPlanKey while the run is bein…

  • list_attachmentsread-only

    List the attachments of a test case, test run (cycle), test result, or of one step of a case or result (GET /testcase/{key}[/step/{i}]/attachments, /testrun/{key}/attachments, /testresult/{id}[/step/{i}]/attachments). Addressing: 'test_case' needs testCaseKey, 'test_run' needs testRunKey, 'test_result' needs testResultId (numeric); an identifier that does not match the target is rejected. stepIndex is accepted for 'test_case' and 'test_result' only — API v1 has no per-step attachments endpoint for runs. These endpoints take no pagination and no fields projection — the full list always comes ba…

  • list_environmentsread-only

    List the Zephyr Scale environments of a project (GET /environments?projectKey=…). Environments are per-project and are referenced BY NAME (case-sensitive) in test run items and test results, so use this to get the exact spelling. Returns the raw array of environment objects ([{ id, name, description }]); an empty array means the project defines none.

  • move_test_cases_to_folder

    Move test cases into another folder — one partial PUT /testcase/{key} per case that changes only the folder field. Select the cases with EITHER testCaseKeys OR fromFolder (resolved by GET /testcase/search on folder = "<fromFolder>"): exactly one of the two, checked before any request. fromFolder matches that folder EXACTLY — cases in its subfolders are not included, and an existing but empty fromFolder moves nothing. The folder MUST already exist — the API never creates folders implicitly (use create_folder first). The TARGET folder is NOT checked before the requests: a path that does not exis…

  • recreate_test_run_with_itemscan change or delete data

    Recreate a test run (cycle) under a NEW key with a changed item list, name or folder (GET /testrun/{key} + POST /testrun, plus DELETE /testrun/{key} when deleteOriginal=true). API v1 limitation: a test run is IMMUTABLE — there is no PUT /testrun, so it cannot be renamed, moved or have cases added/removed through the public API; its items are fixed at creation and the run status is derived from item statuses. Escape hatches: recreate_test_run_with_items (public, new key) or the internal-API tools update_test_run / add_test_cases_to_run / remove_test_cases_from_run (same key, require ZEPHYR_ALLO…

  • remove_test_cases_from_runcan change or delete data

    UNOFFICIAL — internal API: this tool calls /rest/tests/1.0, the same undocumented API the Jira UI uses. The vendor does NOT support it: endpoints may differ or be absent on another Zephyr Scale version. Registered only because ZEPHYR_ALLOW_INTERNAL_API=true. Remove the items of the given test cases from an EXISTING test run (cycle) IN PLACE (GET /testrun/{key}, GET /testcase/{key}, GET /testrun/{id}/testrunitems, then PUT /testrunitem/bulk/save with deletedTestRunItems) — the run keeps its key and the surviving items keep their results. The removed items are deleted TOGETHER WITH their whole e…

  • rename_folder

    Rename a folder and/or set its custom fields (PUT /folder/{folderId}). name replaces the name of that ONE folder segment — it is not a path, so it cannot move the folder to another parent, and an empty or whitespace-only name, or "/" or "\" in it, is rejected before any HTTP call. The rename changes the full path of this folder and of every folder below it, so paths held elsewhere (the folder argument of create_test_case / create_test_run, TQL folder filters) must be updated afterwards. The API does NOT enforce sibling-name uniqueness here (verified live): renaming a folder to the name of an e…

  • reorder_test_run_items

    UNOFFICIAL — internal API: this tool calls /rest/tests/1.0, the same undocumented API the Jira UI uses. The vendor does NOT support it: endpoints may differ or be absent on another Zephyr Scale version. Registered only because ZEPHYR_ALLOW_INTERNAL_API=true. Reorder the items of an existing test run (cycle) IN PLACE (GET /testrun/{key}, GET /testrun/{id}/testrunitems, then PUT /testrunitem/bulk/save with updatedTestRunItemsIndexes) — the run keeps its key and every item keeps its results. Items whose test case is not listed in `order` keep their relative order AFTER the listed ones; a case pre…

  • search_test_casesread-only

    Description is built at runtime.

  • search_test_plansread-only

    Search test plans with a TQL query (GET /testplan/search). For test plans the searchable fields include projectKey, folder, name, status, key, owner and labels (verified live) — the exact set varies by Zephyr Scale version, and an unsupported field fails with 400 "Unrecognized field: <name>". folder matches EXACTLY: plans in a subfolder of the given path are NOT returned. A folder path that does not exist is not an error here — it comes back as an empty page (count 0), unlike search_test_cases and search_test_runs, which answer 400 for the same path. TQL quick reference: - Test case fields: …

  • search_test_runsread-only

    Search test runs / test cycles with TQL (GET /testrun/search). For runs TQL accepts ONLY the fields projectKey and folder — name, status or dates are NOT searchable, and there is no full-text search; read a candidate run with get_test_run instead. A folder clause matches that folder AND its subfolders: folder = "/A" also returns the runs in /A/B. TQL quick reference: - Test case fields: projectKey, key, name, status, priority, component, folder, estimatedTime, labels, owner, issueKeys + custom fields (field name in double quotes). - Test run (cycle) fields: ONLY projectKey and folder. - Operat…

  • set_test_scriptcan change or delete data

    Replace a test case's whole script or change its format (PUT /testcase/{testCaseKey} with a full testScript). DESTRUCTIVE: switching STEP_BY_STEP to PLAIN_TEXT or BDD irreversibly deletes all steps, and a STEP_BY_STEP replacement deletes every stored step whose id is absent from steps. text is required for PLAIN_TEXT and BDD, steps for STEP_BY_STEP — the pairing is validated locally, before any request — but steps: [] passes that check and DELETES every stored step, leaving an empty STEP_BY_STEP script. BDD text is stored verbatim and must contain Gherkin step lines only, no "Feature:"/"Scenar…

  • update_last_test_result

    Amend the LAST (most recent) execution of a run item (PUT /testrun/{runKey}/testcase/{caseKey}/testresult). The endpoint REPLACES the execution instead of patching it: fields missing from the body are reset (verified live — an omitted status falls back to the project default 'Not Executed', executedBy becomes null, actualEndDate/executionDate jump to the server time; only comment, environment, executionTime, actualStartDate and scriptResults are kept by the API itself). To stop a comment edit from wiping the verdict, this tool therefore first READS the run item's current execution (one extra G…

  • update_test_case

    Description is built at runtime.

  • update_test_plan

    Update a test plan (PUT /testplan/{testPlanKey}). PARTIAL update: only the fields you pass are written and omitted fields keep their current value, so never send empty placeholders — they overwrite real data. projectKey cannot be changed. folder must be a TEST_PLAN folder (create_folder with type TEST_PLAN) — The folder MUST already exist — the API never creates folders implicitly (use create_folder first). status is a case-sensitive internal name. owner: Jira *user key* (e.g. 'JIRAUSER10000'), NOT a username or e-mail — resolve it with find_jira_user. Returns { key }.

  • update_test_result_by_id

    UNOFFICIAL — internal API: this tool calls /rest/tests/1.0, the same undocumented API the Jira UI uses. The vendor does NOT support it: endpoints may differ or be absent on another Zephyr Scale version. Registered only because ZEPHYR_ALLOW_INTERNAL_API=true. Edit ANY test execution (result) by its numeric id, including OLDER history entries (PUT /testresult with a single-element array) — update_last_test_result reaches only the newest execution of an item. Partial update: only the fields passed are changed, and at least one is required. `status` is the case-sensitive status NAME and is resolve…

  • update_test_run

    UNOFFICIAL — internal API: this tool calls /rest/tests/1.0, the same undocumented API the Jira UI uses. The vendor does NOT support it: endpoints may differ or be absent on another Zephyr Scale version. Registered only because ZEPHYR_ALLOW_INTERNAL_API=true. Rename a test run (cycle), move it to another folder or change its planned dates IN PLACE (GET /testrun/{key} for the numeric id, then PUT /testrun/{id}, then GET /testrun/{key} again to read the result back) — the run keeps its key, items and results. The public API v1 has no PUT /testrun at all. At least one field to change is required. …

  • upload_attachment

    Attach a local file to a test case, test run (cycle), test result, or to one step of a case or result (POST multipart/form-data /testcase/{key}[/step/{i}]/attachments, /testrun/{key}/attachments, /testresult/{id}[/step/{i}]/attachments). Addressing: 'test_case' needs testCaseKey, 'test_run' needs testRunKey, 'test_result' needs testResultId (numeric); an identifier that does not match the target is rejected. stepIndex is accepted for 'test_case' and 'test_result' only — API v1 has no per-step attachments endpoint for runs. filePath is read from the disk of the machine running this MCP server, …

  • upload_automation_results

    Publish automated execution results from a local ZIP archive (POST multipart/form-data /automation/execution/{projectKey}). The archive must hold JSON files in Zephyr's custom results format: {"version": 1, "executions": [{"source", "result", "testCase": {"key"}}]}. Validation is strict only at the TOP level of an execution: an extra sibling of source/result such as executionTime is rejected with 400 "Invalid Custom Format JSON file", while an extra field inside "testCase" is silently accepted; "version" is not validated at all and "source" is optional (and readable back through no endpoint). …

  • upload_cucumber_results

    Publish Cucumber execution results from a local ZIP archive (POST multipart/form-data /automation/execution/cucumber/{projectKey}). The archive must hold the output of Cucumber's built-in json formatter (one or more .json report files). Every scenario must carry a @TestCaseKey=PROJ-T1 tag naming the BDD test case it reports on — that tag is how the server matches a scenario to an existing test case. Always creates a NEW test cycle (test run) — it never appends to an existing one — and returns the API description of that cycle unchanged, or { uploaded: true } for an empty body.

Signals

Stars
0
Forks
0
Open issues
0
Last commit
Jul 31, 2026 (3 months ago)
Last release
Jul 31, 2026 (3 months ago)

From GitHub (fetched Oct 24, 2026).

Details

Registry name
io.github.vilaabo/zephyr-scale-mcp
Version
1.0.0
Auth
API key
Packages
npm zephyr-scale-mcp
License
MIT
First seen
Oct 24, 2026
Last checked
Oct 24, 2026

Done for you

Rather not set it up yourself?

Chalk Labs scopes, builds and runs agents for your team: the task audit, the eval harness, the integrations and the weekly ops report. Fixed scope, priced before we start.

See how we build AI agents →Read the case studies

Chalk Labs is a two-founder AI and growth studio. We build AI agents, CRMs and MVPs for Web3 and AI companies, and have shipped 50+ product and token launches.

launches shipped
50+
launches shipped
media placements
500+
media placements
founders on every account
2
founders on every account

Press we've placed: Forbes · CoinDesk · Decrypt · Cointelegraph · The Block

Rahil Jain, Co-founder, Chalk Labs. Ex-Goldman Sachs engineer. You talk to the person who builds it.

Get Zephyr Scale MCP running in your business

Tell us what you want to automate. A founder replies within one working day with a plan, not a pitch deck.

Goes to the Chalk Labs founders, not the newsletter. Privacy

Need help deploying Zephyr Scale MCP?

CallGet help
Cite this page

Zephyr Scale MCP. Agent Mart. https://agentmart.dev/connectors/vilaabo-zephyr-scale-mcp (last updated 2026-10-24)