@qase/mcp-server 2.2.3 → 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,20 @@ 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
+
8
22
  ## [2.2.3]
9
23
 
10
24
  ### Fixed
@@ -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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"}
@@ -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.3";
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.3';
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.3",
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.3",
11
+ "version": "2.3.0",
12
12
  "packages": [
13
13
  {
14
14
  "registryType": "npm",
15
15
  "identifier": "@qase/mcp-server",
16
- "version": "2.2.3",
16
+ "version": "2.3.0",
17
17
  "transport": {
18
18
  "type": "stdio"
19
19
  },