@agentlensai/mcp 0.6.0 → 0.8.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/dist/__tests__/benchmark.test.d.ts +5 -0
- package/dist/__tests__/benchmark.test.d.ts.map +1 -0
- package/dist/__tests__/benchmark.test.js +387 -0
- package/dist/__tests__/benchmark.test.js.map +1 -0
- package/dist/__tests__/health.test.d.ts +5 -0
- package/dist/__tests__/health.test.js +2 -2
- package/dist/__tests__/learn.test.js +2 -2
- package/dist/__tests__/llm-call.test.js +2 -2
- package/dist/__tests__/optimize.test.js +2 -2
- package/dist/__tests__/optimize.test.js.map +1 -1
- package/dist/__tests__/recall.test.js +2 -2
- package/dist/__tests__/replay.test.d.ts +5 -0
- package/dist/__tests__/replay.test.d.ts.map +1 -0
- package/dist/__tests__/replay.test.js +245 -0
- package/dist/__tests__/replay.test.js.map +1 -0
- package/dist/server.test.d.ts +2 -0
- package/dist/server.test.js +5 -2
- package/dist/server.test.js.map +1 -1
- package/dist/tools/__tests__/guardrails.test.d.ts +5 -0
- package/dist/tools/__tests__/guardrails.test.d.ts.map +1 -0
- package/dist/tools/__tests__/guardrails.test.js +63 -0
- package/dist/tools/__tests__/guardrails.test.js.map +1 -0
- package/dist/tools/benchmark.d.ts +69 -0
- package/dist/tools/benchmark.d.ts.map +1 -0
- package/dist/tools/benchmark.js +378 -0
- package/dist/tools/benchmark.js.map +1 -0
- package/dist/tools/guardrails-format.d.ts +30 -0
- package/dist/tools/guardrails-format.d.ts.map +1 -0
- package/dist/tools/guardrails-format.js +30 -0
- package/dist/tools/guardrails-format.js.map +1 -0
- package/dist/tools/guardrails.d.ts +10 -0
- package/dist/tools/guardrails.d.ts.map +1 -0
- package/dist/tools/guardrails.js +87 -0
- package/dist/tools/guardrails.js.map +1 -0
- package/dist/tools/replay.d.ts +45 -0
- package/dist/tools/replay.d.ts.map +1 -0
- package/dist/tools/replay.js +183 -0
- package/dist/tools/replay.js.map +1 -0
- package/dist/tools.d.ts.map +1 -1
- package/dist/tools.js +6 -0
- package/dist/tools.js.map +1 -1
- package/dist/tools.test.d.ts +2 -0
- package/dist/tools.test.js +4 -1
- package/dist/tools.test.js.map +1 -1
- package/dist/transport.d.ts +30 -0
- package/dist/transport.d.ts.map +1 -1
- package/dist/transport.js +135 -0
- package/dist/transport.js.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,378 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* agentlens_benchmark MCP Tool (Stories 4.2, 4.3)
|
|
3
|
+
*
|
|
4
|
+
* Create, list, manage, and analyze A/B benchmarks.
|
|
5
|
+
* Actions: create, list, status, results, start, complete.
|
|
6
|
+
*/
|
|
7
|
+
import { z } from 'zod';
|
|
8
|
+
// ─── Formatting ─────────────────────────────────────────────────────
|
|
9
|
+
const STATUS_ICONS = {
|
|
10
|
+
draft: '📝',
|
|
11
|
+
running: '🏃',
|
|
12
|
+
completed: '✅',
|
|
13
|
+
cancelled: '❌',
|
|
14
|
+
};
|
|
15
|
+
function statusIcon(status) {
|
|
16
|
+
return STATUS_ICONS[status] ?? '❓';
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Confidence stars from the API's confidence field.
|
|
20
|
+
* Falls back to p-value thresholds matching the server (★ p<0.1, ★★ p<0.05, ★★★ p<0.01).
|
|
21
|
+
*/
|
|
22
|
+
function confidenceStars(pValue, confidence) {
|
|
23
|
+
if (confidence) {
|
|
24
|
+
if (confidence === 'high')
|
|
25
|
+
return ' ★★★';
|
|
26
|
+
if (confidence === 'medium')
|
|
27
|
+
return ' ★★';
|
|
28
|
+
if (confidence === 'low')
|
|
29
|
+
return ' ★';
|
|
30
|
+
return '';
|
|
31
|
+
}
|
|
32
|
+
// Fallback: match server thresholds
|
|
33
|
+
if (pValue === undefined)
|
|
34
|
+
return '';
|
|
35
|
+
if (pValue < 0.01)
|
|
36
|
+
return ' ★★★';
|
|
37
|
+
if (pValue < 0.05)
|
|
38
|
+
return ' ★★';
|
|
39
|
+
if (pValue < 0.1)
|
|
40
|
+
return ' ★';
|
|
41
|
+
return '';
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Format a benchmark list.
|
|
45
|
+
*/
|
|
46
|
+
export function formatBenchmarkList(benchmarks) {
|
|
47
|
+
if (benchmarks.length === 0) {
|
|
48
|
+
return 'No benchmarks found.';
|
|
49
|
+
}
|
|
50
|
+
const lines = [];
|
|
51
|
+
lines.push(`📊 Benchmarks (${benchmarks.length})`);
|
|
52
|
+
lines.push('');
|
|
53
|
+
for (const b of benchmarks) {
|
|
54
|
+
const icon = statusIcon(b.status);
|
|
55
|
+
const variantNames = b.variants.map((v) => v.name).join(' vs ');
|
|
56
|
+
lines.push(`${icon} ${b.name} [${b.status}]`);
|
|
57
|
+
lines.push(` ID: ${b.id}`);
|
|
58
|
+
lines.push(` Variants: ${variantNames}`);
|
|
59
|
+
if (b.description) {
|
|
60
|
+
lines.push(` ${b.description}`);
|
|
61
|
+
}
|
|
62
|
+
lines.push('');
|
|
63
|
+
}
|
|
64
|
+
return lines.join('\n').trimEnd();
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Format a created benchmark confirmation.
|
|
68
|
+
*/
|
|
69
|
+
export function formatBenchmarkCreated(benchmark) {
|
|
70
|
+
const lines = [];
|
|
71
|
+
lines.push(`✅ Benchmark created: ${benchmark.name}`);
|
|
72
|
+
lines.push('');
|
|
73
|
+
lines.push(`ID: ${benchmark.id}`);
|
|
74
|
+
lines.push(`Status: ${benchmark.status}`);
|
|
75
|
+
lines.push(`Variants: ${benchmark.variants.map((v) => `${v.name} (tag: ${v.tag})`).join(', ')}`);
|
|
76
|
+
if (benchmark.metrics.length > 0) {
|
|
77
|
+
lines.push(`Metrics: ${benchmark.metrics.join(', ')}`);
|
|
78
|
+
}
|
|
79
|
+
lines.push(`Min Sessions: ${benchmark.minSessions}`);
|
|
80
|
+
if (benchmark.agentId) {
|
|
81
|
+
lines.push(`Agent: ${benchmark.agentId}`);
|
|
82
|
+
}
|
|
83
|
+
lines.push('');
|
|
84
|
+
lines.push('Next steps:');
|
|
85
|
+
lines.push('1. Tag sessions with variant tags');
|
|
86
|
+
lines.push('2. Start the benchmark with action: "start"');
|
|
87
|
+
lines.push('3. Collect data, then check with action: "results"');
|
|
88
|
+
return lines.join('\n');
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Format benchmark status/detail.
|
|
92
|
+
*/
|
|
93
|
+
export function formatBenchmarkStatus(benchmark) {
|
|
94
|
+
const lines = [];
|
|
95
|
+
const icon = statusIcon(benchmark.status);
|
|
96
|
+
lines.push(`${icon} Benchmark: ${benchmark.name} [${benchmark.status}]`);
|
|
97
|
+
lines.push('');
|
|
98
|
+
lines.push(`ID: ${benchmark.id}`);
|
|
99
|
+
if (benchmark.description) {
|
|
100
|
+
lines.push(`Description: ${benchmark.description}`);
|
|
101
|
+
}
|
|
102
|
+
if (benchmark.agentId) {
|
|
103
|
+
lines.push(`Agent: ${benchmark.agentId}`);
|
|
104
|
+
}
|
|
105
|
+
lines.push(`Created: ${benchmark.createdAt}`);
|
|
106
|
+
if (benchmark.startedAt)
|
|
107
|
+
lines.push(`Started: ${benchmark.startedAt}`);
|
|
108
|
+
if (benchmark.completedAt)
|
|
109
|
+
lines.push(`Completed: ${benchmark.completedAt}`);
|
|
110
|
+
lines.push('');
|
|
111
|
+
lines.push('Variants:');
|
|
112
|
+
for (const v of benchmark.variants) {
|
|
113
|
+
const count = v.sessionCount ?? 0;
|
|
114
|
+
const progress = benchmark.minSessions > 0
|
|
115
|
+
? ` (${count}/${benchmark.minSessions})`
|
|
116
|
+
: ` (${count} sessions)`;
|
|
117
|
+
lines.push(` • ${v.name} [${v.tag}]${progress}`);
|
|
118
|
+
if (v.description)
|
|
119
|
+
lines.push(` ${v.description}`);
|
|
120
|
+
}
|
|
121
|
+
if (benchmark.metrics.length > 0) {
|
|
122
|
+
lines.push('');
|
|
123
|
+
lines.push(`Metrics: ${benchmark.metrics.join(', ')}`);
|
|
124
|
+
}
|
|
125
|
+
return lines.join('\n');
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Format benchmark results as an ASCII table.
|
|
129
|
+
*/
|
|
130
|
+
export function formatBenchmarkResults(results) {
|
|
131
|
+
const lines = [];
|
|
132
|
+
const icon = statusIcon(results.status);
|
|
133
|
+
lines.push(`${icon} Benchmark Results: ${results.name}`);
|
|
134
|
+
lines.push('');
|
|
135
|
+
if (results.metrics.length === 0) {
|
|
136
|
+
lines.push('No results available yet. Collect more data and try again.');
|
|
137
|
+
return lines.join('\n');
|
|
138
|
+
}
|
|
139
|
+
// Build ASCII table
|
|
140
|
+
// Collect all variant names
|
|
141
|
+
const variantNames = results.metrics[0].variants.map((v) => v.name);
|
|
142
|
+
// Header row
|
|
143
|
+
const metricColWidth = Math.max(8, ...results.metrics.map((m) => m.metric.length));
|
|
144
|
+
const variantColWidth = Math.max(12, ...variantNames.map((n) => n.length + 2));
|
|
145
|
+
const statsColWidth = 14;
|
|
146
|
+
const headerCols = ['Metric'.padEnd(metricColWidth)];
|
|
147
|
+
for (const name of variantNames) {
|
|
148
|
+
headerCols.push(name.padEnd(variantColWidth));
|
|
149
|
+
}
|
|
150
|
+
headerCols.push('p-value'.padEnd(statsColWidth));
|
|
151
|
+
headerCols.push('Result');
|
|
152
|
+
const headerLine = '| ' + headerCols.join(' | ') + ' |';
|
|
153
|
+
const separator = '|' + headerCols.map((col) => '-'.repeat(col.length + 2)).join('|') + '|';
|
|
154
|
+
lines.push(headerLine);
|
|
155
|
+
lines.push(separator);
|
|
156
|
+
// Data rows
|
|
157
|
+
for (const metric of results.metrics) {
|
|
158
|
+
const cols = [metric.metric.padEnd(metricColWidth)];
|
|
159
|
+
for (const variant of metric.variants) {
|
|
160
|
+
const val = `${variant.mean.toFixed(2)}±${variant.stddev.toFixed(2)}`;
|
|
161
|
+
cols.push(val.padEnd(variantColWidth));
|
|
162
|
+
}
|
|
163
|
+
const pStr = metric.pValue !== undefined ? metric.pValue.toFixed(4) : 'n/a';
|
|
164
|
+
cols.push(pStr.padEnd(statsColWidth));
|
|
165
|
+
let resultStr = metric.significant ? `${metric.winner ?? '?'} wins` : 'no sig. diff.';
|
|
166
|
+
resultStr += confidenceStars(metric.pValue, metric.confidence);
|
|
167
|
+
cols.push(resultStr);
|
|
168
|
+
lines.push('| ' + cols.join(' | ') + ' |');
|
|
169
|
+
}
|
|
170
|
+
lines.push('');
|
|
171
|
+
lines.push(`Confidence: ★ p<0.1 ★★ p<0.05 ★★★ p<0.01`);
|
|
172
|
+
if (results.summary) {
|
|
173
|
+
lines.push('');
|
|
174
|
+
lines.push(`Summary: ${results.summary}`);
|
|
175
|
+
}
|
|
176
|
+
return lines.join('\n');
|
|
177
|
+
}
|
|
178
|
+
// ─── Tool Registration ──────────────────────────────────────────────
|
|
179
|
+
const variantSchema = z.object({
|
|
180
|
+
name: z.string().describe('Variant display name'),
|
|
181
|
+
tag: z.string().describe('Tag to associate sessions with this variant'),
|
|
182
|
+
description: z.string().optional().describe('Variant description'),
|
|
183
|
+
});
|
|
184
|
+
export function registerBenchmarkTool(server, transport) {
|
|
185
|
+
server.tool('agentlens_benchmark', `Manage A/B benchmarks: create, list, check status, get results, and control lifecycle.
|
|
186
|
+
|
|
187
|
+
**When to use:** To set up controlled experiments comparing different agent configurations (models, prompts, parameters), track which variant performs better, and get statistical results.
|
|
188
|
+
|
|
189
|
+
**Workflow:**
|
|
190
|
+
1. \`create\` — Define a benchmark with 2+ variants and metrics
|
|
191
|
+
2. Tag sessions with variant tags during data collection
|
|
192
|
+
3. \`start\` — Transition benchmark to running
|
|
193
|
+
4. \`status\` — Check progress (session counts per variant)
|
|
194
|
+
5. \`results\` — Get statistical comparison with p-values
|
|
195
|
+
6. \`complete\` — Finalize the benchmark
|
|
196
|
+
|
|
197
|
+
**Actions:**
|
|
198
|
+
- \`create\`: Set up a new benchmark (name, variants[], metrics[])
|
|
199
|
+
- \`list\`: List benchmarks, optionally filter by status
|
|
200
|
+
- \`status\`: Get benchmark detail with per-variant session counts
|
|
201
|
+
- \`results\`: Get formatted comparison table with statistical analysis
|
|
202
|
+
- \`start\`: Transition benchmark to running state
|
|
203
|
+
- \`complete\`: Transition benchmark to completed state
|
|
204
|
+
|
|
205
|
+
**Example:** agentlens_benchmark({ action: "create", name: "GPT-4o vs Claude", variants: [{name: "gpt4o", tag: "v-gpt4o"}, {name: "claude", tag: "v-claude"}], metrics: ["cost", "latency", "success_rate"] })`, {
|
|
206
|
+
action: z
|
|
207
|
+
.enum(['create', 'list', 'status', 'results', 'start', 'complete'])
|
|
208
|
+
.describe('Action to perform'),
|
|
209
|
+
// Create params
|
|
210
|
+
name: z.string().optional().describe('Benchmark name (required for create)'),
|
|
211
|
+
description: z.string().optional().describe('Benchmark description'),
|
|
212
|
+
variants: z
|
|
213
|
+
.array(variantSchema)
|
|
214
|
+
.optional()
|
|
215
|
+
.describe('Variants to compare (required for create, min 2)'),
|
|
216
|
+
metrics: z
|
|
217
|
+
.array(z.string())
|
|
218
|
+
.optional()
|
|
219
|
+
.describe('Metrics to track (e.g., ["cost", "latency", "success_rate"])'),
|
|
220
|
+
minSessions: z
|
|
221
|
+
.number()
|
|
222
|
+
.int()
|
|
223
|
+
.optional()
|
|
224
|
+
.describe('Minimum sessions per variant before results are meaningful'),
|
|
225
|
+
agentId: z.string().optional().describe('Agent ID to scope the benchmark to'),
|
|
226
|
+
// List params
|
|
227
|
+
status: z.string().optional().describe('Filter by status (for list action)'),
|
|
228
|
+
// Status/Results/Lifecycle params
|
|
229
|
+
benchmarkId: z.string().optional().describe('Benchmark ID (required for status/results/start/complete)'),
|
|
230
|
+
}, async (params) => {
|
|
231
|
+
try {
|
|
232
|
+
switch (params.action) {
|
|
233
|
+
case 'create':
|
|
234
|
+
return await handleCreate(transport, params);
|
|
235
|
+
case 'list':
|
|
236
|
+
return await handleList(transport, params);
|
|
237
|
+
case 'status':
|
|
238
|
+
return await handleStatus(transport, params);
|
|
239
|
+
case 'results':
|
|
240
|
+
return await handleResults(transport, params);
|
|
241
|
+
case 'start':
|
|
242
|
+
return await handleStart(transport, params);
|
|
243
|
+
case 'complete':
|
|
244
|
+
return await handleComplete(transport, params);
|
|
245
|
+
default:
|
|
246
|
+
return {
|
|
247
|
+
content: [
|
|
248
|
+
{
|
|
249
|
+
type: 'text',
|
|
250
|
+
text: `Unknown action: ${params.action}`,
|
|
251
|
+
},
|
|
252
|
+
],
|
|
253
|
+
isError: true,
|
|
254
|
+
};
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
catch (error) {
|
|
258
|
+
const message = error instanceof Error ? error.message : 'Unknown error';
|
|
259
|
+
if (message.includes('404')) {
|
|
260
|
+
return {
|
|
261
|
+
content: [
|
|
262
|
+
{
|
|
263
|
+
type: 'text',
|
|
264
|
+
text: `Benchmark not found. Check the benchmark ID and try again.`,
|
|
265
|
+
},
|
|
266
|
+
],
|
|
267
|
+
isError: true,
|
|
268
|
+
};
|
|
269
|
+
}
|
|
270
|
+
return {
|
|
271
|
+
content: [
|
|
272
|
+
{
|
|
273
|
+
type: 'text',
|
|
274
|
+
text: `Error: ${message}`,
|
|
275
|
+
},
|
|
276
|
+
],
|
|
277
|
+
isError: true,
|
|
278
|
+
};
|
|
279
|
+
}
|
|
280
|
+
});
|
|
281
|
+
}
|
|
282
|
+
async function handleCreate(transport, params) {
|
|
283
|
+
// Validation
|
|
284
|
+
if (!params.name) {
|
|
285
|
+
return {
|
|
286
|
+
content: [{ type: 'text', text: 'Validation error: "name" is required for create action.' }],
|
|
287
|
+
isError: true,
|
|
288
|
+
};
|
|
289
|
+
}
|
|
290
|
+
if (!params.variants || params.variants.length < 2) {
|
|
291
|
+
return {
|
|
292
|
+
content: [
|
|
293
|
+
{ type: 'text', text: 'Validation error: At least 2 variants are required for create action.' },
|
|
294
|
+
],
|
|
295
|
+
isError: true,
|
|
296
|
+
};
|
|
297
|
+
}
|
|
298
|
+
const body = {
|
|
299
|
+
name: params.name,
|
|
300
|
+
variants: params.variants,
|
|
301
|
+
};
|
|
302
|
+
if (params.description)
|
|
303
|
+
body.description = params.description;
|
|
304
|
+
if (params.metrics)
|
|
305
|
+
body.metrics = params.metrics;
|
|
306
|
+
if (params.minSessions !== undefined)
|
|
307
|
+
body.minSessions = params.minSessions;
|
|
308
|
+
if (params.agentId)
|
|
309
|
+
body.agentId = params.agentId;
|
|
310
|
+
const data = (await transport.createBenchmark(body));
|
|
311
|
+
return {
|
|
312
|
+
content: [{ type: 'text', text: formatBenchmarkCreated(data) }],
|
|
313
|
+
};
|
|
314
|
+
}
|
|
315
|
+
async function handleList(transport, params) {
|
|
316
|
+
const data = (await transport.listBenchmarks(params.status));
|
|
317
|
+
return {
|
|
318
|
+
content: [{ type: 'text', text: formatBenchmarkList(data.benchmarks) }],
|
|
319
|
+
};
|
|
320
|
+
}
|
|
321
|
+
async function handleStatus(transport, params) {
|
|
322
|
+
if (!params.benchmarkId) {
|
|
323
|
+
return {
|
|
324
|
+
content: [{ type: 'text', text: 'Validation error: "benchmarkId" is required for status action.' }],
|
|
325
|
+
isError: true,
|
|
326
|
+
};
|
|
327
|
+
}
|
|
328
|
+
const data = (await transport.getBenchmark(params.benchmarkId));
|
|
329
|
+
return {
|
|
330
|
+
content: [{ type: 'text', text: formatBenchmarkStatus(data) }],
|
|
331
|
+
};
|
|
332
|
+
}
|
|
333
|
+
async function handleResults(transport, params) {
|
|
334
|
+
if (!params.benchmarkId) {
|
|
335
|
+
return {
|
|
336
|
+
content: [{ type: 'text', text: 'Validation error: "benchmarkId" is required for results action.' }],
|
|
337
|
+
isError: true,
|
|
338
|
+
};
|
|
339
|
+
}
|
|
340
|
+
const data = (await transport.getBenchmarkResults(params.benchmarkId));
|
|
341
|
+
return {
|
|
342
|
+
content: [{ type: 'text', text: formatBenchmarkResults(data) }],
|
|
343
|
+
};
|
|
344
|
+
}
|
|
345
|
+
async function handleStart(transport, params) {
|
|
346
|
+
if (!params.benchmarkId) {
|
|
347
|
+
return {
|
|
348
|
+
content: [{ type: 'text', text: 'Validation error: "benchmarkId" is required for start action.' }],
|
|
349
|
+
isError: true,
|
|
350
|
+
};
|
|
351
|
+
}
|
|
352
|
+
const data = (await transport.updateBenchmarkStatus(params.benchmarkId, 'running'));
|
|
353
|
+
return {
|
|
354
|
+
content: [
|
|
355
|
+
{
|
|
356
|
+
type: 'text',
|
|
357
|
+
text: `🏃 Benchmark "${data.name}" is now running.\n\nTag sessions with variant tags to collect data. Check progress with action: "status".`,
|
|
358
|
+
},
|
|
359
|
+
],
|
|
360
|
+
};
|
|
361
|
+
}
|
|
362
|
+
async function handleComplete(transport, params) {
|
|
363
|
+
if (!params.benchmarkId) {
|
|
364
|
+
return {
|
|
365
|
+
content: [{ type: 'text', text: 'Validation error: "benchmarkId" is required for complete action.' }],
|
|
366
|
+
isError: true,
|
|
367
|
+
};
|
|
368
|
+
}
|
|
369
|
+
const data = (await transport.updateBenchmarkStatus(params.benchmarkId, 'completed'));
|
|
370
|
+
let text = `✅ Benchmark "${data.name}" is now completed.`;
|
|
371
|
+
if (data.results) {
|
|
372
|
+
text += '\n\n' + formatBenchmarkResults(data.results);
|
|
373
|
+
}
|
|
374
|
+
return {
|
|
375
|
+
content: [{ type: 'text', text }],
|
|
376
|
+
};
|
|
377
|
+
}
|
|
378
|
+
//# sourceMappingURL=benchmark.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"benchmark.js","sourceRoot":"","sources":["../../src/tools/benchmark.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Guardrail formatting utilities for MCP tool output.
|
|
3
|
+
*/
|
|
4
|
+
interface GuardrailRuleInfo {
|
|
5
|
+
id: string;
|
|
6
|
+
name: string;
|
|
7
|
+
enabled: boolean;
|
|
8
|
+
conditionType: string;
|
|
9
|
+
actionType: string;
|
|
10
|
+
cooldownMinutes: number;
|
|
11
|
+
dryRun: boolean;
|
|
12
|
+
}
|
|
13
|
+
interface GuardrailStatusInfo {
|
|
14
|
+
rule: GuardrailRuleInfo;
|
|
15
|
+
state: {
|
|
16
|
+
lastTriggeredAt?: string;
|
|
17
|
+
triggerCount: number;
|
|
18
|
+
lastEvaluatedAt?: string;
|
|
19
|
+
currentValue?: number;
|
|
20
|
+
} | null;
|
|
21
|
+
recentTriggers: Array<{
|
|
22
|
+
triggeredAt: string;
|
|
23
|
+
conditionValue: number;
|
|
24
|
+
conditionThreshold: number;
|
|
25
|
+
actionResult?: string;
|
|
26
|
+
}>;
|
|
27
|
+
}
|
|
28
|
+
export declare function formatGuardrailStatus(rules: GuardrailRuleInfo[], statuses: GuardrailStatusInfo[]): string;
|
|
29
|
+
export {};
|
|
30
|
+
//# sourceMappingURL=guardrails-format.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"guardrails-format.d.ts","sourceRoot":"","sources":["../../src/tools/guardrails-format.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,UAAU,iBAAiB;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,UAAU,mBAAmB;IAC3B,IAAI,EAAE,iBAAiB,CAAC;IACxB,KAAK,EAAE;QACL,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,YAAY,EAAE,MAAM,CAAC;QACrB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,GAAG,IAAI,CAAC;IACT,cAAc,EAAE,KAAK,CAAC;QACpB,WAAW,EAAE,MAAM,CAAC;QACpB,cAAc,EAAE,MAAM,CAAC;QACvB,kBAAkB,EAAE,MAAM,CAAC;QAC3B,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,CAAC,CAAC;CACJ;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,iBAAiB,EAAE,EAAE,QAAQ,EAAE,mBAAmB,EAAE,GAAG,MAAM,CA8BzG"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Guardrail formatting utilities for MCP tool output.
|
|
3
|
+
*/
|
|
4
|
+
export function formatGuardrailStatus(rules, statuses) {
|
|
5
|
+
if (rules.length === 0) {
|
|
6
|
+
return 'No guardrail rules configured. Create rules via the REST API or dashboard.';
|
|
7
|
+
}
|
|
8
|
+
const parts = [];
|
|
9
|
+
parts.push(`Guardrails: ${rules.length} rule(s) configured\n`);
|
|
10
|
+
for (const status of statuses) {
|
|
11
|
+
const rule = status.rule;
|
|
12
|
+
const state = status.state;
|
|
13
|
+
const enabled = rule.enabled ? '✅ Enabled' : '❌ Disabled';
|
|
14
|
+
const dryRun = rule.dryRun ? ' [DRY RUN]' : '';
|
|
15
|
+
const triggerCount = state?.triggerCount ?? 0;
|
|
16
|
+
const lastTriggered = state?.lastTriggeredAt ? ` (last: ${state.lastTriggeredAt.slice(0, 19)})` : '';
|
|
17
|
+
parts.push(`${enabled}${dryRun} ${rule.name}`);
|
|
18
|
+
parts.push(` Condition: ${rule.conditionType} → Action: ${rule.actionType}`);
|
|
19
|
+
parts.push(` Triggers: ${triggerCount}${lastTriggered}`);
|
|
20
|
+
if (status.recentTriggers.length > 0) {
|
|
21
|
+
parts.push(` Recent:`);
|
|
22
|
+
for (const t of status.recentTriggers.slice(0, 3)) {
|
|
23
|
+
parts.push(` ${t.triggeredAt.slice(0, 19)}: value=${t.conditionValue} threshold=${t.conditionThreshold} → ${t.actionResult ?? 'unknown'}`);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
parts.push('');
|
|
27
|
+
}
|
|
28
|
+
return parts.join('\n');
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=guardrails-format.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"guardrails-format.js","sourceRoot":"","sources":["../../src/tools/guardrails-format.ts"],"names":[],"mappings":"AAAA;;GAEG;AA4BH,MAAM,UAAU,qBAAqB,CAAC,KAA0B,EAAE,QAA+B;IAC/F,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,4EAA4E,CAAC;IACtF,CAAC;IAED,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,CAAC,IAAI,CAAC,eAAe,KAAK,CAAC,MAAM,uBAAuB,CAAC,CAAC;IAE/D,KAAK,MAAM,MAAM,IAAI,QAAQ,EAAE,CAAC;QAC9B,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;QACzB,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;QAC3B,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,YAAY,CAAC;QAC1D,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/C,MAAM,YAAY,GAAG,KAAK,EAAE,YAAY,IAAI,CAAC,CAAC;QAC9C,MAAM,aAAa,GAAG,KAAK,EAAE,eAAe,CAAC,CAAC,CAAC,WAAW,KAAK,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QAErG,KAAK,CAAC,IAAI,CAAC,GAAG,OAAO,GAAG,MAAM,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QAC/C,KAAK,CAAC,IAAI,CAAC,gBAAgB,IAAI,CAAC,aAAa,cAAc,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;QAC9E,KAAK,CAAC,IAAI,CAAC,eAAe,YAAY,GAAG,aAAa,EAAE,CAAC,CAAC;QAE1D,IAAI,MAAM,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YACxB,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;gBAClD,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,cAAc,cAAc,CAAC,CAAC,kBAAkB,MAAM,CAAC,CAAC,YAAY,IAAI,SAAS,EAAE,CAAC,CAAC;YAChJ,CAAC;QACH,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* agentlens_guardrails MCP Tool (v0.8.0 — Story 3.1)
|
|
3
|
+
*
|
|
4
|
+
* Check guardrail status for the current agent.
|
|
5
|
+
* Returns active rules, their status, and recent triggers.
|
|
6
|
+
*/
|
|
7
|
+
import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
8
|
+
import type { AgentLensTransport } from '../transport.js';
|
|
9
|
+
export declare function registerGuardrailsTool(server: McpServer, transport: AgentLensTransport): void;
|
|
10
|
+
//# sourceMappingURL=guardrails.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"guardrails.d.ts","sourceRoot":"","sources":["../../src/tools/guardrails.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AA6B1D,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,kBAAkB,GAAG,IAAI,CAoF7F"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* agentlens_guardrails MCP Tool (v0.8.0 — Story 3.1)
|
|
3
|
+
*
|
|
4
|
+
* Check guardrail status for the current agent.
|
|
5
|
+
* Returns active rules, their status, and recent triggers.
|
|
6
|
+
*/
|
|
7
|
+
import { z } from 'zod';
|
|
8
|
+
import { formatGuardrailStatus } from './guardrails-format.js';
|
|
9
|
+
export function registerGuardrailsTool(server, transport) {
|
|
10
|
+
server.tool('agentlens_guardrails', `Check guardrail status for the current agent. Returns active guardrail rules, their current state, and recent trigger history.
|
|
11
|
+
|
|
12
|
+
**When to use:** To check what guardrails are protecting this agent, whether any have been triggered recently, and what conditions/actions are configured.
|
|
13
|
+
|
|
14
|
+
**What it returns:** A list of configured guardrail rules with their status (enabled/disabled, trigger count, last trigger time) and recent trigger history.
|
|
15
|
+
|
|
16
|
+
**Example:** agentlens_guardrails({}) → returns all guardrail rules and their status.`, {
|
|
17
|
+
agentId: z
|
|
18
|
+
.string()
|
|
19
|
+
.optional()
|
|
20
|
+
.describe('Agent ID to check guardrails for (defaults to current agent)'),
|
|
21
|
+
}, async ({ agentId }) => {
|
|
22
|
+
try {
|
|
23
|
+
const effectiveAgentId = agentId ?? transport.getFirstActiveAgent();
|
|
24
|
+
if (!effectiveAgentId) {
|
|
25
|
+
return {
|
|
26
|
+
content: [{
|
|
27
|
+
type: 'text',
|
|
28
|
+
text: 'No active session found. Start a session with agentlens_session_start first.',
|
|
29
|
+
}],
|
|
30
|
+
isError: true,
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
// Fetch guardrail rules — handle empty/error responses gracefully
|
|
34
|
+
let rules = [];
|
|
35
|
+
try {
|
|
36
|
+
const rulesResponse = await transport.getGuardrailRules();
|
|
37
|
+
rules = rulesResponse?.rules ?? [];
|
|
38
|
+
}
|
|
39
|
+
catch (fetchError) {
|
|
40
|
+
const msg = fetchError instanceof Error ? fetchError.message : 'Unknown error';
|
|
41
|
+
return {
|
|
42
|
+
content: [{
|
|
43
|
+
type: 'text',
|
|
44
|
+
text: `Failed to fetch guardrail rules: ${msg}. The guardrail API may be unavailable.`,
|
|
45
|
+
}],
|
|
46
|
+
isError: true,
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
if (rules.length === 0) {
|
|
50
|
+
return {
|
|
51
|
+
content: [{
|
|
52
|
+
type: 'text',
|
|
53
|
+
text: 'No guardrail rules configured for this tenant. Use the dashboard or API to create guardrail rules.',
|
|
54
|
+
}],
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
// Fetch status for each rule
|
|
58
|
+
const statuses = [];
|
|
59
|
+
for (const rule of rules) {
|
|
60
|
+
try {
|
|
61
|
+
const status = await transport.getGuardrailStatus(rule.id);
|
|
62
|
+
statuses.push(status);
|
|
63
|
+
}
|
|
64
|
+
catch {
|
|
65
|
+
statuses.push({ rule, state: null, recentTriggers: [] });
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
return {
|
|
69
|
+
content: [{
|
|
70
|
+
type: 'text',
|
|
71
|
+
text: formatGuardrailStatus(rules, statuses),
|
|
72
|
+
}],
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
catch (error) {
|
|
76
|
+
const message = error instanceof Error ? error.message : 'Unknown error';
|
|
77
|
+
return {
|
|
78
|
+
content: [{
|
|
79
|
+
type: 'text',
|
|
80
|
+
text: `Error checking guardrails: ${message}`,
|
|
81
|
+
}],
|
|
82
|
+
isError: true,
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=guardrails.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"guardrails.js","sourceRoot":"","sources":["../../src/tools/guardrails.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AA4B/D,MAAM,UAAU,sBAAsB,CAAC,MAAiB,EAAE,SAA6B;IACrF,MAAM,CAAC,IAAI,CACT,sBAAsB,EACtB;;;;;;sFAMkF,EAClF;QACE,OAAO,EAAE,CAAC;aACP,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CAAC,8DAA8D,CAAC;KAC5E,EACD,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;QACpB,IAAI,CAAC;YACH,MAAM,gBAAgB,GAAG,OAAO,IAAI,SAAS,CAAC,mBAAmB,EAAE,CAAC;YAEpE,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBACtB,OAAO;oBACL,OAAO,EAAE,CAAC;4BACR,IAAI,EAAE,MAAe;4BACrB,IAAI,EAAE,8EAA8E;yBACrF,CAAC;oBACF,OAAO,EAAE,IAAI;iBACd,CAAC;YACJ,CAAC;YAED,kEAAkE;YAClE,IAAI,KAAK,GAA4B,EAAE,CAAC;YACxC,IAAI,CAAC;gBACH,MAAM,aAAa,GAAG,MAAM,SAAS,CAAC,iBAAiB,EAAgD,CAAC;gBACxG,KAAK,GAAG,aAAa,EAAE,KAAK,IAAI,EAAE,CAAC;YACrC,CAAC;YAAC,OAAO,UAAU,EAAE,CAAC;gBACpB,MAAM,GAAG,GAAG,UAAU,YAAY,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;gBAC/E,OAAO;oBACL,OAAO,EAAE,CAAC;4BACR,IAAI,EAAE,MAAe;4BACrB,IAAI,EAAE,oCAAoC,GAAG,yCAAyC;yBACvF,CAAC;oBACF,OAAO,EAAE,IAAI;iBACd,CAAC;YACJ,CAAC;YAED,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACvB,OAAO;oBACL,OAAO,EAAE,CAAC;4BACR,IAAI,EAAE,MAAe;4BACrB,IAAI,EAAE,oGAAoG;yBAC3G,CAAC;iBACH,CAAC;YACJ,CAAC;YAED,6BAA6B;YAC7B,MAAM,QAAQ,GAA8B,EAAE,CAAC;YAC/C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,IAAI,CAAC;oBACH,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAA4B,CAAC;oBACtF,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACxB,CAAC;gBAAC,MAAM,CAAC;oBACP,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,cAAc,EAAE,EAAE,EAAE,CAAC,CAAC;gBAC3D,CAAC;YACH,CAAC;YAED,OAAO;gBACL,OAAO,EAAE,CAAC;wBACR,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,qBAAqB,CAAC,KAAK,EAAE,QAAQ,CAAC;qBAC7C,CAAC;aACH,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;YACzE,OAAO;gBACL,OAAO,EAAE,CAAC;wBACR,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,8BAA8B,OAAO,EAAE;qBAC9C,CAAC;gBACF,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* agentlens_replay MCP Tool (Story 4.1)
|
|
3
|
+
*
|
|
4
|
+
* Replay a past session as a structured, human-readable timeline.
|
|
5
|
+
* Returns session summary + numbered, timestamped steps with event type icons.
|
|
6
|
+
*/
|
|
7
|
+
import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
8
|
+
import type { AgentLensTransport } from '../transport.js';
|
|
9
|
+
/** Replay response from the API */
|
|
10
|
+
export interface ReplayResponse {
|
|
11
|
+
sessionId: string;
|
|
12
|
+
agentId: string;
|
|
13
|
+
status: string;
|
|
14
|
+
startedAt: string;
|
|
15
|
+
endedAt?: string;
|
|
16
|
+
durationMs?: number;
|
|
17
|
+
totalCostUsd?: number;
|
|
18
|
+
eventCounts: Record<string, number>;
|
|
19
|
+
steps: ReplayStep[];
|
|
20
|
+
}
|
|
21
|
+
export interface ReplayStep {
|
|
22
|
+
index: number;
|
|
23
|
+
timestamp: string;
|
|
24
|
+
eventType: string;
|
|
25
|
+
severity: string;
|
|
26
|
+
summary: string;
|
|
27
|
+
durationMs?: number;
|
|
28
|
+
costUsd?: number;
|
|
29
|
+
error?: string;
|
|
30
|
+
paired?: boolean;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Format the replay header (session summary).
|
|
34
|
+
*/
|
|
35
|
+
export declare function formatReplayHeader(data: ReplayResponse): string;
|
|
36
|
+
/**
|
|
37
|
+
* Format a single replay step.
|
|
38
|
+
*/
|
|
39
|
+
export declare function formatReplayStep(step: ReplayStep, costSoFar?: number, errorCount?: number): string;
|
|
40
|
+
/**
|
|
41
|
+
* Format the full replay output.
|
|
42
|
+
*/
|
|
43
|
+
export declare function formatReplay(data: ReplayResponse, summaryOnly: boolean): string;
|
|
44
|
+
export declare function registerReplayTool(server: McpServer, transport: AgentLensTransport): void;
|
|
45
|
+
//# sourceMappingURL=replay.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"replay.d.ts","sourceRoot":"","sources":["../../src/tools/replay.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAE1D,mCAAmC;AACnC,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,KAAK,EAAE,UAAU,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AA+BD;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,cAAc,GAAG,MAAM,CA0B/D;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,UAAU,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAgClG;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,cAAc,EAAE,WAAW,EAAE,OAAO,GAAG,MAAM,CAuB/E;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,kBAAkB,GAAG,IAAI,CA0EzF"}
|