Qase Test Management

io.qase由 qase.io 發布官方發布者v3.0.6更新於 Nov 4, 2026

Official MCP server for Qase — manage test cases, runs, suites, defects via AI tools.

已驗證Streamable HTTP可網頁執行效率與工作流開發者工具

概覽

AI 產生的概覽

Qase 官方 MCP 伺服器,讓助理在 Qase 工作區中讀寫測試案例、套件、執行、結果、缺陷、計畫與審查。

可以做什麼
  • 讀取專案脈絡與單筆記錄,並用 QQL 搜尋案例、執行、結果、缺陷和計畫
  • 建立、更新和刪除測試案例、套件、共用步驟、計畫、里程碑、環境與自訂欄位
  • 開啟執行、記錄結果、完成執行,並一次回報整輪已完成的 CI 結果
  • 把失敗轉為缺陷,並將案例或執行連結到 Jira 議題
  • 上傳和刪除附件,發起或管理測試案例審查
  • 透過直連 REST 介面的備援工具呼叫任意 Qase 端點
適用情境
適合在 Qase 中管理測試、並希望助理草擬或批次建立案例、回報 CI 結果、把失敗整理成缺陷,或不必切換工具就能查詢測試歷史的團隊。
執行需求
可使用託管端點並以 Qase 帳號登入(OAuth),或在本機透過 npm 套件執行,需要 Node.js 20+ 與 QASE_API_TOKEN。企業版或自架執行個體可選設 QASE_API_DOMAIN 與 QASE_API_PROTOCOL。託管連接器僅限付費方案。
安裝前請注意
它會寫入與刪除真實測試資料:專案、套件、案例、執行、結果、缺陷、里程碑、計畫、環境、自訂欄位與附件的刪除都無法復原,刪除套件還會一併刪除其中的案例與子套件。刪除操作會先要求確認。API 權杖可存取整個工作區,應謹慎授權。備援工具可呼叫任意 REST 端點。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Qase Test Management,將其新增到工作區。
  2. 連接 所需的 憑證。它們會被私密儲存,絕不會在公開頁面上展示。
  3. 為需要使用其工具的對話啟用該服務。

Web executable,透過 Streamable HTTP。 遠端服務在工作區中設定後即可從網頁執行環境執行。

交給代理程式安裝

把這段提示詞貼上到 Claude Code、Codex、Cursor 等代理程式,或 SourceWeft 對話中。代理程式會讀取該伺服器的安裝指南,先向你展示發布者、端點和登入方式,經你同意後再把它新增到你的客戶端。金鑰不會寫進任何命令。

閱讀 https://sourceweft.com/mcp/io.qase%2Fmcp-server/install.md,並按其中說明把這個 MCP 伺服器接入我的客戶端。修改任何設定之前,先告訴我它的發布者、端點和登入方式,等我確認。不要把 API 金鑰寫進命令或我會提交的檔案;問我金鑰應從哪裡取得。

檢視代理程式所依據的安裝指南

其他 MCP 客戶端

把它新增到你客戶端的 mcpServers 設定中。 客戶端會在首次連接時完成 OAuth 登入。

{
  "mcpServers": {
    "qase-test-management": {
      "type": "http",
      "url": "https://mcp.qase.io/mcp"
    }
  }
}

README

Qase MCP Server

Official Model Context Protocol (MCP) server for Qase Test Management Platform — connect AI assistants to your test cases, runs, defects, and more.

[npm version] [License: MIT] [MCP Registry]

Table of Contents

Overview

The Qase MCP Server lets AI assistants (Claude, Cursor, Codex, and any other MCP client) read and write Qase test cases, runs, results, defects, suites, milestones, and more — through a standardized protocol, with no custom integration code.

Features:

  • 40 task-oriented tools (42 total, with qase_discover_tools and qase_tool_help) — consolidated from 83 v1 tools for lower token usage and better LLM accuracy
  • Composite tools — multi-step workflows in a single call: CI reporting, defect triage, regression run setup
  • QQL support — Qase Query Language for advanced searches across cases, runs, results, defects, and plans
  • Project context bootstrap — one call returns full project structure (suites, milestones, environments, users, custom fields)
  • Test case review — propose new cases or changes for review, assign reviewers, and track status (approving and merging remain UI-only)
  • Short descriptions, documentation on demand — every tool is listed from the first request; qase_tool_help returns a tool's full documentation when the agent first reaches for it, and qase_discover_tools searches the catalogue by task
  • Hosted or self-run — connect to https://mcp.qase.io/mcp (or https://mcp-eu.qase.io/mcp on the EU cluster) with just your Qase login, or run the server locally with your own API token
  • Tenant-safe caching & HTTP resilience — two-tier cache (in-memory + optional Redis), connection pooling, retry with backoff
  • Escape hatch — direct REST API access for any endpoint via qase_api

Use Cases

ScenarioExample promptTool
Bootstrap project context"Show me the structure of project DEMO — suites, milestones, environments"qase_project_context
Create or update a test case"Create a high-priority smoke test case in project DEMO titled 'Login with valid credentials'"qase_case_upsert
Report CI results"Report these CI results for project DEMO: case 1 passed, case 2 failed with 'timeout error'"qase_ci_report
Triage a failed test"Create a critical defect for the login timeout failure in run #42"qase_triage_defect
Search with QQL"Find all failed test results from the last 7 days in project DEMO"qql_search

See Tools and docs/tools.md for the full reference.

Quick Start

Use the hosted Qase MCP (recommended)

No install, no API token — connect to the Qase-hosted server and sign in with your Qase account.

Note: The hosted Qase MCP is available on every paid plan. On the Free plan, or on a dedicated instance, run the server yourself with your own API token — that works everywhere.

Pick the URL for your region: https://mcp.qase.io/mcp for the main cloud (app.qase.io), https://mcp-eu.qase.io/mcp for the EU cluster (app-eu.qase.io). The examples below use the main cloud; on the EU cluster substitute the EU URL and change nothing else.

  • Claude — open Settings → Connectors, find Qase Test Management, click Connect. (The directory connector is main-cloud; on the EU cluster add https://mcp-eu.qase.io/mcp as a custom connector.)
  • Cursor — add {"mcpServers": {"qase": {"url": "https://mcp.qase.io/mcp"}}} to .cursor/mcp.json.
  • Codex — add the URL https://mcp.qase.io/mcp in Settings → MCPs → Add server, or configure ~/.codex/config.toml for the CLI.
  • VS Code — add {"servers": {"qase": {"type": "http", "url": "https://mcp.qase.io/mcp"}}} to .vscode/mcp.json, or run MCP: Add Server.

Full per-client steps, other clients, and the active-workspace model: docs/connect.md.

Run it yourself

Works on every plan, including Free and dedicated instances. You need Node.js 20+ and a Qase API token; your MCP client starts the server for you. For example, in Claude Desktop's config:

json
{  "mcpServers": {    "qase": {      "command": "npx",      "args": ["-y", "@qase/mcp-server"],      "env": { "QASE_API_TOKEN": "your_api_token_here" }    }  }}

Step-by-step setup for Claude Desktop, Claude Code, Cursor, Codex and OpenCode, plus EU-region and custom-domain settings: docs/self-run.md. Running one server for a team over HTTP: docs/hosting.md.

Building on top of this server

For integration authors only — if you use the server directly, nothing here applies to you.

If your product drives this server (a plugin, an agent, a wrapper CLI), it can identify itself so its usage is attributable in Qase analytics, independently of which AI host is connected:

bash
QASE_MCP_INTEGRATION=quality-supervisor/1.4.0   # <name>/<version>, version optional

The name must be on the allowlist in src/utils/integration-marker.ts — add yours in a PR. Anything unlisted or malformed is ignored, and the API call still succeeds. HTTP transports also accept the marker per request (X-Qase-Integration header or ?integration=). Details: docs/integrations.md.

Upgrading

From 2.x to 3.0.0: no tool was renamed and no argument changed, so prompts and automation keep working. What changed is the protocol underneath — the server speaks MCP 2026-07-28, sessions are gone, every tool is listed from the first request, and deleting takes two round trips. Self-hosting more than one replica now requires QASE_MCP_REQUEST_STATE_KEY.

From v1 to v2: v2 consolidated 83 v1 tools into 29 task-oriented tools (30 total, including a discovery tool), and has since grown to 40 (42 total). Tool names and response shapes have changed.

Both upgrades, with the complete v1 → v2 tool mapping table and before/after examples: docs/migration.md.

Tools

42 tools across 6 groups (40 task-oriented tools plus two meta tools: qase_discover_tools to search the catalogue and qase_tool_help to read a tool's full documentation). All of them are listed from the first request:

GroupCountDescription
Read2Fetch any entity by type/ID, or bootstrap full project context in one call
QQL2Search across cases, runs, results, defects, and plans with Qase Query Language
Write32Create, update, and delete cases (single or up to 100 at once), runs, results, defects, suites, milestones, plans, shared steps, environments, and attachments; link cases and runs to Jira issues; propose and manage test case reviews
Composite3Multi-step workflows in one call: CI reporting, defect triage, regression run setup
Escape hatch1Direct REST API access for any endpoint not covered by the tools above
Meta2qase_discover_tools — search the catalogue by what you are trying to do; qase_tool_help — the full documentation of one tool, on demand

Full tool-by-tool reference with parameters: docs/tools.md.

Documentation

Contributing

Contributions are welcome! See CONTRIBUTING.md for development setup, testing, and linting guidelines.

License

MIT License — see LICENSE for details.

Support

Links

來源:README.md,提交 ac67976

工具

42

qase_api

Call Qase API

Call any Qase REST endpoint directly, for the few things no dedicated tool covers: method, a /v1/… path on the configured host, optional body or query. Prefer a dedicated tool where one exists — they normalize enums and validate before spending a call. JSON only; uploads go through qase_attachment_upload. A DELETE asks for confirmation like the dedicated delete tools. Cost: one API call, 0.3-1.5s.

輸入參數bodypath必填querymethod

qase_attachment_delete

Delete attachment

Delete an attachment by its hash (from qase_attachment_upload). Anything referencing it keeps the reference but the file is gone; this cannot be undone. Asks the user for confirmation first. Cost: one API call, about 0.4s.

輸入參數hash必填

qase_attachment_upload

Upload attachment

Upload files and get back the hashes other tools reference them by. Pass `file_base64` plus `filename` for one file, or `files` for several in one request; `file_path` only works when the server runs on the same machine as the file — never on the hosted connector. The hash must then be passed in an `attachments` field; uploading alone attaches nothing. This is the only tool that sends multipart/form-data, which is why qase_api cannot send files. Cost: one API call per request, dominated by size.

輸入參數code必填filefilesfilenamefile_pathfile_base64

qase_case_bulk_create

Bulk create test cases

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. Same fields and enum handling as qase_case_upsert; creates only, update through qase_case_upsert with `id`. Cost: one API call regardless of batch size — ten cases measured 1.2s against 5.6s as ten separate calls.

輸入參數code必填cases必填

qase_case_delete

Delete test case

Delete a test case by project code and ID. Its execution history goes with it and this cannot be undone; consider marking it deprecated through qase_case_upsert instead. No bulk delete — one call each, each asking the user for confirmation. Cost: one API call, about 0.4s.

輸入參數id必填code必填

qase_case_upsert

Create or update test case

Create or update a single test case: with `id` it updates, without it creates. Enum fields accept a label such as "high" or the project's numeric ID. Writing more than one case? Use qase_case_bulk_create — one request instead of one per case. If the project has "Test case review" enabled, writes may need a review — run qase_discover_tools with "review". Cost: one API call, about 0.6s to create, 0.4s to update.

輸入參數idcode必填tagstypelayerstepstitle必填statusbehavioris_flakypriorityseverity另有 9 個

qase_ci_report

Report CI results

Report a whole finished CI run in one call: creates the run, records every result, completes it. Use qase_result_record instead when the run already exists and results arrive in stages. Each result needs a numeric `case_id` and a status; batches over 200 are split for you, up to 2000. Cost: three API operations behind one call, about 0.7s for a small run.

輸入參數code必填title必填results必填completeis_autotestenvironment_id

qase_custom_field_delete

Delete custom field

Delete a custom field by ID. Reach is workspace-wide: it disappears from every project, with the values entered for it, and this cannot be undone. To remove it from one project only, edit `projects_codes` with qase_custom_field_upsert. Asks the user for confirmation first. Cost: one API call, about 0.4s.

輸入參數id必填

qase_custom_field_upsert

Create or update custom field

Create or update a custom field. On create, `entity` (case, run, defect) and `type` are required and fixed forever — the update endpoint cannot change them. Fields are workspace-wide; scope with `projects_codes` or is_enabled_for_all_projects. Read existing fields with qase_project_context or qase_get. Cost: one call to create, two to update, 0.5-0.9s.

輸入參數idtypetitle必填valueentityis_visibleis_requiredplaceholderdefault_valueis_filterableprojects_codesis_enabled_for_all_projects

qase_defect_delete

Delete defect

Delete a defect by project code and ID; its links to results go with it and this cannot be undone. Usually resolving it through qase_defect_upsert with `id` is the right move, so the record survives. Asks the user for confirmation first. Cost: one API call, about 0.4s.

輸入參數id必填code必填

qase_defect_upsert

Create or update defect

Create or update a defect: with `id` it updates, without it creates, and then `title`, `actual_result` and `severity` are required. Severity and status are labels ("blocker", "open"…), mapped for you. For a defect born from a specific test failure use qase_triage_defect; search with qql_search before filing a duplicate. Cost: one API call, about 0.5s.

輸入參數idcode必填tagstitle必填statusseverityattachmentscustom_fieldactual_result

qase_discover_tools

Discover more tools

Search the tool catalogue by what you are trying to do — "delete", "milestone", "review", "custom field" — and get back the matching tools with their descriptions. Every tool is already listed and callable; use this when you do not know which one fits, rather than re-reading the whole list. Cost: no API call, matching happens in memory, about 3ms.

輸入參數querycategory

qase_environment_delete

Delete environment

Delete an environment by project code and ID. Runs that referenced it lose the attribution, so filtering history by that environment stops working; this cannot be undone. Asks the user for confirmation first. Cost: one API call, about 0.4s.

輸入參數id必填code必填

qase_environment_upsert

Create or update environment

Create or update an environment — a named target such as staging or production that runs are attributed to. With `id` it updates, without it creates. Existing environments come back from qase_project_context. Cost: one API call, about 0.5s.

輸入參數idcode必填hostslugtitle必填description

qase_get

Get record

Fetch one known record by type and ID — case, suite, run, result, plan, defect, milestone, environment, shared_step, review, custom_field and more. Use it only when you already have the ID and want that one record; for several, anything filtered, or a loop over IDs, use qql_search — one search returns the whole page. Cost: one API call, 0.3-0.5s; ten in sequence measured 5.3s against 1.2s for one qql_search.

輸入參數id必填codeentity必填fieldsinclude

qase_milestone_delete

Delete milestone

Delete a milestone by project code and ID. Runs and cases keep existing but lose the association, so release reporting built on it stops working; this cannot be undone. Asks the user for confirmation first. Cost: one API call, about 0.4s.

輸入參數id必填code必填

qase_milestone_upsert

Create or update milestone

Create or update a milestone — a dated marker, typically a release, that runs and cases are grouped under. With `id` it updates, without it creates. Existing milestones come back from qase_project_context. Cost: one API call, about 0.5s.

輸入參數idcode必填title必填statusdue_datedescription

qase_plan_delete

Delete test plan

Delete a test plan by project code and ID. Only the plan goes — its cases and the runs made from it stay — but anything launching it by ID breaks; this cannot be undone. To change its cases use qase_plan_upsert instead. Asks the user for confirmation first. Cost: one API call, about 0.4s.

輸入參數id必填code必填

qase_plan_upsert

Create or update test plan

Create or update a test plan — a named, reusable set of case IDs such as a smoke or regression pack. With `id` it updates, without it creates. qase_regression_run turns a plan into a run in one call. Cost: one API call, about 0.5s, growing with the number of cases.

輸入參數idcode必填casestitle必填description

qase_project_context

Project context

Seed everything about a project in one call: details, the full suite tree, milestones, environments, custom fields and users — make it first when starting on a project. Each collection returns its first 100; check `coverage` and pass `full: true` to page. For one record by ID qase_get is cheaper; for filtered questions use qql_search. Cost: six API calls behind one, 0.5-1.3s cold, cached 5 minutes.

輸入參數code必填full

qase_project_create

Create project

Create a project. The code must be unique in the workspace, and there is no update endpoint afterwards — title, code and access cannot be changed through the API, so choose them deliberately. Read an existing project with qase_project_context. Cost: one API call, about 1.5s.

輸入參數code必填grouptitle必填accesssettingsdescription

qase_project_delete

Delete project

Delete an entire project by code — every case, suite, run, result, defect and milestone in it, with no trash to recover from; this cannot be undone. The most destructive call in the API; confirm the code with qase_project_context first. Asks the user for confirmation and does not proceed without it. Cost: one API call, about 0.5s.

輸入參數code必填

qase_regression_run

Build regression run

Build and start a test run from a suite, a plan, or an explicit list of case IDs, in one step — it resolves the cases itself. It opens a run, it does not close one: for a finished pipeline use qase_ci_report; to assemble a run by hand use qase_run_upsert. Cost: two API calls behind one, about 1s.

輸入參數code必填title必填plan_idsuite_idsdescriptionmilestone_idinclude_casesenvironment_id

qase_result_delete

Delete test result

Delete one result from a run, by run ID and result hash. The case and the rest of the run are untouched; pass rates shift and this cannot be undone. To discard a whole run use qase_run_delete. Asks the user for confirmation first. Cost: one API call, about 0.4s.

輸入參數code必填hash必填run_id必填

qase_result_record

Record test results

Record up to 200 results into an existing run — status, duration, comment, stacktrace, attachments — in one call, not one per test. Status is a label only: passed, failed, blocked, skipped, invalid. If the run does not exist yet and the job is finished, qase_ci_report creates, records and completes in one call. Cost: one API call for the whole list, about 0.5s.

輸入參數code必填run_id必填results必填

qase_review_bulk_create

Bulk create case reviews

Open several test case reviews in one request — the batch form of qase_review_create, for proposing more than one change. Same fields as qase_review_create; `case_id` for an edit review, omitted for a create review. The API has no endpoints for approving, merging or declining — those are UI-only; read status with qase_review_list. Cost: one API call regardless of batch size.

輸入參數code必填reviews必填

qase_review_create

Create case review

Open a test case review — the pull-request flow for cases. Pass `case_id` to propose changes to an existing case (send only the fields that change), or omit it to propose a new one. Several at once? Use qase_review_bulk_create. The API has no endpoints for approving, merging or declining — those are UI-only; read status with qase_review_list. Cost: one API call, about 0.5s.

輸入參數code必填tagstypelayerstepstitlestatuscase_idbehavioris_flakypriorityseverity另有 10 個

qase_review_delete

Delete case review

Delete a review by ID. This removes the proposal entirely — it does not decline it, and declining is UI-only — and merged reviews cannot be deleted; the referenced case is untouched. Cannot be undone; asks the user for confirmation first. Cost: one API call, about 0.4s.

輸入參數id必填code必填

qase_review_list

List case reviews

List a project's reviews with their current state — the only way to learn what happened to a review you opened, since the API has no endpoints for approving or merging — those are UI-only. Filter by status to see what is still open. For one review by ID, qase_get is cheaper. Cost: one API call, about 0.5s.

輸入參數code必填typelimitoffsetsearchstatuscase_idauthor_uuidreviewer_uuid

qase_review_update

Update case review

Update an open review: the proposed case fields, the reviewers, or both, by review ID. IMPORTANT: changing the proposal RESETS every approval already given; updating only `reviewers` keeps them. The API has no endpoints for approving, merging or declining — those are UI-only; read status with qase_review_list. Cost: one API call, about 0.5s.

輸入參數id必填code必填tagstypelayerstepstitlestatusbehavioris_flakypriorityseverity另有 10 個

qase_run_complete

Complete test run

Mark a test run complete so it reports as finished. It is a reporting state, not a lock — results recorded afterwards still land and change its counts. If all results are in hand at once, qase_ci_report does this as its final step. Cost: one API call, about 0.4s.

輸入參數id必填code必填

qase_run_delete

Delete test run

Delete a test run by project code and ID, together with every result in it; this cannot be undone. Rarely what you want: to stop accepting results use qase_run_complete, to fix one result use qase_result_delete. Asks the user for confirmation first. Cost: one API call, about 0.4s.

輸入參數id必填code必填

qase_run_upsert

Create or update test run

Create or update a test run — the container results are recorded into, so open it before qase_result_record. Scope it to a milestone, environment, plan or case list. To build one from a suite or plan use qase_regression_run; for a finished CI job use qase_ci_report, which opens, records and closes in one call. Cost: one API call, about 0.5s.

輸入參數idcode必填tagscasestitle必填plan_idend_timestart_timedescriptionis_autotestcustom_fieldmilestone_id另有 1 個

qase_shared_step_delete

Delete shared step

Delete a shared step by project code and hash. Every case referencing it loses those steps, so the reach is far wider than one record; check references first. Cannot be undone; to change content use qase_shared_step_upsert instead. Asks the user for confirmation first. Cost: one API call, about 0.4s.

輸入參數code必填hash必填

qase_shared_step_upsert

Create or update shared step

Create or update a shared step — a block of steps written once and reused across cases. With `hash` it updates, without it creates; shared steps are identified by hash, which qase_case_upsert takes in a step's `shared` field. Updating changes every referencing case. Cost: one API call, about 0.5s.

輸入參數code必填hashstepstitle必填

qase_suite_delete

Delete suite

Delete a test suite by project code and ID. WARNING: the cases inside, and any child suites, are deleted with it along with their history, and `delete_cases` currently has no effect. Read the tree from qase_project_context and move what matters first. Asks the user for confirmation. Cost: one API call, about 0.4s.

輸入參數id必填code必填delete_cases

qase_suite_upsert

Create or update suite

Create or update a test suite — the folder cases live in. With `id` it updates, without it creates; nest with `parent_id`. The existing tree comes back from qase_project_context, so read it rather than guess parent IDs. Cost: one API call, about 0.5s.

輸入參數idcode必填title必填parent_iddescriptionpreconditions

qase_tool_help

Tool documentation

Read the full documentation of one tool before calling it for the first time in a session. Every description in the tool list is deliberately short — what the tool is for and what it costs — and the details that prevent a wrong first call live here: argument semantics, limits, what cannot be undone, and which tool to use instead. Pass the tool name exactly as listed. Cost: no API call, static text, about 1ms. Cheaper than one rejected call.

輸入參數tool必填

qase_triage_defect

Triage failure into defect

Create a defect from a test failure with the context written into it; `title`, `actual_result` and `severity` are required. The API has no way to attach runs or results to a defect — reference them in actual_result. For a defect unrelated to a failure use qase_defect_upsert. Cost: one API call, about 0.5s; file one defect per distinct cause.

輸入參數code必填tagstitle必填severity必填attachmentsdescriptioncustom_fieldactual_result必填

qql_help

QQL syntax help

Read the QQL reference before writing a query. Pass a `topic`: overview, syntax, entities, operators, functions, examples, aggregation or enumValues. Field names differ per entity and from the write tools, and a query naming an unknown attribute is rejected — read `entities` first. Cost: no API call, about 2ms; cheaper than one rejected qql_search.

輸入參數topic必填

版本歷史

12
  1. v3.0.6最新Nov 4, 2026
  2. v3.0.4Oct 30, 2026
  3. v3.0.3Oct 29, 2026
  4. v3.0.2Oct 26, 2026
  5. v3.0.1Oct 15, 2026
  6. v3.0.0Oct 13, 2026
  7. v2.7.4Sep 25, 2026
  8. v2.7.3Sep 25, 2026
  9. v2.7.1Sep 24, 2026
  10. v2.7.0Sep 23, 2026
  11. v2.6.0Sep 21, 2026
  12. v2.4.1Sep 16, 2026

評分

已滿足適用檢查項的 100%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通必需25 分
  • 已宣告認證方式必需10 分
  • 已列出工具15 分
  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分