QTM4J

io.github.denis-platonovPublished by GitHub account denis-platonovv1.1.0Updated Oct 24, 2026

MCP server for QMetry Test Management for Jira (QTM4J) Open API.

Overview

AI-generated overview

Local MCP server for QTM4J (QMetry Test Management for Jira) that lets an assistant search, create and update test cases, cycles and execution results.

What you can do
Search and read test cases, their details, steps and folders, including paginated project-wide listing and merging of results across pages by key or ID, with optional summary filters and folder paths. Create test cases, folders and test cycles, and place test cases into folders or cycles. Add, update and remove test case steps, and update a test case version's summary or description. Update execution results (Pass/Fail), close test cycles, and list the test cases in a cycle. Request a presigned URL for uploading an attachment.
When to use it
Useful when a team keeps its test management in QTM4J and wants an assistant to look up test cases, draft or edit cases and steps, organize folders, or record and update execution results without switching to the Jira/QMetry UI.
Requirements
Runs locally over stdio via the npm package, so Node.js 20+ is needed. Requires a QTM4J Open API key in QTM4J_API_KEY, generated from Jira under QMetry > Configuration > Open API. QTM4J_BASE_URL (defaults to the QTMetry cloud API) and QTM4J_PROJECT_ID (default project) are optional. Network access to the QTM4J API is required.
Before you install
The API key in QTM4J_API_KEY grants access to your QTM4J project data and must be kept out of shared configs. Many tools write to QTM4J: creating test cases, folders and cycles, adding or removing cases from folders and cycles, editing steps, summaries and descriptions, updating execution status and closing cycles. Setting NODE_TLS_REJECT_UNAUTHORIZED to 0 disables TLS certificate checks and should be avoided. The README warns that the npx package may be an older release than the local build.

Installation

In SourceWeft

  1. Open QTM4J in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.

Other MCP clients

Follow the launch instructions in the repository.

README

qtm4j-mcp-server

[CI] [npm version] [Release] [License: MIT]

MCP server for QTM4J (QMetry Test Management for Jira) Open API at qtmcloud.qmetry.com/rest/api/latest.

Published package: @denis-platonov/qtm4j-mcp-server

MCP Registry name: io.github.denis-platonov/qtm4j

Supported Clients

ClientStatusNotes
CursorSupportedConfigure with npx in ~/.cursor/mcp.json
JetBrains IDEsSupportedConfigure in AI Assistant MCP settings
VS CodeSupportedConfigure in .vscode/mcp.json or user profile mcp.json
AntigravitySupportedConfigure in mcp_config.json via raw config

Tools

ToolDescription
create_test_cycleCreate a new test cycle (run)
search_test_caseSearch for a test case by key (e.g. PE26-TC-2)
search_test_casesSearch test cases with pagination and optional summary filters
list_all_project_test_casesFetch and merge paginated test case results across a project
create_test_caseCreate a new test case, optionally placing it in folders
list_cycle_test_casesList all test cases in a cycle
add_test_case_to_cycleAdd a test case to a cycle
update_execution_statusUpdate execution result (Pass/Fail)
close_test_cycleClose a test cycle
get_attachment_urlGet presigned URL for attachment upload
add_test_case_stepsAdd one or more steps to a test case version
add_test_case_to_foldersAdd a test case version to one or more folders
create_test_case_folderCreate a test case folder in a project
get_test_caseFetch a test case by ID or key
get_test_case_detailsFetch full details for a specific test case version
get_test_case_stepsList or search steps on a test case version
list_test_case_foldersList project test case folders with flat paths
remove_test_case_from_foldersRemove a test case version from folders
update_test_case_descriptionUpdate a test case version description
update_test_case_stepUpdate an existing test step
update_test_case_summaryUpdate a test case version summary

The full set of tools (including search_test_cases with startAt, list_all_project_test_cases, folder and step helpers) is defined in src/tools.ts. After npm run build, run npm run list-tools to print every registered tool name — use this to confirm Cursor is using this build (you should see list_all_project_test_cases).

Cursor: use the local build for full functionality

npx @denis-platonov/qtm4j-mcp-server may be an older npm release. To guarantee tools such as list_all_project_test_cases and correct startAt handling:

  1. In this directory: npm install && npm run build.
  2. Merge cursor-mcp.example.json into your user Cursor config ~/.cursor/mcp.json (Windows: %USERPROFILE%\.cursor\mcp.json). Adjust the args path to your absolute dist/index.js.
  3. Run npm run list-tools and confirm the tool count matches expectations.
  4. Restart Cursor or toggle the MCP server off/on.

Cursor workspace tool descriptors

If you use Cursor’s workspace mcps/<server>/tools/*.json hints for the agent, keep those JSON schemas in sync with src/tools.ts (same parameter names as the Zod definitions). Rebuild and restart MCP after changing tools.

Setup

Prerequisites

  • Node.js 20+
  • QTM4J Open API key (generate from Jira: QMetry > Configuration > Open API)

Use with Cursor

Add to ~/.cursor/mcp.json:

json
{  "mcpServers": {    "qtm4j": {      "command": "npx",      "args": ["-y", "@denis-platonov/qtm4j-mcp-server"],      "env": {        "QTM4J_API_KEY": "your-api-key",        "QTM4J_BASE_URL": "https://qtmcloud.qmetry.com/rest/api/latest",        "QTM4J_PROJECT_ID": "10800"      }    }  }}

Use with JetBrains IDEs

In JetBrains AI Assistant, open Tools > AI Assistant > Model Context Protocol (MCP) and add:

json
{  "mcpServers": {    "qtm4j": {      "command": "npx",      "args": ["-y", "@denis-platonov/qtm4j-mcp-server"],      "env": {        "QTM4J_API_KEY": "your-api-key",        "QTM4J_BASE_URL": "https://qtmcloud.qmetry.com/rest/api/latest",        "QTM4J_PROJECT_ID": "10800"      }    }  }}

Restart AI Assistant after saving the configuration.

Use with VS Code

Add this to your user or workspace MCP configuration file, typically .vscode/mcp.json or your profile-level mcp.json:

json
{  "servers": {    "qtm4j": {      "type": "stdio",      "command": "npx",      "args": ["-y", "@denis-platonov/qtm4j-mcp-server"],      "env": {        "QTM4J_API_KEY": "your-api-key",        "QTM4J_BASE_URL": "https://qtmcloud.qmetry.com/rest/api/latest",        "QTM4J_PROJECT_ID": "10800"      }    }  }}

Use with Antigravity

In Antigravity, open Manage MCP Servers and then View raw config, then add this to mcp_config.json:

json
{  "mcpServers": {    "qtm4j": {      "command": "npx",      "args": ["-y", "@denis-platonov/qtm4j-mcp-server"],      "env": {        "QTM4J_API_KEY": "your-api-key",        "QTM4J_BASE_URL": "https://qtmcloud.qmetry.com/rest/api/latest",        "QTM4J_PROJECT_ID": "10800"      }    }  }}

Build

bash
npm installnpm run build

Testing

Run the hermetic test suite:

bash
npm test

Run once without watch mode:

bash
npm run test:run

Generate a coverage report:

bash
npm run test:coverage

Run opt-in live integration tests against a real QTM4J environment:

bash
npm run test:live

Live tests are skipped unless the required environment is present. The live suite currently supports:

  • Read-focused checks using QTM4J_API_KEY, QTM4J_BASE_URL, and QTM4J_PROJECT_ID
  • Search coverage with QTM4J_LIVE_TEST_CASE_KEY
  • Cycle listing coverage with QTM4J_LIVE_TEST_CYCLE_ID
  • Attachment URL coverage with QTM4J_LIVE_TEST_EXECUTION_ID
  • Optional mutation checks only when QTM4J_LIVE_ENABLE_MUTATIONS=1

Example:

bash
QTM4J_API_KEY=your-api-key \QTM4J_PROJECT_ID=10800 \QTM4J_LIVE_TEST_CASE_KEY=PE26-TC-2 \QTM4J_LIVE_TEST_CYCLE_ID=PE26-R1 \QTM4J_LIVE_TEST_EXECUTION_ID=12345 \npm run test:live

Local Development

Copy cursor-mcp.example.json into ~/.cursor/mcp.json (merge with existing mcpServers) and set args to the absolute path of dist/index.js, for example on Windows:

"args": ["C:/Users/you/projects/qa-all-in-one/tools/qtm4j-mcp-server/dist/index.js"]

Optional: NODE_TLS_REJECT_UNAUTHORIZED": "0" in env only if you must use self-signed TLS.

Publish

This repository uses a tag-driven GitHub Actions release workflow.

  1. Align package.json and server.json to the release version.
  2. Build and verify locally:
bash
npm run buildnpm run test:run
  1. Commit the release-prep changes.
  2. Create and push the release tag:
bash
git tag v1.1.0git push origin sync/desktop-qtm4j-sourcegit push origin v1.1.0
  1. GitHub Actions will verify the tag matches package.json and server.json, publish the npm package, and then publish server.json to the MCP Registry.

You can then verify discovery with:

bash
curl "https://registry.modelcontextprotocol.io/v0.1/servers?search=io.github.denis-platonov/qtm4j"

GitHub Actions

This repo includes two workflows:

  • CI: runs npm run build, npm run test:run, and npm run test:coverage on pushes to main and on pull requests
  • Release: runs on tags matching v*, verifies the tag matches package.json and server.json, publishes to npm, and then publishes server.json to the MCP Registry

To use the release workflow, add this repository secret:

  • NPM_TOKEN: npm access token with permission to publish @denis-platonov/qtm4j-mcp-server

Then cut a release like this:

bash
git tag v1.1.0git push origin v1.1.0

Environment Variables

VariableRequiredDefaultDescription
QTM4J_API_KEYYes—QTM4J Open API key
QTM4J_BASE_URLNohttps://qtmcloud.qmetry.com/rest/api/latestAPI base URL
QTM4J_PROJECT_IDNo—Default project ID (avoids passing it in every call)
NODE_TLS_REJECT_UNAUTHORIZEDNo—Set to 0 for self-signed certs

Source: README.md at commit e865400

Tools

0
SourceWeft has not started this package in its sandbox yet, so its tools are not known.

Version history

1
  1. v1.1.0LatestSep 16, 2026

Score

50% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 days25 pts

    Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.

  • Auth declared10 pts

    Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.

  • Tools listed15 pts

    Answer tools/list without a credential, or ship a package that starts in a sandbox without one.

  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts