qTest On-Premise MCP Server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| QTEST_TOKEN | No | Static bearer/API token. Generate in qTest under Profile → API & SDK. | |
| QTEST_BASE_URL | Yes | Base URL of your on-prem qTest, e.g. https://qtest.mycompany.internal. A trailing /api/v3 is tolerated and stripped. | |
| QTEST_PASSWORD | No | Password for password-grant login. | |
| QTEST_USERNAME | No | Username for password-grant login (used only when QTEST_TOKEN is empty). | |
| QTEST_LOG_LEVEL | No | error | warn | info | debug. All logs go to stderr. | info |
| QTEST_TIMEOUT_MS | No | Per-request timeout in milliseconds. | 30000 |
| QTEST_INSECURE_TLS | No | When true, disables TLS certificate verification (for internal self-signed certs only). | false |
| QTEST_LOGIN_CLIENT | No | Basic-auth seed used on the /oauth/token request. Override if your admin configured a specific client id. | qtest |
| QTEST_ENABLE_DESTRUCTIVE | No | When true, registers the delete-* tools. | false |
| QTEST_ENABLE_RAW_REQUEST | No | When true, registers the generic qtest_request tool. | false |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| qtest_list_projectsA | List all qTest projects the authenticated user can access. Returns id, name and status for each. Use this first to discover the projectId required by most other tools. |
| qtest_get_projectA | Fetch a single qTest project by its numeric ID. |
| qtest_list_modulesA | List Test Design modules (folders). With no parentId, returns root modules. Provide parentId to list child modules. Provide search to filter by name (case-insensitive substring). |
| qtest_create_moduleA | Create a Test Design module (folder). Omit parentId to create at the root, or supply parentId to nest it under an existing module. |
| qtest_update_moduleA | Update a module's name, description, or custom fields. Provide fields as a map of fieldId -> value. |
| qtest_list_test_casesA | List test cases in a project, optionally scoped to a module via parentId. Supports client-side filtering by name substring. |
| qtest_get_test_caseA | Fetch a single test case by ID, including its test steps and properties. |
| qtest_create_test_caseA | Create a test case inside a module. You can include ordered test steps and custom field values (fieldId -> value map). |
| qtest_update_test_caseA | Update a test case's name, description, precondition, or custom fields. Creates a new version in qTest. |
| qtest_add_test_stepA | Append a single test step (action + expected result) to an existing test case. |
| qtest_list_requirementsA | List requirements in a project, optionally scoped to a parent module. Supports client-side filtering by name substring. |
| qtest_get_requirementA | Fetch a single requirement by ID. |
| qtest_create_requirementA | Create a requirement under a module. Supply parentId for the containing module and optional custom fields (fieldId -> value). |
| qtest_update_requirementA | Update a requirement's name, description, or custom fields. Optionally move it to a different parent module. |
| qtest_link_test_cases_to_requirementA | Create coverage links between a requirement and one or more test cases. This is the primary traceability action: it marks the listed test cases as covering the requirement. IDs are numeric test case IDs (use qtest_list_test_cases to find them). |
| qtest_unlink_test_cases_from_requirementB | Remove coverage links between a requirement and one or more test cases. |
| qtest_get_requirement_coverageA | List the test cases currently linked to (covering) a requirement. |
| qtest_link_artifactsA | Generic object-linking between any two qTest artifact types. Link the source object (objectType/objectId) to the given target IDs of linkType. Example: link a 'test-cases' object to 'defects'. Supported types: test-cases, requirements, defects, test-runs. |
| qtest_get_traceability_matrixA | Retrieve the requirement traceability matrix report: requirements with their covering test cases. Useful for coverage audits. |
| qtest_list_test_cyclesA | List test cycles. With no parentId, returns root-level cycles. Provide parentId (and the matching parentType) to list children. Supports name filtering. |
| qtest_create_test_cycleA | Create a test cycle. Omit parentId for a root cycle, or nest under a release or another cycle by supplying parentId and parentType. |
| qtest_list_test_suitesA | List test suites under a test cycle (or release). Provide parentId and parentType. |
| qtest_create_test_suiteA | Create a test suite under a test cycle (or release). Test runs are added to suites. |
| qtest_add_test_runsA | Create test runs inside a test suite from a list of test case IDs. Each run represents one executable instance of a test case. Use qtest_list_test_cases to find test case IDs. |
| qtest_list_test_runsA | List test runs under a parent (test suite or test cycle). Provide parentId and parentType. |
| qtest_get_test_runA | Fetch a single test run by ID, including its latest status. |
| qtest_submit_test_logA | Record an execution result (test log) against a test run. Provide a status such as 'Passed', 'Failed', 'Blocked', or 'Incomplete'. Optionally include a note and execution start/end timestamps (ISO 8601). |
| qtest_searchA | Search a project's artifacts using qTest Query Language (QQL). Example queries: "Name ~ 'login'", "Status = 'Approved'", "'Automation' = 'Yes' and Priority = 'High'". Specify the artifact type to search. |
| qtest_list_fieldsA | List the system and custom fields (with their numeric IDs and allowed values) for an artifact type in a project. Use this to discover field IDs needed by the 'fields' parameter on create/update tools. |
| qtest_get_current_userA | Return the profile of the authenticated qTest user. Useful for verifying connectivity and permissions. |
| qtest_add_attachmentA | Attach a file (provided as base64 content) to a qTest artifact such as a test case, requirement, defect, or test log. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 31 tools
Each tool targets a distinct resource and action (e.g., get vs list vs create vs update). The two coverage-related tools are clearly differentiated: one for a single requirement, the other for a full traceability matrix. No two tools appear to do the same thing.
All tool names follow the qtest_<verb>_<noun> pattern. Verbs are consistent (get/list/create/update/add/submit/link/unlink/search), and plural forms are used for list operations while singular is used for single-item fetches. No mixed conventions or style inconsistencies exist.
The server exposes 31 tools, which is heavier than the typical sweet spot. While the breadth of qTest's test management API justifies many of them, there is some conceptual overlap (e.g., qtest_get_requirement_coverage vs qtest_get_traceability_matrix) that could be consolidated. The count is borderline but not chaotic.
The tool set covers create, read, and update for many artifact types, but lacks delete operations entirely (no delete for modules, test cases, requirements, cycles, suites, or runs). Update is also missing for cycles and suites. This creates lifecycle dead ends and limits cleanup ability, a significant gap in a comprehensive test management tool.