@wizeworks/lens-node 0.3.0-alpha.3 → 0.3.0-alpha.4
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/dist/adapters/elasticsearch.d.ts +21 -0
- package/dist/adapters/elasticsearch.d.ts.map +1 -0
- package/dist/adapters/elasticsearch.js +93 -0
- package/dist/adapters/elasticsearch.js.map +1 -0
- package/dist/adapters/ioredis.d.ts +4 -0
- package/dist/adapters/ioredis.d.ts.map +1 -0
- package/dist/adapters/ioredis.js +60 -0
- package/dist/adapters/ioredis.js.map +1 -0
- package/dist/adapters/mongodb-shape.d.ts +16 -0
- package/dist/adapters/mongodb-shape.d.ts.map +1 -0
- package/dist/adapters/mongodb-shape.js +81 -0
- package/dist/adapters/mongodb-shape.js.map +1 -0
- package/dist/adapters/mongodb.d.ts +4 -0
- package/dist/adapters/mongodb.d.ts.map +1 -0
- package/dist/adapters/mongodb.js +95 -0
- package/dist/adapters/mongodb.js.map +1 -0
- package/dist/adapters/nosql.d.ts +14 -0
- package/dist/adapters/nosql.d.ts.map +1 -0
- package/dist/adapters/nosql.js +61 -0
- package/dist/adapters/nosql.js.map +1 -0
- package/dist/adapters/redis-shape.d.ts +31 -0
- package/dist/adapters/redis-shape.d.ts.map +1 -0
- package/dist/adapters/redis-shape.js +80 -0
- package/dist/adapters/redis-shape.js.map +1 -0
- package/dist/adapters/redis.d.ts +4 -0
- package/dist/adapters/redis.d.ts.map +1 -0
- package/dist/adapters/redis.js +93 -0
- package/dist/adapters/redis.js.map +1 -0
- package/dist/adapters/registry.d.ts +2 -0
- package/dist/adapters/registry.d.ts.map +1 -1
- package/dist/adapters/registry.js +2 -0
- package/dist/adapters/registry.js.map +1 -1
- package/dist/api.d.ts +5 -1
- package/dist/api.d.ts.map +1 -1
- package/dist/api.js +19 -7
- package/dist/api.js.map +1 -1
- package/dist/auto/config.d.ts +14 -0
- package/dist/auto/config.d.ts.map +1 -0
- package/dist/auto/config.js +51 -0
- package/dist/auto/config.js.map +1 -0
- package/dist/auto/esm-loader.d.ts +10 -0
- package/dist/auto/esm-loader.d.ts.map +1 -0
- package/dist/auto/esm-loader.js +10 -0
- package/dist/auto/esm-loader.js.map +1 -0
- package/dist/auto/esm-source.d.ts +15 -0
- package/dist/auto/esm-source.d.ts.map +1 -0
- package/dist/auto/esm-source.js +23 -0
- package/dist/auto/esm-source.js.map +1 -0
- package/dist/auto/frameworks.d.ts +3 -0
- package/dist/auto/frameworks.d.ts.map +1 -0
- package/dist/auto/frameworks.js +112 -0
- package/dist/auto/frameworks.js.map +1 -0
- package/dist/auto/handle.d.ts +7 -0
- package/dist/auto/handle.d.ts.map +1 -0
- package/dist/auto/handle.js +47 -0
- package/dist/auto/handle.js.map +1 -0
- package/dist/auto/hono.d.ts +3 -0
- package/dist/auto/hono.d.ts.map +1 -0
- package/dist/auto/hono.js +43 -0
- package/dist/auto/hono.js.map +1 -0
- package/dist/auto/http.d.ts +18 -0
- package/dist/auto/http.d.ts.map +1 -0
- package/dist/auto/http.js +77 -0
- package/dist/auto/http.js.map +1 -0
- package/dist/auto/install.d.ts +5 -0
- package/dist/auto/install.d.ts.map +1 -0
- package/dist/auto/install.js +26 -0
- package/dist/auto/install.js.map +1 -0
- package/dist/auto/libraries.d.ts +3 -0
- package/dist/auto/libraries.d.ts.map +1 -0
- package/dist/auto/libraries.js +108 -0
- package/dist/auto/libraries.js.map +1 -0
- package/dist/auto/module-hooks.d.ts +14 -0
- package/dist/auto/module-hooks.d.ts.map +1 -0
- package/dist/auto/module-hooks.js +90 -0
- package/dist/auto/module-hooks.js.map +1 -0
- package/dist/auto/nest.d.ts +7 -0
- package/dist/auto/nest.d.ts.map +1 -0
- package/dist/auto/nest.js +26 -0
- package/dist/auto/nest.js.map +1 -0
- package/dist/auto/owner.d.ts +19 -0
- package/dist/auto/owner.d.ts.map +1 -0
- package/dist/auto/owner.js +52 -0
- package/dist/auto/owner.js.map +1 -0
- package/dist/auto/prisma.d.ts +3 -0
- package/dist/auto/prisma.d.ts.map +1 -0
- package/dist/auto/prisma.js +55 -0
- package/dist/auto/prisma.js.map +1 -0
- package/dist/auto/sqlite.d.ts +3 -0
- package/dist/auto/sqlite.d.ts.map +1 -0
- package/dist/auto/sqlite.js +31 -0
- package/dist/auto/sqlite.js.map +1 -0
- package/dist/auto/state.d.ts +14 -0
- package/dist/auto/state.d.ts.map +1 -0
- package/dist/auto/state.js +16 -0
- package/dist/auto/state.js.map +1 -0
- package/dist/auto.d.ts +2 -0
- package/dist/auto.d.ts.map +1 -0
- package/dist/auto.js +4 -0
- package/dist/auto.js.map +1 -0
- package/dist/capture.d.ts +3 -1
- package/dist/capture.d.ts.map +1 -1
- package/dist/capture.js +1 -1
- package/dist/capture.js.map +1 -1
- package/dist/client-attributes.d.ts +19 -0
- package/dist/client-attributes.d.ts.map +1 -0
- package/dist/client-attributes.js +56 -0
- package/dist/client-attributes.js.map +1 -0
- package/dist/db.js +1 -1
- package/dist/db.js.map +1 -1
- package/dist/frameworks/hono.d.ts +16 -0
- package/dist/frameworks/hono.d.ts.map +1 -1
- package/dist/frameworks/hono.js +1 -1
- package/dist/frameworks/hono.js.map +1 -1
- package/dist/frameworks/koa.d.ts +2 -0
- package/dist/frameworks/koa.d.ts.map +1 -1
- package/dist/frameworks/koa.js +1 -1
- package/dist/frameworks/koa.js.map +1 -1
- package/dist/frameworks/nest-errors.d.ts +10 -0
- package/dist/frameworks/nest-errors.d.ts.map +1 -0
- package/dist/frameworks/nest-errors.js +75 -0
- package/dist/frameworks/nest-errors.js.map +1 -0
- package/dist/frameworks/nest-route.d.ts +31 -0
- package/dist/frameworks/nest-route.d.ts.map +1 -0
- package/dist/frameworks/nest-route.js +58 -0
- package/dist/frameworks/nest-route.js.map +1 -0
- package/dist/frameworks/nest.d.ts +16 -0
- package/dist/frameworks/nest.d.ts.map +1 -0
- package/dist/frameworks/nest.js +73 -0
- package/dist/frameworks/nest.js.map +1 -0
- package/dist/frameworks/node-server.d.ts +3 -0
- package/dist/frameworks/node-server.d.ts.map +1 -1
- package/dist/frameworks/node-server.js +1 -1
- package/dist/frameworks/node-server.js.map +1 -1
- package/dist/graphql/document.d.ts +13 -0
- package/dist/graphql/document.d.ts.map +1 -0
- package/dist/graphql/document.js +62 -0
- package/dist/graphql/document.js.map +1 -0
- package/dist/graphql/index.d.ts +11 -0
- package/dist/graphql/index.d.ts.map +1 -0
- package/dist/graphql/index.js +83 -0
- package/dist/graphql/index.js.map +1 -0
- package/dist/graphql/operation.d.ts +37 -0
- package/dist/graphql/operation.d.ts.map +1 -0
- package/dist/graphql/operation.js +58 -0
- package/dist/graphql/operation.js.map +1 -0
- package/dist/graphql/resolvers.d.ts +5 -0
- package/dist/graphql/resolvers.d.ts.map +1 -0
- package/dist/graphql/resolvers.js +79 -0
- package/dist/graphql/resolvers.js.map +1 -0
- package/dist/graphql/shared.d.ts +14 -0
- package/dist/graphql/shared.d.ts.map +1 -0
- package/dist/graphql/shared.js +21 -0
- package/dist/graphql/shared.js.map +1 -0
- package/dist/http-client.d.ts +8 -0
- package/dist/http-client.d.ts.map +1 -0
- package/dist/http-client.js +132 -0
- package/dist/http-client.js.map +1 -0
- package/dist/hub-connect.d.ts +2 -0
- package/dist/hub-connect.d.ts.map +1 -1
- package/dist/hub-connect.js +3 -1
- package/dist/hub-connect.js.map +1 -1
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -1
- package/dist/info.d.ts +2 -0
- package/dist/info.d.ts.map +1 -1
- package/dist/info.js +1 -1
- package/dist/info.js.map +1 -1
- package/dist/kit.d.ts +3 -1
- package/dist/kit.d.ts.map +1 -1
- package/dist/kit.js +1 -0
- package/dist/kit.js.map +1 -1
- package/dist/logger.d.ts +4 -4
- package/dist/logger.d.ts.map +1 -1
- package/dist/logger.js +11 -7
- package/dist/logger.js.map +1 -1
- package/dist/logs/bunyan.d.ts +1 -1
- package/dist/logs/bunyan.d.ts.map +1 -1
- package/dist/logs/bunyan.js +2 -3
- package/dist/logs/bunyan.js.map +1 -1
- package/dist/logs/consola.d.ts +1 -1
- package/dist/logs/consola.d.ts.map +1 -1
- package/dist/logs/consola.js +1 -1
- package/dist/logs/consola.js.map +1 -1
- package/dist/logs/console.d.ts +1 -1
- package/dist/logs/console.d.ts.map +1 -1
- package/dist/logs/console.js +5 -3
- package/dist/logs/console.js.map +1 -1
- package/dist/logs/otel.d.ts.map +1 -1
- package/dist/logs/otel.js +1 -3
- package/dist/logs/otel.js.map +1 -1
- package/dist/logs/pino.d.ts +1 -1
- package/dist/logs/pino.d.ts.map +1 -1
- package/dist/logs/pino.js +2 -3
- package/dist/logs/pino.js.map +1 -1
- package/dist/logs/winston.d.ts +1 -1
- package/dist/logs/winston.d.ts.map +1 -1
- package/dist/logs/winston.js +2 -3
- package/dist/logs/winston.js.map +1 -1
- package/dist/loose-logs.d.ts +13 -0
- package/dist/loose-logs.d.ts.map +1 -0
- package/dist/loose-logs.js +21 -0
- package/dist/loose-logs.js.map +1 -0
- package/dist/mcp-find.d.ts.map +1 -1
- package/dist/mcp-find.js +40 -8
- package/dist/mcp-find.js.map +1 -1
- package/dist/mcp-memory.d.ts +7 -0
- package/dist/mcp-memory.d.ts.map +1 -0
- package/dist/mcp-memory.js +10 -0
- package/dist/mcp-memory.js.map +1 -0
- package/dist/mcp-overview.d.ts +5 -0
- package/dist/mcp-overview.d.ts.map +1 -0
- package/dist/mcp-overview.js +71 -0
- package/dist/mcp-overview.js.map +1 -0
- package/dist/mcp-page.d.ts +28 -0
- package/dist/mcp-page.d.ts.map +1 -0
- package/dist/mcp-page.js +77 -0
- package/dist/mcp-page.js.map +1 -0
- package/dist/mcp-problems.d.ts +5 -0
- package/dist/mcp-problems.d.ts.map +1 -0
- package/dist/mcp-problems.js +56 -0
- package/dist/mcp-problems.js.map +1 -0
- package/dist/mcp-projects.d.ts.map +1 -1
- package/dist/mcp-projects.js +7 -2
- package/dist/mcp-projects.js.map +1 -1
- package/dist/mcp-search.d.ts.map +1 -1
- package/dist/mcp-search.js +9 -5
- package/dist/mcp-search.js.map +1 -1
- package/dist/mcp-shared.d.ts +37 -1
- package/dist/mcp-shared.d.ts.map +1 -1
- package/dist/mcp-shared.js +3 -0
- package/dist/mcp-shared.js.map +1 -1
- package/dist/mcp-store.d.ts +2 -2
- package/dist/mcp-store.d.ts.map +1 -1
- package/dist/mcp-store.js +6 -5
- package/dist/mcp-store.js.map +1 -1
- package/dist/mcp-tags.d.ts +8 -0
- package/dist/mcp-tags.d.ts.map +1 -0
- package/dist/mcp-tags.js +22 -0
- package/dist/mcp-tags.js.map +1 -0
- package/dist/mcp-traffic.d.ts +5 -0
- package/dist/mcp-traffic.d.ts.map +1 -0
- package/dist/mcp-traffic.js +87 -0
- package/dist/mcp-traffic.js.map +1 -0
- package/dist/mcp.d.ts +4 -1
- package/dist/mcp.d.ts.map +1 -1
- package/dist/mcp.js +14 -3
- package/dist/mcp.js.map +1 -1
- package/dist/messaging/bullmq.d.ts +4 -0
- package/dist/messaging/bullmq.d.ts.map +1 -0
- package/dist/messaging/bullmq.js +137 -0
- package/dist/messaging/bullmq.js.map +1 -0
- package/dist/messaging/shared.d.ts +10 -4
- package/dist/messaging/shared.d.ts.map +1 -1
- package/dist/messaging/shared.js +13 -4
- package/dist/messaging/shared.js.map +1 -1
- package/dist/messaging/sqs-message.d.ts +35 -0
- package/dist/messaging/sqs-message.d.ts.map +1 -0
- package/dist/messaging/sqs-message.js +66 -0
- package/dist/messaging/sqs-message.js.map +1 -0
- package/dist/messaging/sqs.d.ts +4 -0
- package/dist/messaging/sqs.d.ts.map +1 -0
- package/dist/messaging/sqs.js +104 -0
- package/dist/messaging/sqs.js.map +1 -0
- package/dist/processor.d.ts +2 -1
- package/dist/processor.d.ts.map +1 -1
- package/dist/processor.js +8 -3
- package/dist/processor.js.map +1 -1
- package/dist/request-capture.d.ts.map +1 -1
- package/dist/request-capture.js +2 -1
- package/dist/request-capture.js.map +1 -1
- package/dist/request-naming.d.ts +8 -0
- package/dist/request-naming.d.ts.map +1 -0
- package/dist/request-naming.js +29 -0
- package/dist/request-naming.js.map +1 -0
- package/dist/sampling.d.ts.map +1 -1
- package/dist/sampling.js +2 -2
- package/dist/sampling.js.map +1 -1
- package/dist/search-api.d.ts +4 -3
- package/dist/search-api.d.ts.map +1 -1
- package/dist/search-api.js +8 -7
- package/dist/search-api.js.map +1 -1
- package/dist/sourcemaps.d.ts +15 -0
- package/dist/sourcemaps.d.ts.map +1 -0
- package/dist/sourcemaps.js +68 -0
- package/dist/sourcemaps.js.map +1 -0
- package/dist/spans.d.ts +3 -0
- package/dist/spans.d.ts.map +1 -1
- package/dist/spans.js +9 -1
- package/dist/spans.js.map +1 -1
- package/dist/store-entries.d.ts +34 -0
- package/dist/store-entries.d.ts.map +1 -0
- package/dist/store-entries.js +70 -0
- package/dist/store-entries.js.map +1 -0
- package/dist/store.d.ts +4 -1
- package/dist/store.d.ts.map +1 -1
- package/dist/store.js +19 -22
- package/dist/store.js.map +1 -1
- package/dist/tags-api.d.ts +9 -0
- package/dist/tags-api.d.ts.map +1 -0
- package/dist/tags-api.js +16 -0
- package/dist/tags-api.js.map +1 -0
- package/dist/tracing.d.ts +6 -0
- package/dist/tracing.d.ts.map +1 -1
- package/dist/tracing.js +11 -7
- package/dist/tracing.js.map +1 -1
- package/dist/types.d.ts +16 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/ui.d.ts.map +1 -1
- package/dist/ui.js +3 -2
- package/dist/ui.js.map +1 -1
- package/dist/wizelens.d.ts +3 -1
- package/dist/wizelens.d.ts.map +1 -1
- package/dist/wizelens.js +28 -12
- package/dist/wizelens.js.map +1 -1
- package/package.json +14 -4
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { json, READ_ONLY } from "./mcp-shared.js";
|
|
3
|
+
const RANGES = ["1h", "6h", "24h", "7d"];
|
|
4
|
+
const TOP_ERRORS = 10;
|
|
5
|
+
const SEVERITY = { unhealthy: 0, degraded: 1, healthy: 2, idle: 3 };
|
|
6
|
+
const iso = (ms) => new Date(ms).toISOString();
|
|
7
|
+
const round = (v) => (v == null ? null : Math.round(v * 100) / 100);
|
|
8
|
+
const headline = (h) => ({ value: round(h.value), previous: round(h.previous), changePercent: round(h.change) });
|
|
9
|
+
const serviceOf = (r) => ({ name: r.name, kind: r.kind, status: r.status, requests: r.requests, errors: r.errors, errorRatePercent: round(r.errorRate), avgMs: round(r.avgMs), p95Ms: round(r.p95Ms) });
|
|
10
|
+
const errorOf = (g) => ({
|
|
11
|
+
type: g.type,
|
|
12
|
+
message: g.message,
|
|
13
|
+
service: g.service,
|
|
14
|
+
endpoint: g.endpoint,
|
|
15
|
+
count: g.count,
|
|
16
|
+
critical: g.critical,
|
|
17
|
+
firstSeen: iso(g.firstSeenMs),
|
|
18
|
+
lastSeen: iso(g.lastSeenMs),
|
|
19
|
+
traceId: g.traceIds[0] ?? null,
|
|
20
|
+
});
|
|
21
|
+
const insightOf = (i) => ({ title: i.title, impact: i.impact, occurrences: i.occurrences, totalMs: round(i.totalMs), endpoints: i.endpoints.slice(0, 3) });
|
|
22
|
+
/** One project's morning report: traffic against the window before, every service's health, the top errors, and the biggest insights. */
|
|
23
|
+
async function reportOf(data, range) {
|
|
24
|
+
const [ov, svc, err] = await Promise.all([data.page("overview", range), data.page("services", range), data.page("errors", range)]);
|
|
25
|
+
const services = [...svc.rows].sort((a, b) => SEVERITY[a.status] - SEVERITY[b.status] || b.requests - a.requests);
|
|
26
|
+
return {
|
|
27
|
+
window: { from: iso(ov.meta.window.from), to: iso(ov.meta.window.to), comparedWith: ov.meta.compareLabel },
|
|
28
|
+
stillSettling: ov.meta.settling ?? 0,
|
|
29
|
+
requests: headline(ov.headlines.total),
|
|
30
|
+
errorRatePercent: headline(ov.headlines.errorRate),
|
|
31
|
+
avgDurationMs: headline(ov.headlines.avgDuration),
|
|
32
|
+
needsAttention: services.filter((s) => s.status === "unhealthy" || s.status === "degraded").map((s) => `${s.name}: ${s.status}`),
|
|
33
|
+
services: services.map(serviceOf),
|
|
34
|
+
exceptions: err.exceptions,
|
|
35
|
+
topErrors: [...err.groups].sort((a, b) => b.count - a.count).slice(0, TOP_ERRORS).map(errorOf),
|
|
36
|
+
insights: ov.insights.map(insightOf),
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
/** Every project at once, the ones that need attention first, with totals across them. */
|
|
40
|
+
function summaryOf(range, reports) {
|
|
41
|
+
const sorted = [...reports].sort((a, b) => b.report.needsAttention.length - a.report.needsAttention.length || (b.report.requests.value ?? 0) - (a.report.requests.value ?? 0));
|
|
42
|
+
const services = reports.flatMap((r) => r.report.services);
|
|
43
|
+
return {
|
|
44
|
+
range,
|
|
45
|
+
totals: {
|
|
46
|
+
projects: reports.length,
|
|
47
|
+
requests: reports.reduce((t, r) => t + (r.report.requests.value ?? 0), 0),
|
|
48
|
+
exceptions: reports.reduce((t, r) => t + r.report.exceptions, 0),
|
|
49
|
+
services: services.length,
|
|
50
|
+
unhealthy: services.filter((s) => s.status === "unhealthy").length,
|
|
51
|
+
degraded: services.filter((s) => s.status === "degraded").length,
|
|
52
|
+
},
|
|
53
|
+
projects: sorted.map(({ project, report }) => ({ project: project.name, projectId: project.id, ...report })),
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
/** get_overview: the dashboard's overview for a morning report. On a host with several projects, no `project` reads them all. */
|
|
57
|
+
export function registerOverviewTool(server, src) {
|
|
58
|
+
if (!src.defaults.overview)
|
|
59
|
+
return;
|
|
60
|
+
const inputSchema = { ...src.arg, range: z.enum(RANGES).optional().describe("Time range, compared with the one before it. Default 24h.") };
|
|
61
|
+
const description = "A health report: requests, error rate, and duration against the window before; every service's status, traffic, errors, and p95; the top errors; and the biggest performance insights. Without `project` on a multi-project host, it covers every project. Good for a daily or morning report.";
|
|
62
|
+
server.registerTool("get_overview", { description, inputSchema, annotations: READ_ONLY }, async (args) => {
|
|
63
|
+
const range = args.range ?? "24h";
|
|
64
|
+
const named = args.project;
|
|
65
|
+
if (named || !src.each)
|
|
66
|
+
return json({ range, ...(await reportOf(await src.open("get_overview", args), range)) });
|
|
67
|
+
const all = await src.each("get_overview", args);
|
|
68
|
+
return json(summaryOf(range, await Promise.all(all.map(async ({ project, data }) => ({ project, report: await reportOf(data, range) })))));
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=mcp-overview.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-overview.js","sourceRoot":"","sources":["../src/mcp-overview.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
|
+
import { type Source } from "./mcp-shared.js";
|
|
3
|
+
/** The dashboard pages an agent may read, with what each holds and the parameters it takes. */
|
|
4
|
+
export declare const MCP_PAGES: {
|
|
5
|
+
readonly overview: "Headlines, charts, top errors, insights, and services. service: a service name.";
|
|
6
|
+
readonly services: "Every service with status, traffic, errors, and latency. service: the selected row.";
|
|
7
|
+
readonly service: "One service: endpoints, dependencies, versions, and errors. service (required): a name.";
|
|
8
|
+
readonly endpoint: "One endpoint: latency, errors, slowest requests, users affected. service, endpoint (\"GET /api/orders/{id}\"), both required.";
|
|
9
|
+
readonly requests: "Request list with totals. method, status (5xx, 4xx, 200), duration (slow, >1s), service, endpoint, user, q, sort, page, size.";
|
|
10
|
+
readonly traces: "Trace list. status (ok, error), duration, service, q, sort (time, duration), page, size.";
|
|
11
|
+
readonly errors: "Error groups. status (unresolved, resolved, ignored, all), service, type, endpoint, user, critical=1, new=1, q, sort (recent, count), page, size.";
|
|
12
|
+
readonly error: "One error group: occurrences over time, endpoints, users affected, stack trace. group (required): a group key from errors.";
|
|
13
|
+
readonly database: "Queries by shape, slowest and most called, N+1 and slow query counts. service, q, table, operation, database, sort, page, size.";
|
|
14
|
+
readonly query: "One query shape: calls, latency, endpoints. q (required): the shape from database.";
|
|
15
|
+
readonly insights: "Performance insights (N+1, slow queries, duplicates). area, impact, status, service, endpoint, q, key.";
|
|
16
|
+
readonly logs: "Log lines with level counts. level, exact=1, service, category, trace, user, q, page, size.";
|
|
17
|
+
readonly rendering: "Browser page views and components. q.";
|
|
18
|
+
readonly route: "One browser route. route (required).";
|
|
19
|
+
readonly "log-patterns": "Log lines grouped into patterns, with counts. level, exact=1, service, pattern, origin.";
|
|
20
|
+
readonly traffic: "Requests, errors, and latency per time bucket and per endpoint. service, endpoint, buckets (16, 24, 48), from, to (ms).";
|
|
21
|
+
readonly problems: "Problems: anomalies grouped with a suspected cause. service, sensitivity (high, medium, low), problem, at, focus.";
|
|
22
|
+
readonly uptime: "Uptime checks: status, response time, incidents. check (one check id).";
|
|
23
|
+
readonly users: "Signed-in users by requests. q, page, size.";
|
|
24
|
+
readonly user: "One user: requests, failures, errors they hit, slowest requests. user (required).";
|
|
25
|
+
};
|
|
26
|
+
/** get_page and get_alerts. */
|
|
27
|
+
export declare function registerPageTools(server: McpServer, src: Source): void;
|
|
28
|
+
//# sourceMappingURL=mcp-page.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-page.d.ts","sourceRoot":"","sources":["../src/mcp-page.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAGzE,OAAO,EAAmC,KAAK,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAG/E,+FAA+F;AAC/F,eAAO,MAAM,SAAS;uBACV,iFAAiF;uBACjF,qFAAqF;sBACtF,yFAAyF;uBACxF,+HAA+H;uBAC/H,+HAA+H;qBACjI,0FAA0F;qBAC1F,mJAAmJ;oBACpJ,4HAA4H;uBACzH,iIAAiI;oBACpI,oFAAoF;uBACjF,wGAAwG;mBAC5G,6FAA6F;wBACxF,uCAAuC;oBAC3C,sCAAsC;6BAC7B,yFAAyF;sBAChG,yHAAyH;uBACxH,mHAAmH;qBACrH,wEAAwE;oBACzE,6CAA6C;mBAC9C,mFAAmF;CACrC,CAAC;AAoDvD,+BAA+B;AAC/B,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAGtE"}
|
package/dist/mcp-page.js
ADDED
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { json, READ_ONLY } from "./mcp-shared.js";
|
|
3
|
+
import { rangeArg } from "./mcp-store.js";
|
|
4
|
+
/** The dashboard pages an agent may read, with what each holds and the parameters it takes. */
|
|
5
|
+
export const MCP_PAGES = {
|
|
6
|
+
overview: "Headlines, charts, top errors, insights, and services. service: a service name.",
|
|
7
|
+
services: "Every service with status, traffic, errors, and latency. service: the selected row.",
|
|
8
|
+
service: "One service: endpoints, dependencies, versions, and errors. service (required): a name.",
|
|
9
|
+
endpoint: "One endpoint: latency, errors, slowest requests, users affected. service, endpoint (\"GET /api/orders/{id}\"), both required.",
|
|
10
|
+
requests: "Request list with totals. method, status (5xx, 4xx, 200), duration (slow, >1s), service, endpoint, user, q, sort, page, size.",
|
|
11
|
+
traces: "Trace list. status (ok, error), duration, service, q, sort (time, duration), page, size.",
|
|
12
|
+
errors: "Error groups. status (unresolved, resolved, ignored, all), service, type, endpoint, user, critical=1, new=1, q, sort (recent, count), page, size.",
|
|
13
|
+
error: "One error group: occurrences over time, endpoints, users affected, stack trace. group (required): a group key from errors.",
|
|
14
|
+
database: "Queries by shape, slowest and most called, N+1 and slow query counts. service, q, table, operation, database, sort, page, size.",
|
|
15
|
+
query: "One query shape: calls, latency, endpoints. q (required): the shape from database.",
|
|
16
|
+
insights: "Performance insights (N+1, slow queries, duplicates). area, impact, status, service, endpoint, q, key.",
|
|
17
|
+
logs: "Log lines with level counts. level, exact=1, service, category, trace, user, q, page, size.",
|
|
18
|
+
rendering: "Browser page views and components. q.",
|
|
19
|
+
route: "One browser route. route (required).",
|
|
20
|
+
"log-patterns": "Log lines grouped into patterns, with counts. level, exact=1, service, pattern, origin.",
|
|
21
|
+
traffic: "Requests, errors, and latency per time bucket and per endpoint. service, endpoint, buckets (16, 24, 48), from, to (ms).",
|
|
22
|
+
problems: "Problems: anomalies grouped with a suspected cause. service, sensitivity (high, medium, low), problem, at, focus.",
|
|
23
|
+
uptime: "Uptime checks: status, response time, incidents. check (one check id).",
|
|
24
|
+
users: "Signed-in users by requests. q, page, size.",
|
|
25
|
+
user: "One user: requests, failures, errors they hit, slowest requests. user (required).",
|
|
26
|
+
};
|
|
27
|
+
const PAGE_NAMES = Object.keys(MCP_PAGES);
|
|
28
|
+
function registerGetPage(server, src) {
|
|
29
|
+
if (!src.defaults.overview)
|
|
30
|
+
return;
|
|
31
|
+
const inputSchema = {
|
|
32
|
+
...src.arg,
|
|
33
|
+
page: z.enum(PAGE_NAMES).describe(PAGE_NAMES.map((p) => `${p}: ${MCP_PAGES[p]}`).join(" | ")),
|
|
34
|
+
params: z.record(z.string(), z.string().max(500)).optional().describe("The page's parameters, as listed with `page`. Values are text."),
|
|
35
|
+
range: rangeArg("the page covers"),
|
|
36
|
+
};
|
|
37
|
+
const description = "Read one dashboard page's numbers, the same the dashboard shows, from the whole store. Pick the page and its parameters; for a list, page through with page and size.";
|
|
38
|
+
server.registerTool("get_page", { description, inputSchema, annotations: READ_ONLY }, async (args) => {
|
|
39
|
+
const data = await src.open("get_page", args);
|
|
40
|
+
try {
|
|
41
|
+
return json(await data.page(args.page, args.range ?? "24h", args.params ?? {}));
|
|
42
|
+
}
|
|
43
|
+
catch (err) {
|
|
44
|
+
return { ...json({ error: err instanceof Error ? err.message : String(err) }), isError: true };
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
/** Where a rule sends, without the secret part (webhook URLs, routing keys, addresses). */
|
|
49
|
+
const channelKinds = (cs) => cs.map((c) => c.kind);
|
|
50
|
+
const ruleOf = (r) => {
|
|
51
|
+
const { channels, ...rest } = r;
|
|
52
|
+
return { ...rest, channels: channelKinds(channels) };
|
|
53
|
+
};
|
|
54
|
+
const iso = (ms) => (ms === null ? null : new Date(ms).toISOString());
|
|
55
|
+
function reportOf(a) {
|
|
56
|
+
const names = new Map(a.rules.map((r) => [r.id, r.name]));
|
|
57
|
+
return {
|
|
58
|
+
firing: a.rules.filter((r) => r.enabled && r.state === "firing").map((r) => r.name),
|
|
59
|
+
rules: a.rules.map((r) => ({ ...ruleOf(r), lastEval: iso(r.lastEvalMs), mutedUntil: iso(r.mutedUntilMs) })),
|
|
60
|
+
events: a.events.map((e) => ({ rule: names.get(e.ruleId) ?? e.ruleId, kind: e.kind, value: e.value, message: e.message, time: iso(e.timeMs) })),
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
function registerGetAlerts(server, src) {
|
|
64
|
+
if (!src.defaults.alerts)
|
|
65
|
+
return;
|
|
66
|
+
const description = "List alert rules (what each watches, its threshold, and whether it is firing) and the newest alert events. Channel secrets are left out.";
|
|
67
|
+
server.registerTool("get_alerts", { description, inputSchema: { ...src.arg }, annotations: READ_ONLY }, async (args) => {
|
|
68
|
+
const data = await src.open("get_alerts", args);
|
|
69
|
+
return json(reportOf(await data.alerts()));
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
/** get_page and get_alerts. */
|
|
73
|
+
export function registerPageTools(server, src) {
|
|
74
|
+
registerGetPage(server, src);
|
|
75
|
+
registerGetAlerts(server, src);
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=mcp-page.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-page.js","sourceRoot":"","sources":["../src/mcp-page.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
|
+
import { type Source } from "./mcp-shared.js";
|
|
3
|
+
/** list_problems: services and endpoints above their normal, grouped into problems with a suspected cause. */
|
|
4
|
+
export declare function registerProblemTools(server: McpServer, src: Source): void;
|
|
5
|
+
//# sourceMappingURL=mcp-problems.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-problems.d.ts","sourceRoot":"","sources":["../src/mcp-problems.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAGzE,OAAO,EAAwD,KAAK,MAAM,EAAE,MAAM,iBAAiB,CAAC;AA4CpG,8GAA8G;AAC9G,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAazE"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { causeText } from "@wizeworks/lens-core";
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
import { json, READ_ONLY } from "./mcp-shared.js";
|
|
4
|
+
const RANGES = ["1h", "6h", "24h", "7d"];
|
|
5
|
+
const iso = (ms) => new Date(ms).toISOString();
|
|
6
|
+
const round = (v) => Math.round(v * 100) / 100;
|
|
7
|
+
const anomalyOf = (a) => ({
|
|
8
|
+
metric: a.metric,
|
|
9
|
+
service: a.name,
|
|
10
|
+
endpoint: a.endpoint,
|
|
11
|
+
started: iso(a.startMs),
|
|
12
|
+
ongoing: a.ongoing,
|
|
13
|
+
value: round(a.peak.value),
|
|
14
|
+
normal: round(a.peak.normal),
|
|
15
|
+
alertsAbove: round(a.peak.upper),
|
|
16
|
+
});
|
|
17
|
+
const problemOf = (p) => ({
|
|
18
|
+
id: p.id,
|
|
19
|
+
title: p.title,
|
|
20
|
+
started: iso(p.startMs),
|
|
21
|
+
ended: p.ongoing ? null : iso(p.endMs),
|
|
22
|
+
ongoing: p.ongoing,
|
|
23
|
+
services: p.services.map((s) => `${s.name} (${s.kind})`),
|
|
24
|
+
suspectedCause: p.cause ? causeText(p.cause) : null,
|
|
25
|
+
otherCauses: p.causes.slice(1).map(causeText),
|
|
26
|
+
anomalies: p.anomalies.map(anomalyOf),
|
|
27
|
+
moreAnomalies: p.anomalyCount - p.anomalies.length,
|
|
28
|
+
});
|
|
29
|
+
function reportOf(m) {
|
|
30
|
+
const normal = m.baseline.mode === "week" ? "the same hour in earlier weeks" : "the same hour on earlier days";
|
|
31
|
+
return {
|
|
32
|
+
window: { from: iso(m.meta.window.from), to: iso(m.meta.window.to) },
|
|
33
|
+
baseline: m.baseline.learning ? `learning: needs two earlier ${m.baseline.mode}s with data, has ${m.baseline.samples}` : `normal is ${normal} (${m.baseline.samples} with data)`,
|
|
34
|
+
problems: m.total,
|
|
35
|
+
ongoing: m.ongoing,
|
|
36
|
+
list: m.problems.map(problemOf),
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
const problemsOf = async (data, range) => reportOf(await data.page("problems", range));
|
|
40
|
+
/** list_problems: services and endpoints above their normal, grouped into problems with a suspected cause. */
|
|
41
|
+
export function registerProblemTools(server, src) {
|
|
42
|
+
if (!src.defaults.overview)
|
|
43
|
+
return;
|
|
44
|
+
const inputSchema = { ...src.arg, range: z.enum(RANGES).optional().describe("Time range to look for problems in. Default 24h.") };
|
|
45
|
+
const description = "Problems: error rate, p95 duration, or traffic above normal (the same hour in earlier weeks, plain statistics) on services and endpoints that call each other, grouped by when they started. Each names a suspected cause: a new release, a new error group, a query, or a service further down the calls. Ongoing problems come first. Without `project` on a multi-project host, it covers every project.";
|
|
46
|
+
server.registerTool("list_problems", { description, inputSchema, annotations: READ_ONLY }, async (args) => {
|
|
47
|
+
const range = args.range ?? "24h";
|
|
48
|
+
const named = args.project;
|
|
49
|
+
if (named || !src.each)
|
|
50
|
+
return json({ range, ...(await problemsOf(await src.open("list_problems", args), range)) });
|
|
51
|
+
const all = await src.each("list_problems", args);
|
|
52
|
+
const projects = await Promise.all(all.map(async ({ project, data }) => ({ project: project.name, projectId: project.id, ...(await problemsOf(data, range)) })));
|
|
53
|
+
return json({ range, projects: projects.sort((a, b) => b.ongoing - a.ongoing || b.problems - a.problems) });
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=mcp-problems.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-problems.js","sourceRoot":"","sources":["../src/mcp-problems.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-projects.d.ts","sourceRoot":"","sources":["../src/mcp-projects.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,EAAQ,KAAK,aAAa,EAAE,KAAK,UAAU,EAAE,KAAK,WAAW,EAAa,KAAK,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAItH,4CAA4C;AAC5C,wBAAgB,YAAY,CAAC,IAAI,EAAE,aAAa,GAAG,MAAM,CAMxD;AAID,+EAA+E;AAC/E,wBAAgB,WAAW,CAAC,EAAE,EAAE,SAAS,UAAU,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,UAAU,CAU7F;AAED,yEAAyE;AACzE,wBAAgB,cAAc,CAAC,CAAC,EAAE,WAAW,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"mcp-projects.d.ts","sourceRoot":"","sources":["../src/mcp-projects.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,EAAQ,KAAK,aAAa,EAAE,KAAK,UAAU,EAAE,KAAK,WAAW,EAAa,KAAK,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAItH,4CAA4C;AAC5C,wBAAgB,YAAY,CAAC,IAAI,EAAE,aAAa,GAAG,MAAM,CAMxD;AAID,+EAA+E;AAC/E,wBAAgB,WAAW,CAAC,EAAE,EAAE,SAAS,UAAU,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,UAAU,CAU7F;AAED,yEAAyE;AACzE,wBAAgB,cAAc,CAAC,CAAC,EAAE,WAAW,GAAG,MAAM,CAmBrD;AAED,8EAA8E;AAC9E,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC,EAAE,WAAW,GAAG,IAAI,CAM5E"}
|
package/dist/mcp-projects.js
CHANGED
|
@@ -4,7 +4,7 @@ const auditLine = (service, tool, args) => `[wizelens] mcp tool=${tool} service=
|
|
|
4
4
|
/** One data source: every call reads it. */
|
|
5
5
|
export function singleSource(data) {
|
|
6
6
|
return {
|
|
7
|
-
defaults: { slowQueryMs: data.slowQueryMs, nPlusOneThreshold: data.nPlusOneThreshold, metrics: !!data.metrics, metricRanges: data.metricRanges },
|
|
7
|
+
defaults: { slowQueryMs: data.slowQueryMs, nPlusOneThreshold: data.nPlusOneThreshold, metrics: !!data.metrics, metricRanges: data.metricRanges, overview: !!data.page, alerts: !!data.alerts },
|
|
8
8
|
arg: {},
|
|
9
9
|
open: async (tool, args) => (data.audit(auditLine(data.service, tool, args)), data),
|
|
10
10
|
};
|
|
@@ -29,13 +29,18 @@ export function pickProject(ps, wanted) {
|
|
|
29
29
|
export function projectsSource(m) {
|
|
30
30
|
const project = z.string().max(200).optional().describe("Project id or name, from list_projects. Needed when the key reads more than one project.");
|
|
31
31
|
return {
|
|
32
|
-
defaults: { slowQueryMs: m.slowQueryMs, nPlusOneThreshold: m.nPlusOneThreshold, metrics: m.metrics, metricRanges: m.metricRanges },
|
|
32
|
+
defaults: { slowQueryMs: m.slowQueryMs, nPlusOneThreshold: m.nPlusOneThreshold, metrics: m.metrics, metricRanges: m.metricRanges, overview: !!m.overview, alerts: !!m.alerts },
|
|
33
33
|
arg: { project },
|
|
34
34
|
open: async (tool, args) => {
|
|
35
35
|
const data = await m.open(pickProject(m.projects, args.project).id);
|
|
36
36
|
data.audit(auditLine(data.service, tool, args));
|
|
37
37
|
return data;
|
|
38
38
|
},
|
|
39
|
+
each: (tool, args) => Promise.all(m.projects.map(async (project) => {
|
|
40
|
+
const data = await m.open(project.id);
|
|
41
|
+
data.audit(auditLine(data.service, tool, args));
|
|
42
|
+
return { project, data };
|
|
43
|
+
})),
|
|
39
44
|
};
|
|
40
45
|
}
|
|
41
46
|
/** list_projects: the projects this key reads, for the `project` argument. */
|
package/dist/mcp-projects.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-projects.js","sourceRoot":"","sources":["../src/mcp-projects.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,IAAI,EAAyD,SAAS,EAAe,MAAM,iBAAiB,CAAC;AAEtH,MAAM,SAAS,GAAG,CAAC,OAAe,EAAE,IAAY,EAAE,IAAa,EAAE,EAAE,CAAC,uBAAuB,IAAI,YAAY,OAAO,SAAS,IAAI,CAAC,SAAS,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,CAAC;AAExJ,4CAA4C;AAC5C,MAAM,UAAU,YAAY,CAAC,IAAmB;IAC9C,OAAO;QACL,QAAQ,EAAE,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,iBAAiB,EAAE,IAAI,CAAC,iBAAiB,EAAE,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE;
|
|
1
|
+
{"version":3,"file":"mcp-projects.js","sourceRoot":"","sources":["../src/mcp-projects.ts"],"names":[],"mappings":"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"}
|
package/dist/mcp-search.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-search.d.ts","sourceRoot":"","sources":["../src/mcp-search.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAGzE,OAAO,EAAmB,KAAK,MAAM,
|
|
1
|
+
{"version":3,"file":"mcp-search.d.ts","sourceRoot":"","sources":["../src/mcp-search.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAGzE,OAAO,EAAmB,KAAK,MAAM,EAAU,MAAM,iBAAiB,CAAC;AAgDvE,kGAAkG;AAClG,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAGxE"}
|
package/dist/mcp-search.js
CHANGED
|
@@ -1,12 +1,14 @@
|
|
|
1
|
-
import { checkSearch, decodeCursor, SEARCH_KINDS, searchMemory, suggestMemory } from "@wizeworks/lens-core";
|
|
1
|
+
import { activeTags, checkSearch, decodeCursor, expandQuery, SEARCH_KINDS, searchMemory, suggestMemory, suggestTags } from "@wizeworks/lens-core";
|
|
2
2
|
import { z } from "zod";
|
|
3
|
-
import { json, READ_ONLY } from "./mcp-shared.js";
|
|
3
|
+
import { json, READ_ONLY, tagsOf } from "./mcp-shared.js";
|
|
4
|
+
import { pageTags } from "./mcp-tags.js";
|
|
4
5
|
import { RANGES, windowOf } from "./mcp-store.js";
|
|
5
6
|
const LANGUAGE = [
|
|
6
7
|
"Search language: words and \"phrases\" match text (path, SQL, messages, errors).",
|
|
7
8
|
"field:value with service, env, trace, span, name, method, path, route, status (500, 5xx, ok, error), duration (250ms, 1s), level, category, kind, user, error (true/false), message.",
|
|
8
9
|
"@attribute:value for any span or log attribute, such as @user.id:42 or @db.system.name:postgres.",
|
|
9
10
|
"Use >, >=, <, <= (status:>=500, duration:>1s), ranges a..b, * wildcards (path:/api/*), -term or NOT to exclude, OR, and parentheses.",
|
|
11
|
+
"tag:name matches a tag rule (list_tags) or a tag the app sets; results come with the tags on each.",
|
|
10
12
|
].join(" ");
|
|
11
13
|
function registerSearch(server, src) {
|
|
12
14
|
const inputSchema = {
|
|
@@ -23,8 +25,10 @@ function registerSearch(server, src) {
|
|
|
23
25
|
const parsed = checkSearch(args.q);
|
|
24
26
|
if (!parsed.ok)
|
|
25
27
|
return { ...json({ error: parsed.error, start: parsed.start, end: parsed.end }), isError: true };
|
|
26
|
-
const
|
|
27
|
-
|
|
28
|
+
const raw = { kind: (args.kind ?? "requests"), node: parsed.node, window: windowOf(data, args.range ?? "24h"), limit: args.limit ?? 20, cursor: decodeCursor(args.cursor), env: data.env };
|
|
29
|
+
const { query, unknownTags } = expandQuery(raw, activeTags(await tagsOf(data)));
|
|
30
|
+
const page = await (data.search ? data.search(query) : searchMemory(await data.all(), query));
|
|
31
|
+
return json({ ...page, tags: await pageTags(data, page), unknownTags });
|
|
28
32
|
});
|
|
29
33
|
}
|
|
30
34
|
function registerFields(server, src) {
|
|
@@ -38,7 +42,7 @@ function registerFields(server, src) {
|
|
|
38
42
|
server.registerTool("search_fields", { description, inputSchema, annotations: READ_ONLY }, async (args) => {
|
|
39
43
|
const data = await src.open("search_fields", args);
|
|
40
44
|
const r = { field: args.field || null, prefix: args.prefix ?? "", window: windowOf(data, args.range ?? "24h"), limit: 50, env: data.env };
|
|
41
|
-
return json(await (data.suggest ? data.suggest(r) : suggestMemory(await data.all(), r)));
|
|
45
|
+
return json(suggestTags(r, await tagsOf(data)) ?? (await (data.suggest ? data.suggest(r) : suggestMemory(await data.all(), r))));
|
|
42
46
|
});
|
|
43
47
|
}
|
|
44
48
|
/** search and search_fields: the search language, on the host's store or on `all()` in memory. */
|
package/dist/mcp-search.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-search.js","sourceRoot":"","sources":["../src/mcp-search.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"mcp-search.js","sourceRoot":"","sources":["../src/mcp-search.ts"],"names":[],"mappings":"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"}
|
package/dist/mcp-shared.d.ts
CHANGED
|
@@ -1,5 +1,20 @@
|
|
|
1
1
|
import type { ZodTypeAny } from "zod";
|
|
2
|
-
import type
|
|
2
|
+
import { type AlertRule, type MetricsModel, type ModelOf, type PageName, type SearchPage, type SearchQuery, type Suggestion, type SuggestRequest, type TagRule, type TimeRange, type Trace } from "@wizeworks/lens-core";
|
|
3
|
+
/** The page models get_overview, list_problems, get_timeseries, and group_requests read. */
|
|
4
|
+
export type OverviewPage = "overview" | "services" | "errors" | "problems" | "traffic";
|
|
5
|
+
/** One alert event, as get_alerts lists it. */
|
|
6
|
+
export interface McpAlertEvent {
|
|
7
|
+
ruleId: string;
|
|
8
|
+
kind: string;
|
|
9
|
+
value: number | null;
|
|
10
|
+
message: string;
|
|
11
|
+
timeMs: number;
|
|
12
|
+
}
|
|
13
|
+
/** The host's alert rules and their newest events. */
|
|
14
|
+
export interface McpAlerts {
|
|
15
|
+
rules: AlertRule[];
|
|
16
|
+
events: McpAlertEvent[];
|
|
17
|
+
}
|
|
3
18
|
/** What the MCP tools can read. Read-only by design. */
|
|
4
19
|
export interface McpDataSource {
|
|
5
20
|
service: string;
|
|
@@ -10,6 +25,8 @@ export interface McpDataSource {
|
|
|
10
25
|
nPlusOneThreshold: number;
|
|
11
26
|
/** Recent traces, newest first, for the tools that read whole traces in memory. A host may load them only when a tool asks. */
|
|
12
27
|
all(): Trace[] | Promise<Trace[]>;
|
|
28
|
+
/** With `search`: the traces the store's search does not have yet (not settled). Default `all()`. */
|
|
29
|
+
unsettled?(): Trace[] | Promise<Trace[]>;
|
|
13
30
|
get(traceId: string, federate: boolean): Promise<Trace | undefined>;
|
|
14
31
|
audit(line: string): void;
|
|
15
32
|
/** The metrics page for a range and page parameters. Without it, the metric tools are left out. */
|
|
@@ -24,7 +41,15 @@ export interface McpDataSource {
|
|
|
24
41
|
now?(): number;
|
|
25
42
|
/** The environment memory search gives this service's documents (in-app), as the HTTP search does. */
|
|
26
43
|
env?: string;
|
|
44
|
+
/** One dashboard page's model, from the host's stats, with the page's parameters. Without it, get_overview and get_page are left out. */
|
|
45
|
+
page?<P extends PageName>(page: P, range: TimeRange, params?: Record<string, string>): Promise<ModelOf<P>>;
|
|
46
|
+
/** Alert rules and their newest events. Without it, get_alerts is left out. */
|
|
47
|
+
alerts?(): Promise<McpAlerts>;
|
|
48
|
+
/** The project's tags (docs/TAGS-PLAN.md). Without it, only the built-ins. */
|
|
49
|
+
tags?(): readonly TagRule[] | Promise<readonly TagRule[]>;
|
|
27
50
|
}
|
|
51
|
+
/** The tags a tool reads: the host's, or the built-ins. */
|
|
52
|
+
export declare const tagsOf: (data: McpDataSource) => Promise<readonly TagRule[]>;
|
|
28
53
|
/** One project a multi-project host serves. */
|
|
29
54
|
export interface McpProject {
|
|
30
55
|
id: string;
|
|
@@ -39,6 +64,10 @@ export interface McpProjects {
|
|
|
39
64
|
/** True when every project has the metric tools. */
|
|
40
65
|
metrics: boolean;
|
|
41
66
|
metricRanges?: readonly TimeRange[];
|
|
67
|
+
/** True when every project has get_overview and get_page. */
|
|
68
|
+
overview?: boolean;
|
|
69
|
+
/** True when every project has get_alerts. */
|
|
70
|
+
alerts?: boolean;
|
|
42
71
|
projects: readonly McpProject[];
|
|
43
72
|
/** The data of one project from `projects`. */
|
|
44
73
|
open(projectId: string): Promise<McpDataSource>;
|
|
@@ -51,6 +80,8 @@ export interface McpDefaults {
|
|
|
51
80
|
nPlusOneThreshold: number;
|
|
52
81
|
metrics: boolean;
|
|
53
82
|
metricRanges?: readonly TimeRange[];
|
|
83
|
+
overview: boolean;
|
|
84
|
+
alerts: boolean;
|
|
54
85
|
}
|
|
55
86
|
/** Where the tools read. */
|
|
56
87
|
export interface Source {
|
|
@@ -59,6 +90,11 @@ export interface Source {
|
|
|
59
90
|
arg: Record<string, ZodTypeAny>;
|
|
60
91
|
/** The data for one tool call, after the call is audited. */
|
|
61
92
|
open(tool: string, args: object): Promise<McpDataSource>;
|
|
93
|
+
/** Several projects: the data of each, for a call that names none. Each one is audited. */
|
|
94
|
+
each?(tool: string, args: object): Promise<{
|
|
95
|
+
project: McpProject;
|
|
96
|
+
data: McpDataSource;
|
|
97
|
+
}[]>;
|
|
62
98
|
}
|
|
63
99
|
export declare const READ_ONLY: {
|
|
64
100
|
readOnlyHint: boolean;
|
package/dist/mcp-shared.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-shared.d.ts","sourceRoot":"","sources":["../src/mcp-shared.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,KAAK,CAAC;AACtC,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,cAAc,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"mcp-shared.d.ts","sourceRoot":"","sources":["../src/mcp-shared.ts"],"names":[],"mappings":"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"}
|
package/dist/mcp-shared.js
CHANGED
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
import { tagList } from "@wizeworks/lens-core";
|
|
2
|
+
/** The tags a tool reads: the host's, or the built-ins. */
|
|
3
|
+
export const tagsOf = async (data) => (data.tags ? await data.tags() : tagList([], new Set()));
|
|
1
4
|
export const READ_ONLY = { readOnlyHint: true, openWorldHint: false };
|
|
2
5
|
export const json = (value) => ({
|
|
3
6
|
content: [{ type: "text", text: JSON.stringify(value, null, 2) }],
|
package/dist/mcp-shared.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-shared.js","sourceRoot":"","sources":["../src/mcp-shared.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"mcp-shared.js","sourceRoot":"","sources":["../src/mcp-shared.ts"],"names":[],"mappings":"AACA,OAAO,EAAyJ,OAAO,EAA8B,MAAM,sBAAsB,CAAC;AAsDlO,2DAA2D;AAC3D,MAAM,CAAC,MAAM,MAAM,GAAG,KAAK,EAAE,IAAmB,EAA+B,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC;AAiD3I,MAAM,CAAC,MAAM,SAAS,GAAG,EAAE,YAAY,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC;AAEtE,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,KAAc,EAAE,EAAE,CAAC,CAAC;IACvC,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;CAC3E,CAAC,CAAC"}
|
package/dist/mcp-store.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { type SearchItems, type SearchKind, type SearchNode, type TimeRange } from "@wizeworks/lens-core";
|
|
2
2
|
import { z } from "zod";
|
|
3
|
-
import type
|
|
3
|
+
import { type McpDataSource } from "./mcp-shared.js";
|
|
4
4
|
export declare const RANGES: [TimeRange, ...TimeRange[]];
|
|
5
5
|
export declare const rangeArg: (what: string) => z.ZodOptional<z.ZodEnum<{
|
|
6
6
|
"15m": "15m";
|
|
@@ -14,7 +14,7 @@ export declare const windowOf: (data: McpDataSource, range: TimeRange) => {
|
|
|
14
14
|
from: number;
|
|
15
15
|
to: number;
|
|
16
16
|
};
|
|
17
|
-
/** The matches of a search, newest first, up to `max`: the store, plus the
|
|
17
|
+
/** The matches of a search, newest first, up to `max`: the store, plus the traces it has not indexed yet (they are indexed once they go quiet). `tag:` reads the host's tags. */
|
|
18
18
|
export declare function findAll<K extends SearchKind>(data: McpDataSource, kind: K, node: SearchNode | null, range: TimeRange, max: number): Promise<SearchItems[K][]>;
|
|
19
19
|
/** Every part must hold: tool filters as search text, and the caller's own search. Null parts are left out. */
|
|
20
20
|
export declare function allOf(parts: readonly (string | null | undefined)[]): {
|
package/dist/mcp-store.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-store.d.ts","sourceRoot":"","sources":["../src/mcp-store.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"mcp-store.d.ts","sourceRoot":"","sources":["../src/mcp-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqD,KAAK,WAAW,EAAE,KAAK,UAAU,EAAE,KAAK,UAAU,EAA+C,KAAK,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAC1M,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,KAAK,aAAa,EAAU,MAAM,iBAAiB,CAAC;AAG7D,eAAO,MAAM,MAAM,EAA+B,CAAC,SAAS,EAAE,GAAG,SAAS,EAAE,CAAC,CAAC;AAE9E,eAAO,MAAM,QAAQ,SAAU,MAAM;;;;;;;GAAqG,CAAC;AAI3I,eAAO,MAAM,QAAQ,SAAU,aAAa,SAAS,SAAS;IAEnD,IAAI;IAA+B,EAAE;CAC/C,CAAC;AAwBF,iLAAiL;AACjL,wBAAsB,OAAO,CAAC,CAAC,SAAS,UAAU,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,GAAG,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,CAOnK;AAED,+GAA+G;AAC/G,wBAAgB,KAAK,CAAC,KAAK,EAAE,SAAS,CAAC,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,EAAE,GAAG;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,UAAU,GAAG,IAAI,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CASzI"}
|
package/dist/mcp-store.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { checkSearch, decodeCursor, searchMemory, TIME_RANGES } from "@wizeworks/lens-core";
|
|
1
|
+
import { activeTags, checkSearch, decodeCursor, expandTags, searchMemory, TIME_RANGES } from "@wizeworks/lens-core";
|
|
2
2
|
import { z } from "zod";
|
|
3
|
+
import { tagsOf } from "./mcp-shared.js";
|
|
3
4
|
// Tools that read the whole store through search, not a slice of recent traces (docs/SEARCH-PLAN.md, "MCP").
|
|
4
5
|
export const RANGES = Object.keys(TIME_RANGES);
|
|
5
6
|
export const rangeArg = (what) => z.enum(RANGES).optional().describe(`How far back ${what}: 15m, 1h, 6h, 24h (default), 7d, 30d.`);
|
|
@@ -27,12 +28,12 @@ async function storePages(data, base, max) {
|
|
|
27
28
|
} while (cursor && out.length < max);
|
|
28
29
|
return out;
|
|
29
30
|
}
|
|
30
|
-
/** The matches of a search, newest first, up to `max`: the store, plus the
|
|
31
|
+
/** The matches of a search, newest first, up to `max`: the store, plus the traces it has not indexed yet (they are indexed once they go quiet). `tag:` reads the host's tags. */
|
|
31
32
|
export async function findAll(data, kind, node, range, max) {
|
|
32
|
-
const base = { kind, node, window: windowOf(data, range), env: data.env };
|
|
33
|
-
const recent = searchMemory(await data.all(), { ...base, limit: max }).items;
|
|
33
|
+
const base = { kind, node: expandTags(node, activeTags(await tagsOf(data))).node, window: windowOf(data, range), env: data.env };
|
|
34
34
|
if (!data.search)
|
|
35
|
-
return
|
|
35
|
+
return searchMemory(await data.all(), { ...base, limit: max }).items;
|
|
36
|
+
const recent = searchMemory(await (data.unsettled ?? data.all)(), { ...base, limit: max }).items;
|
|
36
37
|
const seen = new Map();
|
|
37
38
|
for (const item of [...(await storePages(data, base, max)), ...recent])
|
|
38
39
|
seen.set(idOf(item), item);
|
package/dist/mcp-store.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-store.js","sourceRoot":"","sources":["../src/mcp-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAwE,YAAY,EAAE,WAAW,EAAkB,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"mcp-store.js","sourceRoot":"","sources":["../src/mcp-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
|
+
import { type SearchPage, type TagMatches } from "@wizeworks/lens-core";
|
|
3
|
+
import { type McpDataSource, type Source } from "./mcp-shared.js";
|
|
4
|
+
/** The tags on each result of a page, keyed by "traceId owner" as `api/tags/match` answers. */
|
|
5
|
+
export declare function pageTags(data: McpDataSource, page: SearchPage): Promise<TagMatches>;
|
|
6
|
+
/** list_tags: the tags `tag:name` reads, with their searches. */
|
|
7
|
+
export declare function registerTagTools(server: McpServer, src: Source): void;
|
|
8
|
+
//# sourceMappingURL=mcp-tags.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-tags.d.ts","sourceRoot":"","sources":["../src/mcp-tags.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,EAAoC,KAAK,UAAU,EAAkC,KAAK,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAC1I,OAAO,EAAQ,KAAK,aAAa,EAAa,KAAK,MAAM,EAAU,MAAM,iBAAiB,CAAC;AAO3F,+FAA+F;AAC/F,wBAAsB,QAAQ,CAAC,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAMzF;AAED,iEAAiE;AACjE,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAMrE"}
|