Qase MCP Server
OfficialServer Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| QASE_API_TOKEN | Yes | Your Qase API token | |
| QASE_API_DOMAIN | No | Custom API domain for enterprise customers | api.qase.io |
| NODE_EXTRA_CA_CERTS | No | Path to CA certificate file for SSL errors |
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
} |
| prompts | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| qase_apiA | Call any Qase REST endpoint directly, for the few things no dedicated tool covers. Pass the HTTP method, a path starting with a version segment such as /v1/, and an optional body or query. The path must be an endpoint path on the configured Qase host; a full URL, or one that resolves to another host, is refused. See developers.qase.io for the reference. Prefer a dedicated tool wherever one exists: they normalize enums, validate arguments before spending a round trip, and shape the response for a model. This one hands back whatever the API returns. It sends JSON only and cannot upload files — multipart uploads go through qase_attachment_upload. A DELETE through this tool asks for confirmation the same way the dedicated delete tools do. Cost: one API call, typically 0.3-1.5s depending on the endpoint. No caching, no pagination help, no retries beyond the client defaults. |
| qase_attachment_uploadA | Upload files and get back the hashes that other tools reference them by — screenshots, logs, HAR files, videos. For one file pass |
| qase_case_bulk_createA | Create up to 100 test cases in one request — the batch form of qase_case_upsert, and the right tool whenever more than one case is being written. Takes a list of cases with the same fields and the same enum handling as qase_case_upsert: labels ("high", "blocker") or numeric IDs both work, steps classic or Gherkin. The batch is validated as a whole, so an invalid item means nothing is created, and each item is then reported individually. Returns the IDs in the order submitted. This creates only; to change an existing case use qase_case_upsert with its |
| qase_case_upsertA | Create or update a single test case. With |
| qase_ci_reportA | Report a whole CI run in one call: creates the run, records every result, and completes it. This is the tool for a pipeline that has just finished — it replaces qase_run_upsert, then qase_result_record, then qase_run_complete, and leaves no half-open run behind if the agent stops early. Each result needs a numeric |
| qase_defect_upsertA | Create or update a defect — a tracked problem found by testing. Without |
| qase_discover_toolsA | Find and switch on tools that are hidden by default. Only core tools appear in the tool list; deletes, test plans, milestones, environments, shared steps and parameters, external issue links, case reviews, and project and custom-field management all exist but stay hidden until discovered. Search by what you are trying to do — "delete", "milestone", "plan", "review", "custom field" — and matching tools are activated and become callable. Every word in the query must appear in a tool's name or description, so prefer two or three words over a sentence. Activation is announced to your client with notifications/tools/list_changed: if a tool listed as activated here is still absent from your tool list, your client did not act on that notification — call the same endpoint through qase_api rather than reporting the capability as missing. Never conclude a capability is missing without searching here first. Cost: no API call, matching happens in memory, about 3ms. Free to call as often as needed. |
| qase_getA | Fetch one known record by type and ID: case, suite, run, result, plan, defect, milestone, environment, shared_step, shared_parameter, configuration, attachment, author, user, review, or custom_field. |
| qase_project_contextA | Seed everything about a project in one call: project details, the full suite tree, milestones, environments, custom fields, and users. This is the first call to make when starting work on a project — it replaces six separate list calls and gives the model the metadata it needs to build any later query. Each collection returns its first 100 entities; the |
| qase_regression_runA | Build and start a test run from a suite, a test plan, or an explicit list of case IDs, in one step. Use it to launch a regression cycle without first querying for cases and then creating a run around them — give it the source and it resolves the cases itself. For a run you assemble by hand, use qase_run_upsert and pass the case IDs. For a pipeline that has already finished and just needs its results filed, use qase_ci_report instead: this tool opens a run, it does not close one. Cost: two API calls behind one tool call — resolving the source, then creating the run — roughly 1s, growing with the number of cases the source resolves to. |
| qase_result_recordA | Record up to 200 results into an existing run. A case says what should be tested; a result says what happened when it ran — status, duration, comment, stacktrace, attachments — so a result always needs a run to live in. Pass several results in one call rather than calling once per test: the tool takes a list and sends them together. 200 is the ceiling for one call, and a longer list is refused before anything is written — split it into consecutive calls rather than dropping the tail. If the run does not exist yet and this is a finished CI job, qase_ci_report is the single call that creates the run, records the results and completes it, and it splits a larger batch for you. Status is a label, one of "passed", "failed", "blocked", "skipped" or "invalid" — unlike the case enums, numeric IDs are not accepted here. Cost: one API call for the whole list, about 0.5s for a small batch, growing with payload rather than with the number of results. |
| qase_run_completeA | Mark a test run as complete so it reports as finished rather than in progress. Call it once the results are in; a run left open keeps showing as running and skews dashboards and any "is the release ready" question asked later. Note that completing does not seal the run: the API still accepts results recorded into it afterwards, and they change its counts, so completion is a reporting state rather than a lock. If the results are all in hand at once, qase_ci_report does this as its final step and you do not need this call. Cost: one API call, about 0.4s. |
| qase_run_upsertA | Create or update a test run. Without |
| qase_suite_upsertA | Create or update a test suite — the folder cases live in. Without |
| qase_triage_defectA | Create a defect from a test failure, with the failure context written into it. Requires title, actual_result and severity — the API rejects a defect missing any of the three. Note: the API offers no way to attach existing runs or results to a defect. The runs and results seen on a defect in the UI are populated by the test runner when it reports a result as a defect, so there is nothing to pass here for that — reference the failing results inside actual_result instead, and do not expect a link to appear. For a defect unrelated to a test failure use qase_defect_upsert. Cost: one API call, about 0.5s. Triaging a whole run means one call per defect, so cluster identical failures and file one defect per distinct cause rather than one per failed test. |
| qql_helpA | Read the QQL reference before writing a query. Pass a |
| qql_searchA | Search any entity with Qase Query Language: filtering, cross-project queries, sorting, and aggregation. This is the right tool for every question that is not "give me this one record by ID" — "cases without automation", "results that failed this week", "open blockers across projects" — and the right way to fetch many records at once instead of looping over qase_get. Call qql_help first for the syntax, the fields available per entity, and the enum values; a query naming an unknown attribute is rejected outright. Use qase_get instead when you already know the entity and its ID and want just that one. Cost: one API call. 0.5-0.9s for pages up to 50 records; a page of 100 measured 0.9-2.8s depending on how much each record carries. Prefer one search over N single fetches: the same ten records cost 1.2s here against 5.3s as ten qase_get calls. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| ci_integration | Report CI/CD test results to Qase: create a run, record results, and get a summary. |
| onboard_project | Get a comprehensive overview of a Qase project for a new team member: structure, recent activity, key metrics. |
| regression_workflow | Create and manage a full regression test cycle: set up a run from a plan or suites, track progress, report results. |
| release_readiness | Check release readiness for a milestone: test coverage, pass rate, open defects, blocking issues. |
| triage_failed_run | Analyze a failed test run: show all failed results grouped by error pattern, suggest defects to create for unique failures. |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 17 tools
Each tool targets a distinct action/resource: single vs bulk case writes, CI vs staged run recording, get-by-ID vs QQL search, and general vs triage defects are all clearly separated. The only intentionally overlapping tool is qase_api, but its description explicitly defers to dedicated tools.
Most tools follow a qase_<resource>_<action> pattern (qase_case_upsert, qase_run_complete, qase_suite_upsert), and the qql_ prefix cleanly groups the search-language tools. A few names (qase_get, qase_api, qase_discover_tools, qase_triage_defect) deviate from the resource-first pattern, but the convention is still predictable.
At 17 tools the server is at the low end of the heavy range (16-25), though each tool has a clear role and several are deliberate compound/escape-hatch tools. It is a reasonable count for Qase's broad domain, but more than a tightly curated 3-15 tool set.
Core workflows are well covered: project context, suites, cases, runs, results, defects, attachments, and general read/search. Delete, plan/milestone, review, and custom-field operations are hidden behind qase_discover_tools rather than present in the visible set, and qase_api covers edge cases, so gaps are minor and workaroundable.