@qase/mcp-server 1.1.7 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +25 -0
- package/README.md +75 -551
- package/build/auth/client-context.d.ts +12 -0
- package/build/auth/client-context.d.ts.map +1 -0
- package/build/auth/client-context.js +12 -0
- package/build/auth/client-context.js.map +1 -0
- package/build/auth/jwks-verifier.d.ts +15 -0
- package/build/auth/jwks-verifier.d.ts.map +1 -0
- package/build/auth/jwks-verifier.js +31 -0
- package/build/auth/jwks-verifier.js.map +1 -0
- package/build/auth/mcp-guard.d.ts +15 -0
- package/build/auth/mcp-guard.d.ts.map +1 -0
- package/build/auth/mcp-guard.js +44 -0
- package/build/auth/mcp-guard.js.map +1 -0
- package/build/auth/oauth-config.d.ts +40 -0
- package/build/auth/oauth-config.d.ts.map +1 -0
- package/build/auth/oauth-config.js +34 -0
- package/build/auth/oauth-config.js.map +1 -0
- package/build/auth/proxy-provider.d.ts +31 -0
- package/build/auth/proxy-provider.d.ts.map +1 -0
- package/build/auth/proxy-provider.js +87 -0
- package/build/auth/proxy-provider.js.map +1 -0
- package/build/auth/token-type.d.ts +7 -0
- package/build/auth/token-type.d.ts.map +1 -0
- package/build/auth/token-type.js +10 -0
- package/build/auth/token-type.js.map +1 -0
- package/build/cache/circuit-breaker.d.ts +33 -0
- package/build/cache/circuit-breaker.d.ts.map +1 -0
- package/build/cache/circuit-breaker.js +68 -0
- package/build/cache/circuit-breaker.js.map +1 -0
- package/build/cache/index.d.ts +24 -0
- package/build/cache/index.d.ts.map +1 -0
- package/build/cache/index.js +86 -0
- package/build/cache/index.js.map +1 -0
- package/build/cache/keys.d.ts +25 -0
- package/build/cache/keys.d.ts.map +1 -0
- package/build/cache/keys.js +36 -0
- package/build/cache/keys.js.map +1 -0
- package/build/cache/layered.d.ts +31 -0
- package/build/cache/layered.d.ts.map +1 -0
- package/build/cache/layered.js +88 -0
- package/build/cache/layered.js.map +1 -0
- package/build/cache/memory.d.ts +32 -0
- package/build/cache/memory.d.ts.map +1 -0
- package/build/cache/memory.js +108 -0
- package/build/cache/memory.js.map +1 -0
- package/build/cache/metrics.d.ts +31 -0
- package/build/cache/metrics.d.ts.map +1 -0
- package/build/cache/metrics.js +95 -0
- package/build/cache/metrics.js.map +1 -0
- package/build/cache/prom-format.d.ts +7 -0
- package/build/cache/prom-format.d.ts.map +1 -0
- package/build/cache/prom-format.js +16 -0
- package/build/cache/prom-format.js.map +1 -0
- package/build/cache/redis-bus.d.ts +29 -0
- package/build/cache/redis-bus.d.ts.map +1 -0
- package/build/cache/redis-bus.js +50 -0
- package/build/cache/redis-bus.js.map +1 -0
- package/build/cache/redis.d.ts +32 -0
- package/build/cache/redis.d.ts.map +1 -0
- package/build/cache/redis.js +89 -0
- package/build/cache/redis.js.map +1 -0
- package/build/cache/types.d.ts +38 -0
- package/build/cache/types.d.ts.map +1 -0
- package/build/cache/types.js +2 -0
- package/build/cache/types.js.map +1 -0
- package/build/client/index.d.ts +10 -3
- package/build/client/index.d.ts.map +1 -1
- package/build/client/index.js +75 -50
- package/build/client/index.js.map +1 -1
- package/build/http/agent.d.ts +16 -0
- package/build/http/agent.d.ts.map +1 -0
- package/build/http/agent.js +16 -0
- package/build/http/agent.js.map +1 -0
- package/build/http/dedupe.d.ts +14 -0
- package/build/http/dedupe.d.ts.map +1 -0
- package/build/http/dedupe.js +69 -0
- package/build/http/dedupe.js.map +1 -0
- package/build/http/index.d.ts +6 -0
- package/build/http/index.d.ts.map +1 -0
- package/build/http/index.js +4 -0
- package/build/http/index.js.map +1 -0
- package/build/http/retry.d.ts +18 -0
- package/build/http/retry.d.ts.map +1 -0
- package/build/http/retry.js +52 -0
- package/build/http/retry.js.map +1 -0
- package/build/index.d.ts +1 -18
- package/build/index.d.ts.map +1 -1
- package/build/index.js +95 -61
- package/build/index.js.map +1 -1
- package/build/operations-v2/composites/ci-report.d.ts +2 -0
- package/build/operations-v2/composites/ci-report.d.ts.map +1 -0
- package/build/operations-v2/composites/ci-report.js +99 -0
- package/build/operations-v2/composites/ci-report.js.map +1 -0
- package/build/operations-v2/composites/regression-run.d.ts +2 -0
- package/build/operations-v2/composites/regression-run.d.ts.map +1 -0
- package/build/operations-v2/composites/regression-run.js +81 -0
- package/build/operations-v2/composites/regression-run.js.map +1 -0
- package/build/operations-v2/composites/triage-defect.d.ts +2 -0
- package/build/operations-v2/composites/triage-defect.d.ts.map +1 -0
- package/build/operations-v2/composites/triage-defect.js +67 -0
- package/build/operations-v2/composites/triage-defect.js.map +1 -0
- package/build/operations-v2/escape/api.d.ts +2 -0
- package/build/operations-v2/escape/api.d.ts.map +1 -0
- package/build/operations-v2/escape/api.js +34 -0
- package/build/operations-v2/escape/api.js.map +1 -0
- package/build/operations-v2/index.d.ts +19 -0
- package/build/operations-v2/index.d.ts.map +1 -0
- package/build/operations-v2/index.js +25 -0
- package/build/operations-v2/index.js.map +1 -0
- package/build/operations-v2/meta/discover.d.ts +9 -0
- package/build/operations-v2/meta/discover.d.ts.map +1 -0
- package/build/operations-v2/meta/discover.js +76 -0
- package/build/operations-v2/meta/discover.js.map +1 -0
- package/build/{operations/search.d.ts → operations-v2/qql/index.d.ts} +1 -1
- package/build/operations-v2/qql/index.d.ts.map +1 -0
- package/build/{operations/search.js → operations-v2/qql/index.js} +34 -9
- package/build/operations-v2/qql/index.js.map +1 -0
- package/build/operations-v2/read/get.d.ts +2 -0
- package/build/operations-v2/read/get.d.ts.map +1 -0
- package/build/operations-v2/read/get.js +91 -0
- package/build/operations-v2/read/get.js.map +1 -0
- package/build/operations-v2/read/project-context.d.ts +2 -0
- package/build/operations-v2/read/project-context.d.ts.map +1 -0
- package/build/operations-v2/read/project-context.js +102 -0
- package/build/operations-v2/read/project-context.js.map +1 -0
- package/build/operations-v2/write/attachments.d.ts +2 -0
- package/build/operations-v2/write/attachments.d.ts.map +1 -0
- package/build/operations-v2/write/attachments.js +58 -0
- package/build/operations-v2/write/attachments.js.map +1 -0
- package/build/operations-v2/write/cases.d.ts +2 -0
- package/build/operations-v2/write/cases.d.ts.map +1 -0
- package/build/operations-v2/write/cases.js +121 -0
- package/build/operations-v2/write/cases.js.map +1 -0
- package/build/operations-v2/write/defects.d.ts +2 -0
- package/build/operations-v2/write/defects.d.ts.map +1 -0
- package/build/operations-v2/write/defects.js +81 -0
- package/build/operations-v2/write/defects.js.map +1 -0
- package/build/operations-v2/write/environments.d.ts +2 -0
- package/build/operations-v2/write/environments.d.ts.map +1 -0
- package/build/operations-v2/write/environments.js +56 -0
- package/build/operations-v2/write/environments.js.map +1 -0
- package/build/operations-v2/write/milestones.d.ts +2 -0
- package/build/operations-v2/write/milestones.d.ts.map +1 -0
- package/build/operations-v2/write/milestones.js +56 -0
- package/build/operations-v2/write/milestones.js.map +1 -0
- package/build/operations-v2/write/plans.d.ts +2 -0
- package/build/operations-v2/write/plans.d.ts.map +1 -0
- package/build/operations-v2/write/plans.js +55 -0
- package/build/operations-v2/write/plans.js.map +1 -0
- package/build/operations-v2/write/results.d.ts +2 -0
- package/build/operations-v2/write/results.d.ts.map +1 -0
- package/build/operations-v2/write/results.js +72 -0
- package/build/operations-v2/write/results.js.map +1 -0
- package/build/operations-v2/write/runs.d.ts +2 -0
- package/build/operations-v2/write/runs.d.ts.map +1 -0
- package/build/operations-v2/write/runs.js +84 -0
- package/build/operations-v2/write/runs.js.map +1 -0
- package/build/operations-v2/write/shared-steps.d.ts +2 -0
- package/build/operations-v2/write/shared-steps.d.ts.map +1 -0
- package/build/operations-v2/write/shared-steps.js +60 -0
- package/build/operations-v2/write/shared-steps.js.map +1 -0
- package/build/operations-v2/write/suites.d.ts +2 -0
- package/build/operations-v2/write/suites.d.ts.map +1 -0
- package/build/operations-v2/write/suites.js +63 -0
- package/build/operations-v2/write/suites.js.map +1 -0
- package/build/prompts/index.d.ts +31 -0
- package/build/prompts/index.d.ts.map +1 -0
- package/build/prompts/index.js +229 -0
- package/build/prompts/index.js.map +1 -0
- package/build/transports/sse.d.ts.map +1 -1
- package/build/transports/sse.js +6 -0
- package/build/transports/sse.js.map +1 -1
- package/build/transports/streamableHttp.d.ts +6 -1
- package/build/transports/streamableHttp.d.ts.map +1 -1
- package/build/transports/streamableHttp.js +128 -16
- package/build/transports/streamableHttp.js.map +1 -1
- package/build/utils/auth-context.d.ts +8 -0
- package/build/utils/auth-context.d.ts.map +1 -1
- package/build/utils/auth-context.js +18 -0
- package/build/utils/auth-context.js.map +1 -1
- package/build/utils/case-enums.d.ts +5 -3
- package/build/utils/case-enums.d.ts.map +1 -1
- package/build/utils/case-enums.js +78 -59
- package/build/utils/case-enums.js.map +1 -1
- package/build/utils/output-schemas.d.ts +16 -0
- package/build/utils/output-schemas.d.ts.map +1 -0
- package/build/utils/output-schemas.js +82 -0
- package/build/utils/output-schemas.js.map +1 -0
- package/build/utils/registry.d.ts +42 -9
- package/build/utils/registry.d.ts.map +1 -1
- package/build/utils/registry.js +64 -11
- package/build/utils/registry.js.map +1 -1
- package/build/utils/response-shape.d.ts +23 -0
- package/build/utils/response-shape.d.ts.map +1 -0
- package/build/utils/response-shape.js +73 -0
- package/build/utils/response-shape.js.map +1 -0
- package/build/utils/rich-response.d.ts +58 -0
- package/build/utils/rich-response.d.ts.map +1 -0
- package/build/utils/rich-response.js +93 -0
- package/build/utils/rich-response.js.map +1 -0
- package/build/utils/server-context.d.ts +65 -0
- package/build/utils/server-context.d.ts.map +1 -0
- package/build/utils/server-context.js +67 -0
- package/build/utils/server-context.js.map +1 -0
- package/build/version.d.ts +1 -1
- package/build/version.js +1 -1
- package/docs/connect.md +81 -0
- package/docs/migration.md +351 -0
- package/docs/self-run.md +270 -0
- package/docs/tools.md +109 -0
- package/docs/troubleshooting.md +144 -0
- package/package.json +12 -3
- package/server.json +8 -2
- package/build/operations/attachments.d.ts +0 -8
- package/build/operations/attachments.d.ts.map +0 -1
- package/build/operations/attachments.js +0 -146
- package/build/operations/attachments.js.map +0 -1
- package/build/operations/authors.d.ts +0 -8
- package/build/operations/authors.d.ts.map +0 -1
- package/build/operations/authors.js +0 -70
- package/build/operations/authors.js.map +0 -1
- package/build/operations/cases.d.ts +0 -8
- package/build/operations/cases.d.ts.map +0 -1
- package/build/operations/cases.js +0 -338
- package/build/operations/cases.js.map +0 -1
- package/build/operations/configurations.d.ts +0 -10
- package/build/operations/configurations.d.ts.map +0 -1
- package/build/operations/configurations.js +0 -125
- package/build/operations/configurations.js.map +0 -1
- package/build/operations/custom-fields.d.ts +0 -8
- package/build/operations/custom-fields.d.ts.map +0 -1
- package/build/operations/custom-fields.js +0 -172
- package/build/operations/custom-fields.js.map +0 -1
- package/build/operations/defects.d.ts +0 -8
- package/build/operations/defects.d.ts.map +0 -1
- package/build/operations/defects.js +0 -256
- package/build/operations/defects.js.map +0 -1
- package/build/operations/environments.d.ts +0 -8
- package/build/operations/environments.d.ts.map +0 -1
- package/build/operations/environments.js +0 -154
- package/build/operations/environments.js.map +0 -1
- package/build/operations/milestones.d.ts +0 -8
- package/build/operations/milestones.d.ts.map +0 -1
- package/build/operations/milestones.js +0 -155
- package/build/operations/milestones.js.map +0 -1
- package/build/operations/plans.d.ts +0 -8
- package/build/operations/plans.d.ts.map +0 -1
- package/build/operations/plans.js +0 -158
- package/build/operations/plans.js.map +0 -1
- package/build/operations/projects.d.ts +0 -8
- package/build/operations/projects.d.ts.map +0 -1
- package/build/operations/projects.js +0 -192
- package/build/operations/projects.js.map +0 -1
- package/build/operations/results.d.ts +0 -8
- package/build/operations/results.d.ts.map +0 -1
- package/build/operations/results.js +0 -214
- package/build/operations/results.js.map +0 -1
- package/build/operations/runs.d.ts +0 -8
- package/build/operations/runs.d.ts.map +0 -1
- package/build/operations/runs.js +0 -224
- package/build/operations/runs.js.map +0 -1
- package/build/operations/search.d.ts.map +0 -1
- package/build/operations/search.js.map +0 -1
- package/build/operations/shared-parameters.d.ts +0 -10
- package/build/operations/shared-parameters.d.ts.map +0 -1
- package/build/operations/shared-parameters.js +0 -93
- package/build/operations/shared-parameters.js.map +0 -1
- package/build/operations/shared-steps.d.ts +0 -8
- package/build/operations/shared-steps.d.ts.map +0 -1
- package/build/operations/shared-steps.js +0 -160
- package/build/operations/shared-steps.js.map +0 -1
- package/build/operations/suites.d.ts +0 -8
- package/build/operations/suites.d.ts.map +0 -1
- package/build/operations/suites.js +0 -169
- package/build/operations/suites.js.map +0 -1
- package/build/operations/system-fields.d.ts +0 -10
- package/build/operations/system-fields.d.ts.map +0 -1
- package/build/operations/system-fields.js +0 -47
- package/build/operations/system-fields.js.map +0 -1
- package/build/operations/users.d.ts +0 -10
- package/build/operations/users.d.ts.map +0 -1
- package/build/operations/users.js +0 -78
- package/build/operations/users.js.map +0 -1
package/README.md
CHANGED
|
@@ -1,585 +1,119 @@
|
|
|
1
1
|
# Qase MCP Server
|
|
2
2
|
|
|
3
|
-
Official Model Context Protocol (MCP) server for [Qase Test Management Platform](https://qase.io).
|
|
3
|
+
Official [Model Context Protocol](https://modelcontextprotocol.io) (MCP) server for [Qase Test Management Platform](https://qase.io) — connect AI assistants to your test cases, runs, defects, and more.
|
|
4
4
|
|
|
5
5
|
[](https://www.npmjs.com/package/@qase/mcp-server)
|
|
6
|
-
[](https://www.npmjs.com/package/@qase/mcp-server)
|
|
7
6
|
[](https://opensource.org/licenses/MIT)
|
|
7
|
+
[](https://registry.modelcontextprotocol.io/v0/servers?search=io.qase%2Fmcp-server)
|
|
8
|
+
|
|
9
|
+
## Table of Contents
|
|
10
|
+
|
|
11
|
+
- [Overview](#overview)
|
|
12
|
+
- [Use Cases](#use-cases)
|
|
13
|
+
- [Quick Start](#quick-start)
|
|
14
|
+
- [Use the hosted Qase MCP (recommended)](#use-the-hosted-qase-mcp-recommended)
|
|
15
|
+
- [Run it yourself](#run-it-yourself)
|
|
16
|
+
- [Upgrading from v1](#upgrading-from-v1)
|
|
17
|
+
- [Tools](#tools)
|
|
18
|
+
- [Documentation](#documentation)
|
|
19
|
+
- [Contributing](#contributing)
|
|
20
|
+
- [License](#license)
|
|
21
|
+
- [Support](#support)
|
|
22
|
+
- [Links](#links)
|
|
8
23
|
|
|
9
24
|
## Overview
|
|
10
25
|
|
|
11
|
-
The Qase MCP Server
|
|
26
|
+
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.
|
|
12
27
|
|
|
13
|
-
|
|
28
|
+
**Features:**
|
|
14
29
|
|
|
15
|
-
-
|
|
16
|
-
-
|
|
17
|
-
-
|
|
18
|
-
-
|
|
30
|
+
- **29 task-oriented tools** (30 total, including `qase_discover_tools`) — consolidated from 83 v1 tools for lower token usage and better LLM accuracy
|
|
31
|
+
- **Composite tools** — multi-step workflows in a single call: CI reporting, defect triage, regression run setup
|
|
32
|
+
- **QQL support** — Qase Query Language for advanced searches across cases, runs, results, defects, and plans
|
|
33
|
+
- **Project context bootstrap** — one call returns full project structure (suites, milestones, environments, users, custom fields)
|
|
34
|
+
- **Tool discovery** — secondary tools stay hidden until needed, keeping the default tool list small
|
|
35
|
+
- **Hosted or self-run** — connect to `https://mcp.qase.io/mcp` with just your Qase login, or run the server locally with your own API token
|
|
36
|
+
- **Tenant-safe caching & HTTP resilience** — two-tier cache (in-memory + optional Redis), connection pooling, retry with backoff
|
|
37
|
+
- **Escape hatch** — direct REST API access for any endpoint via `qase_api`
|
|
19
38
|
|
|
20
|
-
|
|
39
|
+
## Use Cases
|
|
21
40
|
|
|
22
|
-
|
|
41
|
+
| Scenario | Example prompt | Tool |
|
|
42
|
+
| --- | --- | --- |
|
|
43
|
+
| Bootstrap project context | "Show me the structure of project DEMO — suites, milestones, environments" | `qase_project_context` |
|
|
44
|
+
| Create or update a test case | "Create a high-priority smoke test case in project DEMO titled 'Login with valid credentials'" | `qase_case_upsert` |
|
|
45
|
+
| Report CI results | "Report these CI results for project DEMO: case 1 passed, case 2 failed with 'timeout error'" | `qase_ci_report` |
|
|
46
|
+
| Triage a failed test | "Create a critical defect for the login timeout failure in run #42" | `qase_triage_defect` |
|
|
47
|
+
| Search with QQL | "Find all failed test results from the last 7 days in project DEMO" | `qql_search` |
|
|
23
48
|
|
|
24
|
-
|
|
25
|
-
- **Test Cases** - Create, update, and organize test cases
|
|
26
|
-
- **Test Suites** - Organize tests into hierarchical suites
|
|
27
|
-
- **Test Runs** - Execute test runs and track progress
|
|
28
|
-
- **Test Results** - Record and analyze test execution results
|
|
29
|
-
- **Test Plans** - Define and manage test plans
|
|
30
|
-
- **Defects** - Track and manage bugs
|
|
31
|
-
- **Milestones** - Organize work by sprints/releases
|
|
32
|
-
- **Environments** - Manage test environments
|
|
33
|
-
- **Shared Steps** - Create reusable test steps
|
|
34
|
-
- **Shared Parameters** - Define reusable test data
|
|
35
|
-
- **Attachments** - Upload and manage files
|
|
36
|
-
- **Custom Fields** - Define custom metadata
|
|
37
|
-
- **Configurations** - Manage test configurations
|
|
38
|
-
- **Users** - User management operations
|
|
39
|
-
- **QQL Search** - Advanced cross-project queries
|
|
49
|
+
See [Tools](#tools) and [docs/tools.md](docs/tools.md) for the full reference.
|
|
40
50
|
|
|
41
|
-
##
|
|
51
|
+
## Quick Start
|
|
42
52
|
|
|
43
|
-
###
|
|
53
|
+
### Use the hosted Qase MCP (recommended)
|
|
44
54
|
|
|
45
|
-
-
|
|
46
|
-
- Qase account with API token ([Get your token](https://app.qase.io/user/api/token))
|
|
55
|
+
No install, no API token — connect to the Qase-hosted server and sign in with your Qase account.
|
|
47
56
|
|
|
48
|
-
|
|
57
|
+
> **Note:** The hosted Qase MCP is available on the **Enterprise** plan in Qase. On other plans, [run the server yourself](#run-it-yourself) with your own API token.
|
|
49
58
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
### Option 2: Install from Source (Development)
|
|
55
|
-
|
|
56
|
-
```bash
|
|
57
|
-
# Clone the repository
|
|
58
|
-
git clone https://github.com/qase-tms/qase-mcp-server.git
|
|
59
|
-
cd qase-mcp-server
|
|
60
|
-
|
|
61
|
-
# Install dependencies
|
|
62
|
-
npm install
|
|
63
|
-
|
|
64
|
-
# Build the server
|
|
65
|
-
npm run build
|
|
66
|
-
```
|
|
67
|
-
|
|
68
|
-
## Configuration
|
|
69
|
-
|
|
70
|
-
### Environment Variables
|
|
71
|
-
|
|
72
|
-
Create a `.env` file or set environment variables:
|
|
73
|
-
|
|
74
|
-
```bash
|
|
75
|
-
# Required: Your Qase API token
|
|
76
|
-
QASE_API_TOKEN=your_api_token_here
|
|
77
|
-
|
|
78
|
-
# Optional: Custom API domain for enterprise customers
|
|
79
|
-
QASE_API_DOMAIN=api.qase.io
|
|
80
|
-
```
|
|
81
|
-
|
|
82
|
-
Get your API token from: https://app.qase.io/user/api/token
|
|
83
|
-
|
|
84
|
-
### Custom Domains (Enterprise)
|
|
85
|
-
|
|
86
|
-
If you're using Qase Enterprise with a custom domain:
|
|
87
|
-
|
|
88
|
-
```bash
|
|
89
|
-
QASE_API_DOMAIN=api.yourcompany.qase.io
|
|
90
|
-
```
|
|
91
|
-
|
|
92
|
-
## Integration
|
|
93
|
-
|
|
94
|
-
### Claude Desktop
|
|
95
|
-
|
|
96
|
-
Add to your Claude Desktop configuration file:
|
|
97
|
-
|
|
98
|
-
**macOS**: `~/Library/Application Support/Claude/claude_desktop_config.json`
|
|
99
|
-
**Windows**: `%APPDATA%/Claude/claude_desktop_config.json`
|
|
100
|
-
|
|
101
|
-
```json
|
|
102
|
-
{
|
|
103
|
-
"mcpServers": {
|
|
104
|
-
"qase": {
|
|
105
|
-
"command": "npx",
|
|
106
|
-
"args": ["-y", "@qase/mcp-server"],
|
|
107
|
-
"env": {
|
|
108
|
-
"QASE_API_TOKEN": "your_api_token_here"
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
```
|
|
114
|
-
|
|
115
|
-
Or, if installed from source:
|
|
116
|
-
|
|
117
|
-
```json
|
|
118
|
-
{
|
|
119
|
-
"mcpServers": {
|
|
120
|
-
"qase": {
|
|
121
|
-
"command": "node",
|
|
122
|
-
"args": ["/absolute/path/to/qase-mcp-server/build/index.js"],
|
|
123
|
-
"env": {
|
|
124
|
-
"QASE_API_TOKEN": "your_api_token_here"
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
```
|
|
59
|
+
- **Claude** — open **Settings → Connectors**, find **Qase Test Management**, click **Connect**.
|
|
60
|
+
- **Cursor** — add `{"mcpServers": {"qase": {"url": "https://mcp.qase.io/mcp"}}}` to `.cursor/mcp.json`.
|
|
61
|
+
- **Codex** — add the URL `https://mcp.qase.io/mcp` in **Settings → MCPs → Add server**, or configure `~/.codex/config.toml` for the CLI.
|
|
62
|
+
- **VS Code** — add `{"servers": {"qase": {"type": "http", "url": "https://mcp.qase.io/mcp"}}}` to `.vscode/mcp.json`, or run **MCP: Add Server**.
|
|
130
63
|
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
1. Open Cursor Settings
|
|
134
|
-
2. Navigate to MCP settings
|
|
135
|
-
3. Add the Qase MCP server:
|
|
136
|
-
|
|
137
|
-
```json
|
|
138
|
-
{
|
|
139
|
-
"mcpServers": {
|
|
140
|
-
"qase": {
|
|
141
|
-
"command": "npx",
|
|
142
|
-
"args": ["-y", "@qase/mcp-server"],
|
|
143
|
-
"env": {
|
|
144
|
-
"QASE_API_TOKEN": "your_api_token_here"
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
}
|
|
149
|
-
```
|
|
150
|
-
|
|
151
|
-
### Claude Code
|
|
152
|
-
|
|
153
|
-
You can add the Qase MCP server to Claude Code using the CLI command:
|
|
64
|
+
Full per-client steps, other clients, and the active-workspace model: **[docs/connect.md](docs/connect.md)**.
|
|
154
65
|
|
|
155
|
-
|
|
156
|
-
claude mcp add qase -- npx -y @qase/mcp-server
|
|
157
|
-
```
|
|
66
|
+
### Run it yourself
|
|
158
67
|
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
```bash
|
|
162
|
-
export QASE_API_TOKEN=your_api_token_here
|
|
163
|
-
```
|
|
164
|
-
|
|
165
|
-
Alternatively, add a `.mcp.json` file to your project root for automatic project-scoped configuration:
|
|
166
|
-
|
|
167
|
-
```json
|
|
168
|
-
{
|
|
169
|
-
"mcpServers": {
|
|
170
|
-
"qase": {
|
|
171
|
-
"command": "npx",
|
|
172
|
-
"args": ["-y", "@qase/mcp-server"],
|
|
173
|
-
"env": {
|
|
174
|
-
"QASE_API_TOKEN": "your_api_token_here"
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
}
|
|
178
|
-
}
|
|
179
|
-
```
|
|
180
|
-
|
|
181
|
-
You can also use the `--scope` flag to choose where the configuration is stored:
|
|
182
|
-
|
|
183
|
-
```bash
|
|
184
|
-
# Project-scoped (saved in .mcp.json)
|
|
185
|
-
claude mcp add --scope project qase -- npx -y @qase/mcp-server
|
|
186
|
-
|
|
187
|
-
# User-scoped (available in all projects)
|
|
188
|
-
claude mcp add --scope user qase -- npx -y @qase/mcp-server
|
|
189
|
-
```
|
|
190
|
-
|
|
191
|
-
### OpenAI Codex CLI
|
|
192
|
-
|
|
193
|
-
Add a `.codex/config.json` file to your project root:
|
|
194
|
-
|
|
195
|
-
```json
|
|
196
|
-
{
|
|
197
|
-
"mcpServers": {
|
|
198
|
-
"qase": {
|
|
199
|
-
"command": "npx",
|
|
200
|
-
"args": ["-y", "@qase/mcp-server"],
|
|
201
|
-
"env": {
|
|
202
|
-
"QASE_API_TOKEN": "your_api_token_here"
|
|
203
|
-
}
|
|
204
|
-
}
|
|
205
|
-
}
|
|
206
|
-
}
|
|
207
|
-
```
|
|
208
|
-
|
|
209
|
-
Set the required environment variable before running Codex:
|
|
68
|
+
Install the package and provide your own API token:
|
|
210
69
|
|
|
211
70
|
```bash
|
|
71
|
+
npm install -g @qase/mcp-server
|
|
212
72
|
export QASE_API_TOKEN=your_api_token_here
|
|
213
73
|
```
|
|
214
74
|
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
Add an `opencode.json` file to your project root (or `~/.config/opencode/opencode.json` for global configuration):
|
|
218
|
-
|
|
219
|
-
```json
|
|
220
|
-
{
|
|
221
|
-
"mcp": {
|
|
222
|
-
"qase": {
|
|
223
|
-
"type": "local",
|
|
224
|
-
"command": ["npx", "-y", "@qase/mcp-server"],
|
|
225
|
-
"environment": {
|
|
226
|
-
"QASE_API_TOKEN": "your_api_token_here"
|
|
227
|
-
}
|
|
228
|
-
}
|
|
229
|
-
}
|
|
230
|
-
}
|
|
231
|
-
```
|
|
232
|
-
|
|
233
|
-
> **Note:** OpenCode uses a different format from other MCP clients — the command and args are combined into a single `command` array, env vars go under `environment`, and servers are nested under `mcp` (not `mcpServers`).
|
|
234
|
-
|
|
235
|
-
## Usage Examples
|
|
75
|
+
Then point your MCP client's stdio config at the `@qase/mcp-server` binary. Full install options, client configs (Claude Desktop, Cursor, Claude Code, Codex, OpenCode), environment variables, and transports (stdio/SSE/streamable-HTTP): **[docs/self-run.md](docs/self-run.md)**.
|
|
236
76
|
|
|
237
|
-
|
|
77
|
+
## Upgrading from v1
|
|
238
78
|
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
```
|
|
242
|
-
Can you list all my Qase projects?
|
|
243
|
-
```
|
|
79
|
+
v2 consolidates 83 v1 tools into **29 task-oriented tools** (30 total, including a discovery tool). Tool names and response shapes have changed. See **[MIGRATION.md](MIGRATION.md)** for the complete tool mapping table, response format changes, and before/after examples.
|
|
244
80
|
|
|
245
|
-
|
|
81
|
+
## Tools
|
|
246
82
|
|
|
247
|
-
|
|
248
|
-
Create a test case in project DEMO titled "Login with valid credentials" with steps for entering username, password, and clicking login
|
|
249
|
-
```
|
|
83
|
+
30 tools across 6 groups (29 task-oriented tools plus `qase_discover_tools` for on-demand activation of secondary tools):
|
|
250
84
|
|
|
251
|
-
|
|
85
|
+
| Group | Count | Description |
|
|
86
|
+
| --- | --- | --- |
|
|
87
|
+
| Read | 2 | Fetch any entity by type/ID, or bootstrap full project context in one call |
|
|
88
|
+
| QQL | 2 | Search across cases, runs, results, defects, and plans with Qase Query Language |
|
|
89
|
+
| Write | 21 | Create, update, and delete cases, runs, results, defects, suites, milestones, plans, shared steps, environments, and attachments |
|
|
90
|
+
| Composite | 3 | Multi-step workflows in one call: CI reporting, defect triage, regression run setup |
|
|
91
|
+
| Escape hatch | 1 | Direct REST API access for any endpoint not covered by the tools above |
|
|
92
|
+
| Meta | 1 | `qase_discover_tools` — find and activate secondary tools on demand |
|
|
252
93
|
|
|
253
|
-
|
|
254
|
-
Find all failed test results from the last 7 days in project DEMO
|
|
255
|
-
```
|
|
94
|
+
Full tool-by-tool reference with parameters and the discovery model: **[docs/tools.md](docs/tools.md)**.
|
|
256
95
|
|
|
257
|
-
|
|
96
|
+
## Documentation
|
|
258
97
|
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
The server will execute:
|
|
266
|
-
```
|
|
267
|
-
entity = "case" and project = "DEMO" and isFlaky = true and automation = "Not automated"
|
|
268
|
-
```
|
|
269
|
-
|
|
270
|
-
#### Find Open Blocker Defects
|
|
271
|
-
|
|
272
|
-
```
|
|
273
|
-
Show me all open blocker defects in project DEMO
|
|
274
|
-
```
|
|
275
|
-
|
|
276
|
-
#### Find Tests by Author
|
|
277
|
-
|
|
278
|
-
```
|
|
279
|
-
Find all test cases created by john@example.com in the last month
|
|
280
|
-
```
|
|
281
|
-
|
|
282
|
-
### Working with Test Runs
|
|
283
|
-
|
|
284
|
-
#### Create and Execute a Test Run
|
|
285
|
-
|
|
286
|
-
```
|
|
287
|
-
Create a test run in project DEMO called "Sprint 24 Regression" including all test cases from the "Authentication" suite, then add a passed result for case ID 123
|
|
288
|
-
```
|
|
289
|
-
|
|
290
|
-
## Available Tools
|
|
291
|
-
|
|
292
|
-
### Projects (6 tools)
|
|
293
|
-
- `list_projects` - Get all projects
|
|
294
|
-
- `get_project` - Get project details
|
|
295
|
-
- `create_project` - Create new project
|
|
296
|
-
- `delete_project` - Delete project
|
|
297
|
-
- `grant_project_access` - Grant user/group access
|
|
298
|
-
- `revoke_project_access` - Revoke access
|
|
299
|
-
|
|
300
|
-
### Test Cases (8 tools)
|
|
301
|
-
- `list_cases` - List all test cases
|
|
302
|
-
- `get_case` - Get test case details
|
|
303
|
-
- `create_case` - Create new test case
|
|
304
|
-
- `update_case` - Update test case
|
|
305
|
-
- `delete_case` - Delete test case
|
|
306
|
-
- `bulk_create_cases` - Create multiple cases
|
|
307
|
-
- `attach_external_issue` - Link external issue (Jira, etc.)
|
|
308
|
-
- `detach_external_issue` - Unlink external issue
|
|
309
|
-
|
|
310
|
-
### Case enum values
|
|
311
|
-
|
|
312
|
-
`create_case`, `bulk_create_cases`, and `update_case` automatically normalize friendly labels to whatever numeric IDs your workspace currently configures for the built-in system fields (`priority`, `severity`, `type`, `behavior`, `status`, `layer`). The server fetches `/v1/system_field` and caches the available options so you can keep using the titles or slugs you see in Qase while still satisfying the API’s numeric requirements.
|
|
313
|
-
|
|
314
|
-
The normalization does not touch `automation`/`is_flaky`, so pass those values as the API expects (strings or booleans).
|
|
315
|
-
The server keeps any existing label in place when it does not match a known enum so invalid values still bubble up as errors from Qase.
|
|
316
|
-
|
|
317
|
-
### Test Runs (7 tools)
|
|
318
|
-
- `list_runs` - List test runs
|
|
319
|
-
- `get_run` - Get run details
|
|
320
|
-
- `create_run` - Create new run
|
|
321
|
-
- `delete_run` - Delete run
|
|
322
|
-
- `complete_run` - Mark run as complete
|
|
323
|
-
- `get_run_public_link` - Get public link
|
|
324
|
-
- `delete_run_public_link` - Remove public link
|
|
325
|
-
|
|
326
|
-
### Test Results (6 tools)
|
|
327
|
-
- `list_results` - List test results
|
|
328
|
-
- `get_result` - Get result details
|
|
329
|
-
- `create_result` - Create test result
|
|
330
|
-
- `create_results_bulk` - Create multiple results
|
|
331
|
-
- `update_result` - Update result
|
|
332
|
-
- `delete_result` - Delete result
|
|
333
|
-
|
|
334
|
-
### Test Plans (5 tools)
|
|
335
|
-
- `list_plans` - List test plans
|
|
336
|
-
- `get_plan` - Get plan details
|
|
337
|
-
- `create_plan` - Create test plan
|
|
338
|
-
- `update_plan` - Update test plan
|
|
339
|
-
- `delete_plan` - Delete test plan
|
|
340
|
-
|
|
341
|
-
### Suites (5 tools)
|
|
342
|
-
- `list_suites` - List suites
|
|
343
|
-
- `get_suite` - Get suite details
|
|
344
|
-
- `create_suite` - Create suite
|
|
345
|
-
- `update_suite` - Update suite
|
|
346
|
-
- `delete_suite` - Delete suite
|
|
347
|
-
|
|
348
|
-
### Defects (7 tools)
|
|
349
|
-
- `list_defects` - List defects
|
|
350
|
-
- `get_defect` - Get defect details
|
|
351
|
-
- `create_defect` - Create defect
|
|
352
|
-
- `update_defect` - Update defect
|
|
353
|
-
- `delete_defect` - Delete defect
|
|
354
|
-
- `resolve_defect` - Mark as resolved
|
|
355
|
-
- `update_defect_status` - Update status
|
|
356
|
-
|
|
357
|
-
### Milestones (5 tools)
|
|
358
|
-
- `list_milestones` - List milestones
|
|
359
|
-
- `get_milestone` - Get milestone details
|
|
360
|
-
- `create_milestone` - Create milestone
|
|
361
|
-
- `update_milestone` - Update milestone
|
|
362
|
-
- `delete_milestone` - Delete milestone
|
|
363
|
-
|
|
364
|
-
### Environments (5 tools)
|
|
365
|
-
- `list_environments` - List environments
|
|
366
|
-
- `get_environment` - Get environment details
|
|
367
|
-
- `create_environment` - Create environment
|
|
368
|
-
- `update_environment` - Update environment
|
|
369
|
-
- `delete_environment` - Delete environment
|
|
370
|
-
|
|
371
|
-
### Shared Steps (5 tools)
|
|
372
|
-
- `list_shared_steps` - List shared steps
|
|
373
|
-
- `get_shared_step` - Get shared step details
|
|
374
|
-
- `create_shared_step` - Create shared step
|
|
375
|
-
- `update_shared_step` - Update shared step
|
|
376
|
-
- `delete_shared_step` - Delete shared step
|
|
377
|
-
|
|
378
|
-
### Shared Parameters (5 tools)
|
|
379
|
-
- `list_shared_parameters` - List parameters
|
|
380
|
-
- `get_shared_parameter` - Get parameter details
|
|
381
|
-
- `create_shared_parameter` - Create parameter
|
|
382
|
-
- `update_shared_parameter` - Update parameter
|
|
383
|
-
- `delete_shared_parameter` - Delete parameter
|
|
384
|
-
|
|
385
|
-
### Supporting Entities
|
|
386
|
-
- **Attachments** (4 tools) - File management
|
|
387
|
-
- **Authors** (2 tools) - Author information
|
|
388
|
-
- **Custom Fields** (5 tools) - Custom field management
|
|
389
|
-
- **System Fields** (1 tool) - System field info
|
|
390
|
-
- **Configurations** (3 tools) - Configuration management
|
|
391
|
-
- **Users** (2 tools) - User management
|
|
392
|
-
|
|
393
|
-
### QQL Search (2 tools)
|
|
394
|
-
- `qql_search` - Execute QQL query
|
|
395
|
-
- `qql_help` - Get QQL syntax help
|
|
396
|
-
|
|
397
|
-
**Total: 83 tools available**
|
|
398
|
-
|
|
399
|
-
## Development
|
|
400
|
-
|
|
401
|
-
### Building from Source
|
|
402
|
-
|
|
403
|
-
```bash
|
|
404
|
-
npm run build
|
|
405
|
-
```
|
|
406
|
-
|
|
407
|
-
### Running Tests
|
|
408
|
-
|
|
409
|
-
```bash
|
|
410
|
-
# Run all tests
|
|
411
|
-
npm test
|
|
412
|
-
|
|
413
|
-
# Run with coverage
|
|
414
|
-
npm run test:coverage
|
|
415
|
-
|
|
416
|
-
# Watch mode
|
|
417
|
-
npm run test:watch
|
|
418
|
-
```
|
|
419
|
-
|
|
420
|
-
### Linting
|
|
421
|
-
|
|
422
|
-
```bash
|
|
423
|
-
# Check for issues
|
|
424
|
-
npm run lint
|
|
425
|
-
|
|
426
|
-
# Auto-fix issues
|
|
427
|
-
npm run lint -- --fix
|
|
428
|
-
```
|
|
429
|
-
|
|
430
|
-
### Debugging
|
|
431
|
-
|
|
432
|
-
Use the MCP Inspector for interactive debugging:
|
|
433
|
-
|
|
434
|
-
```bash
|
|
435
|
-
npm run inspector
|
|
436
|
-
```
|
|
437
|
-
|
|
438
|
-
Set your API token when prompted, then interact with tools in the inspector UI.
|
|
439
|
-
|
|
440
|
-
### Transport Options
|
|
441
|
-
|
|
442
|
-
The server supports multiple transport types for different use cases:
|
|
443
|
-
|
|
444
|
-
#### Stdio Transport (Default)
|
|
445
|
-
|
|
446
|
-
Used by MCP clients like Claude Desktop and Cursor:
|
|
447
|
-
|
|
448
|
-
```bash
|
|
449
|
-
npm start
|
|
450
|
-
# or
|
|
451
|
-
npm run start:stdio
|
|
452
|
-
```
|
|
453
|
-
|
|
454
|
-
#### SSE Transport
|
|
455
|
-
|
|
456
|
-
Server-Sent Events for web-based clients:
|
|
457
|
-
|
|
458
|
-
```bash
|
|
459
|
-
npm run start:sse
|
|
460
|
-
# Server runs on http://localhost:3000/sse
|
|
461
|
-
# Health check: http://localhost:3000/health
|
|
462
|
-
```
|
|
463
|
-
|
|
464
|
-
#### Streamable HTTP Transport
|
|
465
|
-
|
|
466
|
-
Full HTTP-based transport with session management:
|
|
467
|
-
|
|
468
|
-
```bash
|
|
469
|
-
npm run start:http
|
|
470
|
-
# Server runs on http://localhost:3000/mcp
|
|
471
|
-
# Health check: http://localhost:3000/health
|
|
472
|
-
```
|
|
473
|
-
|
|
474
|
-
#### Custom Configuration
|
|
475
|
-
|
|
476
|
-
```bash
|
|
477
|
-
# Custom port and host
|
|
478
|
-
node build/index.js --transport streamable-http --port 8080 --host 0.0.0.0
|
|
479
|
-
|
|
480
|
-
# Available options:
|
|
481
|
-
# --transport: stdio | sse | streamable-http (default: stdio)
|
|
482
|
-
# --port: Port number (default: 3000)
|
|
483
|
-
# --host: Host address (default: 0.0.0.0)
|
|
484
|
-
```
|
|
485
|
-
|
|
486
|
-
## Troubleshooting
|
|
487
|
-
|
|
488
|
-
### Authentication Errors
|
|
489
|
-
|
|
490
|
-
**Error**: `Authentication failed: Please check your QASE_API_TOKEN`
|
|
491
|
-
|
|
492
|
-
**Solution**:
|
|
493
|
-
1. Verify your API token is correct: https://app.qase.io/user/api/token
|
|
494
|
-
2. Ensure the token is set in your environment or config file
|
|
495
|
-
3. Check for extra spaces or quotes in the token value
|
|
496
|
-
|
|
497
|
-
### Connection Errors
|
|
498
|
-
|
|
499
|
-
**Error**: `Network error` or `ECONNREFUSED`
|
|
500
|
-
|
|
501
|
-
**Solution**:
|
|
502
|
-
1. Check your internet connection
|
|
503
|
-
2. Verify the API domain is correct (especially for enterprise customers)
|
|
504
|
-
3. Check if Qase is accessible: https://api.qase.io/v1/
|
|
505
|
-
|
|
506
|
-
### SSL Certificate Errors
|
|
507
|
-
|
|
508
|
-
**Error**: `unable to get local issuer certificate`
|
|
509
|
-
|
|
510
|
-
This error typically occurs in corporate environments with:
|
|
511
|
-
- SSL-intercepting proxy servers
|
|
512
|
-
- Self-signed certificates
|
|
513
|
-
- Internal Certificate Authorities (CA)
|
|
514
|
-
|
|
515
|
-
**Solution**: Add the `NODE_EXTRA_CA_CERTS` environment variable pointing to your CA certificate file:
|
|
516
|
-
|
|
517
|
-
```json
|
|
518
|
-
{
|
|
519
|
-
"mcpServers": {
|
|
520
|
-
"qase": {
|
|
521
|
-
"command": "npx",
|
|
522
|
-
"args": ["-y", "@qase/mcp-server"],
|
|
523
|
-
"env": {
|
|
524
|
-
"QASE_API_TOKEN": "your_api_token_here",
|
|
525
|
-
"NODE_EXTRA_CA_CERTS": "/path/to/your/certificate.pem"
|
|
526
|
-
}
|
|
527
|
-
}
|
|
528
|
-
}
|
|
529
|
-
}
|
|
530
|
-
```
|
|
531
|
-
|
|
532
|
-
To find your certificate:
|
|
533
|
-
- **Corporate environments**: Contact your IT department for the CA certificate
|
|
534
|
-
- **macOS**: Export from Keychain Access (System Roots → your CA → Export as .pem)
|
|
535
|
-
- **Windows**: Export from Certificate Manager (certmgr.msc)
|
|
536
|
-
- **Linux**: Usually in `/etc/ssl/certs/` or `/etc/pki/tls/certs/`
|
|
537
|
-
|
|
538
|
-
### Custom Domain Issues
|
|
539
|
-
|
|
540
|
-
**Error**: `Invalid domain` or connection errors with custom domain
|
|
541
|
-
|
|
542
|
-
**Solution**:
|
|
543
|
-
1. Ensure `QASE_API_DOMAIN` is set to just the domain (e.g., `api.company.qase.io`)
|
|
544
|
-
2. Don't include `https://` or `/v1` in the domain
|
|
545
|
-
3. Verify with your Qase administrator
|
|
546
|
-
|
|
547
|
-
### No Tools Showing in MCP Client
|
|
548
|
-
|
|
549
|
-
**Error**: MCP client shows "no tools, prompts or resources" or 0 tools available
|
|
550
|
-
|
|
551
|
-
**Solution**:
|
|
552
|
-
1. Verify your MCP configuration has the correct command and arguments
|
|
553
|
-
2. Check that `QASE_API_TOKEN` is set in the `env` section
|
|
554
|
-
3. Restart your MCP client completely (close and reopen)
|
|
555
|
-
4. Check the MCP client logs for connection errors
|
|
556
|
-
5. Verify the server is built: `npm run build`
|
|
557
|
-
|
|
558
|
-
### Tool Not Found
|
|
559
|
-
|
|
560
|
-
**Error**: `Unknown tool: tool_name`
|
|
561
|
-
|
|
562
|
-
**Solution**:
|
|
563
|
-
1. Ensure you're using the latest version: `npm update -g @qase/mcp-server`
|
|
564
|
-
2. Check the tool name spelling matches the documentation
|
|
565
|
-
3. Restart your MCP client after updating
|
|
98
|
+
- **[docs/connect.md](docs/connect.md)** — connect to the hosted Qase MCP (Claude, Cursor, Codex, other clients)
|
|
99
|
+
- **[docs/self-run.md](docs/self-run.md)** — install and run the server yourself (config, clients, transports)
|
|
100
|
+
- **[docs/tools.md](docs/tools.md)** — full tool reference, groups, and the discovery model
|
|
101
|
+
- **[docs/troubleshooting.md](docs/troubleshooting.md)** — auth, OAuth/connector, and SSL issues
|
|
102
|
+
- **[MIGRATION.md](MIGRATION.md)** — v1 → v2 tool mapping and migration guide
|
|
566
103
|
|
|
567
104
|
## Contributing
|
|
568
105
|
|
|
569
|
-
Contributions are welcome!
|
|
106
|
+
Contributions are welcome! See [CONTRIBUTING.md](CONTRIBUTING.md) for development setup, testing, and linting guidelines.
|
|
570
107
|
|
|
571
|
-
|
|
108
|
+
## License
|
|
572
109
|
|
|
573
|
-
|
|
574
|
-
- Add unit tests for new features
|
|
575
|
-
- Update documentation for new tools
|
|
576
|
-
- Ensure all tests pass: `npm test`
|
|
577
|
-
- Ensure linting passes: `npm run lint`
|
|
578
|
-
- Maintain code coverage above 70%
|
|
110
|
+
MIT License — see [LICENSE](LICENSE) for details.
|
|
579
111
|
|
|
580
|
-
##
|
|
112
|
+
## Support
|
|
581
113
|
|
|
582
|
-
|
|
114
|
+
- **Documentation**: https://docs.qase.io/en/articles/14984302-qase-mcp-server
|
|
115
|
+
- **Email**: support@qase.io
|
|
116
|
+
- **GitHub Issues**: https://github.com/qase-tms/qase-mcp-server/issues
|
|
583
117
|
|
|
584
118
|
## Links
|
|
585
119
|
|
|
@@ -588,13 +122,3 @@ MIT License - see [LICENSE](LICENSE) file for details
|
|
|
588
122
|
- **API Documentation**: https://developers.qase.io
|
|
589
123
|
- **MCP Protocol**: https://modelcontextprotocol.io
|
|
590
124
|
- **Issue Tracker**: https://github.com/qase-tms/qase-mcp-server/issues
|
|
591
|
-
|
|
592
|
-
## Support
|
|
593
|
-
|
|
594
|
-
- **Documentation**: https://help.qase.io
|
|
595
|
-
- **Email**: support@qase.io
|
|
596
|
-
- **GitHub Issues**: https://github.com/qase-tms/qase-mcp-server/issues
|
|
597
|
-
|
|
598
|
-
---
|
|
599
|
-
|
|
600
|
-
Made with ❤️ by [Qase](https://qase.io)
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { AsyncLocalStorage } from 'async_hooks';
|
|
2
|
+
/**
|
|
3
|
+
* Per-request storage for the OAuth `/authorize` request's `redirect_uri`.
|
|
4
|
+
*
|
|
5
|
+
* The proxy is transparent: it echoes the incoming redirect_uri back through
|
|
6
|
+
* `getClient` so the MCP SDK's local redirect_uri check passes, then forwards
|
|
7
|
+
* the request to auth.qase.io, which is the authoritative validator of a
|
|
8
|
+
* client's registered redirect URIs. Empty/undefined when no redirect_uri is
|
|
9
|
+
* present on the request.
|
|
10
|
+
*/
|
|
11
|
+
export declare const authorizeRedirectUriStorage: AsyncLocalStorage<string | undefined>;
|
|
12
|
+
//# sourceMappingURL=client-context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client-context.d.ts","sourceRoot":"","sources":["../../src/auth/client-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEhD;;;;;;;;GAQG;AACH,eAAO,MAAM,2BAA2B,uCAA8C,CAAC"}
|