@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.
Files changed (166) hide show
  1. package/LICENSE +21 -0
  2. package/dist/__tests__/benchmark.test.d.ts +5 -0
  3. package/dist/__tests__/benchmark.test.js +1 -1
  4. package/dist/__tests__/capabilities.test.d.ts +5 -0
  5. package/dist/__tests__/capabilities.test.d.ts.map +1 -0
  6. package/dist/__tests__/capabilities.test.js +127 -0
  7. package/dist/__tests__/capabilities.test.js.map +1 -0
  8. package/dist/__tests__/context.test.d.ts +5 -0
  9. package/dist/__tests__/context.test.d.ts.map +1 -0
  10. package/dist/__tests__/context.test.js +203 -0
  11. package/dist/__tests__/context.test.js.map +1 -0
  12. package/dist/__tests__/guardrail-middleware.test.d.ts +2 -0
  13. package/dist/__tests__/guardrail-middleware.test.d.ts.map +1 -0
  14. package/dist/__tests__/guardrail-middleware.test.js +107 -0
  15. package/dist/__tests__/guardrail-middleware.test.js.map +1 -0
  16. package/dist/__tests__/health.test.d.ts +5 -0
  17. package/dist/__tests__/health.test.js +1 -1
  18. package/dist/__tests__/llm-call.test.d.ts +2 -0
  19. package/dist/__tests__/llm-call.test.js +1 -1
  20. package/dist/__tests__/optimize.test.d.ts +5 -0
  21. package/dist/__tests__/optimize.test.js +1 -1
  22. package/dist/__tests__/recall.test.d.ts +2 -0
  23. package/dist/__tests__/recall.test.js +4 -4
  24. package/dist/__tests__/recall.test.js.map +1 -1
  25. package/dist/__tests__/reflect.test.d.ts +5 -0
  26. package/dist/__tests__/reflect.test.d.ts.map +1 -0
  27. package/dist/__tests__/reflect.test.js +165 -0
  28. package/dist/__tests__/reflect.test.js.map +1 -0
  29. package/dist/__tests__/replay.test.d.ts +5 -0
  30. package/dist/__tests__/replay.test.d.ts.map +1 -0
  31. package/dist/__tests__/replay.test.js +245 -0
  32. package/dist/__tests__/replay.test.js.map +1 -0
  33. package/dist/capabilities.d.ts +28 -0
  34. package/dist/capabilities.d.ts.map +1 -0
  35. package/dist/capabilities.js +68 -0
  36. package/dist/capabilities.js.map +1 -0
  37. package/dist/guardrail-middleware.d.ts +36 -0
  38. package/dist/guardrail-middleware.d.ts.map +1 -0
  39. package/dist/guardrail-middleware.js +70 -0
  40. package/dist/guardrail-middleware.js.map +1 -0
  41. package/dist/index.d.ts +19 -5
  42. package/dist/index.d.ts.map +1 -1
  43. package/dist/index.js +42 -8
  44. package/dist/index.js.map +1 -1
  45. package/dist/server.test.d.ts +2 -0
  46. package/dist/server.test.js +12 -5
  47. package/dist/server.test.js.map +1 -1
  48. package/dist/tools/__tests__/agents.test.d.ts +5 -0
  49. package/dist/tools/__tests__/agents.test.d.ts.map +1 -0
  50. package/dist/tools/__tests__/agents.test.js +56 -0
  51. package/dist/tools/__tests__/agents.test.js.map +1 -0
  52. package/dist/tools/__tests__/alerts.test.d.ts +5 -0
  53. package/dist/tools/__tests__/alerts.test.d.ts.map +1 -0
  54. package/dist/tools/__tests__/alerts.test.js +83 -0
  55. package/dist/tools/__tests__/alerts.test.js.map +1 -0
  56. package/dist/tools/__tests__/analytics.test.d.ts +5 -0
  57. package/dist/tools/__tests__/analytics.test.d.ts.map +1 -0
  58. package/dist/tools/__tests__/analytics.test.js +53 -0
  59. package/dist/tools/__tests__/analytics.test.js.map +1 -0
  60. package/dist/tools/__tests__/cost-budgets.test.d.ts +5 -0
  61. package/dist/tools/__tests__/cost-budgets.test.d.ts.map +1 -0
  62. package/dist/tools/__tests__/cost-budgets.test.js +86 -0
  63. package/dist/tools/__tests__/cost-budgets.test.js.map +1 -0
  64. package/dist/tools/__tests__/error-helpers.test.d.ts +5 -0
  65. package/dist/tools/__tests__/error-helpers.test.d.ts.map +1 -0
  66. package/dist/tools/__tests__/error-helpers.test.js +38 -0
  67. package/dist/tools/__tests__/error-helpers.test.js.map +1 -0
  68. package/dist/tools/__tests__/lessons.test.d.ts +5 -0
  69. package/dist/tools/__tests__/lessons.test.d.ts.map +1 -0
  70. package/dist/tools/__tests__/lessons.test.js +64 -0
  71. package/dist/tools/__tests__/lessons.test.js.map +1 -0
  72. package/dist/tools/__tests__/prompts.test.d.ts +5 -0
  73. package/dist/tools/__tests__/prompts.test.d.ts.map +1 -0
  74. package/dist/tools/__tests__/prompts.test.js +112 -0
  75. package/dist/tools/__tests__/prompts.test.js.map +1 -0
  76. package/dist/tools/__tests__/sessions.test.d.ts +5 -0
  77. package/dist/tools/__tests__/sessions.test.d.ts.map +1 -0
  78. package/dist/tools/__tests__/sessions.test.js +62 -0
  79. package/dist/tools/__tests__/sessions.test.js.map +1 -0
  80. package/dist/tools/__tests__/stats.test.d.ts +5 -0
  81. package/dist/tools/__tests__/stats.test.d.ts.map +1 -0
  82. package/dist/tools/__tests__/stats.test.js +41 -0
  83. package/dist/tools/__tests__/stats.test.js.map +1 -0
  84. package/dist/tools/__tests__/trust.test.d.ts +5 -0
  85. package/dist/tools/__tests__/trust.test.d.ts.map +1 -0
  86. package/dist/tools/__tests__/trust.test.js +46 -0
  87. package/dist/tools/__tests__/trust.test.js.map +1 -0
  88. package/dist/tools/agents.d.ts +9 -0
  89. package/dist/tools/agents.d.ts.map +1 -0
  90. package/dist/tools/agents.js +67 -0
  91. package/dist/tools/agents.js.map +1 -0
  92. package/dist/tools/alerts.d.ts +9 -0
  93. package/dist/tools/alerts.d.ts.map +1 -0
  94. package/dist/tools/alerts.js +126 -0
  95. package/dist/tools/alerts.js.map +1 -0
  96. package/dist/tools/analytics.d.ts +9 -0
  97. package/dist/tools/analytics.d.ts.map +1 -0
  98. package/dist/tools/analytics.js +67 -0
  99. package/dist/tools/analytics.js.map +1 -0
  100. package/dist/tools/cost-budgets.d.ts +9 -0
  101. package/dist/tools/cost-budgets.d.ts.map +1 -0
  102. package/dist/tools/cost-budgets.js +144 -0
  103. package/dist/tools/cost-budgets.js.map +1 -0
  104. package/dist/tools/error-helpers.d.ts +14 -0
  105. package/dist/tools/error-helpers.d.ts.map +1 -0
  106. package/dist/tools/error-helpers.js +17 -0
  107. package/dist/tools/error-helpers.js.map +1 -0
  108. package/dist/tools/lessons.d.ts +9 -0
  109. package/dist/tools/lessons.d.ts.map +1 -0
  110. package/dist/tools/lessons.js +107 -0
  111. package/dist/tools/lessons.js.map +1 -0
  112. package/dist/tools/prompts.d.ts +9 -0
  113. package/dist/tools/prompts.d.ts.map +1 -0
  114. package/dist/tools/prompts.js +117 -0
  115. package/dist/tools/prompts.js.map +1 -0
  116. package/dist/tools/recall.js +3 -3
  117. package/dist/tools/recall.js.map +1 -1
  118. package/dist/tools/reflect.js +1 -1
  119. package/dist/tools/reflect.js.map +1 -1
  120. package/dist/tools/sessions.d.ts +9 -0
  121. package/dist/tools/sessions.d.ts.map +1 -0
  122. package/dist/tools/sessions.js +88 -0
  123. package/dist/tools/sessions.js.map +1 -0
  124. package/dist/tools/stats.d.ts +9 -0
  125. package/dist/tools/stats.d.ts.map +1 -0
  126. package/dist/tools/stats.js +43 -0
  127. package/dist/tools/stats.js.map +1 -0
  128. package/dist/tools/trust.d.ts +9 -0
  129. package/dist/tools/trust.d.ts.map +1 -0
  130. package/dist/tools/trust.js +42 -0
  131. package/dist/tools/trust.js.map +1 -0
  132. package/dist/tools.d.ts +11 -2
  133. package/dist/tools.d.ts.map +1 -1
  134. package/dist/tools.js +70 -47
  135. package/dist/tools.js.map +1 -1
  136. package/dist/tools.test.d.ts +2 -0
  137. package/dist/tools.test.js +10 -3
  138. package/dist/tools.test.js.map +1 -1
  139. package/dist/transport.d.ts +59 -0
  140. package/dist/transport.d.ts.map +1 -1
  141. package/dist/transport.js +245 -0
  142. package/dist/transport.js.map +1 -1
  143. package/dist/transport.test.d.ts +2 -0
  144. package/dist/transport.test.d.ts.map +1 -0
  145. package/dist/transport.test.js +170 -0
  146. package/dist/transport.test.js.map +1 -0
  147. package/package.json +10 -10
  148. package/dist/__tests__/learn.test.d.ts.map +0 -1
  149. package/dist/__tests__/learn.test.js +0 -381
  150. package/dist/__tests__/learn.test.js.map +0 -1
  151. package/dist/tools/__tests__/community.test.d.ts +0 -5
  152. package/dist/tools/__tests__/community.test.d.ts.map +0 -1
  153. package/dist/tools/__tests__/community.test.js +0 -172
  154. package/dist/tools/__tests__/community.test.js.map +0 -1
  155. package/dist/tools/__tests__/transport-community.test.d.ts +0 -5
  156. package/dist/tools/__tests__/transport-community.test.d.ts.map +0 -1
  157. package/dist/tools/__tests__/transport-community.test.js +0 -99
  158. package/dist/tools/__tests__/transport-community.test.js.map +0 -1
  159. package/dist/tools/community.d.ts +0 -10
  160. package/dist/tools/community.d.ts.map +0 -1
  161. package/dist/tools/community.js +0 -167
  162. package/dist/tools/community.js.map +0 -1
  163. package/dist/tools/learn.d.ts +0 -10
  164. package/dist/tools/learn.d.ts.map +0 -1
  165. package/dist/tools/learn.js +0 -277
  166. 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"}