observability-toolkit 1.0.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/README.md +107 -0
- package/dist/backends/index.d.ts +72 -0
- package/dist/backends/index.d.ts.map +1 -0
- package/dist/backends/index.js +5 -0
- package/dist/backends/index.js.map +1 -0
- package/dist/backends/local-jsonl.d.ts +21 -0
- package/dist/backends/local-jsonl.d.ts.map +1 -0
- package/dist/backends/local-jsonl.js +281 -0
- package/dist/backends/local-jsonl.js.map +1 -0
- package/dist/backends/signoz-api.d.ts +28 -0
- package/dist/backends/signoz-api.d.ts.map +1 -0
- package/dist/backends/signoz-api.js +293 -0
- package/dist/backends/signoz-api.js.map +1 -0
- package/dist/lib/constants.d.ts +21 -0
- package/dist/lib/constants.d.ts.map +1 -0
- package/dist/lib/constants.js +30 -0
- package/dist/lib/constants.js.map +1 -0
- package/dist/lib/file-utils.d.ts +38 -0
- package/dist/lib/file-utils.d.ts.map +1 -0
- package/dist/lib/file-utils.js +129 -0
- package/dist/lib/file-utils.js.map +1 -0
- package/dist/server.d.ts +11 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +140 -0
- package/dist/server.js.map +1 -0
- package/dist/tools/context-stats.d.ts +81 -0
- package/dist/tools/context-stats.d.ts.map +1 -0
- package/dist/tools/context-stats.js +213 -0
- package/dist/tools/context-stats.js.map +1 -0
- package/dist/tools/get-trace-url.d.ts +36 -0
- package/dist/tools/get-trace-url.d.ts.map +1 -0
- package/dist/tools/get-trace-url.js +43 -0
- package/dist/tools/get-trace-url.js.map +1 -0
- package/dist/tools/health-check.d.ts +50 -0
- package/dist/tools/health-check.d.ts.map +1 -0
- package/dist/tools/health-check.js +109 -0
- package/dist/tools/health-check.js.map +1 -0
- package/dist/tools/index.d.ts +10 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +10 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/query-logs.d.ts +82 -0
- package/dist/tools/query-logs.d.ts.map +1 -0
- package/dist/tools/query-logs.js +86 -0
- package/dist/tools/query-logs.js.map +1 -0
- package/dist/tools/query-metrics.d.ts +96 -0
- package/dist/tools/query-metrics.d.ts.map +1 -0
- package/dist/tools/query-metrics.js +85 -0
- package/dist/tools/query-metrics.js.map +1 -0
- package/dist/tools/query-traces.d.ts +95 -0
- package/dist/tools/query-traces.d.ts.map +1 -0
- package/dist/tools/query-traces.js +83 -0
- package/dist/tools/query-traces.js.map +1 -0
- package/package.json +43 -0
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Query traces from local JSONL or SigNoz
|
|
3
|
+
*/
|
|
4
|
+
import { z } from 'zod';
|
|
5
|
+
import { LocalJsonlBackend } from '../backends/local-jsonl.js';
|
|
6
|
+
import { SigNozApiBackend } from '../backends/signoz-api.js';
|
|
7
|
+
import { SIGNOZ_URL, SIGNOZ_API_KEY } from '../lib/constants.js';
|
|
8
|
+
export const queryTracesSchema = z.object({
|
|
9
|
+
backend: z.enum(['local', 'signoz', 'auto']).default('auto').describe('Backend to query: local (JSONL files), signoz (API), or auto (tries both)'),
|
|
10
|
+
traceId: z.string().optional().describe('Filter by specific trace ID'),
|
|
11
|
+
serviceName: z.string().optional().describe('Filter by service name'),
|
|
12
|
+
spanName: z.string().optional().describe('Filter by span name (substring match)'),
|
|
13
|
+
minDurationMs: z.number().optional().describe('Minimum span duration in milliseconds'),
|
|
14
|
+
maxDurationMs: z.number().optional().describe('Maximum span duration in milliseconds'),
|
|
15
|
+
startDate: z.string().optional().describe('Start date (YYYY-MM-DD)'),
|
|
16
|
+
endDate: z.string().optional().describe('End date (YYYY-MM-DD)'),
|
|
17
|
+
limit: z.number().default(50).describe('Maximum number of results'),
|
|
18
|
+
});
|
|
19
|
+
export async function queryTraces(input) {
|
|
20
|
+
const options = {
|
|
21
|
+
traceId: input.traceId,
|
|
22
|
+
serviceName: input.serviceName,
|
|
23
|
+
spanName: input.spanName,
|
|
24
|
+
minDurationMs: input.minDurationMs,
|
|
25
|
+
maxDurationMs: input.maxDurationMs,
|
|
26
|
+
startDate: input.startDate,
|
|
27
|
+
endDate: input.endDate,
|
|
28
|
+
limit: input.limit,
|
|
29
|
+
};
|
|
30
|
+
const hasSigNozConfig = SIGNOZ_URL && SIGNOZ_API_KEY;
|
|
31
|
+
const backend = input.backend === 'auto'
|
|
32
|
+
? (hasSigNozConfig ? 'signoz' : 'local')
|
|
33
|
+
: input.backend;
|
|
34
|
+
if (backend === 'local' || input.backend === 'auto') {
|
|
35
|
+
const local = new LocalJsonlBackend();
|
|
36
|
+
const traces = await local.queryTraces(options);
|
|
37
|
+
if (traces.length > 0 || backend === 'local') {
|
|
38
|
+
return {
|
|
39
|
+
backend: 'local',
|
|
40
|
+
count: traces.length,
|
|
41
|
+
traces: traces.map(t => ({
|
|
42
|
+
traceId: t.traceId,
|
|
43
|
+
spanId: t.spanId,
|
|
44
|
+
name: t.name,
|
|
45
|
+
kind: t.kind,
|
|
46
|
+
durationMs: t.durationMs,
|
|
47
|
+
status: t.status,
|
|
48
|
+
attributes: t.attributes,
|
|
49
|
+
})),
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
if (backend === 'signoz' || (input.backend === 'auto' && hasSigNozConfig)) {
|
|
54
|
+
const signoz = new SigNozApiBackend();
|
|
55
|
+
const traces = await signoz.queryTraces(options);
|
|
56
|
+
return {
|
|
57
|
+
backend: 'signoz',
|
|
58
|
+
count: traces.length,
|
|
59
|
+
traces: traces.map(t => ({
|
|
60
|
+
traceId: t.traceId,
|
|
61
|
+
spanId: t.spanId,
|
|
62
|
+
name: t.name,
|
|
63
|
+
kind: t.kind,
|
|
64
|
+
durationMs: t.durationMs,
|
|
65
|
+
status: t.status,
|
|
66
|
+
attributes: t.attributes,
|
|
67
|
+
})),
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
return {
|
|
71
|
+
backend: 'none',
|
|
72
|
+
count: 0,
|
|
73
|
+
traces: [],
|
|
74
|
+
error: 'No backend available',
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
export const queryTracesTool = {
|
|
78
|
+
name: 'obs_query_traces',
|
|
79
|
+
description: 'Query traces from local JSONL files or SigNoz Cloud. Filter by trace ID, service name, span name, duration, and date range.',
|
|
80
|
+
inputSchema: queryTracesSchema,
|
|
81
|
+
handler: queryTraces,
|
|
82
|
+
};
|
|
83
|
+
//# sourceMappingURL=query-traces.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query-traces.js","sourceRoot":"","sources":["../../src/tools/query-traces.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "observability-toolkit",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "MCP server for observability tooling - query traces, metrics, logs from local JSONL or SigNoz",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist/server.js",
|
|
7
|
+
"bin": {
|
|
8
|
+
"observability-toolkit": "dist/server.js"
|
|
9
|
+
},
|
|
10
|
+
"scripts": {
|
|
11
|
+
"build": "tsc",
|
|
12
|
+
"watch": "tsc --watch",
|
|
13
|
+
"start": "node dist/server.js",
|
|
14
|
+
"test": "node --test dist/**/*.test.js"
|
|
15
|
+
},
|
|
16
|
+
"keywords": [
|
|
17
|
+
"mcp",
|
|
18
|
+
"observability",
|
|
19
|
+
"opentelemetry",
|
|
20
|
+
"traces",
|
|
21
|
+
"metrics",
|
|
22
|
+
"logs",
|
|
23
|
+
"signoz",
|
|
24
|
+
"claude-code"
|
|
25
|
+
],
|
|
26
|
+
"author": "Alyshia Ledlie",
|
|
27
|
+
"license": "MIT",
|
|
28
|
+
"dependencies": {
|
|
29
|
+
"@modelcontextprotocol/sdk": "^1.11.2",
|
|
30
|
+
"zod": "^3.24.2"
|
|
31
|
+
},
|
|
32
|
+
"devDependencies": {
|
|
33
|
+
"@types/node": "^22.15.21",
|
|
34
|
+
"typescript": "^5.8.3"
|
|
35
|
+
},
|
|
36
|
+
"engines": {
|
|
37
|
+
"node": ">=18.0.0"
|
|
38
|
+
},
|
|
39
|
+
"files": [
|
|
40
|
+
"dist",
|
|
41
|
+
"README.md"
|
|
42
|
+
]
|
|
43
|
+
}
|