@qase/mcp-server 2.4.0 → 2.5.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.
Files changed (39) hide show
  1. package/CHANGELOG.md +34 -0
  2. package/SECURITY.md +37 -0
  3. package/build/auth/bearer-guard.d.ts +18 -0
  4. package/build/auth/bearer-guard.d.ts.map +1 -0
  5. package/build/auth/bearer-guard.js +31 -0
  6. package/build/auth/bearer-guard.js.map +1 -0
  7. package/build/index.js +16 -1
  8. package/build/index.js.map +1 -1
  9. package/build/operations-v2/composites/ci-report.js +60 -12
  10. package/build/operations-v2/composites/ci-report.js.map +1 -1
  11. package/build/operations-v2/write/case-fields.d.ts +3 -3
  12. package/build/operations-v2/write/case-fields.d.ts.map +1 -1
  13. package/build/operations-v2/write/case-fields.js +7 -1
  14. package/build/operations-v2/write/case-fields.js.map +1 -1
  15. package/build/operations-v2/write/cases.js +9 -9
  16. package/build/operations-v2/write/cases.js.map +1 -1
  17. package/build/operations-v2/write/results.js +39 -12
  18. package/build/operations-v2/write/results.js.map +1 -1
  19. package/build/server.d.ts +4 -3
  20. package/build/server.d.ts.map +1 -1
  21. package/build/server.js +4 -3
  22. package/build/server.js.map +1 -1
  23. package/build/transports/sse.d.ts +1 -1
  24. package/build/transports/sse.d.ts.map +1 -1
  25. package/build/transports/sse.js +44 -18
  26. package/build/transports/sse.js.map +1 -1
  27. package/build/transports/streamableHttp.d.ts.map +1 -1
  28. package/build/transports/streamableHttp.js +7 -1
  29. package/build/transports/streamableHttp.js.map +1 -1
  30. package/build/utils/case-enums.d.ts +11 -0
  31. package/build/utils/case-enums.d.ts.map +1 -1
  32. package/build/utils/case-enums.js +23 -1
  33. package/build/utils/case-enums.js.map +1 -1
  34. package/build/version.d.ts +1 -1
  35. package/build/version.js +1 -1
  36. package/docs/self-run.md +40 -0
  37. package/docs/tools.md +3 -3
  38. package/package.json +1 -1
  39. package/server.json +2 -2
package/CHANGELOG.md CHANGED
@@ -5,6 +5,40 @@ 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.5.0]
9
+
10
+ ### Security
11
+
12
+ - **Network transports served unauthenticated requests under the operator's token.** `getEffectiveToken()` falls back to `QASE_API_TOKEN` when a request carries no token of its own — correct for stdio, where the token is the configuration and there is no listener, but on an HTTP transport it meant anyone who could reach the port acted as the operator: every write tool including `qase_project_delete`, plus `qase_api` and its access to any Qase REST endpoint, with the calls indistinguishable from the operator's own in the Qase audit log. The default `streamable-http` configuration was never exposed — OAuth is on unless `QASE_OAUTH_ENABLED=false`, and its guard already answered 401 without a bearer token. But the guard was mounted in exactly one place: `--transport sse` had none at all, and `streamable-http` with OAuth disabled fell back to an empty guard array, so switching OAuth off switched authentication off rather than only switching OAuth off. Both now require `Authorization: Bearer <token>` on the MCP endpoints, `/health` and `/metrics` excepted so container healthchecks keep working.
13
+
14
+ **This is breaking for those two configurations.** The fix is not to abandon a shared operator token: opaque Qase API tokens pass the guard unchanged, so the same token keeps working once the client presents it. Move it out of the server's environment and into the client config as `"headers": {"Authorization": "Bearer <token>"}`. Servers started on a network transport with `QASE_API_TOKEN` set now say so at startup, before the first 401 arrives.
15
+
16
+ Reported privately by an external researcher against 2.4.0. The repository now has a `SECURITY.md` — at the time of the report there was nowhere to send it.
17
+
18
+ ### Changed
19
+
20
+ - **The SSE transport is deprecated.** It was deprecated in the MCP specification on 2025-03-26 and superseded by streamable-http; it now warns at startup and will be removed in 3.0. It keeps working meanwhile, and gained the bearer-token requirement above.
21
+
22
+ - **Each SSE client gets its own session.** The transport kept one connection per process, so the second client to open `/sse` took over the first one's stream and the original session silently stopped answering. Streams are now tracked by the session id the SDK already hands the client, each with its own server instance, the way streamable-http has always worked. A POST naming a session that is gone answers 404 instead of 503, so the client reconnects.
23
+
24
+ ### Fixed
25
+
26
+ - **`is_flaky` could not be set at all.** The field was declared a boolean in the case schemas and forwarded to the API as a JSON boolean, but the API treats it like every other dictionary field — `GET /v1/system_field` returns it with `input_type: 3` and the options `{id: 0, slug: "no"}` / `{id: 1, slug: "yes"}`, the same shape as priority, severity, type, behavior, status, layer and automation. Both `true` and `false` therefore came back as `The selected field value is invalid. Allowed values: 0, 1.` — an error that names no field, so it was expensive to place inside a multi-field payload. `is_flaky` was simply missing from the list of fields the enum normaliser walks; the other seven were all there.
27
+
28
+ It now normalises like its siblings: `"yes"`, `"no"`, `"Yes"`, `"1"`, `"0"` and numeric IDs all resolve through the same cached system-field lookup, custom options included. A boolean is accepted too and folded into the option ID, because the name invites one — that coercion is deliberately kept out of the shared `normalizeEnumValue`, since for the other enum fields a boolean is a genuine caller mistake and silently turning `priority: true` into High would be worse than the API rejecting it. The advertised type stays a single `string` rather than a `["string","boolean"]` union: a type array is valid JSON Schema that not every MCP client handles.
29
+
30
+ Affects `qase_case_upsert`, `qase_case_bulk_create`, `qase_review_create` and `qase_review_bulk_create`, which all build their case body through the same normaliser. Confirmed against the live API: a case created with `is_flaky: 1` reads back as `is_flaky: 1`, where the boolean was refused outright. The smoke test had frozen the broken behaviour by asserting the schema declares a boolean; it now lists `is_flaky` with the other enum fields.
31
+
32
+ ## [2.4.1]
33
+
34
+ ### Fixed
35
+
36
+ - **The bulk results endpoint takes 200 results per request, and nothing said so.** `qase_result_record` advertised no ceiling while its description told agents to "pass several results in one call rather than calling once per test", so a larger batch reached the API and came back as an error with no hint of what the limit was. It now states the cap, and refuses an oversized batch before anything is written. The cap is enforced rather than described: the registry turns a tool's schema into JSON Schema for the protocol but never validates a call against it, so `.max()` alone would have been advertising with nothing behind it — the handler parses its own arguments, which also means an empty results array and an unknown status are now rejected instead of being passed through to the API.
37
+
38
+ - **`qase_ci_report` splits a large batch instead of failing on it.** A finished suite of more than 200 tests is the ordinary case for this tool, and refusing it would push an agent back onto the create-run, record, complete sequence the tool exists to replace. Results are now sent in batches of 200, up to 2000 in one report — a bound on the call rather than an open-ended loop, because a call that outlives the client's timeout is the one failure that says nothing about how far the recording got. Splitting is done here and deliberately not in `qase_result_record`: a retry of a CI report builds a new run, so a half-written attempt leaves a junk run behind, while a retry against an existing run records the first batch a second time and leaves a live run with a believable but wrong pass rate. If a batch does fail part way, the error names the run that exists, how many results reached it, and how to record the rest without creating a second run.
39
+
40
+ - **`qase_ci_report` now honours its own defaults.** `complete` and `is_autotest` were declared as defaulting to true, but nothing ever applied the defaults: arguments reach a handler exactly as the client sent them. A report that omitted `complete` left the run active despite the description promising it would be completed, and one that omitted `is_autotest` created a manual run. Both now default as documented.
41
+
8
42
  ## [2.4.0]
9
43
 
10
44
  ### Added
package/SECURITY.md ADDED
@@ -0,0 +1,37 @@
1
+ # Security Policy
2
+
3
+ ## Reporting a vulnerability
4
+
5
+ Please report security issues privately to **security@qase.io**. Do not open a
6
+ public GitHub issue for a vulnerability.
7
+
8
+ Include, as far as you can: the affected version, the transport and
9
+ configuration (`stdio`, `--transport sse`, `--transport streamable-http`,
10
+ whether OAuth is enabled), reproduction steps, and the impact you observed. We
11
+ acknowledge reports within three business days.
12
+
13
+ ## Supported versions
14
+
15
+ Fixes go into the latest minor release. Older minors are not patched.
16
+
17
+ ## Running the server safely
18
+
19
+ The server has three transports, and only `stdio` has no network listener.
20
+
21
+ - **stdio** (default) — the client starts the process and talks to it over
22
+ stdin/stdout. `QASE_API_TOKEN` supplies the credentials.
23
+ - **streamable-http** — the current network transport. OAuth is enabled by
24
+ default and clients authenticate against it.
25
+ - **sse** — deprecated (MCP spec 2025-03-26), removed in 3.0.
26
+
27
+ On both network transports every request must carry
28
+ `Authorization: Bearer <token>`; the server does not fall back to
29
+ `QASE_API_TOKEN` for unauthenticated requests. A single shared operator token
30
+ still works — put it in the client configuration rather than in the server's
31
+ environment. Only `streamable-http` validates that token against OAuth/JWKS;
32
+ on `sse` any non-empty token passes the server's guard and a bad one is only
33
+ caught when the Qase API rejects it.
34
+
35
+ Additionally, bind to `127.0.0.1` with `--host` unless the server is meant to be
36
+ reachable from the network, and keep OAuth enabled unless you have a specific
37
+ reason to disable it.
@@ -0,0 +1,18 @@
1
+ import type { RequestHandler } from 'express';
2
+ /**
3
+ * Minimal auth guard for network transports running without OAuth.
4
+ *
5
+ * Requires a non-empty `Authorization: Bearer <token>` and nothing more — the
6
+ * token's validity is established by the Qase API, which rejects a bad one.
7
+ * What this closes is the silent fallback in `getEffectiveToken()`: without it
8
+ * a request that presents no token at all runs under the operator's
9
+ * `QASE_API_TOKEN`, so anyone who can reach the port acts as the operator.
10
+ *
11
+ * Unlike `createMcpGuard`, the 401 carries NO `WWW-Authenticate` header. That
12
+ * header triggers OAuth discovery, and this guard only runs where OAuth is
13
+ * disabled — a client sent down that path would chase metadata that does not
14
+ * exist and fail somewhere inside the OAuth flow, instead of reading a plain
15
+ * instruction to send a token.
16
+ */
17
+ export declare function createBearerRequiredGuard(): RequestHandler;
18
+ //# sourceMappingURL=bearer-guard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bearer-guard.d.ts","sourceRoot":"","sources":["../../src/auth/bearer-guard.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAmC,cAAc,EAAE,MAAM,SAAS,CAAC;AAE/E;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,yBAAyB,IAAI,cAAc,CAiB1D"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Minimal auth guard for network transports running without OAuth.
3
+ *
4
+ * Requires a non-empty `Authorization: Bearer <token>` and nothing more — the
5
+ * token's validity is established by the Qase API, which rejects a bad one.
6
+ * What this closes is the silent fallback in `getEffectiveToken()`: without it
7
+ * a request that presents no token at all runs under the operator's
8
+ * `QASE_API_TOKEN`, so anyone who can reach the port acts as the operator.
9
+ *
10
+ * Unlike `createMcpGuard`, the 401 carries NO `WWW-Authenticate` header. That
11
+ * header triggers OAuth discovery, and this guard only runs where OAuth is
12
+ * disabled — a client sent down that path would chase metadata that does not
13
+ * exist and fail somewhere inside the OAuth flow, instead of reading a plain
14
+ * instruction to send a token.
15
+ */
16
+ export function createBearerRequiredGuard() {
17
+ return (req, res, next) => {
18
+ const authHeader = req.headers['authorization'] || '';
19
+ const token = authHeader.startsWith('Bearer ') ? authHeader.slice(7).trim() : '';
20
+ if (!token) {
21
+ res.status(401).json({
22
+ error: 'invalid_token',
23
+ error_description: 'Missing bearer token. Send your Qase API token as "Authorization: Bearer <token>". ' +
24
+ "Network transports no longer fall back to the server's QASE_API_TOKEN.",
25
+ });
26
+ return;
27
+ }
28
+ next();
29
+ };
30
+ }
31
+ //# sourceMappingURL=bearer-guard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bearer-guard.js","sourceRoot":"","sources":["../../src/auth/bearer-guard.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,yBAAyB;IACvC,OAAO,CAAC,GAAY,EAAE,GAAa,EAAE,IAAkB,EAAQ,EAAE;QAC/D,MAAM,UAAU,GAAI,GAAG,CAAC,OAAO,CAAC,eAAe,CAAY,IAAI,EAAE,CAAC;QAClE,MAAM,KAAK,GAAG,UAAU,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAEjF,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;gBACnB,KAAK,EAAE,eAAe;gBACtB,iBAAiB,EACf,qFAAqF;oBACrF,wEAAwE;aAC3E,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QAED,IAAI,EAAE,CAAC;IACT,CAAC,CAAC;AACJ,CAAC"}
package/build/index.js CHANGED
@@ -46,6 +46,19 @@ function parseArgs() {
46
46
  }
47
47
  return { transport, port, host };
48
48
  }
49
+ /**
50
+ * On a network transport the caller's Bearer token is the only one used —
51
+ * `QASE_API_TOKEN` no longer backs an unauthenticated request. Say so at
52
+ * startup: an operator upgrading from 2.4.x sees this before the first 401.
53
+ */
54
+ function warnAboutOperatorToken(transport) {
55
+ if (!process.env.QASE_API_TOKEN)
56
+ return;
57
+ console.error(`⚠ QASE_API_TOKEN is set but is not used by the ${transport} transport. Clients must send ` +
58
+ 'their own token as "Authorization: Bearer <token>" — the same operator token works if ' +
59
+ 'you put it in the client config. The variable still applies to stdio.');
60
+ console.error('');
61
+ }
49
62
  /**
50
63
  * Main function - Start the MCP server
51
64
  */
@@ -79,7 +92,8 @@ async function main() {
79
92
  }
80
93
  case 'sse': {
81
94
  console.error(`✓ Starting server with SSE transport on http://${host}:${port}/sse`);
82
- setupSSETransport(createServer(), {
95
+ warnAboutOperatorToken('SSE');
96
+ setupSSETransport(createServer, {
83
97
  port,
84
98
  host,
85
99
  sseEndpoint: '/sse',
@@ -93,6 +107,7 @@ async function main() {
93
107
  }
94
108
  case 'streamable-http': {
95
109
  console.error(`✓ Starting server with Streamable HTTP transport on http://${host}:${port}/mcp`);
110
+ warnAboutOperatorToken('Streamable HTTP');
96
111
  setupStreamableHttpTransport(createServer, {
97
112
  port,
98
113
  host,
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -5,6 +5,15 @@ import { toResultAsync, createToolError } from '../../utils/errors.js';
5
5
  import { ProjectCodeSchema } from '../../utils/validation.js';
6
6
  import { CiReportOutput } from '../../utils/output-schemas.js';
7
7
  import { richResult, summaryBlock, dataBlock, markdownTable } from '../../utils/rich-response.js';
8
+ const CONTEXT = 'CI report';
9
+ /** What the bulk results endpoint accepts in one request. */
10
+ const RESULTS_PER_CALL = 200;
11
+ /**
12
+ * A ceiling on one tool call: ten requests, not an open-ended loop. Past this
13
+ * the call risks outliving the client's timeout, and a timeout is the one
14
+ * failure that tells the model nothing about how far the recording got.
15
+ */
16
+ const MAX_RESULTS = 2000;
8
17
  const CaseResultSchema = z.object({
9
18
  case_id: z.number().int().positive(),
10
19
  status: z.enum(['passed', 'failed', 'blocked', 'skipped', 'invalid']),
@@ -21,7 +30,12 @@ const Schema = z.object({
21
30
  code: ProjectCodeSchema,
22
31
  title: z.string().min(1).max(255).describe('Run title (e.g., "CI Build #1234")'),
23
32
  environment_id: z.number().int().positive().optional(),
24
- results: z.array(CaseResultSchema).min(1).describe('Test results to record'),
33
+ results: z
34
+ .array(CaseResultSchema)
35
+ .min(1)
36
+ .max(MAX_RESULTS, `One CI report covers at most ${MAX_RESULTS} results — report a larger suite as several ` +
37
+ 'runs, or create the run with qase_run_upsert and record the results in batches.')
38
+ .describe(`Test results to record, 1 to ${MAX_RESULTS} per call`),
25
39
  complete: z
26
40
  .boolean()
27
41
  .optional()
@@ -33,9 +47,21 @@ const Schema = z.object({
33
47
  .default(true)
34
48
  .describe('Mark as automated run (default: true)'),
35
49
  });
36
- async function handler(args) {
50
+ async function handler(rawArgs) {
51
+ // Tool handlers get raw MCP arguments — the registry only turns the schema
52
+ // into JSON Schema for the protocol, so nothing has validated them and no
53
+ // default has been applied yet. Parsing here is what makes `complete` and
54
+ // `is_autotest` actually default to true, and what stops an oversized
55
+ // report before a run is created for it.
56
+ const parsed = Schema.safeParse(rawArgs);
57
+ if (!parsed.success) {
58
+ const details = parsed.error.issues
59
+ .map((issue) => `${issue.path.join('.') || 'arguments'}: ${issue.message}`)
60
+ .join('; ');
61
+ throw createToolError(`Invalid arguments — ${details}`, CONTEXT);
62
+ }
37
63
  const client = getApiClient();
38
- const { code, title, environment_id, results, complete, is_autotest } = args;
64
+ const { code, title, environment_id, results, complete, is_autotest } = parsed.data;
39
65
  // Step 1: Create run
40
66
  const runPayload = {
41
67
  title,
@@ -46,14 +72,33 @@ async function handler(args) {
46
72
  runPayload.environment_id = environment_id;
47
73
  const runRes = await toResultAsync(client.runs.createRun(code, runPayload));
48
74
  const run = runRes.match((r) => r.data.result, (e) => {
49
- throw createToolError(e, 'CI report: run creation failed');
75
+ throw createToolError(e, `${CONTEXT}: run creation failed`);
50
76
  });
51
77
  const runId = run.id;
52
- // Step 2: Bulk record results
53
- const bulkRes = await toResultAsync(client.results.createResultBulk(code, runId, { results: results }));
54
- bulkRes.match(() => { }, (e) => {
55
- throw createToolError(e, 'CI report: result recording failed');
56
- });
78
+ // Step 2: record the results, in batches of what the endpoint accepts. The
79
+ // batch is split here rather than refused because a finished suite of more
80
+ // than RESULTS_PER_CALL tests is the ordinary case, and refusing it would
81
+ // send the agent back to the three-call sequence this tool replaces.
82
+ const batches = [];
83
+ for (let i = 0; i < results.length; i += RESULTS_PER_CALL) {
84
+ batches.push(results.slice(i, i + RESULTS_PER_CALL));
85
+ }
86
+ let recorded = 0;
87
+ for (const batch of batches) {
88
+ const bulkRes = await toResultAsync(client.results.createResultBulk(code, runId, { results: batch }));
89
+ bulkRes.match(() => {
90
+ recorded += batch.length;
91
+ }, (e) => {
92
+ // The run already holds everything recorded so far and there is no way
93
+ // to unwind it, so say what landed and where. Repeating this call would
94
+ // build a second run rather than finishing this one.
95
+ throw createToolError(`${e} — recorded ${recorded} of ${results.length} results before this batch failed. ` +
96
+ `Run ${runId} exists and holds those ${recorded}. Record the remaining ` +
97
+ `${results.length - recorded} with qase_result_record into run ${runId}, ` +
98
+ `${RESULTS_PER_CALL} at a time; calling qase_ci_report again would create a ` +
99
+ 'second run instead of completing this one.', `${CONTEXT}: result recording failed`);
100
+ });
101
+ }
57
102
  // Step 3: Complete run (optional)
58
103
  let runStatus = 'active';
59
104
  if (complete) {
@@ -75,7 +120,8 @@ async function handler(args) {
75
120
  `- **Run ID:** ${runId}`,
76
121
  `- **Project:** ${code}`,
77
122
  `- **Status:** ${runStatus}`,
78
- `- **Total:** ${results.length}`,
123
+ `- **Total:** ${results.length}` +
124
+ (batches.length > 1 ? ` (recorded in ${batches.length} requests)` : ''),
79
125
  '',
80
126
  markdownTable(['Passed', 'Failed', 'Blocked', 'Skipped'], [[String(passed), String(failed), String(blocked), String(skipped)]], ['r', 'r', 'r', 'r']),
81
127
  ];
@@ -86,7 +132,7 @@ async function handler(args) {
86
132
  lines.push(`- Case #${r.case_id}${comment}`);
87
133
  }
88
134
  }
89
- const structured = { run_id: runId, run_status: runStatus, results_recorded: results.length };
135
+ const structured = { run_id: runId, run_status: runStatus, results_recorded: recorded };
90
136
  return richResult([summaryBlock(lines.join('\n')), dataBlock(structured)], structured);
91
137
  }
92
138
  toolRegistry.register({
@@ -97,7 +143,9 @@ toolRegistry.register({
97
143
  'stops early. Each result needs a numeric `case_id` plus a status, and may carry duration, ' +
98
144
  'comment, stacktrace and attachment hashes. Use qase_result_record instead when the run ' +
99
145
  'already exists and results arrive in stages; use qase_run_upsert when you need the run left ' +
100
- 'open. Cost: one tool call covering three API operations. A run with two results measured ' +
146
+ `open. A batch larger than ${RESULTS_PER_CALL} is split across requests for you, up to ` +
147
+ `${MAX_RESULTS} results in one report. Cost: one tool call covering three API operations, ` +
148
+ `plus one extra request per ${RESULTS_PER_CALL} results. A run with two results measured ` +
101
149
  'about 0.7s, against roughly 1.5s for the same work as three separate calls, and it grows ' +
102
150
  'with the number of results rather than with the number of round trips.',
103
151
  schema: Schema,
@@ -1 +1 @@
1
- {"version":3,"file":"ci-report.js","sourceRoot":"","sources":["../../../src/operations-v2/composites/ci-report.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ci-report.js","sourceRoot":"","sources":["../../../src/operations-v2/composites/ci-report.ts"],"names":[],"mappings":"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"}
@@ -86,7 +86,7 @@ export declare const CaseFieldsSchema: z.ZodObject<{
86
86
  behavior: z.ZodOptional<z.ZodString>;
87
87
  automation: z.ZodOptional<z.ZodString>;
88
88
  status: z.ZodOptional<z.ZodString>;
89
- is_flaky: z.ZodOptional<z.ZodBoolean>;
89
+ is_flaky: z.ZodEffects<z.ZodOptional<z.ZodString>, string | undefined, unknown>;
90
90
  suite_id: z.ZodOptional<z.ZodNumber>;
91
91
  milestone_id: z.ZodOptional<z.ZodNumber>;
92
92
  steps: z.ZodOptional<z.ZodArray<z.ZodObject<{
@@ -172,6 +172,7 @@ export declare const CaseFieldsSchema: z.ZodObject<{
172
172
  severity?: string | undefined;
173
173
  layer?: string | undefined;
174
174
  automation?: string | undefined;
175
+ is_flaky?: string | undefined;
175
176
  attachments?: string[] | undefined;
176
177
  steps?: {
177
178
  value?: string | undefined;
@@ -193,7 +194,6 @@ export declare const CaseFieldsSchema: z.ZodObject<{
193
194
  }[] | undefined;
194
195
  preconditions?: string | undefined;
195
196
  postconditions?: string | undefined;
196
- is_flaky?: boolean | undefined;
197
197
  suite_id?: number | undefined;
198
198
  milestone_id?: number | undefined;
199
199
  steps_type?: "classic" | "gherkin" | undefined;
@@ -209,6 +209,7 @@ export declare const CaseFieldsSchema: z.ZodObject<{
209
209
  severity?: string | undefined;
210
210
  layer?: string | undefined;
211
211
  automation?: string | undefined;
212
+ is_flaky?: unknown;
212
213
  attachments?: string[] | undefined;
213
214
  steps?: {
214
215
  value?: string | undefined;
@@ -230,7 +231,6 @@ export declare const CaseFieldsSchema: z.ZodObject<{
230
231
  }[] | undefined;
231
232
  preconditions?: string | undefined;
232
233
  postconditions?: string | undefined;
233
- is_flaky?: boolean | undefined;
234
234
  suite_id?: number | undefined;
235
235
  milestone_id?: number | undefined;
236
236
  steps_type?: "classic" | "gherkin" | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"case-fields.d.ts","sourceRoot":"","sources":["../../../src/operations-v2/write/case-fields.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AA8BxB,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAMzB,CAAC;AAEH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA+B3B,CAAC;AAEH;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAmB7D;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CA0BjG"}
1
+ {"version":3,"file":"case-fields.d.ts","sourceRoot":"","sources":["../../../src/operations-v2/write/case-fields.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AA+BxB,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAMzB,CAAC;AAEH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAuC3B,CAAC;AAEH;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAmB7D;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CA0BjG"}
@@ -6,6 +6,7 @@
6
6
  * — a new case field only has to be added once.
7
7
  */
8
8
  import { z } from 'zod';
9
+ import { coerceFlakyBoolean } from '../../utils/case-enums.js';
9
10
  const stepFields = {
10
11
  action: z
11
12
  .string()
@@ -54,7 +55,12 @@ export const CaseFieldsSchema = z.object({
54
55
  .optional()
55
56
  .describe('Automation status (label, slug, or numeric ID: 0=Manual / is-not-automated, 1=To be automated, 2=Automated)'),
56
57
  status: z.string().optional().describe('Status label or numeric ID'),
57
- is_flaky: z.boolean().optional(),
58
+ // Declared as a string like the other dictionary fields, with a boolean
59
+ // folded in first: the name invites `true`, which the API rejects outright.
60
+ is_flaky: z.preprocess(coerceFlakyBoolean, z
61
+ .string()
62
+ .optional()
63
+ .describe('Is flaky label or numeric ID (0=No, 1=Yes). A boolean is accepted too.')),
58
64
  suite_id: z.number().int().positive().optional(),
59
65
  milestone_id: z.number().int().positive().optional(),
60
66
  steps: z.array(TestStepSchema).optional(),
@@ -1 +1 @@
1
- {"version":3,"file":"case-fields.js","sourceRoot":"","sources":["../../../src/operations-v2/write/case-fields.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"case-fields.js","sourceRoot":"","sources":["../../../src/operations-v2/write/case-fields.ts"],"names":[],"mappings":"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"}
@@ -38,15 +38,15 @@ async function del(args) {
38
38
  toolRegistry.register({
39
39
  name: 'qase_case_upsert',
40
40
  description: 'Create or update a single test case. With `id` it updates that case, without `id` it creates ' +
41
- 'a new one. Enum fields (priority, severity, type, layer, behavior, automation) accept either ' +
42
- 'a label such as "high" or "blocker" or the project\'s numeric ID — the server normalizes ' +
43
- 'both. Steps can be classic action/expected pairs or Gherkin, and may reference shared steps ' +
44
- 'by hash. Writing more than one case? Use qase_case_bulk_create instead: it takes a list and ' +
45
- 'sends one request. If the project has "Test case review" enabled, direct writes may need to ' +
46
- 'go through a review — run qase_discover_tools with "review" for those tools. Cost: one API ' +
47
- 'call, about 0.6s to create and 0.4s to update. Ten sequential calls measured 5.6s against ' +
48
- '1.2s for one qase_case_bulk_create writing the same ten, so a loop is roughly four times ' +
49
- 'slower.',
41
+ 'a new one. Enum fields (priority, severity, type, layer, behavior, automation, is_flaky) ' +
42
+ 'accept either a label such as "high" or "blocker" or the project\'s numeric ID — the server ' +
43
+ 'normalizes both. Steps can be classic action/expected pairs or Gherkin, and may reference ' +
44
+ 'shared steps by hash. Writing more than one case? Use qase_case_bulk_create instead: it takes ' +
45
+ 'a list and sends one request. If the project has "Test case review" enabled, direct writes ' +
46
+ 'may need to go through a review — run qase_discover_tools with "review" for those tools. ' +
47
+ 'Cost: one API call, about 0.6s to create and 0.4s to update. Ten sequential calls measured ' +
48
+ '5.6s against 1.2s for one qase_case_bulk_create writing the same ten, so a loop is roughly ' +
49
+ 'four times slower.',
50
50
  schema: UpsertSchema,
51
51
  handler: upsert,
52
52
  annotations: CreateAnnotation,
@@ -1 +1 @@
1
- {"version":3,"file":"cases.js","sourceRoot":"","sources":["../../../src/operations-v2/write/cases.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cases.js","sourceRoot":"","sources":["../../../src/operations-v2/write/cases.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3F,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACvE,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AACxE,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAEnG,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5B,IAAI,EAAE,iBAAiB;IACvB,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAC9B,wEAAwE,CACzE;IACD,GAAG,gBAAgB,CAAC,KAAK;CAC1B,CAAC,CAAC;AAEH,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5B,IAAI,EAAE,iBAAiB;IACvB,EAAE,EAAE,QAAQ;CACb,CAAC,CAAC;AAEH,KAAK,UAAU,MAAM,CAAC,IAAkC;IACtD,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;IAC9B,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC;IACnC,MAAM,UAAU,GAAG,sBAAsB,CAAC,MAAM,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC;IAE1E,IAAI,UAAU,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QACnC,UAAU,CAAC,KAAK,GAAG,qBAAqB,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IAC7D,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,aAAa,CAChC,EAAE;QACA,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,EAAE,UAAiB,CAAC;QACtD,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,UAAiB,CAAC,CACrD,CAAC;IAEF,OAAO,MAAM,CAAC,KAAK,CACjB,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,EACpB,CAAC,CAAC,EAAE,EAAE;QACJ,MAAM,eAAe,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAC;IAC7C,CAAC,CACF,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,GAAG,CAAC,IAAkC;IACnD,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;IAC9B,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IAChF,OAAO,MAAM,CAAC,KAAK,CACjB,GAAG,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,EACtC,CAAC,CAAC,EAAE,EAAE;QACJ,MAAM,eAAe,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAC;IAC7C,CAAC,CACF,CAAC;AACJ,CAAC;AAED,YAAY,CAAC,QAAQ,CAAC;IACpB,IAAI,EAAE,kBAAkB;IACxB,WAAW,EACT,+FAA+F;QAC/F,2FAA2F;QAC3F,8FAA8F;QAC9F,4FAA4F;QAC5F,gGAAgG;QAChG,6FAA6F;QAC7F,2FAA2F;QAC3F,6FAA6F;QAC7F,6FAA6F;QAC7F,oBAAoB;IACtB,MAAM,EAAE,YAAY;IACpB,OAAO,EAAE,MAAM;IACf,WAAW,EAAE,gBAAgB;CAC9B,CAAC,CAAC;AAEH,YAAY,CAAC,QAAQ,CAAC;IACpB,IAAI,EAAE,kBAAkB;IACxB,WAAW,EACT,2FAA2F;QAC3F,2FAA2F;QAC3F,yFAAyF;QACzF,6FAA6F;QAC7F,6FAA6F;QAC7F,4FAA4F;IAC9F,MAAM,EAAE,YAAY;IACpB,OAAO,EAAE,GAAG;IACZ,WAAW,EAAE,gBAAgB;IAC7B,UAAU,EAAE,cAAc;CAC3B,CAAC,CAAC"}
@@ -3,6 +3,15 @@ import { getApiClient } from '../../client/index.js';
3
3
  import { toolRegistry, CreateAnnotation, DeleteAnnotation } from '../../utils/registry.js';
4
4
  import { toResultAsync, createToolError } from '../../utils/errors.js';
5
5
  import { ProjectCodeSchema, IdSchema } from '../../utils/validation.js';
6
+ const CONTEXT = 'result operation';
7
+ /**
8
+ * The bulk endpoint takes 200 results per request. Rejected here rather than
9
+ * split into chunks: results are append-only, so a batch that fails half way
10
+ * cannot be rolled back, and the obvious retry records the first chunk twice
11
+ * and leaves the run with a wrong pass rate. qase_ci_report chunks instead,
12
+ * because a retry there makes a new run rather than adding to a real one.
13
+ */
14
+ const MAX_RESULTS = 200;
6
15
  const ResultStepSchema = z.object({
7
16
  position: z.number().int().min(0),
8
17
  status: z.enum(['passed', 'failed', 'blocked', 'skipped']),
@@ -29,43 +38,61 @@ const SingleResultSchema = z.object({
29
38
  const RecordSchema = z.object({
30
39
  code: ProjectCodeSchema,
31
40
  run_id: IdSchema.describe('Run ID to record results into'),
32
- results: z.array(SingleResultSchema).min(1).describe('One or more results to record'),
41
+ results: z
42
+ .array(SingleResultSchema)
43
+ .min(1)
44
+ .max(MAX_RESULTS, `A single call records at most ${MAX_RESULTS} results — split larger batches into ` +
45
+ 'consecutive calls.')
46
+ .describe(`Results to record, 1 to ${MAX_RESULTS} per call`),
33
47
  });
34
48
  const DeleteSchema = z.object({
35
49
  code: ProjectCodeSchema,
36
50
  run_id: IdSchema,
37
51
  hash: z.string().min(1).describe('Result hash to delete'),
38
52
  });
39
- async function record(args) {
53
+ async function record(rawArgs) {
54
+ // Tool handlers get raw MCP arguments — the registry only turns the schema
55
+ // into JSON Schema for the protocol, so nothing has checked them yet. An
56
+ // oversized batch has to fail here to fail at all.
57
+ const parsed = RecordSchema.safeParse(rawArgs);
58
+ if (!parsed.success) {
59
+ const details = parsed.error.issues
60
+ .map((issue) => `${issue.path.join('.') || 'arguments'}: ${issue.message}`)
61
+ .join('; ');
62
+ throw createToolError(`Invalid arguments — ${details}`, CONTEXT);
63
+ }
40
64
  const client = getApiClient();
41
- const { code, run_id, results } = args;
65
+ const { code, run_id, results } = parsed.data;
42
66
  if (results.length === 1) {
43
67
  const single = results[0];
44
68
  const res = await toResultAsync(client.results.createResult(code, run_id, single));
45
69
  return res.match((r) => r.data.result, (e) => {
46
- throw createToolError(e, 'result operation');
70
+ throw createToolError(e, CONTEXT);
47
71
  });
48
72
  }
49
73
  const res = await toResultAsync(client.results.createResultBulk(code, run_id, { results: results }));
50
74
  return res.match(() => ({ success: true, count: results.length }), (e) => {
51
- throw createToolError(e, 'result operation');
75
+ throw createToolError(e, CONTEXT);
52
76
  });
53
77
  }
54
78
  async function del(args) {
55
79
  const client = getApiClient();
56
80
  const result = await toResultAsync(client.results.deleteResult(args.code, args.run_id, args.hash));
57
81
  return result.match(() => ({ success: true, hash: args.hash }), (e) => {
58
- throw createToolError(e, 'result operation');
82
+ throw createToolError(e, CONTEXT);
59
83
  });
60
84
  }
61
85
  toolRegistry.register({
62
86
  name: 'qase_result_record',
63
- description: 'Record one or more results into an existing run. A case says what should be tested; a result ' +
64
- 'says what happened when it ran — status, duration, comment, stacktrace, attachments — so a ' +
65
- 'result always needs a run to live in. Pass several results in one call rather than calling ' +
66
- 'once per test: the tool takes a list and sends them together. If the run does not exist yet ' +
67
- 'and this is a finished CI job, qase_ci_report is the single call that creates the run, ' +
68
- 'records the results and completes it. Status is a label, one of "passed", "failed", ' +
87
+ description: `Record up to ${MAX_RESULTS} results into an existing run. A case says what should be tested; ` +
88
+ 'a result says what happened when it ran — status, duration, comment, stacktrace, ' +
89
+ 'attachments — so a result always needs a run to live in. Pass several results in one call ' +
90
+ 'rather than calling once per test: the tool takes a list and sends them together. ' +
91
+ `${MAX_RESULTS} is the ceiling for one call, and a longer list is refused before anything is ` +
92
+ 'written split it into consecutive calls rather than dropping the tail. If the run does ' +
93
+ 'not exist yet and this is a finished CI job, qase_ci_report is the single call that creates ' +
94
+ 'the run, records the results and completes it, and it splits a larger batch for you. ' +
95
+ 'Status is a label, one of "passed", "failed", ' +
69
96
  '"blocked", "skipped" or "invalid" — unlike the case enums, numeric IDs are not accepted ' +
70
97
  'here. Cost: one API call for the whole list, about 0.5s for a small ' +
71
98
  'batch, growing with payload rather than with the number of results.',
@@ -1 +1 @@
1
- {"version":3,"file":"results.js","sourceRoot":"","sources":["../../../src/operations-v2/write/results.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"results.js","sourceRoot":"","sources":["../../../src/operations-v2/write/results.ts"],"names":[],"mappings":"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"}
package/build/server.d.ts CHANGED
@@ -10,9 +10,10 @@ import './operations-v2/index.js';
10
10
  /**
11
11
  * Create and configure a new MCP Server instance.
12
12
  *
13
- * Called once for stdio/SSE (single connection) and once per session for
14
- * Streamable HTTP (multiple concurrent connections). Each session needs its
15
- * own Server instance because the SDK enforces one transport per server.
13
+ * Called once for stdio (single connection) and once per session for both
14
+ * SSE and Streamable HTTP (multiple concurrent connections). Each session
15
+ * needs its own Server instance because the SDK enforces one transport per
16
+ * server.
16
17
  */
17
18
  export declare function createServer(): Server;
18
19
  //# sourceMappingURL=server.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAyBnE,OAAO,0BAA0B,CAAC;AAElC;;;;;;GAMG;AACH,wBAAgB,YAAY,IAAI,MAAM,CA2KrC"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAyBnE,OAAO,0BAA0B,CAAC;AAElC;;;;;;;GAOG;AACH,wBAAgB,YAAY,IAAI,MAAM,CA2KrC"}
package/build/server.js CHANGED
@@ -24,9 +24,10 @@ import './operations-v2/index.js';
24
24
  /**
25
25
  * Create and configure a new MCP Server instance.
26
26
  *
27
- * Called once for stdio/SSE (single connection) and once per session for
28
- * Streamable HTTP (multiple concurrent connections). Each session needs its
29
- * own Server instance because the SDK enforces one transport per server.
27
+ * Called once for stdio (single connection) and once per session for both
28
+ * SSE and Streamable HTTP (multiple concurrent connections). Each session
29
+ * needs its own Server instance because the SDK enforces one transport per
30
+ * server.
30
31
  */
31
32
  export function createServer() {
32
33
  const server = new Server({
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
@@ -6,5 +6,5 @@ export interface SSETransportConfig {
6
6
  sseEndpoint?: string;
7
7
  messagesEndpoint?: string;
8
8
  }
9
- export declare function setupSSETransport(server: Server, config: SSETransportConfig): Express;
9
+ export declare function setupSSETransport(createServer: () => Server, config: SSETransportConfig): Express;
10
10
  //# sourceMappingURL=sse.d.ts.map
@@ -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;AAE3C,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,CA+DrF"}
1
+ {"version":3,"file":"sse.d.ts","sourceRoot":"","sources":["../../src/transports/sse.ts"],"names":[],"mappings":"AAAA,OAAgB,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAE3C,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAQnE,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;AAaD,wBAAgB,iBAAiB,CAAC,YAAY,EAAE,MAAM,MAAM,EAAE,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAoGjG"}
@@ -4,21 +4,26 @@ import { requestTokenStorage } from '../utils/auth-context.js';
4
4
  import { integrationStorage } from '../utils/integration-context.js';
5
5
  import { normalizeIntegrationMarker } from '../utils/integration-marker.js';
6
6
  import { getMetrics } from '../cache/index.js';
7
+ import { createBearerRequiredGuard } from '../auth/bearer-guard.js';
7
8
  /** Normalised integration marker off a header or query value (integration-marker.ts). */
8
9
  function readIntegrationMarker(value) {
9
10
  return typeof value === 'string' ? normalizeIntegrationMarker(value) : undefined;
10
11
  }
11
- export function setupSSETransport(server, config) {
12
+ export function setupSSETransport(createServer, config) {
12
13
  const app = express();
13
14
  app.use(express.json());
14
15
  const sseEndpoint = config.sseEndpoint || '/sse';
15
16
  const messagesEndpoint = config.messagesEndpoint || '/messages';
16
17
  const host = config.host || '0.0.0.0';
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;
18
+ // SSE has no OAuth wiring and is not getting any — the transport is
19
+ // deprecated. What it does get is the floor: a caller must present a token,
20
+ // so a request can no longer run under the operator's QASE_API_TOKEN.
21
+ const requireBearer = createBearerRequiredGuard();
22
+ // Keyed by the session id the SDK puts in the endpoint event it sends the
23
+ // client, which the client then echoes as ?sessionId= on every POST. A single
24
+ // `let transport` here used to mean the second client to connect took the
25
+ // first one's stream.
26
+ const sessions = new Map();
22
27
  // Health check endpoint
23
28
  app.get('/health', (_req, res) => {
24
29
  res.json({ status: 'ok', transport: 'sse' });
@@ -29,32 +34,53 @@ export function setupSSETransport(server, config) {
29
34
  res.send(getMetrics().renderPrometheus());
30
35
  });
31
36
  // SSE endpoint for establishing connection
32
- app.get(sseEndpoint, (req, res) => {
33
- console.error('[SSE] Client connected');
34
- connectionIntegration =
35
- readIntegrationMarker(req.headers['x-qase-integration']) ??
36
- readIntegrationMarker(req.query.integration);
37
- transport = new SSEServerTransport(messagesEndpoint, res);
38
- server.connect(transport);
37
+ app.get(sseEndpoint, requireBearer, (req, res) => {
38
+ const integration = readIntegrationMarker(req.headers['x-qase-integration']) ??
39
+ readIntegrationMarker(req.query.integration);
40
+ const transport = new SSEServerTransport(messagesEndpoint, res);
41
+ sessions.set(transport.sessionId, { transport, integration });
42
+ console.error(`[SSE] Client connected (session ${transport.sessionId})`);
43
+ res.on('close', () => {
44
+ sessions.delete(transport.sessionId);
45
+ console.error(`[SSE] Client disconnected (session ${transport.sessionId})`);
46
+ });
47
+ // A fresh Server per stream: Protocol.connect() stores the transport on the
48
+ // instance, so sharing one Server between two clients would put them back
49
+ // in the fight the session map exists to end.
50
+ //
51
+ // The catch matters: if transport.start() rejects (the client aborts the
52
+ // GET, or any other SDK error), an unhandled rejection here would take
53
+ // the whole process down on Node 22, the Dockerfile's base image, which
54
+ // exits by default on an unhandled rejection.
55
+ createServer()
56
+ .connect(transport)
57
+ .catch((error) => {
58
+ sessions.delete(transport.sessionId);
59
+ console.error(`[SSE] Failed to connect session ${transport.sessionId}:`, error);
60
+ });
39
61
  });
40
62
  // Messages endpoint for receiving client messages
41
- app.post(messagesEndpoint, (req, res) => {
42
- if (!transport) {
43
- res.status(503).json({ error: 'No SSE connection established' });
63
+ app.post(messagesEndpoint, requireBearer, (req, res) => {
64
+ const sessionId = typeof req.query.sessionId === 'string' ? req.query.sessionId : '';
65
+ const session = sessions.get(sessionId);
66
+ if (!session) {
67
+ res.status(404).json({ error: 'Unknown or closed SSE session — reconnect to /sse' });
44
68
  return;
45
69
  }
46
70
  const authHeader = req.headers['authorization'] || '';
47
71
  const requestToken = authHeader.startsWith('Bearer ') ? authHeader.slice(7).trim() : '';
48
- const integration = readIntegrationMarker(req.headers['x-qase-integration']) ?? connectionIntegration ?? '';
72
+ const integration = readIntegrationMarker(req.headers['x-qase-integration']) ?? session.integration ?? '';
49
73
  // `express.json()` above has already consumed the body, so it has to be
50
74
  // handed over — otherwise the SDK reads a spent stream and every call fails
51
75
  // with "stream is not readable".
52
- requestTokenStorage.run(requestToken, () => integrationStorage.run(integration, () => transport.handlePostMessage(req, res, req.body)));
76
+ requestTokenStorage.run(requestToken, () => integrationStorage.run(integration, () => session.transport.handlePostMessage(req, res, req.body)));
53
77
  });
54
78
  // Start server
55
79
  const httpServer = app.listen(config.port, host, () => {
56
80
  console.error(`[SSE] Server listening on http://${host}:${config.port}${sseEndpoint}`);
57
81
  console.error(`[SSE] Health check: http://${host}:${config.port}/health`);
82
+ console.error('[SSE] WARNING: the SSE transport is deprecated (MCP spec 2025-03-26) and will be ' +
83
+ 'removed in 3.0. Use --transport streamable-http instead.');
58
84
  });
59
85
  // Keep server reference alive (prevent garbage collection), same as streamable-http
60
86
  app._httpServer = httpServer;
@@ -1 +1 @@
1
- {"version":3,"file":"sse.js","sourceRoot":"","sources":["../../src/transports/sse.ts"],"names":[],"mappings":"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"}
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;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,CAqVT"}
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;AAOjF,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,CA0VT"}
@@ -10,6 +10,7 @@ import { getOAuthConfig } from '../auth/oauth-config.js';
10
10
  import { createJwksVerifier } from '../auth/jwks-verifier.js';
11
11
  import { createProxyProvider } from '../auth/proxy-provider.js';
12
12
  import { createMcpGuard } from '../auth/mcp-guard.js';
13
+ import { createBearerRequiredGuard } from '../auth/bearer-guard.js';
13
14
  import { authorizeRedirectUriStorage } from '../auth/client-context.js';
14
15
  // Helper to check if a request is an initialize request
15
16
  function isInitializeRequest(body) {
@@ -126,7 +127,12 @@ export function setupStreamableHttpTransport(createServer, config, oauthDeps) {
126
127
  }
127
128
  const endpoint = config.endpoint || '/mcp';
128
129
  const host = config.host || '0.0.0.0';
129
- const guards = mcpGuard ? [mcpGuard] : [];
130
+ // With OAuth on, mcpGuard validates JWTs and passes opaque tokens through.
131
+ // With OAuth off there used to be no guard at all, which meant an
132
+ // unauthenticated request ran under the operator's QASE_API_TOKEN. The
133
+ // fallback guard keeps that door shut without pulling OAuth into a
134
+ // deployment that deliberately turned it off.
135
+ const guards = [mcpGuard ?? createBearerRequiredGuard()];
130
136
  // Session management - store transport and last-seen timestamp per session.
131
137
  // Sessions are in-memory per pod; one idle longer than this window is evicted
132
138
  // (the client transparently re-initializes on the resulting 404). Default 24h so
@@ -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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"}
@@ -5,6 +5,17 @@ type SystemFieldMap = Record<string, Record<string, number>>;
5
5
  * added its own option is handled as well as the built-in ones.
6
6
  */
7
7
  export declare function normalizeEnumFields<T extends Record<string, unknown>>(data: T, fields: readonly string[]): Promise<T>;
8
+ /**
9
+ * `is_flaky` is a dictionary field like the rest (0=No, 1=Yes), but its name
10
+ * reads like a boolean and earlier versions declared it as one, so a caller
11
+ * reaching for `true` is the expected mistake rather than an odd one. Map it
12
+ * onto the matching option id.
13
+ *
14
+ * This is deliberately kept out of normalizeEnumValue: for the other enum
15
+ * fields a boolean is a genuine caller mistake, and silently turning
16
+ * `priority: true` into High would be worse than the API rejecting it.
17
+ */
18
+ export declare function coerceFlakyBoolean(value: unknown): unknown;
8
19
  export declare function normalizeCaseEnums<T extends Record<string, unknown>>(caseData: T): Promise<T>;
9
20
  /** @internal — used by tests to pre-populate the tenant-scoped shard. */
10
21
  export declare function __setCaseEnumCacheForTest(snapshot: SystemFieldMap): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"case-enums.d.ts","sourceRoot":"","sources":["../../src/utils/case-enums.ts"],"names":[],"mappings":"AAkCA,KAAK,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;AA+E7D;;;;GAIG;AACH,wBAAsB,mBAAmB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACzE,IAAI,EAAE,CAAC,EACP,MAAM,EAAE,SAAS,MAAM,EAAE,GACxB,OAAO,CAAC,CAAC,CAAC,CAaZ;AAED,wBAAsB,kBAAkB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACxE,QAAQ,EAAE,CAAC,GACV,OAAO,CAAC,CAAC,CAAC,CAEZ;AAED,yEAAyE;AACzE,wBAAsB,yBAAyB,CAAC,QAAQ,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAGvF;AAED,kEAAkE;AAClE,wBAAsB,yBAAyB,IAAI,OAAO,CAAC,IAAI,CAAC,CAG/D"}
1
+ {"version":3,"file":"case-enums.d.ts","sourceRoot":"","sources":["../../src/utils/case-enums.ts"],"names":[],"mappings":"AAoCA,KAAK,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;AA+E7D;;;;GAIG;AACH,wBAAsB,mBAAmB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACzE,IAAI,EAAE,CAAC,EACP,MAAM,EAAE,SAAS,MAAM,EAAE,GACxB,OAAO,CAAC,CAAC,CAAC,CAaZ;AAED;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAG1D;AAED,wBAAsB,kBAAkB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACxE,QAAQ,EAAE,CAAC,GACV,OAAO,CAAC,CAAC,CAAC,CAUZ;AAED,yEAAyE;AACzE,wBAAsB,yBAAyB,CAAC,QAAQ,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAGvF;AAED,kEAAkE;AAClE,wBAAsB,yBAAyB,IAAI,OAAO,CAAC,IAAI,CAAC,CAG/D"}
@@ -9,6 +9,7 @@ const caseEnumFields = [
9
9
  'status',
10
10
  'layer',
11
11
  'automation',
12
+ 'is_flaky',
12
13
  ];
13
14
  // System fields are workspace-level config (priority, severity, status options,
14
15
  // etc.) that change on the order of hours to days when an admin reconfigures
@@ -102,8 +103,29 @@ export async function normalizeEnumFields(data, fields) {
102
103
  }
103
104
  return normalized;
104
105
  }
106
+ /**
107
+ * `is_flaky` is a dictionary field like the rest (0=No, 1=Yes), but its name
108
+ * reads like a boolean and earlier versions declared it as one, so a caller
109
+ * reaching for `true` is the expected mistake rather than an odd one. Map it
110
+ * onto the matching option id.
111
+ *
112
+ * This is deliberately kept out of normalizeEnumValue: for the other enum
113
+ * fields a boolean is a genuine caller mistake, and silently turning
114
+ * `priority: true` into High would be worse than the API rejecting it.
115
+ */
116
+ export function coerceFlakyBoolean(value) {
117
+ if (typeof value !== 'boolean')
118
+ return value;
119
+ return value ? '1' : '0';
120
+ }
105
121
  export async function normalizeCaseEnums(caseData) {
106
- return normalizeEnumFields(caseData, caseEnumFields);
122
+ // qase_case_upsert and the review tools hand their arguments to the handler
123
+ // without parsing them against the schema, so the coercion the schema
124
+ // declares never runs for them — apply it here too.
125
+ const data = typeof caseData.is_flaky === 'boolean'
126
+ ? { ...caseData, is_flaky: coerceFlakyBoolean(caseData.is_flaky) }
127
+ : caseData;
128
+ return normalizeEnumFields(data, caseEnumFields);
107
129
  }
108
130
  /** @internal — used by tests to pre-populate the tenant-scoped shard. */
109
131
  export async function __setCaseEnumCacheForTest(snapshot) {
@@ -1 +1 @@
1
- {"version":3,"file":"case-enums.js","sourceRoot":"","sources":["../../src/utils/case-enums.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACvE,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAWtD,MAAM,cAAc,GAAoB;IACtC,UAAU;IACV,MAAM;IACN,UAAU;IACV,UAAU;IACV,QAAQ;IACR,OAAO;IACP,YAAY;CACb,CAAC;AAeF,gFAAgF;AAChF,6EAA6E;AAC7E,6EAA6E;AAC7E,iDAAiD;AACjD,MAAM,oBAAoB,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;AAE3C,SAAS,kBAAkB,CAAC,GAAY,EAAE,MAA+B;IACvE,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,IAAI;QAAE,OAAO,SAAS,CAAC;IACxD,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,GAAG,CAAC;IACxC,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IAE9C,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IAC3B,IAAI,OAAO,KAAK,EAAE;QAAE,OAAO,SAAS,CAAC;IAErC,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;IAC/B,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC;QAAE,OAAO,MAAM,CAAC;IAE5C,MAAM,KAAK,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IACpC,OAAO,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC;AACzB,CAAC;AAED,SAAS,gBAAgB,CAAC,KAA0B;IAClD,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IACnE,MAAM,GAAG,GAA2B,EAAE,CAAC;IACvC,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;QAChC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC;QACrC,IAAI,GAAG,CAAC,KAAK;YAAE,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC;QACrD,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC;IAClC,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,eAAe;IACtB,MAAM,KAAK,GAAG,iBAAiB,EAAE,CAAC;IAClC,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,aAAa,CAAC;IAC1D,OAAO,aAAa,CAAC;QACnB,IAAI;QACJ,QAAQ,EAAE,SAAS,CAAC,KAAK,CAAC;QAC1B,QAAQ,EAAE,eAAe;KAC1B,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,oBAAoB;IACjC,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;IAC9B,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,eAAe,EAAE,CAAC;IAC7D,MAAM,GAAG,GAAmB,EAAE,CAAC;IAE/B,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,IAAI,CAAC,MAA+B,EAAE,CAAC;QAClE,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QACtC,MAAM,MAAM,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;QACvC,IAAI,MAAM;YAAE,GAAG,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;IACjC,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;;;;;;GASG;AACH,KAAK,UAAU,kBAAkB;IAC/B,MAAM,KAAK,GAAG,MAAM,QAAQ,EAAE,CAAC;IAC/B,MAAM,GAAG,GAAG,eAAe,EAAE,CAAC;IAE9B,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,GAAG,CAAiB,GAAG,CAAC,CAAC;IACpD,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC;IAE1B,MAAM,KAAK,GAAG,MAAM,oBAAoB,EAAE,CAAC;IAC3C,MAAM,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,oBAAoB,CAAC,CAAC;IAClD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,IAAO,EACP,MAAyB;IAEzB,MAAM,UAAU,GAAG,EAAE,GAAG,IAAI,EAAE,CAAC;IAC/B,MAAM,YAAY,GAAG,MAAM,kBAAkB,EAAE,CAAC;IAEhD,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,GAAG,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;QAC9B,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;QACnC,MAAM,MAAM,GAAG,kBAAkB,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QAC/C,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACxB,UAAsC,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC;QAC1D,CAAC;IACH,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,QAAW;IAEX,OAAO,mBAAmB,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;AACvD,CAAC;AAED,yEAAyE;AACzE,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAAC,QAAwB;IACtE,MAAM,KAAK,GAAG,MAAM,QAAQ,EAAE,CAAC;IAC/B,MAAM,KAAK,CAAC,GAAG,CAAC,eAAe,EAAE,EAAE,QAAQ,EAAE,oBAAoB,CAAC,CAAC;AACrE,CAAC;AAED,kEAAkE;AAClE,MAAM,CAAC,KAAK,UAAU,yBAAyB;IAC7C,MAAM,KAAK,GAAG,MAAM,QAAQ,EAAE,CAAC;IAC/B,MAAM,KAAK,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC,CAAC;AACxC,CAAC"}
1
+ {"version":3,"file":"case-enums.js","sourceRoot":"","sources":["../../src/utils/case-enums.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- export declare const VERSION = "2.4.0";
1
+ export declare const VERSION = "2.5.0";
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.4.0';
2
+ export const VERSION = '2.5.0';
3
3
  //# sourceMappingURL=version.js.map
package/docs/self-run.md CHANGED
@@ -97,6 +97,38 @@ Only `http` and `https` are recognised (case-insensitive, with or without a trai
97
97
 
98
98
  Use `http` only for deployments you control on a trusted network: the API token travels in a request header, unencrypted, on every call.
99
99
 
100
+ ## Security of network transports
101
+
102
+ `stdio` has no network listener: the client starts the process and the token
103
+ lives in the client's configuration. The `sse` and `streamable-http` transports
104
+ listen on a port, and two things follow from that.
105
+
106
+ **The client supplies the token.** Every request must carry
107
+ `Authorization: Bearer <token>`; the server does not fall back to its own
108
+ `QASE_API_TOKEN` when a request arrives without one. Sharing a single operator
109
+ token across a team is still fine — it just belongs in the client config:
110
+
111
+ ```json
112
+ {
113
+ "mcpServers": {
114
+ "qase": {
115
+ "url": "http://your-host:3000/mcp",
116
+ "headers": { "Authorization": "Bearer YOUR_QASE_API_TOKEN" }
117
+ }
118
+ }
119
+ }
120
+ ```
121
+
122
+ **Bind deliberately.** `--host` defaults to `0.0.0.0`, which accepts connections
123
+ from anywhere that can route to the machine. Pass `--host 127.0.0.1` unless the
124
+ server is meant to be reachable from the network, and keep OAuth on
125
+ (`QASE_OAUTH_ENABLED` defaults to enabled) unless you have a specific reason to
126
+ turn it off.
127
+
128
+ OAuth applies to `streamable-http` only: on `--transport sse` a token is
129
+ required but not validated by the server — any non-empty value passes, and a
130
+ bad one only fails later when the Qase API rejects it.
131
+
100
132
  ## Client Setup (stdio)
101
133
 
102
134
  ### Claude Desktop
@@ -260,6 +292,10 @@ npm run start:stdio
260
292
 
261
293
  ### SSE Transport
262
294
 
295
+ > **Deprecated.** The SSE transport was deprecated in the MCP specification on
296
+ > 2025-03-26 and will be removed in Qase MCP Server 3.0. Use
297
+ > `--transport streamable-http` instead.
298
+
263
299
  Server-Sent Events for web-based clients:
264
300
 
265
301
  ```bash
@@ -269,6 +305,8 @@ npm run start:sse
269
305
  # Metrics: http://localhost:3000/metrics
270
306
  ```
271
307
 
308
+ Clients must send a bearer token — see [Security of network transports](#security-of-network-transports).
309
+
272
310
  ### Streamable HTTP Transport
273
311
 
274
312
  Full HTTP-based transport with session management:
@@ -280,6 +318,8 @@ npm run start:http
280
318
  # Metrics: http://localhost:3000/metrics
281
319
  ```
282
320
 
321
+ Clients must send a bearer token — see [Security of network transports](#security-of-network-transports).
322
+
283
323
  ### Custom Configuration
284
324
 
285
325
  ```bash
package/docs/tools.md CHANGED
@@ -34,7 +34,7 @@ Every tool's schema uses "label or numeric ID" strings for Qase's configurable e
34
34
 
35
35
  | Tool | Description | Key params | Visibility |
36
36
  | --- | --- | --- | --- |
37
- | `qase_case_upsert` | Create or update a test case. If `id` is provided, updates the existing case; if omitted, creates a new one. Enum fields (priority, severity, type, etc.) accept both labels ("high", "blocker") and numeric IDs — the server normalizes automatically. | `code`, `id` (optional), `title` (1-255 chars), `description`, `preconditions`, `postconditions`, `severity`, `priority`, `type`, `layer`, `behavior`, `automation`, `status` (all label-or-ID strings), `is_flaky`, `suite_id`, `milestone_id`, `steps` (array, supports nesting; a step may reference a shared step via `shared` — the shared step hash — instead of `action`), `steps_type` (enum: classic, gherkin), `tags`, `attachments`, `custom_field` | core |
37
+ | `qase_case_upsert` | Create or update a test case. If `id` is provided, updates the existing case; if omitted, creates a new one. Enum fields (priority, severity, type, etc.) accept both labels ("high", "blocker") and numeric IDs — the server normalizes automatically. | `code`, `id` (optional), `title` (1-255 chars), `description`, `preconditions`, `postconditions`, `severity`, `priority`, `type`, `layer`, `behavior`, `automation`, `status`, `is_flaky` (all label-or-ID strings; `is_flaky` is 0=No / 1=Yes and also accepts a boolean), `suite_id`, `milestone_id`, `steps` (array, supports nesting; a step may reference a shared step via `shared` — the shared step hash — instead of `action`), `steps_type` (enum: classic, gherkin), `tags`, `attachments`, `custom_field` | core |
38
38
  | `qase_case_bulk_create` | Create up to 100 test cases in a single request. Use instead of calling `qase_case_upsert` repeatedly when importing or generating several cases at once. Enum fields accept labels or numeric IDs. Creates only — use `qase_case_upsert` with an `id` to update. Returns the IDs of the created cases in submission order. | `code`, `cases` (array, 1-100 — same fields as `qase_case_upsert` without `id`, including `shared` step references) | discoverable |
39
39
  | `qase_case_delete` | Delete a test case by project code and case ID. | `code`, `id` | discoverable |
40
40
  | `qase_defect_upsert` | Create or update a defect. If `id` is provided, updates (including status changes and resolve). If omitted, creates a new defect. Set `status: "resolved"` to resolve an existing defect. | `code`, `id` (optional), `title` (1-255 chars), `actual_result`, `severity` (enum, see [below](#case-enum-values)), `status` (enum: open, in_progress, resolved, invalid), `tags`, `attachments`, `custom_field` | core |
@@ -42,7 +42,7 @@ Every tool's schema uses "label or numeric ID" strings for Qase's configurable e
42
42
  | `qase_run_upsert` | Create or update a test run. If `id` is provided, updates; if omitted, creates. | `code`, `id` (optional), `title` (1-255 chars), `description`, `environment_id`, `milestone_id`, `plan_id`, `cases` (case ID array), `tags`, `is_autotest`, `start_time`/`end_time` (RFC3339), `custom_field` | core |
43
43
  | `qase_run_complete` | Mark a test run as complete. | `code`, `id` | discoverable |
44
44
  | `qase_run_delete` | Delete a test run. | `code`, `id` | discoverable |
45
- | `qase_result_record` | Record one or more test results into a run. A single entry uses the single-result API, multiple entries use bulk. Each result must include a status; `case_id` is recommended. | `code`, `run_id`, `results` (array, min 1) — each result: `case_id` (optional), `status` (enum: passed, failed, blocked, skipped, invalid), `comment`, `stacktrace`, `time_ms`, `defect` (bool), `steps` (array with `position`, `status`, `comment`, `attachments`), `attachments`, `custom_field` | core |
45
+ | `qase_result_record` | Record one or more test results into a run. A single entry uses the single-result API, multiple entries use bulk. Each result must include a status; `case_id` is recommended. **The bulk endpoint takes at most 200 results per request**, so a longer list is refused before anything is written — split it across consecutive calls. It is refused rather than split automatically because results are append-only: a batch that failed half way could not be unwound, and the natural retry would record the first 200 a second time and leave the run with a wrong pass rate. Use `qase_ci_report` for a finished run, which does split for you. | `code`, `run_id`, `results` (array, 1-200) — each result: `case_id` (optional), `status` (enum: passed, failed, blocked, skipped, invalid), `comment`, `stacktrace`, `time_ms`, `defect` (bool), `steps` (array with `position`, `status`, `comment`, `attachments`), `attachments`, `custom_field` | core |
46
46
  | `qase_result_delete` | Delete a test result by run ID and result hash. | `code`, `run_id`, `hash` | discoverable |
47
47
  | `qase_suite_upsert` | Create or update a test suite. If `id` is provided, updates the existing suite; if omitted, creates a new one. | `code`, `id` (optional), `title` (1-255 chars), `description`, `preconditions`, `parent_id` (for nesting) | discoverable |
48
48
  | `qase_suite_delete` | Delete a test suite. If `delete_cases` is true, removes all cases in the suite; if false or omitted, cases are moved to the parent suite. | `code`, `id`, `delete_cases` (optional bool) | discoverable |
@@ -86,7 +86,7 @@ Composite tools chain several underlying operations into one call, so an agent a
86
86
 
87
87
  | Tool | Description | Key params | Visibility |
88
88
  | --- | --- | --- | --- |
89
- | `qase_ci_report` | Report CI/CD test results in one call: creates a run, records all results, and optionally completes the run. Replaces the 3-4 step manual workflow of create_run → bulk_create_results → complete_run. Designed for CI pipeline integration. | `code`, `title` (1-255 chars), `environment_id` (optional), `results` (array, min 1: `case_id`, `status` (enum: passed, failed, blocked, skipped, invalid), `comment`, `time_ms`, `stacktrace`, `defect`, `attachments`), `complete` (default true), `is_autotest` (default true) | core |
89
+ | `qase_ci_report` | Report CI/CD test results in one call: creates a run, records all results, and optionally completes the run. Replaces the 3-4 step manual workflow of create_run → bulk_create_results → complete_run. Designed for CI pipeline integration. **Batches larger than 200 are split across requests automatically**, up to 2000 results in one report; beyond that, report the suite as several runs. If a batch fails part way the error names the run that exists and how many results reached it, so the rest can be recorded with `qase_result_record` rather than by repeating this call, which would create a second run. | `code`, `title` (1-255 chars), `environment_id` (optional), `results` (array, 1-2000: `case_id`, `status` (enum: passed, failed, blocked, skipped, invalid), `comment`, `time_ms`, `stacktrace`, `defect`, `attachments`), `complete` (default true), `is_autotest` (default true) | core |
90
90
  | `qase_regression_run` | Set up a regression test run in one call. Accepts case selection by suite IDs, explicit case IDs, or plan ID. Creates the run and adds all matching cases. Replaces the multi-step workflow of find cases → create run → add cases. | `code`, `title` (1-255 chars), `description`, `environment_id`, `milestone_id`, `plan_id`, `suite_ids` (array), `include_cases` (array) | core |
91
91
  | `qase_triage_defect` | Create a defect from a test failure. `title`, `actual_result`, and `severity` are all required by the API. The API offers no way to attach runs or results to a defect — the `runs`/`results` arrays seen on a defect are populated by the test runner when a result is reported as a defect — so reference failing results in `actual_result` instead. (`run_id` and `failed_result_ids` were removed in 2.1.0: they were accepted and ignored.) | `code`, `title` (1-255 chars), `actual_result` (required), `severity` (required, enum, see [below](#case-enum-values)), `description`, `tags`, `attachments`, `custom_field` | core |
92
92
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@qase/mcp-server",
3
- "version": "2.4.0",
3
+ "version": "2.5.0",
4
4
  "mcpName": "io.qase/mcp-server",
5
5
  "description": "Official MCP server for Qase Test Management Platform",
6
6
  "type": "module",
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.4.0",
11
+ "version": "2.5.0",
12
12
  "packages": [
13
13
  {
14
14
  "registryType": "npm",
15
15
  "identifier": "@qase/mcp-server",
16
- "version": "2.4.0",
16
+ "version": "2.5.0",
17
17
  "transport": {
18
18
  "type": "stdio"
19
19
  },