@qase/mcp-server 2.2.2 → 2.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -5,6 +5,33 @@ 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.3.0]
9
+
10
+ ### Added
11
+
12
+ - **Per-producer attribution.** An integration built on top of this server can now say not only *who* it is but *which of its parts* made the call — a skill, a slash command, an agent — and where that call sits in the run. Two hidden arguments carry it: `_qase_integration` (`<name>/<version>`, the same marker the session header takes) and `_qase_producer` (`<producer>/<seq>/<entrypoint>`, entrypoint being one of `skill`, `command`, `agent`). They become three headers on the outbound Qase API request, beside the existing pair: `X-MCP-Integration-Producer`, `X-MCP-Integration-Seq`, `X-MCP-Integration-Entrypoint`.
13
+
14
+ The arguments travel in the call rather than in a header because a header cannot vary per call — the HTTP transport captures the integration marker once, when the session opens, and one session runs many producers in sequence. They are deliberately absent from every tool's input schema: they are not parameters, and no model should be asked to supply them. Both are stripped before the tool handler runs.
15
+
16
+ Call arguments now outrank the session header as a source of the integration marker, which in turn outranks `QASE_MCP_INTEGRATION` — a per-call claim is the more specific one. The session and env paths are untouched, only outranked.
17
+
18
+ A producer is never sent without an integration: alone it would say "some skill did this" without saying whose, and since the integration name is allowlisted (`ALLOWED_INTEGRATIONS`) while the producer is only shape-checked (`^[a-z0-9][a-z0-9-]{1,47}$`), the integration is what keeps an arbitrary client out of the analytics dimension. Producers are validated by shape rather than by list on purpose, so a new plugin skill does not need a server release to be counted; cardinality is bounded by that pattern, by the `seq` cap of 500, and by the integration allowlist. Anything malformed, oversized or unknown is dropped silently and the API call still succeeds.
19
+
20
+ Nothing is sent when neither argument is supplied, so clients that send neither are unaffected, and a client that sends them to an older server simply has them ignored.
21
+
22
+ ## [2.2.3]
23
+
24
+ ### Fixed
25
+
26
+ - **`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.
27
+ - **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.
28
+ - **`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.
29
+ - **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.
30
+ - **`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.
31
+ - **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.
32
+
33
+ - **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.
34
+
8
35
  ## [2.2.2]
9
36
 
10
37
  ### Added
@@ -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;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"}
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;AAYjE;;;;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;IAmGlE;;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"}
@@ -15,6 +15,8 @@ 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
17
  import { getIntegration } from '../utils/integration-context.js';
18
+ import { getProducer } from '../utils/producer-context.js';
19
+ import { buildIntegrationHeaders } from './producer-headers.js';
18
20
  import { parseIntegrationMarker } from '../utils/integration-marker.js';
19
21
  import { VERSION } from '../version.js';
20
22
  /**
@@ -98,15 +100,15 @@ class QaseApiClient {
98
100
  // X-MCP-Client-*: the same integration can run on any host, on either
99
101
  // deployment. Sourced per-request from integrationStorage, falling back to
100
102
  // QASE_MCP_INTEGRATION. Nothing is sent unless the marker is well-formed and
101
- // allowlisted — see integration-marker.ts.
103
+ // allowlisted — see integration-marker.ts. The producer is a fourth axis
104
+ // under the integration, naming which part of it ran — a skill, a slash
105
+ // command, an agent — and it is never sent alone, since a producer without
106
+ // an integration attributes the call to nobody.
102
107
  this.axiosInstance.interceptors.request.use((req) => {
103
- const integration = parseIntegrationMarker(getIntegration());
104
- if (integration) {
108
+ const headers = buildIntegrationHeaders(parseIntegrationMarker(getIntegration()), getProducer());
109
+ if (Object.keys(headers).length > 0) {
105
110
  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
- }
111
+ Object.assign(req.headers, headers);
110
112
  }
111
113
  return req;
112
114
  });
@@ -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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"}
@@ -0,0 +1,13 @@
1
+ import type { IntegrationMarker } from '../utils/integration-marker.js';
2
+ import type { ProducerMarker } from '../utils/producer-marker.js';
3
+ /**
4
+ * The attribution headers for one outbound Qase API request.
5
+ *
6
+ * A producer is never sent without an integration. A producer alone says "some
7
+ * skill did this" without saying whose skill, which is not an attribution; and
8
+ * because the integration name is allowlisted while the producer is only
9
+ * shape-checked, the integration is what keeps an arbitrary client out of the
10
+ * analytics dimension.
11
+ */
12
+ export declare function buildIntegrationHeaders(integration: IntegrationMarker | undefined, producer: ProducerMarker | undefined): Record<string, string>;
13
+ //# sourceMappingURL=producer-headers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"producer-headers.d.ts","sourceRoot":"","sources":["../../src/client/producer-headers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAElE;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CACrC,WAAW,EAAE,iBAAiB,GAAG,SAAS,EAC1C,QAAQ,EAAE,cAAc,GAAG,SAAS,GACnC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAexB"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * The attribution headers for one outbound Qase API request.
3
+ *
4
+ * A producer is never sent without an integration. A producer alone says "some
5
+ * skill did this" without saying whose skill, which is not an attribution; and
6
+ * because the integration name is allowlisted while the producer is only
7
+ * shape-checked, the integration is what keeps an arbitrary client out of the
8
+ * analytics dimension.
9
+ */
10
+ export function buildIntegrationHeaders(integration, producer) {
11
+ if (!integration)
12
+ return {};
13
+ const headers = {
14
+ 'X-MCP-Integration-Name': integration.name,
15
+ };
16
+ if (integration.version) {
17
+ headers['X-MCP-Integration-Version'] = integration.version;
18
+ }
19
+ if (producer) {
20
+ headers['X-MCP-Integration-Producer'] = producer.producer;
21
+ headers['X-MCP-Integration-Seq'] = String(producer.seq);
22
+ headers['X-MCP-Integration-Entrypoint'] = producer.entrypoint;
23
+ }
24
+ return headers;
25
+ }
26
+ //# sourceMappingURL=producer-headers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"producer-headers.js","sourceRoot":"","sources":["../../src/client/producer-headers.ts"],"names":[],"mappings":"AAGA;;;;;;;;GAQG;AACH,MAAM,UAAU,uBAAuB,CACrC,WAA0C,EAC1C,QAAoC;IAEpC,IAAI,CAAC,WAAW;QAAE,OAAO,EAAE,CAAC;IAE5B,MAAM,OAAO,GAA2B;QACtC,wBAAwB,EAAE,WAAW,CAAC,IAAI;KAC3C,CAAC;IACF,IAAI,WAAW,CAAC,OAAO,EAAE,CAAC;QACxB,OAAO,CAAC,2BAA2B,CAAC,GAAG,WAAW,CAAC,OAAO,CAAC;IAC7D,CAAC;IACD,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,CAAC,4BAA4B,CAAC,GAAG,QAAQ,CAAC,QAAQ,CAAC;QAC1D,OAAO,CAAC,uBAAuB,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QACxD,OAAO,CAAC,8BAA8B,CAAC,GAAG,QAAQ,CAAC,UAAU,CAAC;IAChE,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;;GAWG;AAqBH,OAAO,0BAA0B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;;GAWG;AAyBH,OAAO,0BAA0B,CAAC"}
package/build/index.js CHANGED
@@ -19,6 +19,10 @@ import { formatApiError, ToolExecutionError } from './utils/errors.js';
19
19
  import { compactResponse } from './utils/response-shape.js';
20
20
  import { isRichResult } from './utils/rich-response.js';
21
21
  import { serverStorage, confirmDestructiveAction } from './utils/server-context.js';
22
+ import { extractCallMarkers } from './utils/call-markers.js';
23
+ import { parseProducerMarker } from './utils/producer-marker.js';
24
+ import { producerStorage } from './utils/producer-context.js';
25
+ import { callIntegrationStorage } from './utils/integration-context.js';
22
26
  import { setupSSETransport } from './transports/sse.js';
23
27
  import { setupStreamableHttpTransport } from './transports/streamableHttp.js';
24
28
  import { VERSION } from './version.js';
@@ -77,77 +81,90 @@ function createServer() {
77
81
  */
78
82
  server.setRequestHandler(CallToolRequestSchema, async (request) => {
79
83
  return serverStorage.run(server, async () => {
80
- const { name, arguments: args } = request.params;
84
+ const { name, arguments: rawArgs } = request.params;
85
+ // The two hidden attribution arguments never reach a tool handler — see
86
+ // call-markers.ts for why they travel as arguments rather than a header.
87
+ const markers = extractCallMarkers(rawArgs);
88
+ const args = markers.rest;
81
89
  console.error(`[Server] Executing tool: ${name}`);
82
- // Get tool handler from registry
83
- const handler = toolRegistry.getHandler(name);
84
- if (!handler) {
85
- throw new Error(`Unknown tool: ${name}. Use list_tools to see available tools.`);
86
- }
87
- // Elicitation: confirm destructive actions before execution
88
- const toolDef = toolRegistry.getTool(name);
89
- if (toolDef?.annotations?.destructiveHint === true) {
90
- const confirmed = await confirmDestructiveAction(name, args || {});
91
- if (!confirmed) {
92
- return {
93
- content: [{ type: 'text', text: `Action "${name}" cancelled by user.` }],
94
- };
90
+ const runCall = async () => {
91
+ // Get tool handler from registry
92
+ const handler = toolRegistry.getHandler(name);
93
+ if (!handler) {
94
+ throw new Error(`Unknown tool: ${name}. Use list_tools to see available tools.`);
95
95
  }
96
- }
97
- try {
98
- // Execute the tool handler with provided arguments
99
- const result = await handler(args || {});
100
- // Rich results: pass through pre-formatted content blocks directly
101
- if (isRichResult(result)) {
96
+ // Elicitation: confirm destructive actions before execution
97
+ const toolDef = toolRegistry.getTool(name);
98
+ if (toolDef?.annotations?.destructiveHint === true) {
99
+ const confirmed = await confirmDestructiveAction(name, args || {});
100
+ if (!confirmed) {
101
+ return {
102
+ content: [{ type: 'text', text: `Action "${name}" cancelled by user.` }],
103
+ };
104
+ }
105
+ }
106
+ try {
107
+ // Execute the tool handler with provided arguments
108
+ const result = await handler(args || {});
109
+ // Rich results: pass through pre-formatted content blocks directly
110
+ if (isRichResult(result)) {
111
+ return {
112
+ content: result.content,
113
+ ...(result.structuredContent && { structuredContent: result.structuredContent }),
114
+ };
115
+ }
116
+ // Default: wrap in compact JSON text block
117
+ const compacted = compactResponse(result);
118
+ const hasOutputSchema = toolDef?.outputSchema !== undefined;
102
119
  return {
103
- content: result.content,
104
- ...(result.structuredContent && { structuredContent: result.structuredContent }),
120
+ content: [
121
+ {
122
+ type: 'text',
123
+ text: JSON.stringify(compacted),
124
+ },
125
+ ],
126
+ // SDK requires structuredContent when outputSchema is defined
127
+ ...(hasOutputSchema && { structuredContent: compacted }),
105
128
  };
106
129
  }
107
- // Default: wrap in compact JSON text block
108
- const compacted = compactResponse(result);
109
- const hasOutputSchema = toolDef?.outputSchema !== undefined;
110
- return {
111
- content: [
112
- {
113
- type: 'text',
114
- text: JSON.stringify(compacted),
115
- },
116
- ],
117
- // SDK requires structuredContent when outputSchema is defined
118
- ...(hasOutputSchema && { structuredContent: compacted }),
119
- };
120
- }
121
- catch (error) {
122
- // Handle tool execution errors (expected failures like validation, API errors)
123
- // These are returned with isError: true so the LLM can understand and recover
124
- if (error instanceof ToolExecutionError) {
125
- console.error(`[Server] Tool '${name}' execution error:`, error.message);
130
+ catch (error) {
131
+ // Handle tool execution errors (expected failures like validation, API errors)
132
+ // These are returned with isError: true so the LLM can understand and recover
133
+ if (error instanceof ToolExecutionError) {
134
+ console.error(`[Server] Tool '${name}' execution error:`, error.message);
135
+ return {
136
+ content: [
137
+ {
138
+ type: 'text',
139
+ text: error.toUserMessage(),
140
+ },
141
+ ],
142
+ isError: true,
143
+ };
144
+ }
145
+ // Handle unexpected errors (protocol-level failures)
146
+ // Format error message using our error utilities
147
+ const errorMessage = formatApiError(error);
148
+ console.error(`[Server] Tool '${name}' unexpected error:`, errorMessage);
149
+ // Return as tool execution error with isError: true for better LLM recovery
126
150
  return {
127
151
  content: [
128
152
  {
129
153
  type: 'text',
130
- text: error.toUserMessage(),
154
+ text: errorMessage,
131
155
  },
132
156
  ],
133
157
  isError: true,
134
158
  };
135
159
  }
136
- // Handle unexpected errors (protocol-level failures)
137
- // Format error message using our error utilities
138
- const errorMessage = formatApiError(error);
139
- console.error(`[Server] Tool '${name}' unexpected error:`, errorMessage);
140
- // Return as tool execution error with isError: true for better LLM recovery
141
- return {
142
- content: [
143
- {
144
- type: 'text',
145
- text: errorMessage,
146
- },
147
- ],
148
- isError: true,
149
- };
150
- }
160
+ };
161
+ // Both scopes stay open for the whole call, so the outbound interceptor
162
+ // sees them however deep in the handler the API request is made.
163
+ const producer = parseProducerMarker(markers.producer);
164
+ const withProducer = producer ? () => producerStorage.run(producer, runCall) : runCall;
165
+ return markers.integration
166
+ ? callIntegrationStorage.run(markers.integration, withProducer)
167
+ : withProducer();
151
168
  });
152
169
  });
153
170
  // Wire tool discovery notifications: when tools are activated via qase_discover_tools,
@@ -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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"}
@@ -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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"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Hidden attribution arguments on a tools/call.
3
+ *
4
+ * A client cannot vary an HTTP header per call — the transport captures the
5
+ * integration marker once per MCP session — so an integration that wants to
6
+ * attribute individual calls has to put the marker in the arguments. These two
7
+ * fields are that channel. They are deliberately not declared in any tool's
8
+ * input schema: they are not parameters, and no model should be asked to supply
9
+ * them.
10
+ *
11
+ * They are stripped here, before the handler sees the arguments. qase_api was
12
+ * verified not to pass arguments through into a request body, but relying on no
13
+ * handler ever doing so is an assumption with no expiry date.
14
+ */
15
+ export declare const INTEGRATION_ARG = "_qase_integration";
16
+ export declare const PRODUCER_ARG = "_qase_producer";
17
+ export interface CallMarkers {
18
+ integration?: string;
19
+ producer?: string;
20
+ rest: Record<string, unknown>;
21
+ }
22
+ export declare function extractCallMarkers(args: unknown): CallMarkers;
23
+ //# sourceMappingURL=call-markers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"call-markers.d.ts","sourceRoot":"","sources":["../../src/utils/call-markers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,eAAO,MAAM,eAAe,sBAAsB,CAAC;AACnD,eAAO,MAAM,YAAY,mBAAmB,CAAC;AAE7C,MAAM,WAAW,WAAW;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC/B;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,OAAO,GAAG,WAAW,CAc7D"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Hidden attribution arguments on a tools/call.
3
+ *
4
+ * A client cannot vary an HTTP header per call — the transport captures the
5
+ * integration marker once per MCP session — so an integration that wants to
6
+ * attribute individual calls has to put the marker in the arguments. These two
7
+ * fields are that channel. They are deliberately not declared in any tool's
8
+ * input schema: they are not parameters, and no model should be asked to supply
9
+ * them.
10
+ *
11
+ * They are stripped here, before the handler sees the arguments. qase_api was
12
+ * verified not to pass arguments through into a request body, but relying on no
13
+ * handler ever doing so is an assumption with no expiry date.
14
+ */
15
+ export const INTEGRATION_ARG = '_qase_integration';
16
+ export const PRODUCER_ARG = '_qase_producer';
17
+ export function extractCallMarkers(args) {
18
+ if (!args || typeof args !== 'object')
19
+ return { rest: {} };
20
+ const { [INTEGRATION_ARG]: integration, [PRODUCER_ARG]: producer, ...rest } = args;
21
+ return {
22
+ integration: typeof integration === 'string' ? integration : undefined,
23
+ producer: typeof producer === 'string' ? producer : undefined,
24
+ rest,
25
+ };
26
+ }
27
+ //# sourceMappingURL=call-markers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"call-markers.js","sourceRoot":"","sources":["../../src/utils/call-markers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,MAAM,CAAC,MAAM,eAAe,GAAG,mBAAmB,CAAC;AACnD,MAAM,CAAC,MAAM,YAAY,GAAG,gBAAgB,CAAC;AAQ7C,MAAM,UAAU,kBAAkB,CAAC,IAAa;IAC9C,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;IAE3D,MAAM,EACJ,CAAC,eAAe,CAAC,EAAE,WAAW,EAC9B,CAAC,YAAY,CAAC,EAAE,QAAQ,EACxB,GAAG,IAAI,EACR,GAAG,IAA+B,CAAC;IAEpC,OAAO;QACL,WAAW,EAAE,OAAO,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS;QACtE,QAAQ,EAAE,OAAO,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;QAC7D,IAAI;KACL,CAAC;AACJ,CAAC"}
@@ -12,11 +12,17 @@ import { AsyncLocalStorage } from 'async_hooks';
12
12
  */
13
13
  export declare const integrationStorage: AsyncLocalStorage<string>;
14
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).
15
+ * Per-call integration marker, supplied in the call arguments rather than a
16
+ * header. Takes priority over the session-scoped value: a per-call claim is more
17
+ * specific than one captured when the session opened.
18
+ */
19
+ export declare const callIntegrationStorage: AsyncLocalStorage<string>;
20
+ /**
21
+ * Read the marker for the current async context: the per-call value first, then
22
+ * the request-scoped one, then the QASE_MCP_INTEGRATION env var (the stdio path,
23
+ * where there is no request to carry a header).
18
24
  *
19
- * Returns undefined when neither is set — the common case, and the one that must
25
+ * Returns undefined when none is set — the common case, and the one that must
20
26
  * leave the outbound request untouched. The value is unvalidated; callers pass it
21
27
  * through parseIntegrationMarker().
22
28
  */
@@ -1 +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"}
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;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,2BAAkC,CAAC;AAEtE;;;;;;;;GAQG;AACH,wBAAgB,cAAc,IAAI,MAAM,GAAG,SAAS,CAOnD"}
@@ -12,15 +12,24 @@ import { AsyncLocalStorage } from 'async_hooks';
12
12
  */
13
13
  export const integrationStorage = new AsyncLocalStorage();
14
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).
15
+ * Per-call integration marker, supplied in the call arguments rather than a
16
+ * header. Takes priority over the session-scoped value: a per-call claim is more
17
+ * specific than one captured when the session opened.
18
+ */
19
+ export const callIntegrationStorage = new AsyncLocalStorage();
20
+ /**
21
+ * Read the marker for the current async context: the per-call value first, then
22
+ * the request-scoped one, then the QASE_MCP_INTEGRATION env var (the stdio path,
23
+ * where there is no request to carry a header).
18
24
  *
19
- * Returns undefined when neither is set — the common case, and the one that must
25
+ * Returns undefined when none is set — the common case, and the one that must
20
26
  * leave the outbound request untouched. The value is unvalidated; callers pass it
21
27
  * through parseIntegrationMarker().
22
28
  */
23
29
  export function getIntegration() {
30
+ const callIntegration = callIntegrationStorage.getStore();
31
+ if (callIntegration)
32
+ return callIntegration;
24
33
  const requestIntegration = integrationStorage.getStore();
25
34
  if (requestIntegration)
26
35
  return requestIntegration;
@@ -1 +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"}
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;;;;GAIG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,IAAI,iBAAiB,EAAU,CAAC;AAEtE;;;;;;;;GAQG;AACH,MAAM,UAAU,cAAc;IAC5B,MAAM,eAAe,GAAG,sBAAsB,CAAC,QAAQ,EAAE,CAAC;IAC1D,IAAI,eAAe;QAAE,OAAO,eAAe,CAAC;IAE5C,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,12 @@
1
+ import { AsyncLocalStorage } from 'async_hooks';
2
+ import type { ProducerMarker } from './producer-marker.js';
3
+ /**
4
+ * Per-call producer storage.
5
+ *
6
+ * Per *call*, not per request or per session: one MCP session runs many
7
+ * producers in sequence, which is the whole point of the axis. Opened by the
8
+ * CallTool handler and read by the outbound interceptor.
9
+ */
10
+ export declare const producerStorage: AsyncLocalStorage<ProducerMarker>;
11
+ export declare function getProducer(): ProducerMarker | undefined;
12
+ //# sourceMappingURL=producer-context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"producer-context.d.ts","sourceRoot":"","sources":["../../src/utils/producer-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAE3D;;;;;;GAMG;AACH,eAAO,MAAM,eAAe,mCAA0C,CAAC;AAEvE,wBAAgB,WAAW,IAAI,cAAc,GAAG,SAAS,CAExD"}
@@ -0,0 +1,13 @@
1
+ import { AsyncLocalStorage } from 'async_hooks';
2
+ /**
3
+ * Per-call producer storage.
4
+ *
5
+ * Per *call*, not per request or per session: one MCP session runs many
6
+ * producers in sequence, which is the whole point of the axis. Opened by the
7
+ * CallTool handler and read by the outbound interceptor.
8
+ */
9
+ export const producerStorage = new AsyncLocalStorage();
10
+ export function getProducer() {
11
+ return producerStorage.getStore();
12
+ }
13
+ //# sourceMappingURL=producer-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"producer-context.js","sourceRoot":"","sources":["../../src/utils/producer-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAGhD;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,iBAAiB,EAAkB,CAAC;AAEvE,MAAM,UAAU,WAAW;IACzB,OAAO,eAAe,CAAC,QAAQ,EAAE,CAAC;AACpC,CAAC"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Producer Marker
3
+ *
4
+ * Which *part* of an integration produced this call — a skill, a slash command,
5
+ * or an agent. A fourth axis under the integration marker (see
6
+ * integration-marker.ts), answering "what did they run" where that one answers
7
+ * "what is driving the server".
8
+ *
9
+ * Unlike integrations, producers are NOT allowlisted. An integration is a
10
+ * product and its name is a deliberate, reviewed addition; a producer is a part
11
+ * of one, and new parts appear whenever that product ships a feature. Requiring
12
+ * a server release before a new skill could be counted would guarantee the
13
+ * metric lags the thing it measures. Cardinality is instead bounded by the
14
+ * pattern below, by the seq cap, and by the fact that nothing is forwarded
15
+ * unless the integration name itself passed the allowlist.
16
+ */
17
+ /** How the user reached the producer. */
18
+ export type Entrypoint = 'skill' | 'command' | 'agent';
19
+ /** Calls beyond this in one run all report the cap, bounding cardinality. */
20
+ export declare const MAX_SEQ = 500;
21
+ export interface ProducerMarker {
22
+ producer: string;
23
+ /** 1-based index of this call within its run; MAX_SEQ for anything beyond. */
24
+ seq: number;
25
+ entrypoint: Entrypoint;
26
+ }
27
+ /**
28
+ * Parse a `<producer>/<seq>/<entrypoint>` marker.
29
+ *
30
+ * Best-effort and silent, exactly like parseIntegrationMarker: anything
31
+ * malformed yields undefined rather than an error, so a bad marker can never
32
+ * fail the API call it was attached to.
33
+ */
34
+ export declare function parseProducerMarker(raw: string | undefined | null): ProducerMarker | undefined;
35
+ //# sourceMappingURL=producer-marker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"producer-marker.d.ts","sourceRoot":"","sources":["../../src/utils/producer-marker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,yCAAyC;AACzC,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,SAAS,GAAG,OAAO,CAAC;AAUvD,6EAA6E;AAC7E,eAAO,MAAM,OAAO,MAAM,CAAC;AAE3B,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,8EAA8E;IAC9E,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,UAAU,CAAC;CACxB;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,cAAc,GAAG,SAAS,CAiB9F"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Producer Marker
3
+ *
4
+ * Which *part* of an integration produced this call — a skill, a slash command,
5
+ * or an agent. A fourth axis under the integration marker (see
6
+ * integration-marker.ts), answering "what did they run" where that one answers
7
+ * "what is driving the server".
8
+ *
9
+ * Unlike integrations, producers are NOT allowlisted. An integration is a
10
+ * product and its name is a deliberate, reviewed addition; a producer is a part
11
+ * of one, and new parts appear whenever that product ships a feature. Requiring
12
+ * a server release before a new skill could be counted would guarantee the
13
+ * metric lags the thing it measures. Cardinality is instead bounded by the
14
+ * pattern below, by the seq cap, and by the fact that nothing is forwarded
15
+ * unless the integration name itself passed the allowlist.
16
+ */
17
+ const ENTRYPOINTS = ['skill', 'command', 'agent'];
18
+ /** Lowercase, dash-separated, 2-48 characters. Deliberately narrow. */
19
+ const PRODUCER_PATTERN = /^[a-z0-9][a-z0-9-]{1,47}$/;
20
+ /** Longest input we will look at; longer is truncated, then validated. */
21
+ const MAX_FIELD_LENGTH = 128;
22
+ /** Calls beyond this in one run all report the cap, bounding cardinality. */
23
+ export const MAX_SEQ = 500;
24
+ /**
25
+ * Parse a `<producer>/<seq>/<entrypoint>` marker.
26
+ *
27
+ * Best-effort and silent, exactly like parseIntegrationMarker: anything
28
+ * malformed yields undefined rather than an error, so a bad marker can never
29
+ * fail the API call it was attached to.
30
+ */
31
+ export function parseProducerMarker(raw) {
32
+ const trimmed = raw?.trim().slice(0, MAX_FIELD_LENGTH);
33
+ if (!trimmed)
34
+ return undefined;
35
+ const parts = trimmed.split('/');
36
+ if (parts.length !== 3)
37
+ return undefined;
38
+ const producer = parts[0].trim().toLowerCase();
39
+ if (!PRODUCER_PATTERN.test(producer))
40
+ return undefined;
41
+ const entrypoint = parts[2].trim().toLowerCase();
42
+ if (!ENTRYPOINTS.includes(entrypoint))
43
+ return undefined;
44
+ const seq = Number(parts[1].trim());
45
+ if (!Number.isInteger(seq) || seq < 1)
46
+ return undefined;
47
+ return { producer, seq: Math.min(seq, MAX_SEQ), entrypoint: entrypoint };
48
+ }
49
+ //# sourceMappingURL=producer-marker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"producer-marker.js","sourceRoot":"","sources":["../../src/utils/producer-marker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAKH,MAAM,WAAW,GAAsB,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;AAErE,uEAAuE;AACvE,MAAM,gBAAgB,GAAG,2BAA2B,CAAC;AAErD,0EAA0E;AAC1E,MAAM,gBAAgB,GAAG,GAAG,CAAC;AAE7B,6EAA6E;AAC7E,MAAM,CAAC,MAAM,OAAO,GAAG,GAAG,CAAC;AAS3B;;;;;;GAMG;AACH,MAAM,UAAU,mBAAmB,CAAC,GAA8B;IAChE,MAAM,OAAO,GAAG,GAAG,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAC;IACvD,IAAI,CAAC,OAAO;QAAE,OAAO,SAAS,CAAC;IAE/B,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACjC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAEzC,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC/C,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC;QAAE,OAAO,SAAS,CAAC;IAEvD,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACjD,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC;QAAE,OAAO,SAAS,CAAC;IAExD,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACpC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC;QAAE,OAAO,SAAS,CAAC;IAExD,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,EAAE,UAAU,EAAE,UAAwB,EAAE,CAAC;AACzF,CAAC"}
@@ -1,2 +1,2 @@
1
- export declare const VERSION = "2.2.2";
1
+ export declare const VERSION = "2.3.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.2.2';
2
+ export const VERSION = '2.3.0';
3
3
  //# sourceMappingURL=version.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@qase/mcp-server",
3
- "version": "2.2.2",
3
+ "version": "2.3.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.2.2",
11
+ "version": "2.3.0",
12
12
  "packages": [
13
13
  {
14
14
  "registryType": "npm",
15
15
  "identifier": "@qase/mcp-server",
16
- "version": "2.2.2",
16
+ "version": "2.3.0",
17
17
  "transport": {
18
18
  "type": "stdio"
19
19
  },