@agentlensai/mcp 0.11.0 → 0.13.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/LICENSE +21 -0
- package/dist/__tests__/benchmark.test.d.ts +5 -0
- package/dist/__tests__/benchmark.test.js +1 -1
- package/dist/__tests__/capabilities.test.d.ts +5 -0
- package/dist/__tests__/capabilities.test.d.ts.map +1 -0
- package/dist/__tests__/capabilities.test.js +127 -0
- package/dist/__tests__/capabilities.test.js.map +1 -0
- package/dist/__tests__/context.test.d.ts +5 -0
- package/dist/__tests__/context.test.d.ts.map +1 -0
- package/dist/__tests__/context.test.js +203 -0
- package/dist/__tests__/context.test.js.map +1 -0
- package/dist/__tests__/guardrail-middleware.test.d.ts +2 -0
- package/dist/__tests__/guardrail-middleware.test.d.ts.map +1 -0
- package/dist/__tests__/guardrail-middleware.test.js +107 -0
- package/dist/__tests__/guardrail-middleware.test.js.map +1 -0
- package/dist/__tests__/health.test.d.ts +5 -0
- package/dist/__tests__/health.test.js +1 -1
- package/dist/__tests__/llm-call.test.d.ts +2 -0
- package/dist/__tests__/llm-call.test.js +1 -1
- package/dist/__tests__/optimize.test.d.ts +5 -0
- package/dist/__tests__/optimize.test.js +1 -1
- package/dist/__tests__/recall.test.d.ts +2 -0
- package/dist/__tests__/recall.test.js +4 -4
- package/dist/__tests__/recall.test.js.map +1 -1
- package/dist/__tests__/reflect.test.d.ts +5 -0
- package/dist/__tests__/reflect.test.d.ts.map +1 -0
- package/dist/__tests__/reflect.test.js +165 -0
- package/dist/__tests__/reflect.test.js.map +1 -0
- 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/capabilities.d.ts +28 -0
- package/dist/capabilities.d.ts.map +1 -0
- package/dist/capabilities.js +68 -0
- package/dist/capabilities.js.map +1 -0
- package/dist/guardrail-middleware.d.ts +36 -0
- package/dist/guardrail-middleware.d.ts.map +1 -0
- package/dist/guardrail-middleware.js +70 -0
- package/dist/guardrail-middleware.js.map +1 -0
- package/dist/index.d.ts +19 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +42 -8
- package/dist/index.js.map +1 -1
- package/dist/server.test.d.ts +2 -0
- package/dist/server.test.js +12 -5
- package/dist/server.test.js.map +1 -1
- package/dist/tools/__tests__/agents.test.d.ts +5 -0
- package/dist/tools/__tests__/agents.test.d.ts.map +1 -0
- package/dist/tools/__tests__/agents.test.js +56 -0
- package/dist/tools/__tests__/agents.test.js.map +1 -0
- package/dist/tools/__tests__/alerts.test.d.ts +5 -0
- package/dist/tools/__tests__/alerts.test.d.ts.map +1 -0
- package/dist/tools/__tests__/alerts.test.js +83 -0
- package/dist/tools/__tests__/alerts.test.js.map +1 -0
- package/dist/tools/__tests__/analytics.test.d.ts +5 -0
- package/dist/tools/__tests__/analytics.test.d.ts.map +1 -0
- package/dist/tools/__tests__/analytics.test.js +53 -0
- package/dist/tools/__tests__/analytics.test.js.map +1 -0
- package/dist/tools/__tests__/cost-budgets.test.d.ts +5 -0
- package/dist/tools/__tests__/cost-budgets.test.d.ts.map +1 -0
- package/dist/tools/__tests__/cost-budgets.test.js +86 -0
- package/dist/tools/__tests__/cost-budgets.test.js.map +1 -0
- package/dist/tools/__tests__/error-helpers.test.d.ts +5 -0
- package/dist/tools/__tests__/error-helpers.test.d.ts.map +1 -0
- package/dist/tools/__tests__/error-helpers.test.js +38 -0
- package/dist/tools/__tests__/error-helpers.test.js.map +1 -0
- package/dist/tools/__tests__/lessons.test.d.ts +5 -0
- package/dist/tools/__tests__/lessons.test.d.ts.map +1 -0
- package/dist/tools/__tests__/lessons.test.js +64 -0
- package/dist/tools/__tests__/lessons.test.js.map +1 -0
- package/dist/tools/__tests__/prompts.test.d.ts +5 -0
- package/dist/tools/__tests__/prompts.test.d.ts.map +1 -0
- package/dist/tools/__tests__/prompts.test.js +112 -0
- package/dist/tools/__tests__/prompts.test.js.map +1 -0
- package/dist/tools/__tests__/sessions.test.d.ts +5 -0
- package/dist/tools/__tests__/sessions.test.d.ts.map +1 -0
- package/dist/tools/__tests__/sessions.test.js +62 -0
- package/dist/tools/__tests__/sessions.test.js.map +1 -0
- package/dist/tools/__tests__/stats.test.d.ts +5 -0
- package/dist/tools/__tests__/stats.test.d.ts.map +1 -0
- package/dist/tools/__tests__/stats.test.js +41 -0
- package/dist/tools/__tests__/stats.test.js.map +1 -0
- package/dist/tools/__tests__/trust.test.d.ts +5 -0
- package/dist/tools/__tests__/trust.test.d.ts.map +1 -0
- package/dist/tools/__tests__/trust.test.js +46 -0
- package/dist/tools/__tests__/trust.test.js.map +1 -0
- package/dist/tools/agents.d.ts +9 -0
- package/dist/tools/agents.d.ts.map +1 -0
- package/dist/tools/agents.js +67 -0
- package/dist/tools/agents.js.map +1 -0
- package/dist/tools/alerts.d.ts +9 -0
- package/dist/tools/alerts.d.ts.map +1 -0
- package/dist/tools/alerts.js +126 -0
- package/dist/tools/alerts.js.map +1 -0
- package/dist/tools/analytics.d.ts +9 -0
- package/dist/tools/analytics.d.ts.map +1 -0
- package/dist/tools/analytics.js +67 -0
- package/dist/tools/analytics.js.map +1 -0
- package/dist/tools/cost-budgets.d.ts +9 -0
- package/dist/tools/cost-budgets.d.ts.map +1 -0
- package/dist/tools/cost-budgets.js +144 -0
- package/dist/tools/cost-budgets.js.map +1 -0
- package/dist/tools/error-helpers.d.ts +14 -0
- package/dist/tools/error-helpers.d.ts.map +1 -0
- package/dist/tools/error-helpers.js +17 -0
- package/dist/tools/error-helpers.js.map +1 -0
- package/dist/tools/lessons.d.ts +9 -0
- package/dist/tools/lessons.d.ts.map +1 -0
- package/dist/tools/lessons.js +107 -0
- package/dist/tools/lessons.js.map +1 -0
- package/dist/tools/prompts.d.ts +9 -0
- package/dist/tools/prompts.d.ts.map +1 -0
- package/dist/tools/prompts.js +117 -0
- package/dist/tools/prompts.js.map +1 -0
- package/dist/tools/recall.js +3 -3
- package/dist/tools/recall.js.map +1 -1
- package/dist/tools/reflect.js +1 -1
- package/dist/tools/reflect.js.map +1 -1
- package/dist/tools/sessions.d.ts +9 -0
- package/dist/tools/sessions.d.ts.map +1 -0
- package/dist/tools/sessions.js +88 -0
- package/dist/tools/sessions.js.map +1 -0
- package/dist/tools/stats.d.ts +9 -0
- package/dist/tools/stats.d.ts.map +1 -0
- package/dist/tools/stats.js +43 -0
- package/dist/tools/stats.js.map +1 -0
- package/dist/tools/trust.d.ts +9 -0
- package/dist/tools/trust.d.ts.map +1 -0
- package/dist/tools/trust.js +42 -0
- package/dist/tools/trust.js.map +1 -0
- package/dist/tools.d.ts +11 -2
- package/dist/tools.d.ts.map +1 -1
- package/dist/tools.js +70 -47
- package/dist/tools.js.map +1 -1
- package/dist/tools.test.d.ts +2 -0
- package/dist/tools.test.js +10 -3
- package/dist/tools.test.js.map +1 -1
- package/dist/transport.d.ts +59 -0
- package/dist/transport.d.ts.map +1 -1
- package/dist/transport.js +245 -0
- package/dist/transport.js.map +1 -1
- package/dist/transport.test.d.ts +2 -0
- package/dist/transport.test.d.ts.map +1 -0
- package/dist/transport.test.js +170 -0
- package/dist/transport.test.js.map +1 -0
- package/package.json +10 -10
- package/dist/__tests__/learn.test.d.ts.map +0 -1
- package/dist/__tests__/learn.test.js +0 -381
- package/dist/__tests__/learn.test.js.map +0 -1
- package/dist/tools/__tests__/community.test.d.ts +0 -5
- package/dist/tools/__tests__/community.test.d.ts.map +0 -1
- package/dist/tools/__tests__/community.test.js +0 -172
- package/dist/tools/__tests__/community.test.js.map +0 -1
- package/dist/tools/__tests__/transport-community.test.d.ts +0 -5
- package/dist/tools/__tests__/transport-community.test.d.ts.map +0 -1
- package/dist/tools/__tests__/transport-community.test.js +0 -99
- package/dist/tools/__tests__/transport-community.test.js.map +0 -1
- package/dist/tools/community.d.ts +0 -10
- package/dist/tools/community.d.ts.map +0 -1
- package/dist/tools/community.js +0 -167
- package/dist/tools/community.js.map +0 -1
- package/dist/tools/learn.d.ts +0 -10
- package/dist/tools/learn.d.ts.map +0 -1
- package/dist/tools/learn.js +0 -277
- package/dist/tools/learn.js.map +0 -1
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* agentlens_agents MCP Tool (Feature 10, Story 10.7)
|
|
3
|
+
*
|
|
4
|
+
* List, inspect, and manage agents.
|
|
5
|
+
*/
|
|
6
|
+
import { z } from 'zod';
|
|
7
|
+
import { formatApiError } from './error-helpers.js';
|
|
8
|
+
export function registerAgentsTool(server, transport) {
|
|
9
|
+
server.tool('agentlens_agents', `List, inspect, and manage AgentLens agents.
|
|
10
|
+
|
|
11
|
+
**When to use:** To see which agents are registered, check agent details and error rates, or unpause a paused agent.
|
|
12
|
+
|
|
13
|
+
**Actions:**
|
|
14
|
+
- \`list\`: List all agents with error rates
|
|
15
|
+
- \`detail\`: Get agent detail by ID
|
|
16
|
+
- \`unpause\`: Clear paused state for an agent
|
|
17
|
+
|
|
18
|
+
**Example:** agentlens_agents({ action: "list" })`, {
|
|
19
|
+
action: z.enum(['list', 'detail', 'unpause']).describe('Action to perform'),
|
|
20
|
+
agentId: z.string().optional().describe('Agent ID (required for detail/unpause)'),
|
|
21
|
+
clearModelOverride: z.boolean().optional().describe('Clear model override on unpause'),
|
|
22
|
+
}, async (params) => {
|
|
23
|
+
try {
|
|
24
|
+
switch (params.action) {
|
|
25
|
+
case 'list': {
|
|
26
|
+
const response = await transport.listAgents();
|
|
27
|
+
if (!response.ok) {
|
|
28
|
+
const body = await response.text().catch(() => '');
|
|
29
|
+
throw new Error(`${response.status}: ${body}`);
|
|
30
|
+
}
|
|
31
|
+
const data = await response.json();
|
|
32
|
+
return { content: [{ type: 'text', text: JSON.stringify(data, null, 2) }] };
|
|
33
|
+
}
|
|
34
|
+
case 'detail': {
|
|
35
|
+
if (!params.agentId) {
|
|
36
|
+
return { content: [{ type: 'text', text: 'Validation error: "agentId" is required for detail action.' }], isError: true };
|
|
37
|
+
}
|
|
38
|
+
const response = await transport.getAgent(params.agentId);
|
|
39
|
+
if (!response.ok) {
|
|
40
|
+
const body = await response.text().catch(() => '');
|
|
41
|
+
throw new Error(`${response.status}: ${body}`);
|
|
42
|
+
}
|
|
43
|
+
const data = await response.json();
|
|
44
|
+
return { content: [{ type: 'text', text: JSON.stringify(data, null, 2) }] };
|
|
45
|
+
}
|
|
46
|
+
case 'unpause': {
|
|
47
|
+
if (!params.agentId) {
|
|
48
|
+
return { content: [{ type: 'text', text: 'Validation error: "agentId" is required for unpause action.' }], isError: true };
|
|
49
|
+
}
|
|
50
|
+
const response = await transport.unpauseAgent(params.agentId, params.clearModelOverride);
|
|
51
|
+
if (!response.ok) {
|
|
52
|
+
const body = await response.text().catch(() => '');
|
|
53
|
+
throw new Error(`${response.status}: ${body}`);
|
|
54
|
+
}
|
|
55
|
+
const data = await response.json();
|
|
56
|
+
return { content: [{ type: 'text', text: JSON.stringify(data, null, 2) }] };
|
|
57
|
+
}
|
|
58
|
+
default:
|
|
59
|
+
return { content: [{ type: 'text', text: `Unknown action: ${params.action}` }], isError: true };
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
catch (error) {
|
|
63
|
+
return formatApiError(error, 'agents');
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=agents.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agents.js","sourceRoot":"","sources":["../../src/tools/agents.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* agentlens_alerts MCP Tool (Feature 10, Story 10.8)
|
|
3
|
+
*
|
|
4
|
+
* Create, list, update, delete alert rules, and view alert history.
|
|
5
|
+
*/
|
|
6
|
+
import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
7
|
+
import type { AgentLensTransport } from '../transport.js';
|
|
8
|
+
export declare function registerAlertsTool(server: McpServer, transport: AgentLensTransport): void;
|
|
9
|
+
//# sourceMappingURL=alerts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"alerts.d.ts","sourceRoot":"","sources":["../../src/tools/alerts.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAG1D,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,kBAAkB,GAAG,IAAI,CAgGzF"}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* agentlens_alerts MCP Tool (Feature 10, Story 10.8)
|
|
3
|
+
*
|
|
4
|
+
* Create, list, update, delete alert rules, and view alert history.
|
|
5
|
+
*/
|
|
6
|
+
import { z } from 'zod';
|
|
7
|
+
import { formatApiError } from './error-helpers.js';
|
|
8
|
+
export function registerAlertsTool(server, transport) {
|
|
9
|
+
server.tool('agentlens_alerts', `Manage alert rules and view alert history.
|
|
10
|
+
|
|
11
|
+
**When to use:** To create alerting rules for error rates, costs, or latency thresholds; manage existing rules; or review past alert triggers.
|
|
12
|
+
|
|
13
|
+
**Actions:**
|
|
14
|
+
- \`list\`: List all alert rules
|
|
15
|
+
- \`create\`: Create a new alert rule
|
|
16
|
+
- \`update\`: Update an existing alert rule
|
|
17
|
+
- \`delete\`: Delete an alert rule
|
|
18
|
+
- \`history\`: View recent alert triggers
|
|
19
|
+
|
|
20
|
+
**Example:** agentlens_alerts({ action: "create", name: "High error rate", condition: "error_rate_above", threshold: 0.1, windowMinutes: 60 })`, {
|
|
21
|
+
action: z.enum(['list', 'create', 'update', 'delete', 'history']).describe('Action to perform'),
|
|
22
|
+
ruleId: z.string().optional().describe('Rule ID (required for update/delete)'),
|
|
23
|
+
name: z.string().optional().describe('Alert rule name (required for create)'),
|
|
24
|
+
condition: z.string().optional().describe('Condition: error_rate_above, cost_above, latency_above (required for create)'),
|
|
25
|
+
threshold: z.number().optional().describe('Threshold value (required for create)'),
|
|
26
|
+
windowMinutes: z.number().optional().describe('Evaluation window in minutes (required for create)'),
|
|
27
|
+
scope: z.string().optional().describe('Scope: global or agentId'),
|
|
28
|
+
notifyChannels: z.array(z.string()).optional().describe('Notification channels'),
|
|
29
|
+
enabled: z.boolean().optional().describe('Enable/disable rule'),
|
|
30
|
+
limit: z.number().optional().describe('Max history results'),
|
|
31
|
+
}, async (params) => {
|
|
32
|
+
try {
|
|
33
|
+
switch (params.action) {
|
|
34
|
+
case 'list': {
|
|
35
|
+
const response = await transport.listAlertRules();
|
|
36
|
+
if (!response.ok) {
|
|
37
|
+
const body = await response.text().catch(() => '');
|
|
38
|
+
throw new Error(`${response.status}: ${body}`);
|
|
39
|
+
}
|
|
40
|
+
return { content: [{ type: 'text', text: JSON.stringify(await response.json(), null, 2) }] };
|
|
41
|
+
}
|
|
42
|
+
case 'create': {
|
|
43
|
+
if (!params.name)
|
|
44
|
+
return { content: [{ type: 'text', text: 'Validation error: "name" is required for create action.' }], isError: true };
|
|
45
|
+
if (!params.condition)
|
|
46
|
+
return { content: [{ type: 'text', text: 'Validation error: "condition" is required for create action.' }], isError: true };
|
|
47
|
+
if (params.threshold === undefined)
|
|
48
|
+
return { content: [{ type: 'text', text: 'Validation error: "threshold" is required for create action.' }], isError: true };
|
|
49
|
+
const body = {
|
|
50
|
+
name: params.name,
|
|
51
|
+
condition: params.condition,
|
|
52
|
+
threshold: params.threshold,
|
|
53
|
+
};
|
|
54
|
+
if (params.windowMinutes !== undefined)
|
|
55
|
+
body.windowMinutes = params.windowMinutes;
|
|
56
|
+
if (params.scope)
|
|
57
|
+
body.scope = params.scope;
|
|
58
|
+
if (params.notifyChannels)
|
|
59
|
+
body.notifyChannels = params.notifyChannels;
|
|
60
|
+
if (params.enabled !== undefined)
|
|
61
|
+
body.enabled = params.enabled;
|
|
62
|
+
const response = await transport.createAlertRule(body);
|
|
63
|
+
if (!response.ok) {
|
|
64
|
+
const b = await response.text().catch(() => '');
|
|
65
|
+
throw new Error(`${response.status}: ${b}`);
|
|
66
|
+
}
|
|
67
|
+
return { content: [{ type: 'text', text: JSON.stringify(await response.json(), null, 2) }] };
|
|
68
|
+
}
|
|
69
|
+
case 'update': {
|
|
70
|
+
if (!params.ruleId)
|
|
71
|
+
return { content: [{ type: 'text', text: 'Validation error: "ruleId" is required for update action.' }], isError: true };
|
|
72
|
+
const body = {};
|
|
73
|
+
if (params.name)
|
|
74
|
+
body.name = params.name;
|
|
75
|
+
if (params.condition)
|
|
76
|
+
body.condition = params.condition;
|
|
77
|
+
if (params.threshold !== undefined)
|
|
78
|
+
body.threshold = params.threshold;
|
|
79
|
+
if (params.windowMinutes !== undefined)
|
|
80
|
+
body.windowMinutes = params.windowMinutes;
|
|
81
|
+
if (params.scope)
|
|
82
|
+
body.scope = params.scope;
|
|
83
|
+
if (params.notifyChannels)
|
|
84
|
+
body.notifyChannels = params.notifyChannels;
|
|
85
|
+
if (params.enabled !== undefined)
|
|
86
|
+
body.enabled = params.enabled;
|
|
87
|
+
const response = await transport.updateAlertRule(params.ruleId, body);
|
|
88
|
+
if (!response.ok) {
|
|
89
|
+
const b = await response.text().catch(() => '');
|
|
90
|
+
throw new Error(`${response.status}: ${b}`);
|
|
91
|
+
}
|
|
92
|
+
return { content: [{ type: 'text', text: JSON.stringify(await response.json(), null, 2) }] };
|
|
93
|
+
}
|
|
94
|
+
case 'delete': {
|
|
95
|
+
if (!params.ruleId)
|
|
96
|
+
return { content: [{ type: 'text', text: 'Validation error: "ruleId" is required for delete action.' }], isError: true };
|
|
97
|
+
const response = await transport.deleteAlertRule(params.ruleId);
|
|
98
|
+
if (!response.ok) {
|
|
99
|
+
const b = await response.text().catch(() => '');
|
|
100
|
+
throw new Error(`${response.status}: ${b}`);
|
|
101
|
+
}
|
|
102
|
+
return { content: [{ type: 'text', text: `Alert rule ${params.ruleId} deleted.` }] };
|
|
103
|
+
}
|
|
104
|
+
case 'history': {
|
|
105
|
+
const qp = {};
|
|
106
|
+
if (params.limit !== undefined)
|
|
107
|
+
qp.limit = String(params.limit);
|
|
108
|
+
if (params.ruleId)
|
|
109
|
+
qp.ruleId = params.ruleId;
|
|
110
|
+
const response = await transport.getAlertHistory(qp);
|
|
111
|
+
if (!response.ok) {
|
|
112
|
+
const b = await response.text().catch(() => '');
|
|
113
|
+
throw new Error(`${response.status}: ${b}`);
|
|
114
|
+
}
|
|
115
|
+
return { content: [{ type: 'text', text: JSON.stringify(await response.json(), null, 2) }] };
|
|
116
|
+
}
|
|
117
|
+
default:
|
|
118
|
+
return { content: [{ type: 'text', text: `Unknown action: ${params.action}` }], isError: true };
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
catch (error) {
|
|
122
|
+
return formatApiError(error, 'alerts');
|
|
123
|
+
}
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
//# sourceMappingURL=alerts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"alerts.js","sourceRoot":"","sources":["../../src/tools/alerts.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* agentlens_analytics MCP Tool (Feature 10, Story 10.9)
|
|
3
|
+
*
|
|
4
|
+
* Query operational metrics, costs, agent metrics, and tool usage stats.
|
|
5
|
+
*/
|
|
6
|
+
import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
7
|
+
import type { AgentLensTransport } from '../transport.js';
|
|
8
|
+
export declare function registerAnalyticsTool(server: McpServer, transport: AgentLensTransport): void;
|
|
9
|
+
//# sourceMappingURL=analytics.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analytics.d.ts","sourceRoot":"","sources":["../../src/tools/analytics.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAG1D,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,kBAAkB,GAAG,IAAI,CAmD5F"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* agentlens_analytics MCP Tool (Feature 10, Story 10.9)
|
|
3
|
+
*
|
|
4
|
+
* Query operational metrics, costs, agent metrics, and tool usage stats.
|
|
5
|
+
*/
|
|
6
|
+
import { z } from 'zod';
|
|
7
|
+
import { formatApiError } from './error-helpers.js';
|
|
8
|
+
export function registerAnalyticsTool(server, transport) {
|
|
9
|
+
server.tool('agentlens_analytics', `Query operational analytics: metrics, costs, agent performance, and tool usage.
|
|
10
|
+
|
|
11
|
+
**When to use:** To understand system performance trends, cost breakdowns, agent activity, or tool usage patterns over time.
|
|
12
|
+
|
|
13
|
+
**Actions:**
|
|
14
|
+
- \`metrics\`: Get bucketed metrics with optional range/date filters
|
|
15
|
+
- \`costs\`: Get cost breakdown
|
|
16
|
+
- \`agents\`: Get per-agent metrics
|
|
17
|
+
- \`tools\`: Get tool usage statistics
|
|
18
|
+
|
|
19
|
+
**Example:** agentlens_analytics({ action: "metrics", range: "24h" })`, {
|
|
20
|
+
action: z.enum(['metrics', 'costs', 'agents', 'tools']).describe('Action to perform'),
|
|
21
|
+
range: z.string().optional().describe('Shorthand: 1h, 6h, 24h, 3d, 7d, 30d'),
|
|
22
|
+
from: z.string().optional().describe('Start date ISO'),
|
|
23
|
+
to: z.string().optional().describe('End date ISO'),
|
|
24
|
+
granularity: z.enum(['hour', 'day', 'week']).optional().describe('Bucket granularity'),
|
|
25
|
+
agentId: z.string().optional().describe('Filter by agent ID'),
|
|
26
|
+
}, async (params) => {
|
|
27
|
+
try {
|
|
28
|
+
const qp = {};
|
|
29
|
+
if (params.range)
|
|
30
|
+
qp.range = params.range;
|
|
31
|
+
if (params.from)
|
|
32
|
+
qp.from = params.from;
|
|
33
|
+
if (params.to)
|
|
34
|
+
qp.to = params.to;
|
|
35
|
+
if (params.granularity)
|
|
36
|
+
qp.granularity = params.granularity;
|
|
37
|
+
if (params.agentId)
|
|
38
|
+
qp.agentId = params.agentId;
|
|
39
|
+
let response;
|
|
40
|
+
switch (params.action) {
|
|
41
|
+
case 'metrics':
|
|
42
|
+
response = await transport.getAnalytics(qp);
|
|
43
|
+
break;
|
|
44
|
+
case 'costs':
|
|
45
|
+
response = await transport.getAnalyticsCosts(qp);
|
|
46
|
+
break;
|
|
47
|
+
case 'agents':
|
|
48
|
+
response = await transport.getAnalyticsAgents(qp);
|
|
49
|
+
break;
|
|
50
|
+
case 'tools':
|
|
51
|
+
response = await transport.getAnalyticsTools(qp);
|
|
52
|
+
break;
|
|
53
|
+
default:
|
|
54
|
+
return { content: [{ type: 'text', text: `Unknown action: ${params.action}` }], isError: true };
|
|
55
|
+
}
|
|
56
|
+
if (!response.ok) {
|
|
57
|
+
const body = await response.text().catch(() => '');
|
|
58
|
+
throw new Error(`${response.status}: ${body}`);
|
|
59
|
+
}
|
|
60
|
+
return { content: [{ type: 'text', text: JSON.stringify(await response.json(), null, 2) }] };
|
|
61
|
+
}
|
|
62
|
+
catch (error) {
|
|
63
|
+
return formatApiError(error, 'analytics');
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=analytics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analytics.js","sourceRoot":"","sources":["../../src/tools/analytics.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* agentlens_cost_budgets MCP Tool (Feature 10, Story 10.10)
|
|
3
|
+
*
|
|
4
|
+
* Budget CRUD, status check, and anomaly detection configuration.
|
|
5
|
+
*/
|
|
6
|
+
import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
7
|
+
import type { AgentLensTransport } from '../transport.js';
|
|
8
|
+
export declare function registerCostBudgetsTool(server: McpServer, transport: AgentLensTransport): void;
|
|
9
|
+
//# sourceMappingURL=cost-budgets.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cost-budgets.d.ts","sourceRoot":"","sources":["../../src/tools/cost-budgets.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAG1D,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,kBAAkB,GAAG,IAAI,CA+G9F"}
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* agentlens_cost_budgets MCP Tool (Feature 10, Story 10.10)
|
|
3
|
+
*
|
|
4
|
+
* Budget CRUD, status check, and anomaly detection configuration.
|
|
5
|
+
*/
|
|
6
|
+
import { z } from 'zod';
|
|
7
|
+
import { formatApiError } from './error-helpers.js';
|
|
8
|
+
export function registerCostBudgetsTool(server, transport) {
|
|
9
|
+
server.tool('agentlens_cost_budgets', `Manage cost budgets and anomaly detection.
|
|
10
|
+
|
|
11
|
+
**When to use:** To create/manage spending limits, check budget utilization, or configure cost anomaly detection.
|
|
12
|
+
|
|
13
|
+
**Actions:**
|
|
14
|
+
- \`list\`: List all cost budgets
|
|
15
|
+
- \`create\`: Create a new budget
|
|
16
|
+
- \`update\`: Update an existing budget
|
|
17
|
+
- \`delete\`: Delete a budget
|
|
18
|
+
- \`status\`: Check spend vs limit for a budget
|
|
19
|
+
- \`anomaly_config\`: Get anomaly detection configuration
|
|
20
|
+
- \`anomaly_update\`: Update anomaly detection settings
|
|
21
|
+
|
|
22
|
+
**Example:** agentlens_cost_budgets({ action: "create", scope: "global", period: "daily", limitUsd: 10, onBreach: "alert" })`, {
|
|
23
|
+
action: z.enum(['list', 'create', 'update', 'delete', 'status', 'anomaly_config', 'anomaly_update']).describe('Action to perform'),
|
|
24
|
+
budgetId: z.string().optional().describe('Budget ID (required for update/delete/status)'),
|
|
25
|
+
scope: z.enum(['global', 'agent']).optional().describe('Budget scope'),
|
|
26
|
+
agentId: z.string().optional().describe('Agent ID (for agent-scoped budgets)'),
|
|
27
|
+
period: z.enum(['daily', 'weekly', 'monthly']).optional().describe('Budget period'),
|
|
28
|
+
limitUsd: z.number().optional().describe('Spending limit in USD'),
|
|
29
|
+
onBreach: z.enum(['alert', 'pause', 'downgrade']).optional().describe('Action on budget breach'),
|
|
30
|
+
downgradeTargetModel: z.string().optional().describe('Target model for downgrade action'),
|
|
31
|
+
enabled: z.boolean().optional().describe('Enable/disable budget'),
|
|
32
|
+
zScoreThreshold: z.number().optional().describe('Z-score threshold for anomaly detection'),
|
|
33
|
+
lookbackDays: z.number().optional().describe('Lookback period in days for anomaly detection'),
|
|
34
|
+
}, async (params) => {
|
|
35
|
+
try {
|
|
36
|
+
switch (params.action) {
|
|
37
|
+
case 'list': {
|
|
38
|
+
const qp = {};
|
|
39
|
+
if (params.agentId)
|
|
40
|
+
qp.agentId = params.agentId;
|
|
41
|
+
if (params.scope)
|
|
42
|
+
qp.scope = params.scope;
|
|
43
|
+
const response = await transport.listCostBudgets(qp);
|
|
44
|
+
if (!response.ok) {
|
|
45
|
+
const b = await response.text().catch(() => '');
|
|
46
|
+
throw new Error(`${response.status}: ${b}`);
|
|
47
|
+
}
|
|
48
|
+
return { content: [{ type: 'text', text: JSON.stringify(await response.json(), null, 2) }] };
|
|
49
|
+
}
|
|
50
|
+
case 'create': {
|
|
51
|
+
if (!params.scope)
|
|
52
|
+
return { content: [{ type: 'text', text: 'Validation error: "scope" is required for create action.' }], isError: true };
|
|
53
|
+
if (!params.period)
|
|
54
|
+
return { content: [{ type: 'text', text: 'Validation error: "period" is required for create action.' }], isError: true };
|
|
55
|
+
if (params.limitUsd === undefined)
|
|
56
|
+
return { content: [{ type: 'text', text: 'Validation error: "limitUsd" is required for create action.' }], isError: true };
|
|
57
|
+
if (!params.onBreach)
|
|
58
|
+
return { content: [{ type: 'text', text: 'Validation error: "onBreach" is required for create action.' }], isError: true };
|
|
59
|
+
const body = {
|
|
60
|
+
scope: params.scope, period: params.period, limitUsd: params.limitUsd, onBreach: params.onBreach,
|
|
61
|
+
};
|
|
62
|
+
if (params.agentId)
|
|
63
|
+
body.agentId = params.agentId;
|
|
64
|
+
if (params.downgradeTargetModel)
|
|
65
|
+
body.downgradeTargetModel = params.downgradeTargetModel;
|
|
66
|
+
if (params.enabled !== undefined)
|
|
67
|
+
body.enabled = params.enabled;
|
|
68
|
+
const response = await transport.createCostBudget(body);
|
|
69
|
+
if (!response.ok) {
|
|
70
|
+
const b = await response.text().catch(() => '');
|
|
71
|
+
throw new Error(`${response.status}: ${b}`);
|
|
72
|
+
}
|
|
73
|
+
return { content: [{ type: 'text', text: JSON.stringify(await response.json(), null, 2) }] };
|
|
74
|
+
}
|
|
75
|
+
case 'update': {
|
|
76
|
+
if (!params.budgetId)
|
|
77
|
+
return { content: [{ type: 'text', text: 'Validation error: "budgetId" is required for update action.' }], isError: true };
|
|
78
|
+
const body = {};
|
|
79
|
+
if (params.limitUsd !== undefined)
|
|
80
|
+
body.limitUsd = params.limitUsd;
|
|
81
|
+
if (params.onBreach)
|
|
82
|
+
body.onBreach = params.onBreach;
|
|
83
|
+
if (params.enabled !== undefined)
|
|
84
|
+
body.enabled = params.enabled;
|
|
85
|
+
if (params.downgradeTargetModel)
|
|
86
|
+
body.downgradeTargetModel = params.downgradeTargetModel;
|
|
87
|
+
const response = await transport.updateCostBudget(params.budgetId, body);
|
|
88
|
+
if (!response.ok) {
|
|
89
|
+
const b = await response.text().catch(() => '');
|
|
90
|
+
throw new Error(`${response.status}: ${b}`);
|
|
91
|
+
}
|
|
92
|
+
return { content: [{ type: 'text', text: JSON.stringify(await response.json(), null, 2) }] };
|
|
93
|
+
}
|
|
94
|
+
case 'delete': {
|
|
95
|
+
if (!params.budgetId)
|
|
96
|
+
return { content: [{ type: 'text', text: 'Validation error: "budgetId" is required for delete action.' }], isError: true };
|
|
97
|
+
const response = await transport.deleteCostBudget(params.budgetId);
|
|
98
|
+
if (!response.ok) {
|
|
99
|
+
const b = await response.text().catch(() => '');
|
|
100
|
+
throw new Error(`${response.status}: ${b}`);
|
|
101
|
+
}
|
|
102
|
+
return { content: [{ type: 'text', text: `Budget ${params.budgetId} deleted.` }] };
|
|
103
|
+
}
|
|
104
|
+
case 'status': {
|
|
105
|
+
if (!params.budgetId)
|
|
106
|
+
return { content: [{ type: 'text', text: 'Validation error: "budgetId" is required for status action.' }], isError: true };
|
|
107
|
+
const response = await transport.getCostBudgetStatus(params.budgetId);
|
|
108
|
+
if (!response.ok) {
|
|
109
|
+
const b = await response.text().catch(() => '');
|
|
110
|
+
throw new Error(`${response.status}: ${b}`);
|
|
111
|
+
}
|
|
112
|
+
return { content: [{ type: 'text', text: JSON.stringify(await response.json(), null, 2) }] };
|
|
113
|
+
}
|
|
114
|
+
case 'anomaly_config': {
|
|
115
|
+
const response = await transport.getAnomalyConfig();
|
|
116
|
+
if (!response.ok) {
|
|
117
|
+
const b = await response.text().catch(() => '');
|
|
118
|
+
throw new Error(`${response.status}: ${b}`);
|
|
119
|
+
}
|
|
120
|
+
return { content: [{ type: 'text', text: JSON.stringify(await response.json(), null, 2) }] };
|
|
121
|
+
}
|
|
122
|
+
case 'anomaly_update': {
|
|
123
|
+
const body = {};
|
|
124
|
+
if (params.zScoreThreshold !== undefined)
|
|
125
|
+
body.zScoreThreshold = params.zScoreThreshold;
|
|
126
|
+
if (params.lookbackDays !== undefined)
|
|
127
|
+
body.lookbackDays = params.lookbackDays;
|
|
128
|
+
const response = await transport.updateAnomalyConfig(body);
|
|
129
|
+
if (!response.ok) {
|
|
130
|
+
const b = await response.text().catch(() => '');
|
|
131
|
+
throw new Error(`${response.status}: ${b}`);
|
|
132
|
+
}
|
|
133
|
+
return { content: [{ type: 'text', text: JSON.stringify(await response.json(), null, 2) }] };
|
|
134
|
+
}
|
|
135
|
+
default:
|
|
136
|
+
return { content: [{ type: 'text', text: `Unknown action: ${params.action}` }], isError: true };
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
catch (error) {
|
|
140
|
+
return formatApiError(error, 'cost-budgets');
|
|
141
|
+
}
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
//# sourceMappingURL=cost-budgets.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cost-budgets.js","sourceRoot":"","sources":["../../src/tools/cost-budgets.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Error helpers for MCP tools — consistent error formatting (Feature 10, Story 10.5)
|
|
3
|
+
*
|
|
4
|
+
* Detects 404/501 responses and appends upgrade suggestion per R13.
|
|
5
|
+
*/
|
|
6
|
+
export type ToolResult = {
|
|
7
|
+
content: Array<{
|
|
8
|
+
type: 'text';
|
|
9
|
+
text: string;
|
|
10
|
+
}>;
|
|
11
|
+
isError?: boolean;
|
|
12
|
+
};
|
|
13
|
+
export declare function formatApiError(error: unknown, featureName: string): ToolResult;
|
|
14
|
+
//# sourceMappingURL=error-helpers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error-helpers.d.ts","sourceRoot":"","sources":["../../src/tools/error-helpers.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,MAAM,UAAU,GAAG;IACvB,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC/C,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,GAAG,UAAU,CAY9E"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Error helpers for MCP tools — consistent error formatting (Feature 10, Story 10.5)
|
|
3
|
+
*
|
|
4
|
+
* Detects 404/501 responses and appends upgrade suggestion per R13.
|
|
5
|
+
*/
|
|
6
|
+
export function formatApiError(error, featureName) {
|
|
7
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
8
|
+
const is404 = message.includes('404');
|
|
9
|
+
const is501 = message.includes('501');
|
|
10
|
+
let text = `Error: ${message}`;
|
|
11
|
+
if (is404 || is501) {
|
|
12
|
+
text += `\n\nThis feature may require a newer AgentLens server version. ` +
|
|
13
|
+
`The "${featureName}" API endpoint was not found.`;
|
|
14
|
+
}
|
|
15
|
+
return { content: [{ type: 'text', text }], isError: true };
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=error-helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error-helpers.js","sourceRoot":"","sources":["../../src/tools/error-helpers.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH,MAAM,UAAU,cAAc,CAAC,KAAc,EAAE,WAAmB;IAChE,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACvE,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACtC,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAEtC,IAAI,IAAI,GAAG,UAAU,OAAO,EAAE,CAAC;IAC/B,IAAI,KAAK,IAAI,KAAK,EAAE,CAAC;QACnB,IAAI,IAAI,iEAAiE;YACvE,QAAQ,WAAW,+BAA+B,CAAC;IACvD,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AACvE,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* agentlens_lessons MCP Tool (Feature 10, Story 10.11)
|
|
3
|
+
*
|
|
4
|
+
* CRUD for lessons learned. Uses existing transport lesson methods.
|
|
5
|
+
*/
|
|
6
|
+
import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
7
|
+
import type { AgentLensTransport } from '../transport.js';
|
|
8
|
+
export declare function registerLessonsTool(server: McpServer, transport: AgentLensTransport): void;
|
|
9
|
+
//# sourceMappingURL=lessons.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lessons.d.ts","sourceRoot":"","sources":["../../src/tools/lessons.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAG1D,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,kBAAkB,GAAG,IAAI,CAgF1F"}
|