qyl-mcp-server 5.2.0 → 6.1.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.
@@ -6,7 +6,7 @@
6
6
  <meta name="color-scheme" content="dark">
7
7
  <meta name="description" content="Bring qyl traces, logs, and MCP telemetry into your coding agent.">
8
8
  <title>qyl · MCP telemetry for coding agents</title>
9
- <script type="module" crossorigin>(function(){let e=document.createElement(`link`).relList;if(e&&e.supports&&e.supports(`modulepreload`))return;for(let e of document.querySelectorAll(`link[rel="modulepreload"]`))n(e);new MutationObserver(e=>{for(let t of e)if(t.type===`childList`)for(let e of t.addedNodes)e.tagName===`LINK`&&e.rel===`modulepreload`&&n(e)}).observe(document,{childList:!0,subtree:!0});function t(e){let t={};return e.integrity&&(t.integrity=e.integrity),e.referrerPolicy&&(t.referrerPolicy=e.referrerPolicy),t.credentials=e.crossOrigin===`use-credentials`?`include`:e.crossOrigin===`anonymous`?`omit`:`same-origin`,t}function n(e){if(e.ep)return;e.ep=!0;let n=t(e);fetch(e.href,n)}})();var e={name:`qyl-mcp-server`,version:`5.2.0`,type:`module`,description:`qyl telemetry MCP Apps server: trace explorer and MCP dashboard for a live collector or explicit demo mode`,repository:{type:`git`,url:`https://github.com/ANcpLua/qyl.mcp`,directory:`server`},license:`MIT`,main:`dist/server.js`,types:`dist/server.d.ts`,exports:{".":{types:`./dist/server.d.ts`,default:`./dist/server.js`},"./contract-headers":{types:`./dist/contract-headers.d.ts`,default:`./dist/contract-headers.js`},"./contract-validation":{types:`./dist/contract-validation.d.ts`,default:`./dist/contract-validation.js`},"./secret-redactor":{types:`./dist/secret-redactor.d.ts`,default:`./dist/secret-redactor.js`},"./atomic-json-store":{types:`./dist/atomic-json-store.d.ts`,default:`./dist/atomic-json-store.js`},"./execution-evidence":{types:`./dist/execution-evidence.d.ts`,default:`./dist/execution-evidence.js`},"./execution-result":{types:`./dist/execution-result.d.ts`,default:`./dist/execution-result.js`},"./mcp-semconv":{types:`./dist/mcp-semconv.d.ts`,default:`./dist/mcp-semconv.js`},"./observability-suppression":{types:`./dist/observability-suppression.d.ts`,default:`./dist/observability-suppression.js`},"./telemetry":{types:`./dist/telemetry.d.ts`,default:`./dist/telemetry.js`}},bin:{"qyl-mcp-server":`dist/main.js`},files:[`dist`],scripts:{clean:`node -e "require('node:fs').rmSync('dist', { recursive: true, force: true }); require('node:fs').rmSync('dist-test', { recursive: true, force: true })"`,build:`bun run clean && tsc --noEmit && vite build --mode mcp-home && vite build --mode mcp-app && vite build --mode mcp-dashboard && tsc -p tsconfig.server.json && node -e "require('node:fs').chmodSync('dist/main.js', 0o755)"`,postbuild:`bun run verify:deployment-guidance`,"verify:deployment-guidance":`node verify-deployment-guidance.mjs`,"verify:shapes":`node verify-generated-shapes.mjs`,"verify:readme":`node verify-package-readme.mjs`,"snapshot:tools":`bun run build && tsc -p tsconfig.test.json && node update-tool-manifest-snapshot.mjs`,test:`bun run verify:shapes && bun run verify:readme && bun run build && tsc -p tsconfig.test.json && node -e "const fs=require('node:fs'); for (const name of ['mcp-app.html','mcp-dashboard.html']) fs.copyFileSync('dist/'+name,'dist-test/'+name)" && node --test dist-test/*.test.js`,smoke:`node smoke-test.mjs`,"smoke:live":`node live-tools-smoke.mjs`,prepack:`bun run build`},dependencies:{"@ancplua/qyl-api-schema":`10.0.1`,"@modelcontextprotocol/core":`2.0.0`,"@modelcontextprotocol/server":`2.0.0`,"@opentelemetry/api":`^1.9.1`,"@opentelemetry/api-logs":`^0.222.0`,"@opentelemetry/core":`^2.11.0`,"@opentelemetry/exporter-logs-otlp-proto":`^0.222.0`,"@opentelemetry/exporter-metrics-otlp-proto":`^0.222.0`,"@opentelemetry/exporter-trace-otlp-proto":`^0.222.0`,"@opentelemetry/resources":`^2.11.0`,"@opentelemetry/sdk-logs":`^0.222.0`,"@opentelemetry/sdk-metrics":`^2.11.0`,"@opentelemetry/sdk-trace-base":`^2.11.0`,"@opentelemetry/sdk-trace-node":`^2.11.0`,"@opentelemetry/semantic-conventions":`^1.43.0`,jose:`^6.2.10`,zod:`^4.5.4`},devDependencies:{"@modelcontextprotocol/client":`2.0.0`,"@types/node":`26.4.1`,typescript:`7.0.2`,vite:`8.2.2`,"vite-plugin-singlefile":`2.3.3`},engines:{node:`24.x`}},t=`https://mcp.qyl.at/mcp`,n={codex:{title:`terminal`,value:`codex mcp add qyl --url ${t}`},claude:{title:`terminal`,value:`claude mcp add --transport http qyl ${t}`},cursor:{title:`mcp.json`,value:`{
9
+ <script type="module" crossorigin>(function(){let e=document.createElement(`link`).relList;if(e&&e.supports&&e.supports(`modulepreload`))return;for(let e of document.querySelectorAll(`link[rel="modulepreload"]`))n(e);new MutationObserver(e=>{for(let t of e)if(t.type===`childList`)for(let e of t.addedNodes)e.tagName===`LINK`&&e.rel===`modulepreload`&&n(e)}).observe(document,{childList:!0,subtree:!0});function t(e){let t={};return e.integrity&&(t.integrity=e.integrity),e.referrerPolicy&&(t.referrerPolicy=e.referrerPolicy),t.credentials=e.crossOrigin===`use-credentials`?`include`:e.crossOrigin===`anonymous`?`omit`:`same-origin`,t}function n(e){if(e.ep)return;e.ep=!0;let n=t(e);fetch(e.href,n)}})();var e={name:`qyl-mcp-server`,version:`6.1.0`,type:`module`,description:`qyl telemetry MCP Apps server: trace explorer and MCP dashboard for a live collector or explicit demo mode`,repository:{type:`git`,url:`https://github.com/ANcpLua/qyl.mcp`,directory:`server`},license:`MIT`,main:`dist/server.js`,types:`dist/server.d.ts`,exports:{".":{types:`./dist/server.d.ts`,default:`./dist/server.js`},"./contract-headers":{types:`./dist/contract-headers.d.ts`,default:`./dist/contract-headers.js`},"./contract-validation":{types:`./dist/contract-validation.d.ts`,default:`./dist/contract-validation.js`},"./secret-redactor":{types:`./dist/secret-redactor.d.ts`,default:`./dist/secret-redactor.js`},"./atomic-json-store":{types:`./dist/atomic-json-store.d.ts`,default:`./dist/atomic-json-store.js`},"./execution-evidence":{types:`./dist/execution-evidence.d.ts`,default:`./dist/execution-evidence.js`},"./execution-result":{types:`./dist/execution-result.d.ts`,default:`./dist/execution-result.js`},"./mcp-semconv":{types:`./dist/mcp-semconv.d.ts`,default:`./dist/mcp-semconv.js`},"./observability-suppression":{types:`./dist/observability-suppression.d.ts`,default:`./dist/observability-suppression.js`},"./telemetry":{types:`./dist/telemetry.d.ts`,default:`./dist/telemetry.js`}},bin:{"qyl-mcp-server":`dist/main.js`},files:[`dist`],scripts:{clean:`node -e "require('node:fs').rmSync('dist', { recursive: true, force: true }); require('node:fs').rmSync('dist-test', { recursive: true, force: true })"`,build:`bun run clean && tsc --noEmit && vite build --mode mcp-home && vite build --mode mcp-app && vite build --mode mcp-dashboard && tsc -p tsconfig.server.json && node -e "require('node:fs').chmodSync('dist/main.js', 0o755)"`,postbuild:`bun run verify:deployment-guidance`,"verify:deployment-guidance":`node verify-deployment-guidance.mjs`,"verify:shapes":`node verify-generated-shapes.mjs`,"verify:readme":`node verify-package-readme.mjs`,"snapshot:tools":`bun run build && tsc -p tsconfig.test.json && node update-tool-manifest-snapshot.mjs`,test:`bun run verify:shapes && bun run verify:readme && bun run build && tsc -p tsconfig.test.json && node -e "const fs=require('node:fs'); for (const name of ['mcp-app.html','mcp-dashboard.html']) fs.copyFileSync('dist/'+name,'dist-test/'+name)" && node --test dist-test/*.test.js`,smoke:`node smoke-test.mjs`,"smoke:live":`node live-tools-smoke.mjs`,prepack:`bun run build`},dependencies:{"@ancplua/qyl-api-schema":`10.0.1`,"@modelcontextprotocol/core":`2.0.0`,"@modelcontextprotocol/server":`2.0.0`,"@opentelemetry/api":`^1.9.1`,"@opentelemetry/api-logs":`^0.222.0`,"@opentelemetry/core":`^2.11.0`,"@opentelemetry/exporter-logs-otlp-proto":`^0.222.0`,"@opentelemetry/exporter-metrics-otlp-proto":`^0.222.0`,"@opentelemetry/exporter-trace-otlp-proto":`^0.222.0`,"@opentelemetry/resources":`^2.11.0`,"@opentelemetry/sdk-logs":`^0.222.0`,"@opentelemetry/sdk-metrics":`^2.11.0`,"@opentelemetry/sdk-trace-base":`^2.11.0`,"@opentelemetry/sdk-trace-node":`^2.11.0`,"@opentelemetry/semantic-conventions":`^1.43.0`,jose:`^6.2.10`,zod:`^4.5.4`},devDependencies:{"@modelcontextprotocol/client":`2.0.0`,"@types/node":`26.4.1`,typescript:`7.0.2`,vite:`8.2.2`,"vite-plugin-singlefile":`2.3.3`},engines:{node:`24.x`}},t=`https://mcp.qyl.at/mcp`,n={codex:{title:`terminal`,value:`codex mcp add qyl --url ${t}`},claude:{title:`terminal`,value:`claude mcp add --transport http qyl ${t}`},cursor:{title:`mcp.json`,value:`{
10
10
  "mcpServers": {
11
11
  "qyl": {
12
12
  "url": "${t}"
@@ -18,8 +18,9 @@ import { operationInputSchema } from "./contract-operations.js";
18
18
  import { MetricQueryResultSchema, MetricsListResponseSchema, MetricSeriesListResponseSchema, compactOutputSchema, } from "./contract-validation.js";
19
19
  import { listMetricSeries, listMetrics, queryMetric, } from "./metrics.js";
20
20
  import { summarizeMetricCatalog, summarizeMetricQuery, summarizeMetricSeries, } from "./summaries.js";
21
+ import { runTool } from "./request-scope.js";
21
22
  import { telemetryToolResult } from "./telemetry-redaction.js";
22
- import { READ_ONLY_TELEMETRY_TOOL_ANNOTATIONS, toolError } from "./tools.js";
23
+ import { READ_ONLY_TELEMETRY_TOOL_ANNOTATIONS } from "./tools.js";
23
24
  const METRICS_PATH = "/api/v1/metrics";
24
25
  const SERIES_PATH = "/api/v1/metrics/{metric_name}/series";
25
26
  const QUERY_PATH = "/api/v1/metrics/{metric_name}/query";
@@ -38,18 +39,14 @@ export function registerMetricsTools(server) {
38
39
  inputSchema: operationInputSchema(METRICS_PATH),
39
40
  outputSchema: compactOutputSchema(MetricsListResponseSchema),
40
41
  annotations: READ_ONLY_TELEMETRY_TOOL_ANNOTATIONS,
41
- }, async (args) => {
42
- try {
43
- const { metrics, mode } = await listMetrics(args);
44
- return telemetryToolResult(summarizeMetricCatalog(metrics, mode), {
45
- items: metrics,
46
- has_more: false,
47
- });
48
- }
49
- catch (error) {
50
- return toolError(error);
51
- }
52
- });
42
+ }, (args, ctx) => runTool(ctx, "list_metrics", 1, async (scope) => {
43
+ const { metrics, mode } = await listMetrics(args, scope.collector);
44
+ await scope.step(`Fetched ${metrics.length} metric instrument(s)`);
45
+ return telemetryToolResult(summarizeMetricCatalog(metrics, mode), {
46
+ items: metrics,
47
+ has_more: false,
48
+ });
49
+ }));
53
50
  server.registerTool("get_metric_series", {
54
51
  title: "Get Metric Series",
55
52
  description: "List the distinct attribute streams recorded under one metric name, with " +
@@ -60,18 +57,14 @@ export function registerMetricsTools(server) {
60
57
  inputSchema: operationInputSchema(SERIES_PATH),
61
58
  outputSchema: compactOutputSchema(MetricSeriesListResponseSchema),
62
59
  annotations: READ_ONLY_TELEMETRY_TOOL_ANNOTATIONS,
63
- }, async (args) => {
64
- try {
65
- const { series, mode } = await listMetricSeries(args);
66
- return telemetryToolResult(summarizeMetricSeries(series, mode), {
67
- items: series,
68
- has_more: false,
69
- });
70
- }
71
- catch (error) {
72
- return toolError(error);
73
- }
74
- });
60
+ }, (args, ctx) => runTool(ctx, "get_metric_series", 1, async (scope) => {
61
+ const { series, mode } = await listMetricSeries(args, scope.collector);
62
+ await scope.step(`Fetched ${series.length} series of ${args.metric_name}`);
63
+ return telemetryToolResult(summarizeMetricSeries(series, mode), {
64
+ items: series,
65
+ has_more: false,
66
+ });
67
+ }));
75
68
  server.registerTool("query_metric", {
76
69
  title: "Query Metric",
77
70
  description: "Run a time-bucketed range query over one metric: a window (start_time, " +
@@ -83,14 +76,11 @@ export function registerMetricsTools(server) {
83
76
  inputSchema: operationInputSchema(QUERY_PATH),
84
77
  outputSchema: compactOutputSchema(MetricQueryResultSchema),
85
78
  annotations: READ_ONLY_TELEMETRY_TOOL_ANNOTATIONS,
86
- }, async (args) => {
87
- try {
88
- const { result, mode } = await queryMetric(args);
89
- return telemetryToolResult(summarizeMetricQuery(result, mode), result);
90
- }
91
- catch (error) {
92
- return toolError(error);
93
- }
94
- });
79
+ }, (args, ctx) => runTool(ctx, "query_metric", 1, async (scope) => {
80
+ const { result, mode } = await queryMetric(args, scope.collector);
81
+ await scope.step(`Queried ${args.metric_name}: ${result.series.length} series, ` +
82
+ `${result.series[0]?.buckets.length ?? 0} bucket(s) each`);
83
+ return telemetryToolResult(summarizeMetricQuery(result, mode), result);
84
+ }));
95
85
  }
96
86
  //# sourceMappingURL=metrics-tools.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"metrics-tools.js","sourceRoot":"","sources":["../src/metrics-tools.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"metrics-tools.js","sourceRoot":"","sources":["../src/metrics-tools.ts"],"names":[],"mappings":"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"}
package/dist/metrics.d.ts CHANGED
@@ -8,6 +8,7 @@
8
8
  * pretending they were applied — the invariant the rest of the demo dataset keeps.
9
9
  */
10
10
  import type { MetricAggregation, MetricDescriptor, MetricQueryResult, MetricSeries } from "@ancplua/qyl-api-schema/types";
11
+ import { type CollectorRequestOptions } from "./collector.js";
11
12
  import type { Mode } from "./wire.js";
12
13
  /** Tool arguments, mirroring the published operation parameters that shape them. */
13
14
  export interface ListMetricsArgs {
@@ -31,15 +32,15 @@ export interface QueryMetricArgs {
31
32
  attr_prefix?: readonly string[];
32
33
  series_limit?: number;
33
34
  }
34
- export declare function listMetrics(args: ListMetricsArgs): Promise<{
35
+ export declare function listMetrics(args: ListMetricsArgs, options?: CollectorRequestOptions): Promise<{
35
36
  metrics: MetricDescriptor[];
36
37
  mode: Mode;
37
38
  }>;
38
- export declare function listMetricSeries(args: MetricSeriesArgs): Promise<{
39
+ export declare function listMetricSeries(args: MetricSeriesArgs, options?: CollectorRequestOptions): Promise<{
39
40
  series: MetricSeries[];
40
41
  mode: Mode;
41
42
  }>;
42
- export declare function queryMetric(args: QueryMetricArgs): Promise<{
43
+ export declare function queryMetric(args: QueryMetricArgs, options?: CollectorRequestOptions): Promise<{
43
44
  result: MetricQueryResult;
44
45
  mode: Mode;
45
46
  }>;
package/dist/metrics.js CHANGED
@@ -60,7 +60,7 @@ function demoSeriesId(stream) {
60
60
  }
61
61
  return hash.toString(16).padStart(8, "0");
62
62
  }
63
- export async function listMetrics(args) {
63
+ export async function listMetrics(args, options = {}) {
64
64
  const mode = await resolveMode();
65
65
  const limit = args.limit ?? 200;
66
66
  if (mode === "demo") {
@@ -95,16 +95,13 @@ export async function listMetrics(args) {
95
95
  });
96
96
  return redactTelemetry({ metrics, mode });
97
97
  }
98
- const body = await collectorGet(METRICS_PATH, {
99
- name_prefix: args.name_prefix,
100
- limit,
101
- });
98
+ const body = await collectorGet(METRICS_PATH, { name_prefix: args.name_prefix, limit }, options);
102
99
  return redactTelemetry({
103
100
  metrics: parseCollectorPage(body, METRICS_PATH, MetricsListResponseSchema, parseCollectorMetricDescriptor).items,
104
101
  mode,
105
102
  });
106
103
  }
107
- export async function listMetricSeries(args) {
104
+ export async function listMetricSeries(args, options = {}) {
108
105
  const mode = await resolveMode();
109
106
  const limit = args.limit ?? 200;
110
107
  const exact = parseMatchers(args.attr, "attr");
@@ -128,11 +125,7 @@ export async function listMetricSeries(args) {
128
125
  }
129
126
  const path = `${METRICS_PATH}/${encodeURIComponent(args.metric_name)}/series`;
130
127
  try {
131
- const body = await collectorGet(path, {
132
- attr: args.attr,
133
- attr_prefix: args.attr_prefix,
134
- limit,
135
- });
128
+ const body = await collectorGet(path, { attr: args.attr, attr_prefix: args.attr_prefix, limit }, options);
136
129
  return redactTelemetry({
137
130
  series: parseCollectorPage(body, path, MetricSeriesListResponseSchema, parseCollectorMetricSeries).items,
138
131
  mode,
@@ -188,7 +181,7 @@ function groupingKey(stream, groupBy) {
188
181
  }
189
182
  return { key: attributes.map((a) => `${a.key}=${String(a.value)}`).join("|"), attributes };
190
183
  }
191
- export async function queryMetric(args) {
184
+ export async function queryMetric(args, options = {}) {
192
185
  const mode = await resolveMode();
193
186
  const stepMs = args.step_ms ?? 60_000;
194
187
  const aggregation = args.aggregation ?? "avg";
@@ -261,7 +254,7 @@ export async function queryMetric(args) {
261
254
  attr: args.attr,
262
255
  attr_prefix: args.attr_prefix,
263
256
  series_limit: seriesLimit,
264
- });
257
+ }, options);
265
258
  return redactTelemetry({ result: parseCollectorMetricQueryResult(body, path), mode });
266
259
  }
267
260
  catch (error) {
@@ -1 +1 @@
1
- {"version":3,"file":"metrics.js","sourceRoot":"","sources":["../src/metrics.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"metrics.js","sourceRoot":"","sources":["../src/metrics.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * The request-scoped helpers every tool handler runs inside.
3
+ *
4
+ * The SDK hands each handler a `ServerContext` whose `mcpReq` carries the
5
+ * cancellation signal, the request's `_meta`, a `notify` bound to this request
6
+ * and `log` for `notifications/message`. `runTool` resolves all of that once and
7
+ * hands the work a plain `ToolScope`: the data layer (`data.ts`, `metrics.ts`)
8
+ * takes `CollectorRequestOptions` with an `AbortSignal`, never the SDK context.
9
+ *
10
+ * Three channels, one frame:
11
+ * - cancellation: `scope.collector.signal` is `ctx.mcpReq.signal`, aborted on
12
+ * `notifications/cancelled` for this request and when the connection
13
+ * closes; `collectorRequest` races it against its own timeout.
14
+ * - progress: `scope.step(message)` sends `notifications/progress` when the
15
+ * request carried a `progressToken`, and nothing when it did not. The
16
+ * reporter counts its own steps, so `progress` increases per token by
17
+ * construction; `runTool` reports the final step itself once the result is
18
+ * built, so a handler declares only the steps it reports.
19
+ * - logging: one `info` per finished call and one `warning` per failed one,
20
+ * through `ctx.mcpReq.log`, which honours the client's `logging/setLevel`
21
+ * (per request on revision 2026-07-28). MCP logging is deprecated as of
22
+ * that revision (SEP-2577) and stays functional through the deprecation
23
+ * window; qyl.mcp keeps it beside stderr and OpenTelemetry at the owner's
24
+ * call — see the workspace DECISIONS.md entry of 2026-09-12.
25
+ */
26
+ import type { CallToolResult, ServerContext } from "@modelcontextprotocol/server";
27
+ import { type CollectorRequestOptions } from "./collector.js";
28
+ /** The logger name every `notifications/message` from this server carries. */
29
+ export declare const LOGGER = "qyl.mcp";
30
+ /** What a tool's work receives: collector options and a progress step. */
31
+ export interface ToolScope {
32
+ /** Collector options carrying this request's cancellation signal. */
33
+ collector: CollectorRequestOptions;
34
+ /** Report one more completed step; the message says what just finished. */
35
+ step(message: string): Promise<void>;
36
+ }
37
+ /** Uniform failure result: clear text + isError, never a thrown exception. */
38
+ export declare function toolError(err: unknown): CallToolResult;
39
+ /**
40
+ * Run one tool call inside its request scope.
41
+ *
42
+ * `steps` is how many `scope.step` calls the work makes on its success path;
43
+ * the reported `total` is one more, for the final "Result ready" step that
44
+ * `runTool` sends once the work has returned. A thrown error becomes the
45
+ * uniform `toolError` result. Nothing is sent once the request is cancelled:
46
+ * the SDK discards the result of a cancelled request, and a notification
47
+ * about it would describe work the client already gave up on.
48
+ */
49
+ export declare function runTool(ctx: ServerContext, tool: string, steps: number, work: (scope: ToolScope) => Promise<CallToolResult>): Promise<CallToolResult>;
@@ -0,0 +1,64 @@
1
+ import { CollectorError } from "./collector.js";
2
+ import { redactTelemetryText } from "./telemetry-redaction.js";
3
+ /** The logger name every `notifications/message` from this server carries. */
4
+ export const LOGGER = "qyl.mcp";
5
+ /** Longest summary line a log notification carries; results can be tables. */
6
+ const LOG_SUMMARY_CHARS = 200;
7
+ /** Uniform failure result: clear text + isError, never a thrown exception. */
8
+ export function toolError(err) {
9
+ const message = err instanceof CollectorError
10
+ ? err.message
11
+ : "Telemetry request failed.";
12
+ return {
13
+ content: [{ type: "text", text: redactTelemetryText(message) }],
14
+ isError: true,
15
+ };
16
+ }
17
+ /** The first line of a result's first text block, bounded; already redacted. */
18
+ function summaryOf(result) {
19
+ const first = result.content.find((block) => block.type === "text");
20
+ const line = first?.type === "text" ? first.text.split("\n", 1)[0] ?? "" : "";
21
+ return line.length > LOG_SUMMARY_CHARS ? `${line.slice(0, LOG_SUMMARY_CHARS - 1)}…` : line;
22
+ }
23
+ /**
24
+ * Run one tool call inside its request scope.
25
+ *
26
+ * `steps` is how many `scope.step` calls the work makes on its success path;
27
+ * the reported `total` is one more, for the final "Result ready" step that
28
+ * `runTool` sends once the work has returned. A thrown error becomes the
29
+ * uniform `toolError` result. Nothing is sent once the request is cancelled:
30
+ * the SDK discards the result of a cancelled request, and a notification
31
+ * about it would describe work the client already gave up on.
32
+ */
33
+ export async function runTool(ctx, tool, steps, work) {
34
+ const { signal } = ctx.mcpReq;
35
+ const progressToken = ctx.mcpReq._meta?.progressToken;
36
+ const total = steps + 1;
37
+ let progress = 0;
38
+ const step = async (message) => {
39
+ if (progressToken === undefined || signal.aborted)
40
+ return;
41
+ progress += 1;
42
+ await ctx.mcpReq.notify({
43
+ method: "notifications/progress",
44
+ params: { progressToken, progress, total, message },
45
+ });
46
+ };
47
+ const log = async (level, data) => {
48
+ if (signal.aborted)
49
+ return;
50
+ await ctx.mcpReq.log(level, { tool, ...data }, LOGGER);
51
+ };
52
+ try {
53
+ const result = await work({ collector: { signal }, step });
54
+ await step("Result ready");
55
+ await log(result.isError ? "warning" : "info", { summary: summaryOf(result) });
56
+ return result;
57
+ }
58
+ catch (err) {
59
+ const result = toolError(err);
60
+ await log("warning", { summary: summaryOf(result) });
61
+ return result;
62
+ }
63
+ }
64
+ //# sourceMappingURL=request-scope.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request-scope.js","sourceRoot":"","sources":["../src/request-scope.ts"],"names":[],"mappings":"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"}
package/dist/server.js CHANGED
@@ -21,9 +21,10 @@ import { CollectorError } from "./collector.js";
21
21
  import { DisplayMcpDashboardInputSchema, DisplayMcpDashboardOutputSchema, DisplayTracesInputSchema, DisplayTracesOutputSchema, FetchTelemetryInputSchema, compactOutputSchema, } from "./contract-validation.js";
22
22
  import { fetchLogs, fetchMcpStats, fetchTrace, fetchTraces, fetchTracesForDisplay, } from "./data.js";
23
23
  import { humanizeNs, rootSpanName, shortId, summarizeMcpStats, } from "./summaries.js";
24
- import { READ_ONLY_TELEMETRY_TOOL_ANNOTATIONS, registerTelemetryTools, toolError, } from "./tools.js";
24
+ import { READ_ONLY_TELEMETRY_TOOL_ANNOTATIONS, registerTelemetryTools, } from "./tools.js";
25
25
  import { registerCiTools } from "./ci.js";
26
26
  import { registerMetricsTools } from "./metrics-tools.js";
27
+ import { runTool } from "./request-scope.js";
27
28
  import { telemetryToolResult } from "./telemetry-redaction.js";
28
29
  import { assertNativeExecutionRecordingArmed, defaultNativeExecutionRuntime, installNativeExecutionRecording, } from "./native-execution.js";
29
30
  const RESOURCE_MIME_TYPE = "text/html;profile=mcp-app";
@@ -82,6 +83,12 @@ export function createServer(options = {}) {
82
83
  name: "qyl.mcp",
83
84
  version: packageMetadata.version,
84
85
  }, {
86
+ // `logging` installs `logging/setLevel` and lets every tool call send one
87
+ // `notifications/message` through `runTool`. Deprecated as of revision
88
+ // 2026-07-28 (SEP-2577), kept beside stderr and OpenTelemetry through the
89
+ // deprecation window at the owner's call; see request-scope.ts and the
90
+ // workspace DECISIONS.md entry of 2026-09-12.
91
+ capabilities: { logging: {} },
85
92
  // One hint per catalog method this server actually answers. McpServer
86
93
  // registers the resource trio on the first registerResource and the tool
87
94
  // handlers on the first registerTool; it never registers prompts/list,
@@ -107,42 +114,39 @@ export function createServer(options = {}) {
107
114
  outputSchema: compactOutputSchema(DisplayTracesOutputSchema),
108
115
  annotations: READ_ONLY_TELEMETRY_TOOL_ANNOTATIONS,
109
116
  _meta: { ui: { resourceUri: RESOURCE_URI } },
110
- }, async ({ trace_id, session_id, limit }) => {
111
- try {
112
- const result = await fetchTracesForDisplay({
113
- trace_id,
114
- session_id,
115
- limit: limit ?? 20,
116
- });
117
- let text;
118
- if (result.selected_trace_id) {
119
- const trace = result.traces[0];
120
- text =
121
- `Showing trace ${shortId(trace.trace_id)} (${rootSpanName(trace)}, ` +
122
- `${trace.span_count} spans, ${humanizeNs(trace.duration_ns)}) in the qyl explorer` +
123
- `${result.mode === "demo" ? " (demo data)" : ""}.`;
124
- }
125
- else {
126
- const errorCount = result.traces.filter((t) => t.has_error).length;
127
- const scope = session_id ? `session ${session_id}` : "recent";
128
- text =
129
- `Showing ${result.traces.length} ${scope} traces in the qyl explorer` +
130
- `${errorCount > 0 ? ` (${errorCount} with errors)` : ""}` +
131
- `${result.mode === "demo" ? " (demo data)" : ""}.`;
132
- }
133
- const output = {
134
- traces: result.traces,
135
- ...(result.selected_trace_id
136
- ? { selected_trace_id: result.selected_trace_id }
137
- : {}),
138
- mode: result.mode,
139
- };
140
- return telemetryToolResult(text, output);
117
+ }, ({ trace_id, session_id, limit }, ctx) => runTool(ctx, "display_traces", 1, async (scope) => {
118
+ const result = await fetchTracesForDisplay({ trace_id, session_id, limit: limit ?? 20 }, scope.collector);
119
+ const target = trace_id
120
+ ? `trace ${trace_id}`
121
+ : session_id
122
+ ? `session ${session_id}`
123
+ : "recent traces";
124
+ await scope.step(`Fetched ${result.traces.length} trace(s) for ${target}`);
125
+ let text;
126
+ if (result.selected_trace_id) {
127
+ const trace = result.traces[0];
128
+ text =
129
+ `Showing trace ${shortId(trace.trace_id)} (${rootSpanName(trace)}, ` +
130
+ `${trace.span_count} spans, ${humanizeNs(trace.duration_ns)}) in the qyl explorer` +
131
+ `${result.mode === "demo" ? " (demo data)" : ""}.`;
141
132
  }
142
- catch (err) {
143
- return toolError(err);
133
+ else {
134
+ const errorCount = result.traces.filter((t) => t.has_error).length;
135
+ const scopeText = session_id ? `session ${session_id}` : "recent";
136
+ text =
137
+ `Showing ${result.traces.length} ${scopeText} traces in the qyl explorer` +
138
+ `${errorCount > 0 ? ` (${errorCount} with errors)` : ""}` +
139
+ `${result.mode === "demo" ? " (demo data)" : ""}.`;
144
140
  }
145
- });
141
+ const output = {
142
+ traces: result.traces,
143
+ ...(result.selected_trace_id
144
+ ? { selected_trace_id: result.selected_trace_id }
145
+ : {}),
146
+ mode: result.mode,
147
+ };
148
+ return telemetryToolResult(text, output);
149
+ }));
146
150
  server.registerTool("display_mcp_dashboard", {
147
151
  title: "Display MCP Dashboard",
148
152
  description: "Show an aggregate dashboard of MCP traffic (spans carrying an " +
@@ -154,17 +158,13 @@ export function createServer(options = {}) {
154
158
  outputSchema: compactOutputSchema(DisplayMcpDashboardOutputSchema),
155
159
  annotations: READ_ONLY_TELEMETRY_TOOL_ANNOTATIONS,
156
160
  _meta: { ui: { resourceUri: DASHBOARD_RESOURCE_URI } },
157
- }, async ({ hours }) => {
158
- try {
159
- const window = hours ?? 24;
160
- const stats = await fetchMcpStats(window);
161
- const output = { stats };
162
- return telemetryToolResult(summarizeMcpStats(stats, window), output);
163
- }
164
- catch (err) {
165
- return toolError(err);
166
- }
167
- });
161
+ }, ({ hours }, ctx) => runTool(ctx, "display_mcp_dashboard", 1, async (scope) => {
162
+ const window = hours ?? 24;
163
+ const stats = await fetchMcpStats(window, scope.collector);
164
+ await scope.step(`Aggregated ${stats.totals.requests} MCP request(s) over ${window}h`);
165
+ const output = { stats };
166
+ return telemetryToolResult(summarizeMcpStats(stats, window), output);
167
+ }));
168
168
  registerTelemetryTools(server);
169
169
  registerCiTools(server);
170
170
  registerMetricsTools(server);
@@ -183,40 +183,33 @@ export function createServer(options = {}) {
183
183
  // against FetchTelemetryOutputSchema, so the shape stays pinned to the contract.
184
184
  annotations: READ_ONLY_TELEMETRY_TOOL_ANNOTATIONS,
185
185
  _meta: { ui: { visibility: ["app"] } },
186
- }, async ({ view, trace_id, service_name, severity_min, query, limit, hours, }) => {
187
- try {
188
- if (view === "mcp_stats") {
189
- const stats = await fetchMcpStats(hours ?? 24);
190
- const output = { stats, mode: stats.mode };
191
- return telemetryToolResult(`Fetched MCP stats: ${stats.totals.requests} requests over ${hours ?? 24}h (${stats.mode} mode).`, output);
192
- }
193
- if (view === "trace") {
194
- if (!trace_id) {
195
- throw new CollectorError('view "trace" requires a `trace_id`.');
196
- }
197
- const { trace, mode } = await fetchTrace(trace_id);
198
- const output = { trace, mode };
199
- return telemetryToolResult(`Fetched trace ${shortId(trace.trace_id)} (${trace.span_count} spans, ${mode} mode).`, output);
200
- }
201
- if (view === "logs") {
202
- const { logs, mode } = await fetchLogs({
203
- trace_id,
204
- service_name,
205
- severity_min,
206
- query,
207
- limit: limit ?? 50,
208
- });
209
- const output = { logs, mode };
210
- return telemetryToolResult(`Fetched ${logs.length} logs (${mode} mode).`, output);
186
+ }, ({ view, trace_id, service_name, severity_min, query, limit, hours }, ctx) => runTool(ctx, "fetch_telemetry", 1, async (scope) => {
187
+ if (view === "mcp_stats") {
188
+ const stats = await fetchMcpStats(hours ?? 24, scope.collector);
189
+ await scope.step(`Aggregated ${stats.totals.requests} MCP request(s)`);
190
+ const output = { stats, mode: stats.mode };
191
+ return telemetryToolResult(`Fetched MCP stats: ${stats.totals.requests} requests over ${hours ?? 24}h (${stats.mode} mode).`, output);
192
+ }
193
+ if (view === "trace") {
194
+ if (!trace_id) {
195
+ throw new CollectorError('view "trace" requires a `trace_id`.');
211
196
  }
212
- const { traces, mode } = await fetchTraces(limit ?? 20);
213
- const output = { traces, mode };
214
- return telemetryToolResult(`Fetched ${traces.length} traces (${mode} mode).`, output);
197
+ const { trace, mode } = await fetchTrace(trace_id, scope.collector);
198
+ await scope.step(`Fetched trace ${trace_id}`);
199
+ const output = { trace, mode };
200
+ return telemetryToolResult(`Fetched trace ${shortId(trace.trace_id)} (${trace.span_count} spans, ${mode} mode).`, output);
215
201
  }
216
- catch (err) {
217
- return toolError(err);
202
+ if (view === "logs") {
203
+ const { logs, mode } = await fetchLogs({ trace_id, service_name, severity_min, query, limit: limit ?? 50 }, scope.collector);
204
+ await scope.step(`Fetched ${logs.length} log record(s)`);
205
+ const output = { logs, mode };
206
+ return telemetryToolResult(`Fetched ${logs.length} logs (${mode} mode).`, output);
218
207
  }
219
- });
208
+ const { traces, mode } = await fetchTraces(limit ?? 20, scope.collector);
209
+ await scope.step(`Fetched ${traces.length} trace(s)`);
210
+ const output = { traces, mode };
211
+ return telemetryToolResult(`Fetched ${traces.length} traces (${mode} mode).`, output);
212
+ }));
220
213
  registerViewerResource(server, RESOURCE_URI, "mcp-app.html");
221
214
  registerViewerResource(server, DASHBOARD_RESOURCE_URI, "mcp-dashboard.html");
222
215
  if (options.nativeExecution !== false)