@qase/mcp-server 2.2.1 → 2.2.3

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 CHANGED
@@ -5,6 +5,29 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [2.2.3]
9
+
10
+ ### Fixed
11
+
12
+ - **`qql_help` claimed `result.status` has no `"untested"` value — it does.** `entities.result` and `enumValues.resultStatus` said flatly that no `"Untested"` status exists on the result entity, which was true when written but was made false by the untested-results feature that shipped weeks later. `untested` is a built-in status (ID 0) present in every workspace, matched case-insensitively like every other value here. It is excluded by default to preserve old query behavior.
13
+ - **The exclusion rule is now stated precisely.** Any condition on `status` lifts the default exclusion, but untested results only appear if the condition actually matches them: `status != "passed"` and `status is not empty` return them, while `status = "failed"` and `status in ["passed", "failed"]` do not, even though both are conditions on `status`. Saying "any condition brings them back" would have been the same class of falsehood as the claim it replaced — a model would add pointless `status != "untested"` guards to the ordinary `status = "failed"` queries this file recommends elsewhere.
14
+ - **`enumValues.resultStatus` listed four of the nine built-in statuses.** `blocked`, `retest`, `deleted` and `in_progress` were missing, so a model had no way to reach them — the same gap that hid `untested`. A workspace can also define statuses of its own, which no static list can cover, so both this section and the ID map now point at `GET /v1/system_field` (`result_status`, whose options carry `read_only: true` for the built-ins) for the authoritative set.
15
+ - **The aggregate status ID map stopped at four entries and had no way to signal its own limits.** It now covers all nine built-in IDs (0 = Untested through 8 = Invalid) and states that any higher ID is a workspace-defined status whose meaning must be read from `system_field` rather than guessed from a table.
16
+ - **`GROUP BY status` returned rows nothing could tell apart.** The documented example `SELECT (COUNT(id)) ... GROUP BY status` comes back as bare `{count_id}` rows with no status key, because a grouped field is only returned when it is also in `SELECT`. The example now reads `SELECT (status, COUNT(id))`, and the pitfall is spelled out.
17
+ - **Untested results carry no execution data**, which `entities.result` did not mention: `comment`, `stacktrace`, `steps` and `end_time` come back empty and `timeSpent` is 0. `timeSpent` aggregates skip them, but `COUNT` does not — so the same query can report more rows without moving its averages.
18
+
19
+ - **The attachment tests could fail the release build on an unrelated suite.** A path input becomes `createReadStream(path)`, which opens the file on a later tick; tests that only assert on `.path` never read the stream, so the open landed after `afterAll` had removed the scratch directory. With no `error` listener on the stream, that `ENOENT` surfaced as an unhandled failure attributed to whichever suite the worker was running by then — `integration-headers.test.ts`, which touches no files — and the open handle kept the worker alive past the end of the run. It only reproduced when Jest had few workers, which is exactly the CI runner, and it blocked the 2.2.3 publish job three runs in a row.
20
+
21
+ ## [2.2.2]
22
+
23
+ ### Added
24
+
25
+ - **Integration marker** — a product built on top of this server (a plugin, an agent, a wrapper CLI) can identify itself, and the server forwards that identity to the Qase API as `X-MCP-Integration-Name` / `X-MCP-Integration-Version`. This is a third identity axis, independent of the two already on the wire: the `User-Agent` says which deployment of the server is running (`qase-mcp` vs `qase-mcp-hosted`), `X-MCP-Client-*` says which AI host is connected — neither can carry it, since the same integration runs on any host, on either deployment. Set `QASE_MCP_INTEGRATION=<name>/<version>` (version optional); over HTTP transports the marker can instead travel per request, as an `X-Qase-Integration` header or `?integration=` on the MCP endpoint (captured when the session is created, then remembered for it). Precedence: request header → session value → env var. The name must be on the allowlist in `src/utils/integration-marker.ts`, which bounds the cardinality of the analytics dimension — anything unlisted, malformed or oversized is dropped silently and the API call still succeeds. Nothing is sent when no marker is supplied, so existing setups are byte-for-byte unaffected on the wire. For integration authors only; see [docs/self-run.md](docs/self-run.md#integration-marker-for-integration-authors).
26
+
27
+ ### Security
28
+
29
+ - Raised the dev-dependency `overrides` to clear all open Dependabot alerts: `js-yaml` to 3.15.1 / 4.3.1 (quadratic-CPU DoS in merge-key and `!!omap` handling), `@babel/core` to ^7.29.6 (arbitrary file read via a `sourceMappingURL` comment), and `yaml` to ^2.8.3 (stack overflow on deeply nested collections). All four are development-only and reached the tree through eslint, jest and lint-staged — `npm audit --omit=dev` already reported zero, so nothing shipped to consumers of the package was affected. Note that the previous `js-yaml@3` override pinned 3.14.2, which was itself vulnerable.
30
+
8
31
  ## [2.2.1]
9
32
 
10
33
  ### Fixed
package/README.md CHANGED
@@ -13,6 +13,7 @@ Official [Model Context Protocol](https://modelcontextprotocol.io) (MCP) server
13
13
  - [Quick Start](#quick-start)
14
14
  - [Use the hosted Qase MCP (recommended)](#use-the-hosted-qase-mcp-recommended)
15
15
  - [Run it yourself](#run-it-yourself)
16
+ - [Building on top of this server](#building-on-top-of-this-server)
16
17
  - [Upgrading from v1](#upgrading-from-v1)
17
18
  - [Tools](#tools)
18
19
  - [Documentation](#documentation)
@@ -55,7 +56,7 @@ See [Tools](#tools) and [docs/tools.md](docs/tools.md) for the full reference.
55
56
 
56
57
  No install, no API token — connect to the Qase-hosted server and sign in with your Qase account.
57
58
 
58
- > **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.
59
+ > **Note:** The hosted Qase MCP requires the **Enterprise** plan *and* a workspace on Qase's main cloud (`qase.io`). On another plan, or on a dedicated instance, [run the server yourself](#run-it-yourself) with your own API token — that works everywhere.
59
60
 
60
61
  - **Claude** — open **Settings → Connectors**, find **Qase Test Management**, click **Connect**.
61
62
  - **Cursor** — add `{"mcpServers": {"qase": {"url": "https://mcp.qase.io/mcp"}}}` to `.cursor/mcp.json`.
@@ -75,6 +76,18 @@ export QASE_API_TOKEN=your_api_token_here
75
76
 
76
77
  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)**.
77
78
 
79
+ ## Building on top of this server
80
+
81
+ For **integration authors** only — if you use the server directly, nothing here applies to you.
82
+
83
+ 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:
84
+
85
+ ```bash
86
+ QASE_MCP_INTEGRATION=quality-supervisor/1.4.0 # <name>/<version>, version optional
87
+ ```
88
+
89
+ The name must be on the allowlist in [`src/utils/integration-marker.ts`](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/self-run.md](docs/self-run.md#integration-marker-for-integration-authors)**.
90
+
78
91
  ## Upgrading from v1
79
92
 
80
93
  v2 consolidated 83 v1 tools into **29 task-oriented tools** (30 total, including a discovery tool), and has since grown to 36 (37 total). Tool names and response shapes have changed. See **[docs/migration.md](docs/migration.md)** for the complete tool mapping table, response format changes, and before/after examples.
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAEL,WAAW,EACX,QAAQ,EACR,SAAS,EACT,OAAO,EACP,UAAU,EACV,QAAQ,EACR,aAAa,EACb,UAAU,EACV,eAAe,EACf,cAAc,EACd,cAAc,EACd,UAAU,EACV,eAAe,EACf,SAAS,EACT,iBAAiB,EACjB,eAAe,EACf,QAAQ,EACR,mBAAmB,EACnB,UAAU,EACX,MAAM,iBAAiB,CAAC;AACzB,OAAc,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,OAAO,CAAC;AAQjE;;;;GAIG;AACH,wBAAgB,YAAY,IAAI,MAAM,CAGrC;AAED;;GAEG;AACH,UAAU,eAAe;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,cAAM,aAAa;IACjB,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC;IAC/B,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAC3B,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC;IACzB,QAAQ,CAAC,UAAU,EAAE,aAAa,CAAC;IACnC,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC;IAC7B,QAAQ,CAAC,WAAW,EAAE,eAAe,CAAC;IACtC,QAAQ,CAAC,WAAW,EAAE,cAAc,CAAC;IACrC,QAAQ,CAAC,WAAW,EAAE,cAAc,CAAC;IACrC,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC;IAC7B,QAAQ,CAAC,YAAY,EAAE,eAAe,CAAC;IACvC,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAC3B,QAAQ,CAAC,cAAc,EAAE,iBAAiB,CAAC;IAC3C,QAAQ,CAAC,YAAY,EAAE,eAAe,CAAC;IACvC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC;IACzB,QAAQ,CAAC,gBAAgB,EAAE,mBAAmB,CAAC;IAC/C,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC;IAE7B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgB;gBAElC,MAAM,EAAE,eAAe,EAAE,aAAa,CAAC,EAAE,aAAa;IA6ElE;;OAEG;IACG,OAAO,CAAC,CAAC,GAAG,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,kBAAuB,GAAG,OAAO,CAAC,CAAC,CAAC;CAoBnF;AA8CD;;;;;;;;;;GAUG;AACH,wBAAgB,YAAY,IAAI,aAAa,CAY5C;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,IAAI,IAAI,CAE1C;AAED,OAAO,EAAE,aAAa,EAAE,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAEL,WAAW,EACX,QAAQ,EACR,SAAS,EACT,OAAO,EACP,UAAU,EACV,QAAQ,EACR,aAAa,EACb,UAAU,EACV,eAAe,EACf,cAAc,EACd,cAAc,EACd,UAAU,EACV,eAAe,EACf,SAAS,EACT,iBAAiB,EACjB,eAAe,EACf,QAAQ,EACR,mBAAmB,EACnB,UAAU,EACX,MAAM,iBAAiB,CAAC;AACzB,OAAc,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,OAAO,CAAC;AAUjE;;;;GAIG;AACH,wBAAgB,YAAY,IAAI,MAAM,CAGrC;AAED;;GAEG;AACH,UAAU,eAAe;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,cAAM,aAAa;IACjB,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC;IAC/B,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAC3B,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC;IACzB,QAAQ,CAAC,UAAU,EAAE,aAAa,CAAC;IACnC,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC;IAC7B,QAAQ,CAAC,WAAW,EAAE,eAAe,CAAC;IACtC,QAAQ,CAAC,WAAW,EAAE,cAAc,CAAC;IACrC,QAAQ,CAAC,WAAW,EAAE,cAAc,CAAC;IACrC,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC;IAC7B,QAAQ,CAAC,YAAY,EAAE,eAAe,CAAC;IACvC,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAC3B,QAAQ,CAAC,cAAc,EAAE,iBAAiB,CAAC;IAC3C,QAAQ,CAAC,YAAY,EAAE,eAAe,CAAC;IACvC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC;IACzB,QAAQ,CAAC,gBAAgB,EAAE,mBAAmB,CAAC;IAC/C,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC;IAE7B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgB;gBAElC,MAAM,EAAE,eAAe,EAAE,aAAa,CAAC,EAAE,aAAa;IAgGlE;;OAEG;IACG,OAAO,CAAC,CAAC,GAAG,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,kBAAuB,GAAG,OAAO,CAAC,CAAC,CAAC;CAoBnF;AA8CD;;;;;;;;;;GAUG;AACH,wBAAgB,YAAY,IAAI,aAAa,CAY5C;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,IAAI,IAAI,CAE1C;AAED,OAAO,EAAE,aAAa,EAAE,CAAC"}
@@ -14,6 +14,8 @@ import { isJwt } from '../auth/token-type.js';
14
14
  import FormData from 'form-data';
15
15
  import { requestTokenStorage, getEffectiveToken } from '../utils/auth-context.js';
16
16
  import { getServer } from '../utils/server-context.js';
17
+ import { getIntegration } from '../utils/integration-context.js';
18
+ import { parseIntegrationMarker } from '../utils/integration-marker.js';
17
19
  import { VERSION } from '../version.js';
18
20
  /**
19
21
  * Build the User-Agent / source string sent to the Qase API. Qase uses this to
@@ -90,6 +92,24 @@ class QaseApiClient {
90
92
  }
91
93
  return req;
92
94
  });
95
+ // Tag each Qase API request with the integration built on top of this server
96
+ // (a plugin/agent/wrapper — e.g. the quality-supervisor Claude Code plugin).
97
+ // A third axis, independent of the User-Agent source and of the AI host in
98
+ // X-MCP-Client-*: the same integration can run on any host, on either
99
+ // deployment. Sourced per-request from integrationStorage, falling back to
100
+ // QASE_MCP_INTEGRATION. Nothing is sent unless the marker is well-formed and
101
+ // allowlisted — see integration-marker.ts.
102
+ this.axiosInstance.interceptors.request.use((req) => {
103
+ const integration = parseIntegrationMarker(getIntegration());
104
+ if (integration) {
105
+ req.headers = req.headers ?? {};
106
+ req.headers['X-MCP-Integration-Name'] = integration.name;
107
+ if (integration.version) {
108
+ req.headers['X-MCP-Integration-Version'] = integration.version;
109
+ }
110
+ }
111
+ return req;
112
+ });
93
113
  attachRetry(this.axiosInstance);
94
114
  attachInflightDedupe(this.axiosInstance);
95
115
  const basePath = `${config.host}/v1`;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"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"}
@@ -132,7 +132,7 @@ async function getQqlHelp(args) {
132
132
  'Aggregating: SELECT (AGGREGATE[, ...]) entity = "TYPE" and CONDITION... ' +
133
133
  '[GROUP BY field] [HAVING condition] — SELECT comes FIRST, before the conditions.',
134
134
  entities: ['case', 'defect', 'run', 'result', 'plan', 'requirement'],
135
- note: 'QQL is only available in Business and Enterprise Qase subscriptions',
135
+ note: 'QQL is only available in Teams and Enterprise Qase subscriptions',
136
136
  fieldNamesVary: 'Field names are NOT uniform across entities — see the `entities` topic before writing ' +
137
137
  'a query. Most common failure: `created` exists on case/defect/plan/requirement but ' +
138
138
  'NOT on run (started/ended) or result (ended only).',
@@ -173,8 +173,11 @@ async function getQqlHelp(args) {
173
173
  '(only `ended`), no title/description, no custom fields, and no environment. Unlike ' +
174
174
  'case.suite, result.suite is a numeric suite ID. There is no run-ID field — `run` ' +
175
175
  'matches the run TITLE, so results cannot be tied to a specific run ID in QQL; use ' +
176
- 'GET /v1/result/{code}?filters[run]=ID via qase_api for that. status has no ' +
177
- '"Untested" value.',
176
+ 'GET /v1/result/{code}?filters[run]=ID via qase_api for that. status DOES have an ' +
177
+ '"untested" value, but it is excluded by default — see enumValues. An untested result ' +
178
+ 'is a case nobody has run yet, so its execution fields come back empty (comment, ' +
179
+ 'stacktrace, steps, end_time null/[], timeSpent 0) — aggregates over timeSpent skip ' +
180
+ 'them, but COUNT does not.',
178
181
  plan: 'Test plans — entity = "plan". Fields: id, title, description, project, created, updated, deleted, isDeleted.',
179
182
  requirement: 'Requirements — entity = "requirement". Fields: id, title, description, parent, status, ' +
180
183
  'type, project, author, createdBy, created, updated, deleted, isDeleted. Note: no link ' +
@@ -190,13 +193,20 @@ async function getQqlHelp(args) {
190
193
  'Violating either fails with "Query is invalid", which does not say which one.',
191
194
  examples: [
192
195
  'SELECT (COUNT(id)) entity = "result" and project = "DEMO" and status = "failed"',
193
- 'SELECT (COUNT(id)) entity = "result" and project = "DEMO" GROUP BY status',
196
+ 'SELECT (status, COUNT(id)) entity = "result" and project = "DEMO" GROUP BY status',
194
197
  'SELECT (COUNT(id)) entity = "case" and project = "DEMO" GROUP BY suite HAVING COUNT(id) > 10',
195
198
  'SELECT (AVG(timeSpent), MAX(timeSpent)) entity = "result" and project = "DEMO"',
196
199
  ],
200
+ groupedFieldMustBeInSelect: 'GROUP BY alone does not return the field it groups by — SELECT (COUNT(id)) ... ' +
201
+ 'GROUP BY status comes back as bare {count_id} rows with nothing to tell them apart. ' +
202
+ 'Put the field in SELECT too: SELECT (status, COUNT(id)) ... GROUP BY status.',
197
203
  enumsComeBackAsNumbers: 'In aggregate results, enum fields are returned as their numeric IDs, not labels: ' +
198
- 'result.status 1 = Passed, 2 = Failed, 5 = Skipped, 8 = Invalid; ' +
199
- 'automation 0 = Manual, 1 = To be automated, 2 = Automated. Map them before reporting.',
204
+ 'result.status 0 = Untested, 1 = Passed, 2 = Failed, 3 = Blocked, 4 = Retest, ' +
205
+ '5 = Skipped, 6 = Deleted, 7 = In progress, 8 = Invalid those nine are built in and ' +
206
+ 'fixed, but any ID above them is a workspace-defined status whose meaning differs per ' +
207
+ 'workspace, so do not map those from a table: read GET /v1/system_field via qase_api ' +
208
+ 'and use the `result_status` options. automation 0 = Manual, 1 = To be automated, ' +
209
+ '2 = Automated. Map them before reporting.',
200
210
  groupByAddsTitleSuffix: 'Grouping by a string field returns it with a _title suffix — GROUP BY suite yields ' +
201
211
  'a `suite_title` key in the response, not `suite`.',
202
212
  },
@@ -215,7 +225,17 @@ async function getQqlHelp(args) {
215
225
  caseAutomation: '"Manual" (a.k.a. "Not automated"), "To be automated", "Automated"',
216
226
  defectStatus: '"Open", "In progress", "Resolved", "Invalid"',
217
227
  runStatus: '"In Progress", "Passed", "Failed", "Aborted"',
218
- resultStatus: '"passed", "failed", "skipped", "invalid" there is no "Untested"',
228
+ resultStatus: 'Built-in: "untested", "passed", "failed", "blocked", "retest", "skipped", "deleted", ' +
229
+ '"in_progress", "invalid". A workspace can add its own statuses on top, so this list is ' +
230
+ 'not the whole set for a given workspace — read GET /v1/system_field via qase_api and ' +
231
+ 'take the `result_status` field for that (its options carry read_only: true for the ' +
232
+ 'built-ins above, false for the workspace\'s own). Either the title or the slug works, ' +
233
+ 'case-insensitively: "not ready" and "not_ready" are the same value. ' +
234
+ '"untested" results are EXCLUDED BY DEFAULT (to preserve old query behavior). ANY ' +
235
+ 'condition on status lifts that exclusion, but they only show up if the condition ' +
236
+ 'actually matches them: status != "passed" and status is not empty include them, ' +
237
+ 'status = "failed" and status in ["passed", "failed"] do not. To filter on status and ' +
238
+ 'still keep them out, exclude them: status != "passed" and status != "untested".',
219
239
  },
220
240
  functions: {
221
241
  currentUser: 'currentUser() - Returns current user ID',
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/operations-v2/qql/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/operations-v2/qql/index.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"sse.d.ts","sourceRoot":"","sources":["../../src/transports/sse.ts"],"names":[],"mappings":"AAAA,OAAgB,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAKnE,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,kBAAkB,GAAG,OAAO,CA8CrF"}
1
+ {"version":3,"file":"sse.d.ts","sourceRoot":"","sources":["../../src/transports/sse.ts"],"names":[],"mappings":"AAAA,OAAgB,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAOnE,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAOD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAyDrF"}
@@ -1,7 +1,13 @@
1
1
  import express from 'express';
2
2
  import { SSEServerTransport } from '@modelcontextprotocol/sdk/server/sse.js';
3
3
  import { requestTokenStorage } from '../utils/auth-context.js';
4
+ import { integrationStorage } from '../utils/integration-context.js';
5
+ import { normalizeIntegrationMarker } from '../utils/integration-marker.js';
4
6
  import { getMetrics } from '../cache/index.js';
7
+ /** Normalised integration marker off a header or query value (integration-marker.ts). */
8
+ function readIntegrationMarker(value) {
9
+ return typeof value === 'string' ? normalizeIntegrationMarker(value) : undefined;
10
+ }
5
11
  export function setupSSETransport(server, config) {
6
12
  const app = express();
7
13
  app.use(express.json());
@@ -9,6 +15,10 @@ export function setupSSETransport(server, config) {
9
15
  const messagesEndpoint = config.messagesEndpoint || '/messages';
10
16
  const host = config.host || '0.0.0.0';
11
17
  let transport = null;
18
+ // This transport serves a single connection at a time, so the marker captured
19
+ // when the stream is opened plays the role the per-session map plays in
20
+ // streamable-http: it covers POSTs that cannot repeat the header.
21
+ let connectionIntegration;
12
22
  // Health check endpoint
13
23
  app.get('/health', (_req, res) => {
14
24
  res.json({ status: 'ok', transport: 'sse' });
@@ -19,8 +29,11 @@ export function setupSSETransport(server, config) {
19
29
  res.send(getMetrics().renderPrometheus());
20
30
  });
21
31
  // SSE endpoint for establishing connection
22
- app.get(sseEndpoint, (_req, res) => {
32
+ app.get(sseEndpoint, (req, res) => {
23
33
  console.error('[SSE] Client connected');
34
+ connectionIntegration =
35
+ readIntegrationMarker(req.headers['x-qase-integration']) ??
36
+ readIntegrationMarker(req.query.integration);
24
37
  transport = new SSEServerTransport(messagesEndpoint, res);
25
38
  server.connect(transport);
26
39
  });
@@ -32,7 +45,8 @@ export function setupSSETransport(server, config) {
32
45
  }
33
46
  const authHeader = req.headers['authorization'] || '';
34
47
  const requestToken = authHeader.startsWith('Bearer ') ? authHeader.slice(7).trim() : '';
35
- requestTokenStorage.run(requestToken, () => transport.handlePostMessage(req, res));
48
+ const integration = readIntegrationMarker(req.headers['x-qase-integration']) ?? connectionIntegration ?? '';
49
+ requestTokenStorage.run(requestToken, () => integrationStorage.run(integration, () => transport.handlePostMessage(req, res)));
36
50
  });
37
51
  // Start server
38
52
  app.listen(config.port, host, () => {
@@ -1 +1 @@
1
- {"version":3,"file":"sse.js","sourceRoot":"","sources":["../../src/transports/sse.ts"],"names":[],"mappings":"AAAA,OAAO,OAAoB,MAAM,SAAS,CAAC;AAE3C,OAAO,EAAE,kBAAkB,EAAE,MAAM,yCAAyC,CAAC;AAC7E,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAS/C,MAAM,UAAU,iBAAiB,CAAC,MAAc,EAAE,MAA0B;IAC1E,MAAM,GAAG,GAAG,OAAO,EAAE,CAAC;IACtB,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IAExB,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC;IACjD,MAAM,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,IAAI,WAAW,CAAC;IAChE,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,SAAS,CAAC;IAEtC,IAAI,SAAS,GAA8B,IAAI,CAAC;IAEhD,wBAAwB;IACxB,GAAG,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;QAC/B,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,8BAA8B;IAC9B,GAAG,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;QAChC,GAAG,CAAC,GAAG,CAAC,cAAc,EAAE,2BAA2B,CAAC,CAAC;QACrD,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,gBAAgB,EAAE,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,2CAA2C;IAC3C,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;QACjC,OAAO,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;QACxC,SAAS,GAAG,IAAI,kBAAkB,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAAC;QAC1D,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAC5B,CAAC,CAAC,CAAC;IAEH,kDAAkD;IAClD,GAAG,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QACtC,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,+BAA+B,EAAE,CAAC,CAAC;YACjE,OAAO;QACT,CAAC;QACD,MAAM,UAAU,GAAI,GAAG,CAAC,OAAO,CAAC,eAAe,CAAY,IAAI,EAAE,CAAC;QAClE,MAAM,YAAY,GAAG,UAAU,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACxF,mBAAmB,CAAC,GAAG,CAAC,YAAY,EAAE,GAAG,EAAE,CAAC,SAAU,CAAC,iBAAiB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;IACtF,CAAC,CAAC,CAAC;IAEH,eAAe;IACf,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE;QACjC,OAAO,CAAC,KAAK,CAAC,oCAAoC,IAAI,IAAI,MAAM,CAAC,IAAI,GAAG,WAAW,EAAE,CAAC,CAAC;QACvF,OAAO,CAAC,KAAK,CAAC,8BAA8B,IAAI,IAAI,MAAM,CAAC,IAAI,SAAS,CAAC,CAAC;IAC5E,CAAC,CAAC,CAAC;IAEH,OAAO,GAAG,CAAC;AACb,CAAC"}
1
+ {"version":3,"file":"sse.js","sourceRoot":"","sources":["../../src/transports/sse.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"streamableHttp.d.ts","sourceRoot":"","sources":["../../src/transports/streamableHttp.ts"],"names":[],"mappings":"AAAA,OAAgB,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAMnE,OAAO,EAAkB,KAAK,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC3E,OAAO,EAAsB,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAMjF,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AASD,wBAAgB,4BAA4B,CAC1C,YAAY,EAAE,MAAM,MAAM,EAC1B,MAAM,EAAE,oBAAoB,EAC5B,SAAS,CAAC,EAAE;IAAE,MAAM,EAAE,WAAW,CAAC;IAAC,QAAQ,EAAE,YAAY,CAAA;CAAE,GAC1D,OAAO,CA2TT"}
1
+ {"version":3,"file":"streamableHttp.d.ts","sourceRoot":"","sources":["../../src/transports/streamableHttp.ts"],"names":[],"mappings":"AAAA,OAAgB,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAQnE,OAAO,EAAkB,KAAK,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC3E,OAAO,EAAsB,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAMjF,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAsBD,wBAAgB,4BAA4B,CAC1C,YAAY,EAAE,MAAM,MAAM,EAC1B,MAAM,EAAE,oBAAoB,EAC5B,SAAS,CAAC,EAAE;IAAE,MAAM,EAAE,WAAW,CAAC;IAAC,QAAQ,EAAE,YAAY,CAAA;CAAE,GAC1D,OAAO,CAmVT"}
@@ -3,6 +3,8 @@ import { StreamableHTTPServerTransport } from '@modelcontextprotocol/sdk/server/
3
3
  import { mcpAuthRouter } from '@modelcontextprotocol/sdk/server/auth/router.js';
4
4
  import { randomUUID } from 'crypto';
5
5
  import { requestTokenStorage } from '../utils/auth-context.js';
6
+ import { integrationStorage } from '../utils/integration-context.js';
7
+ import { normalizeIntegrationMarker } from '../utils/integration-marker.js';
6
8
  import { getMetrics } from '../cache/index.js';
7
9
  import { getOAuthConfig } from '../auth/oauth-config.js';
8
10
  import { createJwksVerifier } from '../auth/jwks-verifier.js';
@@ -13,6 +15,18 @@ import { authorizeRedirectUriStorage } from '../auth/client-context.js';
13
15
  function isInitializeRequest(body) {
14
16
  return (typeof body === 'object' && body !== null && 'method' in body && body.method === 'initialize');
15
17
  }
18
+ /**
19
+ * Read the integration marker off a request, normalised (see integration-marker.ts).
20
+ *
21
+ * Two channels, both required. The header is the primary one; the query parameter
22
+ * exists because it is not yet proven that custom request headers survive the
23
+ * OAuth flow on the hosted endpoint in every MCP client, and a URL is the one
24
+ * thing every client definitely passes through. The query parameter is only read
25
+ * at session creation — after that the value is remembered per session.
26
+ */
27
+ function readIntegrationMarker(value) {
28
+ return typeof value === 'string' ? normalizeIntegrationMarker(value) : undefined;
29
+ }
16
30
  export function setupStreamableHttpTransport(createServer, config, oauthDeps) {
17
31
  const app = express();
18
32
  // Behind a reverse proxy (k8s ingress, load balancer, ngrok) the client's
@@ -37,7 +51,9 @@ export function setupStreamableHttpTransport(createServer, config, oauthDeps) {
37
51
  res.header('Access-Control-Allow-Methods', 'GET, POST, DELETE, OPTIONS');
38
52
  // Mcp-Method / Mcp-Name are required request headers as of MCP spec 2026-07-28
39
53
  // (gateway routing without body parsing) — allow them ahead of client adoption.
40
- res.header('Access-Control-Allow-Headers', 'Content-Type, Authorization, mcp-session-id, Mcp-Method, Mcp-Name');
54
+ // X-Qase-Integration is ours: without it a browser-based client's preflight
55
+ // strips the marker and only the ?integration= fallback would work.
56
+ res.header('Access-Control-Allow-Headers', 'Content-Type, Authorization, mcp-session-id, Mcp-Method, Mcp-Name, X-Qase-Integration');
41
57
  // Expose auth challenge + session id so browser-based MCP clients (Inspector,
42
58
  // Claude.ai web) can read them from cross-origin responses. Without this the
43
59
  // 401 WWW-Authenticate challenge is invisible to client JS and OAuth never starts.
@@ -123,6 +139,9 @@ export function setupStreamableHttpTransport(createServer, config, oauthDeps) {
123
139
  const SESSION_TTL_MS = ttlMinutes * 60 * 1000;
124
140
  const sessions = new Map();
125
141
  const sessionLastSeen = new Map();
142
+ // Integration marker captured at session creation (header or ?integration=),
143
+ // so later requests on the session need not repeat it. Evicted with the session.
144
+ const sessionIntegrations = new Map();
126
145
  // Periodically evict stale sessions that never sent a DELETE
127
146
  const cleanupInterval = setInterval(() => {
128
147
  const now = Date.now();
@@ -134,6 +153,7 @@ export function setupStreamableHttpTransport(createServer, config, oauthDeps) {
134
153
  sessions.delete(id);
135
154
  }
136
155
  sessionLastSeen.delete(id);
156
+ sessionIntegrations.delete(id);
137
157
  console.error(`[StreamableHTTP] Evicted stale session: ${id}`);
138
158
  }
139
159
  }
@@ -165,6 +185,7 @@ export function setupStreamableHttpTransport(createServer, config, oauthDeps) {
165
185
  await transport.close();
166
186
  sessions.delete(sessionId);
167
187
  sessionLastSeen.delete(sessionId);
188
+ sessionIntegrations.delete(sessionId);
168
189
  console.error(`[StreamableHTTP] Session closed: ${sessionId}`);
169
190
  res.status(200).json({ status: 'session closed' });
170
191
  }
@@ -210,10 +231,15 @@ export function setupStreamableHttpTransport(createServer, config, oauthDeps) {
210
231
  });
211
232
  const sessionId = req.headers['mcp-session-id'];
212
233
  let transport;
234
+ // Integration marker on this request, if it carried one.
235
+ const headerIntegration = readIntegrationMarker(req.headers['x-qase-integration']);
236
+ // The one remembered for the session, filled in below.
237
+ let sessionIntegration;
213
238
  if (sessionId && sessions.has(sessionId)) {
214
239
  // Reuse existing transport for this session — bump last-seen
215
240
  transport = sessions.get(sessionId);
216
241
  sessionLastSeen.set(sessionId, Date.now());
242
+ sessionIntegration = sessionIntegrations.get(sessionId);
217
243
  }
218
244
  else if (isInitializeRequest(req.body)) {
219
245
  // This is an initialize request - create new session
@@ -225,6 +251,12 @@ export function setupStreamableHttpTransport(createServer, config, oauthDeps) {
225
251
  // Store session and record creation time
226
252
  sessions.set(newSessionId, transport);
227
253
  sessionLastSeen.set(newSessionId, Date.now());
254
+ // Remember the integration for the life of the session. The query parameter
255
+ // is only available here, on the initialize request that carries the URL.
256
+ sessionIntegration = headerIntegration ?? readIntegrationMarker(req.query.integration);
257
+ if (sessionIntegration) {
258
+ sessionIntegrations.set(newSessionId, sessionIntegration);
259
+ }
228
260
  // Create a fresh Server instance per session — the SDK requires one Server per transport
229
261
  await createServer().connect(transport);
230
262
  console.error(`[StreamableHTTP] New session created: ${newSessionId}`);
@@ -250,9 +282,12 @@ export function setupStreamableHttpTransport(createServer, config, oauthDeps) {
250
282
  if (requestToken) {
251
283
  console.error('[StreamableHTTP] Using per-request Bearer token');
252
284
  }
285
+ // Precedence: this request's header → the value remembered for the session →
286
+ // (inside getIntegration) the QASE_MCP_INTEGRATION env var.
287
+ const integration = headerIntegration ?? sessionIntegration ?? '';
253
288
  // Run the handler inside AsyncLocalStorage context so getApiClient() can read the token
254
289
  try {
255
- await requestTokenStorage.run(requestToken, () => transport.handleRequest(req, res, req.body));
290
+ await requestTokenStorage.run(requestToken, () => integrationStorage.run(integration, () => transport.handleRequest(req, res, req.body)));
256
291
  }
257
292
  catch (error) {
258
293
  console.error('[StreamableHTTP] Error handling request:', error);
@@ -1 +1 @@
1
- {"version":3,"file":"streamableHttp.js","sourceRoot":"","sources":["../../src/transports/streamableHttp.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"streamableHttp.js","sourceRoot":"","sources":["../../src/transports/streamableHttp.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import { AsyncLocalStorage } from 'async_hooks';
2
+ /**
3
+ * Per-request integration marker storage.
4
+ *
5
+ * Holds the raw `<name>/<version>` marker supplied by the integration driving
6
+ * this request (see integration-marker.ts). Empty string means "this request
7
+ * carried no marker" — fall back to the process-wide QASE_MCP_INTEGRATION.
8
+ *
9
+ * Same shape and lifecycle as requestTokenStorage in auth-context.ts: HTTP
10
+ * transports open a scope per request, so two concurrent sessions with different
11
+ * markers never observe each other's value.
12
+ */
13
+ export declare const integrationStorage: AsyncLocalStorage<string>;
14
+ /**
15
+ * Read the marker for the current async context: request-scoped value first,
16
+ * then the QASE_MCP_INTEGRATION env var (the stdio path, where there is no
17
+ * request to carry a header).
18
+ *
19
+ * Returns undefined when neither is set — the common case, and the one that must
20
+ * leave the outbound request untouched. The value is unvalidated; callers pass it
21
+ * through parseIntegrationMarker().
22
+ */
23
+ export declare function getIntegration(): string | undefined;
24
+ //# sourceMappingURL=integration-context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"integration-context.d.ts","sourceRoot":"","sources":["../../src/utils/integration-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEhD;;;;;;;;;;GAUG;AACH,eAAO,MAAM,kBAAkB,2BAAkC,CAAC;AAElE;;;;;;;;GAQG;AACH,wBAAgB,cAAc,IAAI,MAAM,GAAG,SAAS,CAInD"}
@@ -0,0 +1,29 @@
1
+ import { AsyncLocalStorage } from 'async_hooks';
2
+ /**
3
+ * Per-request integration marker storage.
4
+ *
5
+ * Holds the raw `<name>/<version>` marker supplied by the integration driving
6
+ * this request (see integration-marker.ts). Empty string means "this request
7
+ * carried no marker" — fall back to the process-wide QASE_MCP_INTEGRATION.
8
+ *
9
+ * Same shape and lifecycle as requestTokenStorage in auth-context.ts: HTTP
10
+ * transports open a scope per request, so two concurrent sessions with different
11
+ * markers never observe each other's value.
12
+ */
13
+ export const integrationStorage = new AsyncLocalStorage();
14
+ /**
15
+ * Read the marker for the current async context: request-scoped value first,
16
+ * then the QASE_MCP_INTEGRATION env var (the stdio path, where there is no
17
+ * request to carry a header).
18
+ *
19
+ * Returns undefined when neither is set — the common case, and the one that must
20
+ * leave the outbound request untouched. The value is unvalidated; callers pass it
21
+ * through parseIntegrationMarker().
22
+ */
23
+ export function getIntegration() {
24
+ const requestIntegration = integrationStorage.getStore();
25
+ if (requestIntegration)
26
+ return requestIntegration;
27
+ return process.env.QASE_MCP_INTEGRATION?.trim() || undefined;
28
+ }
29
+ //# sourceMappingURL=integration-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"integration-context.js","sourceRoot":"","sources":["../../src/utils/integration-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEhD;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,IAAI,iBAAiB,EAAU,CAAC;AAElE;;;;;;;;GAQG;AACH,MAAM,UAAU,cAAc;IAC5B,MAAM,kBAAkB,GAAG,kBAAkB,CAAC,QAAQ,EAAE,CAAC;IACzD,IAAI,kBAAkB;QAAE,OAAO,kBAAkB,CAAC;IAClD,OAAO,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,IAAI,EAAE,IAAI,SAAS,CAAC;AAC/D,CAAC"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Integration Marker
3
+ *
4
+ * An *integration* is a product built on top of this MCP server (a plugin, an
5
+ * agent, a wrapper CLI) that wants to be attributable in Qase analytics. It is a
6
+ * third, independent axis from the two identities already on the wire:
7
+ *
8
+ * - `User-Agent: qase-mcp/<v>` — which deployment of this server (self-run vs hosted)
9
+ * - `X-MCP-Client-*` — which AI host is connected (Claude, Cursor, …)
10
+ * - `X-MCP-Integration-*` — which integration is driving the server (this file)
11
+ *
12
+ * The allowlist below is the cardinality control: the backend stores whatever it
13
+ * receives into a PUBLIC_API_CALL analytics dimension and does not guess, so an
14
+ * unknown marker must never reach it. Adding an integration is a deliberate
15
+ * change here, in code review.
16
+ */
17
+ /**
18
+ * Integration names allowed to identify themselves to the Qase API.
19
+ * Lowercase; anything not listed here is ignored entirely.
20
+ */
21
+ export declare const ALLOWED_INTEGRATIONS: readonly string[];
22
+ export interface IntegrationMarker {
23
+ /** Lowercased, allowlisted integration name. */
24
+ name: string;
25
+ /** Present only when the supplied version passed validation. */
26
+ version?: string;
27
+ }
28
+ /**
29
+ * Parse a `<name>/<version>` marker (version optional).
30
+ *
31
+ * Everything is best-effort and silent: a malformed, oversized or unknown marker
32
+ * yields `undefined` rather than an error, so a bad marker can never fail the
33
+ * API call it was attached to. A valid name with an invalid version keeps the
34
+ * name and drops the version.
35
+ */
36
+ export declare function parseIntegrationMarker(raw: string | undefined | null): IntegrationMarker | undefined;
37
+ /**
38
+ * Parse and re-serialise a marker into its canonical `<name>[/<version>]` form,
39
+ * or `undefined` if it is not usable. Transports use this to normalise a marker
40
+ * once, at the edge, so nothing unbounded or unknown is remembered per session.
41
+ */
42
+ export declare function normalizeIntegrationMarker(raw: string | undefined | null): string | undefined;
43
+ //# sourceMappingURL=integration-marker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"integration-marker.d.ts","sourceRoot":"","sources":["../../src/utils/integration-marker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH;;;GAGG;AACH,eAAO,MAAM,oBAAoB,EAAE,SAAS,MAAM,EAA2B,CAAC;AAQ9E,MAAM,WAAW,iBAAiB;IAChC,gDAAgD;IAChD,IAAI,EAAE,MAAM,CAAC;IACb,gEAAgE;IAChE,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAC7B,iBAAiB,GAAG,SAAS,CAa/B;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,MAAM,GAAG,SAAS,CAI7F"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Integration Marker
3
+ *
4
+ * An *integration* is a product built on top of this MCP server (a plugin, an
5
+ * agent, a wrapper CLI) that wants to be attributable in Qase analytics. It is a
6
+ * third, independent axis from the two identities already on the wire:
7
+ *
8
+ * - `User-Agent: qase-mcp/<v>` — which deployment of this server (self-run vs hosted)
9
+ * - `X-MCP-Client-*` — which AI host is connected (Claude, Cursor, …)
10
+ * - `X-MCP-Integration-*` — which integration is driving the server (this file)
11
+ *
12
+ * The allowlist below is the cardinality control: the backend stores whatever it
13
+ * receives into a PUBLIC_API_CALL analytics dimension and does not guess, so an
14
+ * unknown marker must never reach it. Adding an integration is a deliberate
15
+ * change here, in code review.
16
+ */
17
+ /**
18
+ * Integration names allowed to identify themselves to the Qase API.
19
+ * Lowercase; anything not listed here is ignored entirely.
20
+ */
21
+ export const ALLOWED_INTEGRATIONS = ['quality-supervisor'];
22
+ /** Longest name or version we will look at; longer input is truncated, then validated. */
23
+ const MAX_FIELD_LENGTH = 100;
24
+ /** Versions are opaque to us — word chars, dots, dashes and pluses only. */
25
+ const VERSION_PATTERN = /^[\w.\-+]{1,32}$/;
26
+ /**
27
+ * Parse a `<name>/<version>` marker (version optional).
28
+ *
29
+ * Everything is best-effort and silent: a malformed, oversized or unknown marker
30
+ * yields `undefined` rather than an error, so a bad marker can never fail the
31
+ * API call it was attached to. A valid name with an invalid version keeps the
32
+ * name and drops the version.
33
+ */
34
+ export function parseIntegrationMarker(raw) {
35
+ const trimmed = raw?.trim();
36
+ if (!trimmed)
37
+ return undefined;
38
+ const separator = trimmed.indexOf('/');
39
+ const rawName = separator === -1 ? trimmed : trimmed.slice(0, separator);
40
+ const rawVersion = separator === -1 ? '' : trimmed.slice(separator + 1);
41
+ const name = rawName.trim().slice(0, MAX_FIELD_LENGTH).toLowerCase();
42
+ if (!ALLOWED_INTEGRATIONS.includes(name))
43
+ return undefined;
44
+ const version = rawVersion.trim().slice(0, MAX_FIELD_LENGTH);
45
+ return VERSION_PATTERN.test(version) ? { name, version } : { name };
46
+ }
47
+ /**
48
+ * Parse and re-serialise a marker into its canonical `<name>[/<version>]` form,
49
+ * or `undefined` if it is not usable. Transports use this to normalise a marker
50
+ * once, at the edge, so nothing unbounded or unknown is remembered per session.
51
+ */
52
+ export function normalizeIntegrationMarker(raw) {
53
+ const marker = parseIntegrationMarker(raw);
54
+ if (!marker)
55
+ return undefined;
56
+ return marker.version ? `${marker.name}/${marker.version}` : marker.name;
57
+ }
58
+ //# sourceMappingURL=integration-marker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"integration-marker.js","sourceRoot":"","sources":["../../src/utils/integration-marker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH;;;GAGG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAsB,CAAC,oBAAoB,CAAC,CAAC;AAE9E,0FAA0F;AAC1F,MAAM,gBAAgB,GAAG,GAAG,CAAC;AAE7B,4EAA4E;AAC5E,MAAM,eAAe,GAAG,kBAAkB,CAAC;AAS3C;;;;;;;GAOG;AACH,MAAM,UAAU,sBAAsB,CACpC,GAA8B;IAE9B,MAAM,OAAO,GAAG,GAAG,EAAE,IAAI,EAAE,CAAC;IAC5B,IAAI,CAAC,OAAO;QAAE,OAAO,SAAS,CAAC;IAE/B,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACvC,MAAM,OAAO,GAAG,SAAS,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;IACzE,MAAM,UAAU,GAAG,SAAS,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;IAExE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAC,WAAW,EAAE,CAAC;IACrE,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO,SAAS,CAAC;IAE3D,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAC;IAC7D,OAAO,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;AACtE,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,0BAA0B,CAAC,GAA8B;IACvE,MAAM,MAAM,GAAG,sBAAsB,CAAC,GAAG,CAAC,CAAC;IAC3C,IAAI,CAAC,MAAM;QAAE,OAAO,SAAS,CAAC;IAC9B,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC;AAC3E,CAAC"}
@@ -1,2 +1,2 @@
1
- export declare const VERSION = "2.2.1";
1
+ export declare const VERSION = "2.2.3";
2
2
  //# sourceMappingURL=version.d.ts.map
package/build/version.js CHANGED
@@ -1,3 +1,3 @@
1
1
  // Auto-generated by prebuild script — do not edit manually
2
- export const VERSION = '2.2.1';
2
+ export const VERSION = '2.2.3';
3
3
  //# sourceMappingURL=version.js.map
package/docs/connect.md CHANGED
@@ -2,7 +2,12 @@
2
2
 
3
3
  The quickest way to use Qase — no install and no API token. Connect to the Qase-hosted MCP server at `https://mcp.qase.io/mcp` and sign in with your Qase account. Any MCP client that supports remote servers (OAuth 2.1) works; the client handles the OAuth flow for you — Claude, Cursor, Codex, and VS Code are shown below.
4
4
 
5
- > **Note:** The hosted Qase MCP is available on the **Enterprise** plan in Qase. On other plans you'll be denied access when connecting [run the server yourself](self-run.md) with your own API token instead.
5
+ > **Availability:** The hosted Qase MCP requires the **Enterprise** plan *and* a workspace on Qase's main cloud (`qase.io`). Two situations call for [running the server yourself](self-run.md) instead:
6
+ >
7
+ > - **Any other plan** — you can sign in, but tool calls are rejected with a plan error.
8
+ > - **A dedicated instance** — the hosted server only talks to the main cloud, so it cannot reach a dedicated deployment whatever your plan. Self-run points at your own domain via `QASE_API_DOMAIN`.
9
+ >
10
+ > Running the server yourself works on every plan and on both cloud and dedicated instances.
6
11
 
7
12
  Prefer to run the server yourself with your own `QASE_API_TOKEN`? See [Self-Run Guide (Local / stdio)](self-run.md).
8
13
 
package/docs/self-run.md CHANGED
@@ -50,15 +50,39 @@ QASE_API_PROTOCOL=https
50
50
 
51
51
  Get your API token from: https://app.qase.io/user/api/token
52
52
 
53
+ ### Integration Marker (for integration authors)
54
+
55
+ Skip this section if you are using the server directly — it changes nothing for you.
56
+
57
+ If you are *building a product on top of* this server (a plugin, an agent, a wrapper CLI), you can have your integration identified in Qase analytics. Set `QASE_MCP_INTEGRATION` in the environment you launch the server with:
58
+
59
+ ```bash
60
+ # <name>/<version> — the version is optional
61
+ QASE_MCP_INTEGRATION=quality-supervisor/1.4.0
62
+ ```
63
+
64
+ The server forwards it to the Qase API as `X-MCP-Integration-Name` and `X-MCP-Integration-Version`. It is a separate identity from the server deployment (`User-Agent`) and from the connected AI host (`X-MCP-Client-*`), so the same integration is attributable across every host and both deployments.
65
+
66
+ Rules:
67
+
68
+ - Format is `<name>/<version>`; the version may be omitted. The name is lowercased.
69
+ - A version must be made of word characters, dots, dashes or pluses, up to 32 characters — anything else is dropped and only the name is sent.
70
+ - **The name must be on the allowlist** in [`src/utils/integration-marker.ts`](../src/utils/integration-marker.ts) (`ALLOWED_INTEGRATIONS`). This bounds the cardinality of the analytics dimension, so an unlisted name is ignored entirely and nothing is sent. To add your integration, open a PR adding it to that array.
71
+ - A malformed or unlisted marker is dropped silently; the API call itself still succeeds.
72
+
73
+ Over HTTP transports the marker can also travel per request instead of per process — send an `X-Qase-Integration: <name>/<version>` header, or add `?integration=<name>/<version>` to the MCP endpoint URL (read when the session is created, then remembered for that session). The query parameter is the fallback for clients that do not pass custom headers through. Precedence: request header → the value remembered for the session → `QASE_MCP_INTEGRATION`.
74
+
53
75
  ### Custom Domains (Enterprise)
54
76
 
55
77
  If you're using Qase Enterprise with a custom domain:
56
78
 
57
79
  ```bash
58
- QASE_API_DOMAIN=api.yourcompany.qase.io
80
+ QASE_API_DOMAIN=api-yourcompany.qase.io
59
81
  ```
60
82
 
61
- `QASE_API_DOMAIN` takes the domain only — no scheme, no path. `https://api.yourcompany.qase.io` or `api.yourcompany.qase.io/v1` are rejected with an error.
83
+ `QASE_API_DOMAIN` takes the domain only — no scheme, no path. `https://api-yourcompany.qase.io` or `api-yourcompany.qase.io/v1` are rejected with an error.
84
+
85
+ If your workspace is on a **dedicated instance**, self-run is the only option: the [hosted connector](connect.md) serves Qase's main cloud (`qase.io`) only, regardless of plan.
62
86
 
63
87
  ### Self-Hosted Deployments over Plain HTTP
64
88
 
@@ -20,10 +20,23 @@ These apply when connecting to the Qase-hosted server (`https://mcp.qase.io/mcp`
20
20
 
21
21
  ### Access denied / Enterprise plan required
22
22
 
23
- The hosted Qase MCP is available on the **Enterprise** plan in Qase. If your workspace is on another plan, requests are rejected with an access/plan error — the connector may sign in but tool calls fail with a plan-related message.
23
+ The hosted Qase MCP requires the **Enterprise** plan. If your workspace is on another plan, requests are rejected with an access/plan error — the connector may sign in but tool calls fail with a plan-related message.
24
24
 
25
25
  **Solution**: upgrade to the Enterprise plan, or [run the server yourself](self-run.md) with your own `QASE_API_TOKEN` (works on any plan).
26
26
 
27
+ ### Dedicated instance can't use the hosted connector
28
+
29
+ The hosted server at `https://mcp.qase.io/mcp` serves Qase's main cloud (`qase.io`) only. If your workspace lives on a dedicated instance, the connector cannot reach your data — an Enterprise plan does not change this, and the symptom is usually a sign-in that succeeds against the wrong place, or projects that simply aren't there.
30
+
31
+ **Solution**: [run the server yourself](self-run.md) and point it at your instance:
32
+
33
+ ```bash
34
+ QASE_API_TOKEN=your_api_token_here
35
+ QASE_API_DOMAIN=api-yourcompany.qase.io
36
+ ```
37
+
38
+ If that instance is served without TLS, also set `QASE_API_PROTOCOL=http` — see [Self-Hosted API Served over Plain HTTP](#self-hosted-api-served-over-plain-http).
39
+
27
40
  ### Connector doesn't appear, or won't connect
28
41
 
29
42
  **Solution**:
@@ -112,9 +125,9 @@ To find your certificate:
112
125
  **Error**: `Invalid domain` or connection errors with custom domain
113
126
 
114
127
  **Solution**:
115
- 1. Ensure `QASE_API_DOMAIN` is set to just the domain (e.g., `api.company.qase.io`)
128
+ 1. Ensure `QASE_API_DOMAIN` is set to just the domain (e.g., `api-company.qase.io`)
116
129
  2. Don't include `https://` or `/v1` in the domain — the scheme goes in `QASE_API_PROTOCOL` instead (see below), and the API version is appended by the server
117
- 3. A non-default port does belong in the domain: `api.company.qase.io:8080`
130
+ 3. A non-default port does belong in the domain: `api-company.qase.io:8080`
118
131
  4. Verify with your Qase administrator
119
132
 
120
133
  ## Self-Hosted API Served over Plain HTTP
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@qase/mcp-server",
3
- "version": "2.2.1",
3
+ "version": "2.2.3",
4
4
  "mcpName": "io.qase/mcp-server",
5
5
  "description": "Official MCP server for Qase Test Management Platform",
6
6
  "type": "module",
@@ -99,7 +99,10 @@
99
99
  "typescript": "^5.3.3"
100
100
  },
101
101
  "overrides": {
102
- "js-yaml@3": "3.14.2"
102
+ "js-yaml@3": "3.15.1",
103
+ "js-yaml@4": "4.3.1",
104
+ "@babel/core": "^7.29.6",
105
+ "yaml": "^2.8.3"
103
106
  },
104
107
  "optionalDependencies": {
105
108
  "ioredis": "^5.10.1"
package/server.json CHANGED
@@ -8,12 +8,12 @@
8
8
  "url": "https://github.com/qase-tms/qase-mcp-server",
9
9
  "source": "github"
10
10
  },
11
- "version": "2.2.1",
11
+ "version": "2.2.3",
12
12
  "packages": [
13
13
  {
14
14
  "registryType": "npm",
15
15
  "identifier": "@qase/mcp-server",
16
- "version": "2.2.1",
16
+ "version": "2.2.3",
17
17
  "transport": {
18
18
  "type": "stdio"
19
19
  },