@uptimebolt/mcp-server 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (71) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +186 -0
  3. package/dist/api-client.d.ts +11 -0
  4. package/dist/api-client.d.ts.map +1 -0
  5. package/dist/api-client.js +80 -0
  6. package/dist/api-client.js.map +1 -0
  7. package/dist/formatters.d.ts +17 -0
  8. package/dist/formatters.d.ts.map +1 -0
  9. package/dist/formatters.js +300 -0
  10. package/dist/formatters.js.map +1 -0
  11. package/dist/http-server.d.ts +3 -0
  12. package/dist/http-server.d.ts.map +1 -0
  13. package/dist/http-server.js +148 -0
  14. package/dist/http-server.js.map +1 -0
  15. package/dist/index.d.ts +4 -0
  16. package/dist/index.d.ts.map +1 -0
  17. package/dist/index.js +22 -0
  18. package/dist/index.js.map +1 -0
  19. package/dist/logger.d.ts +4 -0
  20. package/dist/logger.d.ts.map +1 -0
  21. package/dist/logger.js +77 -0
  22. package/dist/logger.js.map +1 -0
  23. package/dist/server.d.ts +3 -0
  24. package/dist/server.d.ts.map +1 -0
  25. package/dist/server.js +34 -0
  26. package/dist/server.js.map +1 -0
  27. package/dist/tools/get-deployments.d.ts +20 -0
  28. package/dist/tools/get-deployments.d.ts.map +1 -0
  29. package/dist/tools/get-deployments.js +27 -0
  30. package/dist/tools/get-deployments.js.map +1 -0
  31. package/dist/tools/get-executive-summary.d.ts +19 -0
  32. package/dist/tools/get-executive-summary.d.ts.map +1 -0
  33. package/dist/tools/get-executive-summary.js +19 -0
  34. package/dist/tools/get-executive-summary.js.map +1 -0
  35. package/dist/tools/get-incidents.d.ts +22 -0
  36. package/dist/tools/get-incidents.d.ts.map +1 -0
  37. package/dist/tools/get-incidents.js +56 -0
  38. package/dist/tools/get-incidents.js.map +1 -0
  39. package/dist/tools/get-monitor-health.d.ts +20 -0
  40. package/dist/tools/get-monitor-health.d.ts.map +1 -0
  41. package/dist/tools/get-monitor-health.js +48 -0
  42. package/dist/tools/get-monitor-health.js.map +1 -0
  43. package/dist/tools/get-monitor-metrics.d.ts +19 -0
  44. package/dist/tools/get-monitor-metrics.d.ts.map +1 -0
  45. package/dist/tools/get-monitor-metrics.js +42 -0
  46. package/dist/tools/get-monitor-metrics.js.map +1 -0
  47. package/dist/tools/get-monitors.d.ts +19 -0
  48. package/dist/tools/get-monitors.d.ts.map +1 -0
  49. package/dist/tools/get-monitors.js +44 -0
  50. package/dist/tools/get-monitors.js.map +1 -0
  51. package/dist/tools/get-predictions.d.ts +20 -0
  52. package/dist/tools/get-predictions.d.ts.map +1 -0
  53. package/dist/tools/get-predictions.js +36 -0
  54. package/dist/tools/get-predictions.js.map +1 -0
  55. package/dist/tools/get-service-status.d.ts +19 -0
  56. package/dist/tools/get-service-status.d.ts.map +1 -0
  57. package/dist/tools/get-service-status.js +47 -0
  58. package/dist/tools/get-service-status.js.map +1 -0
  59. package/dist/tools/is-safe-to-deploy.d.ts +19 -0
  60. package/dist/tools/is-safe-to-deploy.d.ts.map +1 -0
  61. package/dist/tools/is-safe-to-deploy.js +148 -0
  62. package/dist/tools/is-safe-to-deploy.js.map +1 -0
  63. package/dist/tools/run-root-cause-analysis.d.ts +21 -0
  64. package/dist/tools/run-root-cause-analysis.d.ts.map +1 -0
  65. package/dist/tools/run-root-cause-analysis.js +40 -0
  66. package/dist/tools/run-root-cause-analysis.js.map +1 -0
  67. package/dist/tools.d.ts +288 -0
  68. package/dist/tools.d.ts.map +1 -0
  69. package/dist/tools.js +146 -0
  70. package/dist/tools.js.map +1 -0
  71. package/package.json +70 -0
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.handleGetMonitorHealth = handleGetMonitorHealth;
4
+ const api_client_1 = require("../api-client");
5
+ const formatters_1 = require("../formatters");
6
+ async function handleGetMonitorHealth(args, context) {
7
+ try {
8
+ let monitorId = args.monitor_id;
9
+ if (!monitorId && args.monitor_name) {
10
+ const monitorsResponse = await api_client_1.apiClient.get("/monitors", undefined, undefined, context?.authToken);
11
+ const monitors = Array.isArray(monitorsResponse) ? monitorsResponse : (monitorsResponse?.monitors || []);
12
+ const query = args.monitor_name.toLowerCase();
13
+ const exact = monitors.find((m) => m.name.toLowerCase() === query);
14
+ if (exact) {
15
+ monitorId = exact.id;
16
+ }
17
+ else {
18
+ const matches = monitors.filter((m) => m.name.toLowerCase().includes(query));
19
+ if (matches.length === 1) {
20
+ monitorId = matches[0].id;
21
+ }
22
+ else if (matches.length > 1) {
23
+ const names = matches.map((m) => ` - ${m.name} (id: ${m.id}, type: ${m.type})`).join("\n");
24
+ return { content: [{ type: "text", text: `Multiple monitors match "${args.monitor_name}":\n${names}\n\nPlease use monitor_id or a more specific name.` }] };
25
+ }
26
+ else {
27
+ return { content: [{ type: "text", text: `No monitor found matching "${args.monitor_name}".` }] };
28
+ }
29
+ }
30
+ }
31
+ if (!monitorId) {
32
+ return { content: [{ type: "text", text: "Please provide either monitor_id or monitor_name." }] };
33
+ }
34
+ const [monitor, predictions] = await Promise.all([
35
+ api_client_1.apiClient.get(`/monitors/${monitorId}`, undefined, undefined, context?.authToken),
36
+ api_client_1.apiClient.get(`/monitors/${monitorId}/predictions`, undefined, undefined, context?.authToken).catch(() => []),
37
+ ]);
38
+ const activePredictions = Array.isArray(predictions)
39
+ ? predictions.filter((p) => p.status === "active")
40
+ : [];
41
+ return { content: [{ type: "text", text: (0, formatters_1.formatMonitorHealth)(monitor, activePredictions) }] };
42
+ }
43
+ catch (err) {
44
+ const message = err instanceof api_client_1.ApiError ? err.message : err.message;
45
+ return { content: [{ type: "text", text: `Error: ${message}` }], isError: true };
46
+ }
47
+ }
48
+ //# sourceMappingURL=get-monitor-health.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-monitor-health.js","sourceRoot":"","sources":["../../src/tools/get-monitor-health.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ export declare function handleGetMonitorMetrics(args: {
2
+ monitor_id?: string;
3
+ monitor_name?: string;
4
+ }, context?: {
5
+ authToken?: string;
6
+ }): Promise<{
7
+ content: {
8
+ type: "text";
9
+ text: string;
10
+ }[];
11
+ isError?: undefined;
12
+ } | {
13
+ content: {
14
+ type: "text";
15
+ text: string;
16
+ }[];
17
+ isError: boolean;
18
+ }>;
19
+ //# sourceMappingURL=get-monitor-metrics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-monitor-metrics.d.ts","sourceRoot":"","sources":["../../src/tools/get-monitor-metrics.ts"],"names":[],"mappings":"AAIA,wBAAsB,uBAAuB,CAC3C,IAAI,EAAE;IAAE,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE,EACpD,OAAO,CAAC,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE;;;;;;;;;;;;GAqCjC"}
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.handleGetMonitorMetrics = handleGetMonitorMetrics;
4
+ const api_client_1 = require("../api-client");
5
+ const formatters_1 = require("../formatters");
6
+ async function handleGetMonitorMetrics(args, context) {
7
+ try {
8
+ let monitorId = args.monitor_id;
9
+ if (!monitorId && args.monitor_name) {
10
+ const monitorsResponse = await api_client_1.apiClient.get("/monitors", undefined, undefined, context?.authToken);
11
+ const monitors = Array.isArray(monitorsResponse) ? monitorsResponse : (monitorsResponse?.monitors || []);
12
+ const query = args.monitor_name.toLowerCase();
13
+ const exact = monitors.find((m) => m.name.toLowerCase() === query);
14
+ if (exact) {
15
+ monitorId = exact.id;
16
+ }
17
+ else {
18
+ const matches = monitors.filter((m) => m.name.toLowerCase().includes(query));
19
+ if (matches.length === 1) {
20
+ monitorId = matches[0].id;
21
+ }
22
+ else if (matches.length > 1) {
23
+ const names = matches.map((m) => ` - ${m.name} (id: ${m.id})`).join("\n");
24
+ return { content: [{ type: "text", text: `Multiple monitors match "${args.monitor_name}":\n${names}\n\nPlease use monitor_id or a more specific name.` }] };
25
+ }
26
+ else {
27
+ return { content: [{ type: "text", text: `No monitor found matching "${args.monitor_name}".` }] };
28
+ }
29
+ }
30
+ }
31
+ if (!monitorId) {
32
+ return { content: [{ type: "text", text: "Please provide either monitor_id or monitor_name." }] };
33
+ }
34
+ const summary = await api_client_1.apiClient.get(`/metric-query/monitor-summary/${monitorId}`, undefined, undefined, context?.authToken);
35
+ return { content: [{ type: "text", text: (0, formatters_1.formatMonitorMetrics)(summary) }] };
36
+ }
37
+ catch (err) {
38
+ const message = err instanceof api_client_1.ApiError ? err.message : err.message;
39
+ return { content: [{ type: "text", text: `Error: ${message}` }], isError: true };
40
+ }
41
+ }
42
+ //# sourceMappingURL=get-monitor-metrics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-monitor-metrics.js","sourceRoot":"","sources":["../../src/tools/get-monitor-metrics.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ export declare function handleGetMonitors(args: {
2
+ status?: string;
3
+ type?: string;
4
+ }, context?: {
5
+ authToken?: string;
6
+ }): Promise<{
7
+ content: {
8
+ type: "text";
9
+ text: string;
10
+ }[];
11
+ isError?: undefined;
12
+ } | {
13
+ content: {
14
+ type: "text";
15
+ text: string;
16
+ }[];
17
+ isError: boolean;
18
+ }>;
19
+ //# sourceMappingURL=get-monitors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-monitors.d.ts","sourceRoot":"","sources":["../../src/tools/get-monitors.ts"],"names":[],"mappings":"AAIA,wBAAsB,iBAAiB,CACrC,IAAI,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,EACxC,OAAO,CAAC,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE;;;;;;;;;;;;GAyCjC"}
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.handleGetMonitors = handleGetMonitors;
4
+ const api_client_1 = require("../api-client");
5
+ const formatters_1 = require("../formatters");
6
+ async function handleGetMonitors(args, context) {
7
+ try {
8
+ const params = {
9
+ limit: 100,
10
+ };
11
+ if (args.type)
12
+ params.type = args.type;
13
+ // The API's `status` param filters by administrative status (active/paused/maintenance),
14
+ // NOT operational status (up/down/degraded).
15
+ // Default: fetch ALL monitors so Claude always has the full picture (paused monitors shown with [PAUSED] tag).
16
+ if (args.status === "paused") {
17
+ params.status = "paused";
18
+ }
19
+ else if (args.status === "maintenance") {
20
+ params.status = "maintenance";
21
+ }
22
+ else if (args.status === "active") {
23
+ params.status = "active";
24
+ }
25
+ // For "all", "up", "down", "degraded", or no status: don't filter by admin status (fetch everything)
26
+ const response = await api_client_1.apiClient.get("/monitors", params, undefined, context?.authToken);
27
+ const monitors = Array.isArray(response) ? response : (response?.monitors || []);
28
+ // Client-side filter by operationalStatus (up/down/degraded) when requested
29
+ let filtered = monitors;
30
+ if (args.status && ["up", "down", "degraded"].includes(args.status)) {
31
+ filtered = monitors.filter((m) => (m.operationalStatus || m.status || "").toLowerCase() === args.status.toLowerCase());
32
+ }
33
+ if (filtered.length === 0) {
34
+ const qualifier = args.status && args.status !== "all" ? ` with status "${args.status}"` : "";
35
+ return { content: [{ type: "text", text: `No monitors found${qualifier}.` }] };
36
+ }
37
+ return { content: [{ type: "text", text: (0, formatters_1.formatMonitors)(filtered) }] };
38
+ }
39
+ catch (err) {
40
+ const message = err instanceof api_client_1.ApiError ? err.message : err.message;
41
+ return { content: [{ type: "text", text: `Error: ${message}` }], isError: true };
42
+ }
43
+ }
44
+ //# sourceMappingURL=get-monitors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-monitors.js","sourceRoot":"","sources":["../../src/tools/get-monitors.ts"],"names":[],"mappings":";;AAIA,8CA2CC;AA/CD,8CAAoD;AACpD,8CAA+C;AAGxC,KAAK,UAAU,iBAAiB,CACrC,IAAwC,EACxC,OAAgC;IAEhC,IAAI,CAAC;QACH,MAAM,MAAM,GAA0D;YACpE,KAAK,EAAE,GAAG;SACX,CAAC;QACF,IAAI,IAAI,CAAC,IAAI;YAAE,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QAEvC,yFAAyF;QACzF,6CAA6C;QAC7C,+GAA+G;QAC/G,IAAI,IAAI,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC7B,MAAM,CAAC,MAAM,GAAG,QAAQ,CAAC;QAC3B,CAAC;aAAM,IAAI,IAAI,CAAC,MAAM,KAAK,aAAa,EAAE,CAAC;YACzC,MAAM,CAAC,MAAM,GAAG,aAAa,CAAC;QAChC,CAAC;aAAM,IAAI,IAAI,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YACpC,MAAM,CAAC,MAAM,GAAG,QAAQ,CAAC;QAC3B,CAAC;QACD,qGAAqG;QAErG,MAAM,QAAQ,GAAG,MAAM,sBAAS,CAAC,GAAG,CAAM,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;QAC9F,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,QAAQ,IAAI,EAAE,CAAC,CAAC;QAEjF,4EAA4E;QAC5E,IAAI,QAAQ,GAAG,QAAQ,CAAC;QACxB,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YACpE,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAM,EAAE,EAAE,CACpC,CAAC,CAAC,CAAC,iBAAiB,IAAI,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC,MAAO,CAAC,WAAW,EAAE,CACrF,CAAC;QACJ,CAAC;QAED,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,KAAK,KAAK,CAAC,CAAC,CAAC,iBAAiB,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YAC9F,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,oBAAoB,SAAS,GAAG,EAAE,CAAC,EAAE,CAAC;QAC1F,CAAC;QAED,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAA,2BAAc,EAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;IAClF,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,OAAO,GAAG,GAAG,YAAY,qBAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAE,GAAa,CAAC,OAAO,CAAC;QAC/E,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,UAAU,OAAO,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC5F,CAAC;AACH,CAAC"}
@@ -0,0 +1,20 @@
1
+ export declare function handleGetPredictions(args: {
2
+ service_id?: string;
3
+ monitor_id?: string;
4
+ min_confidence?: number;
5
+ }, context?: {
6
+ authToken?: string;
7
+ }): Promise<{
8
+ content: {
9
+ type: "text";
10
+ text: string;
11
+ }[];
12
+ isError?: undefined;
13
+ } | {
14
+ content: {
15
+ type: "text";
16
+ text: string;
17
+ }[];
18
+ isError: boolean;
19
+ }>;
20
+ //# sourceMappingURL=get-predictions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-predictions.d.ts","sourceRoot":"","sources":["../../src/tools/get-predictions.ts"],"names":[],"mappings":"AAIA,wBAAsB,oBAAoB,CAAC,IAAI,EAAE;IAAE,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,cAAc,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,OAAO,CAAC,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE;;;;;;;;;;;;GAgCvJ"}
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.handleGetPredictions = handleGetPredictions;
4
+ const api_client_1 = require("../api-client");
5
+ const formatters_1 = require("../formatters");
6
+ async function handleGetPredictions(args, context) {
7
+ try {
8
+ let predictions;
9
+ if (args.monitor_id) {
10
+ predictions = await api_client_1.apiClient.get(`/monitors/${args.monitor_id}/predictions`, undefined, undefined, context?.authToken);
11
+ }
12
+ else {
13
+ predictions = await api_client_1.apiClient.get("/predictive/alerts", undefined, undefined, context?.authToken);
14
+ }
15
+ if (!Array.isArray(predictions))
16
+ predictions = [];
17
+ // Filter by confidence
18
+ const minConf = args.min_confidence ?? 60;
19
+ predictions = predictions.filter((p) => {
20
+ const conf = p.confidence != null ? (p.confidence > 1 ? p.confidence : p.confidence * 100) : 0;
21
+ return conf >= minConf;
22
+ });
23
+ // Filter by service if needed
24
+ if (args.service_id) {
25
+ predictions = predictions.filter((p) => p.serviceId === args.service_id);
26
+ }
27
+ // Only active
28
+ predictions = predictions.filter((p) => p.status === "active" || !p.status);
29
+ return { content: [{ type: "text", text: (0, formatters_1.formatPredictions)(predictions) }] };
30
+ }
31
+ catch (err) {
32
+ const message = err instanceof api_client_1.ApiError ? err.message : err.message;
33
+ return { content: [{ type: "text", text: `Error: ${message}` }], isError: true };
34
+ }
35
+ }
36
+ //# sourceMappingURL=get-predictions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-predictions.js","sourceRoot":"","sources":["../../src/tools/get-predictions.ts"],"names":[],"mappings":";;AAIA,oDAgCC;AApCD,8CAAoD;AACpD,8CAAkD;AAG3C,KAAK,UAAU,oBAAoB,CAAC,IAA2E,EAAE,OAAgC;IACtJ,IAAI,CAAC;QACH,IAAI,WAAkB,CAAC;QAEvB,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,WAAW,GAAG,MAAM,sBAAS,CAAC,GAAG,CAAC,aAAa,IAAI,CAAC,UAAU,cAAc,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;QAC1H,CAAC;aAAM,CAAC;YACN,WAAW,GAAG,MAAM,sBAAS,CAAC,GAAG,CAAC,oBAAoB,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;QACpG,CAAC;QAED,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC;YAAE,WAAW,GAAG,EAAE,CAAC;QAElD,uBAAuB;QACvB,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,IAAI,EAAE,CAAC;QAC1C,WAAW,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAM,EAAE,EAAE;YAC1C,MAAM,IAAI,GAAG,CAAC,CAAC,UAAU,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC/F,OAAO,IAAI,IAAI,OAAO,CAAC;QACzB,CAAC,CAAC,CAAC;QAEH,8BAA8B;QAC9B,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,WAAW,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,IAAI,CAAC,UAAU,CAAC,CAAC;QAChF,CAAC;QAED,cAAc;QACd,WAAW,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,QAAQ,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QAEjF,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAA,8BAAiB,EAAC,WAAW,CAAC,EAAE,CAAC,EAAE,CAAC;IACxF,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,OAAO,GAAG,GAAG,YAAY,qBAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAE,GAAa,CAAC,OAAO,CAAC;QAC/E,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,UAAU,OAAO,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC5F,CAAC;AACH,CAAC"}
@@ -0,0 +1,19 @@
1
+ export declare function handleGetServiceStatus(args: {
2
+ service_id?: string;
3
+ service_name?: string;
4
+ }, context?: {
5
+ authToken?: string;
6
+ }): Promise<{
7
+ content: {
8
+ type: "text";
9
+ text: string;
10
+ }[];
11
+ isError?: undefined;
12
+ } | {
13
+ content: {
14
+ type: "text";
15
+ text: string;
16
+ }[];
17
+ isError: boolean;
18
+ }>;
19
+ //# sourceMappingURL=get-service-status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-service-status.d.ts","sourceRoot":"","sources":["../../src/tools/get-service-status.ts"],"names":[],"mappings":"AAIA,wBAAsB,sBAAsB,CAAC,IAAI,EAAE;IAAE,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,OAAO,CAAC,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE;;;;;;;;;;;;GAwClI"}
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.handleGetServiceStatus = handleGetServiceStatus;
4
+ const api_client_1 = require("../api-client");
5
+ const formatters_1 = require("../formatters");
6
+ async function handleGetServiceStatus(args, context) {
7
+ try {
8
+ if (args.service_id) {
9
+ const [service, health] = await Promise.all([
10
+ api_client_1.apiClient.get(`/services/${args.service_id}`, undefined, undefined, context?.authToken),
11
+ api_client_1.apiClient.get(`/services/${args.service_id}/health`, undefined, undefined, context?.authToken).catch(() => null),
12
+ ]);
13
+ if (health?.healthScore != null)
14
+ service.healthScore = health.healthScore;
15
+ return { content: [{ type: "text", text: (0, formatters_1.formatServiceStatus)(service) }] };
16
+ }
17
+ const services = await api_client_1.apiClient.get("/services", undefined, undefined, context?.authToken);
18
+ if (args.service_name) {
19
+ const query = args.service_name.toLowerCase();
20
+ const exact = services.find((s) => s.name.toLowerCase() === query);
21
+ if (exact) {
22
+ const health = await api_client_1.apiClient.get(`/services/${exact.id}/health`, undefined, undefined, context?.authToken).catch(() => null);
23
+ if (health?.healthScore != null)
24
+ exact.healthScore = health.healthScore;
25
+ return { content: [{ type: "text", text: (0, formatters_1.formatServiceStatus)(exact) }] };
26
+ }
27
+ const matches = services.filter((s) => s.name.toLowerCase().includes(query));
28
+ if (matches.length === 1) {
29
+ const health = await api_client_1.apiClient.get(`/services/${matches[0].id}/health`, undefined, undefined, context?.authToken).catch(() => null);
30
+ if (health?.healthScore != null)
31
+ matches[0].healthScore = health.healthScore;
32
+ return { content: [{ type: "text", text: (0, formatters_1.formatServiceStatus)(matches[0]) }] };
33
+ }
34
+ if (matches.length > 1) {
35
+ const names = matches.map((s) => ` - ${s.name} (id: ${s.id})`).join("\n");
36
+ return { content: [{ type: "text", text: `Multiple services match "${args.service_name}":\n${names}\n\nPlease use service_id or a more specific name.` }] };
37
+ }
38
+ return { content: [{ type: "text", text: `No service found matching "${args.service_name}".` }] };
39
+ }
40
+ return { content: [{ type: "text", text: (0, formatters_1.formatServiceStatus)(services) }] };
41
+ }
42
+ catch (err) {
43
+ const message = err instanceof api_client_1.ApiError ? err.message : err.message;
44
+ return { content: [{ type: "text", text: `Error: ${message}` }], isError: true };
45
+ }
46
+ }
47
+ //# sourceMappingURL=get-service-status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-service-status.js","sourceRoot":"","sources":["../../src/tools/get-service-status.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ export declare function handleIsSafeToDeploy(args: {
2
+ service_id?: string;
3
+ service_name?: string;
4
+ }, context?: {
5
+ authToken?: string;
6
+ }): Promise<{
7
+ content: {
8
+ type: "text";
9
+ text: string;
10
+ }[];
11
+ isError?: undefined;
12
+ } | {
13
+ content: {
14
+ type: "text";
15
+ text: string;
16
+ }[];
17
+ isError: boolean;
18
+ }>;
19
+ //# sourceMappingURL=is-safe-to-deploy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"is-safe-to-deploy.d.ts","sourceRoot":"","sources":["../../src/tools/is-safe-to-deploy.ts"],"names":[],"mappings":"AAIA,wBAAsB,oBAAoB,CAAC,IAAI,EAAE;IAAE,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,OAAO,CAAC,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE;;;;;;;;;;;;GAyJhI"}
@@ -0,0 +1,148 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.handleIsSafeToDeploy = handleIsSafeToDeploy;
4
+ const api_client_1 = require("../api-client");
5
+ const formatters_1 = require("../formatters");
6
+ async function handleIsSafeToDeploy(args, context) {
7
+ try {
8
+ // Resolve service
9
+ let serviceId = args.service_id;
10
+ let serviceName = "your infrastructure";
11
+ if (!serviceId && args.service_name) {
12
+ const services = await api_client_1.apiClient.get("/services", undefined, undefined, context?.authToken);
13
+ const query = args.service_name.toLowerCase();
14
+ const match = services.find((s) => s.name.toLowerCase() === query) ||
15
+ (() => {
16
+ const partial = services.filter((s) => s.name.toLowerCase().includes(query));
17
+ return partial.length === 1 ? partial[0] : null;
18
+ })();
19
+ if (!match) {
20
+ return { content: [{ type: "text", text: `No service found matching "${args.service_name}".` }] };
21
+ }
22
+ serviceId = match.id;
23
+ serviceName = match.name;
24
+ }
25
+ // Gather data in parallel
26
+ const [healthData, predictions, incidents] = await Promise.all([
27
+ serviceId
28
+ ? api_client_1.apiClient.get(`/services/${serviceId}/health`, undefined, undefined, context?.authToken).catch(() => ({ healthScore: null }))
29
+ : Promise.resolve({ healthScore: null }),
30
+ api_client_1.apiClient.get("/predictive/alerts", undefined, undefined, context?.authToken).catch(() => []),
31
+ api_client_1.apiClient.get("/incidents", { limit: 10 }, undefined, context?.authToken).catch(() => []),
32
+ ]);
33
+ const healthScore = healthData?.healthScore;
34
+ const activePredictions = Array.isArray(predictions)
35
+ ? predictions.filter((p) => p.status === "active")
36
+ : [];
37
+ const activeIncidents = Array.isArray(incidents)
38
+ ? incidents.filter((inc) => inc.status !== "resolved" && inc.status !== "false-positive")
39
+ : [];
40
+ // Filter by service if specified
41
+ const relevantPredictions = serviceId
42
+ ? activePredictions.filter((p) => p.serviceId === serviceId)
43
+ : activePredictions;
44
+ const relevantIncidents = serviceId
45
+ ? activeIncidents.filter((inc) => inc.monitor?.serviceId === serviceId || inc.serviceId === serviceId)
46
+ : activeIncidents;
47
+ // Decision logic
48
+ const activeIssues = [];
49
+ let riskLevel = "low";
50
+ let safe = true;
51
+ // Check critical incidents
52
+ const criticalIncidents = relevantIncidents.filter((inc) => inc.severity === "critical" || inc.priority === "critical");
53
+ if (criticalIncidents.length > 0) {
54
+ riskLevel = "high";
55
+ safe = false;
56
+ criticalIncidents.forEach((inc) => {
57
+ activeIssues.push({
58
+ type: "incident",
59
+ message: `Critical incident: ${inc.title || "Unknown"} (${inc.status})`,
60
+ });
61
+ });
62
+ }
63
+ // Check non-critical incidents
64
+ const otherIncidents = relevantIncidents.filter((inc) => inc.severity !== "critical" && inc.priority !== "critical");
65
+ if (otherIncidents.length > 0) {
66
+ if (riskLevel !== "high")
67
+ riskLevel = "medium";
68
+ otherIncidents.forEach((inc) => {
69
+ activeIssues.push({
70
+ type: "incident",
71
+ message: `Active incident: ${inc.title || "Unknown"} (${inc.severity})`,
72
+ });
73
+ });
74
+ }
75
+ // Check high-confidence predictions
76
+ const highConfPredictions = relevantPredictions.filter((p) => {
77
+ const conf = p.confidence != null ? (p.confidence > 1 ? p.confidence : p.confidence * 100) : 0;
78
+ return conf >= 80;
79
+ });
80
+ if (highConfPredictions.length > 0) {
81
+ riskLevel = "high";
82
+ safe = false;
83
+ highConfPredictions.forEach((p) => {
84
+ const conf = Math.round(p.confidence > 1 ? p.confidence : p.confidence * 100);
85
+ activeIssues.push({
86
+ type: "prediction",
87
+ message: `${p.predictionType}: ${p.monitor?.name || p.monitorId || "unknown"}`,
88
+ confidence: conf,
89
+ });
90
+ });
91
+ }
92
+ // Check medium-confidence predictions
93
+ const mediumConfPredictions = relevantPredictions.filter((p) => {
94
+ const conf = p.confidence != null ? (p.confidence > 1 ? p.confidence : p.confidence * 100) : 0;
95
+ return conf >= 60 && conf < 80;
96
+ });
97
+ if (mediumConfPredictions.length > 0) {
98
+ if (riskLevel === "low")
99
+ riskLevel = "medium";
100
+ mediumConfPredictions.forEach((p) => {
101
+ const conf = Math.round(p.confidence > 1 ? p.confidence : p.confidence * 100);
102
+ activeIssues.push({
103
+ type: "prediction",
104
+ message: `${p.predictionType}: ${p.monitor?.name || p.monitorId || "unknown"}`,
105
+ confidence: conf,
106
+ });
107
+ });
108
+ }
109
+ // Check health score
110
+ if (healthScore != null) {
111
+ if (healthScore < 70) {
112
+ riskLevel = "high";
113
+ safe = false;
114
+ activeIssues.push({ type: "health", message: `Service health score is ${healthScore.toFixed(1)}% (below 70% threshold)` });
115
+ }
116
+ else if (healthScore < 85) {
117
+ if (riskLevel === "low")
118
+ riskLevel = "medium";
119
+ activeIssues.push({ type: "health", message: `Service health score is ${healthScore.toFixed(1)}% (below 85%)` });
120
+ }
121
+ }
122
+ if (riskLevel === "medium" && safe)
123
+ safe = true; // medium is cautionary, not blocking
124
+ // Build reason
125
+ let reason;
126
+ let recommendation;
127
+ if (safe && riskLevel === "low") {
128
+ reason = `${serviceName} is stable with no active issues. Safe to deploy.`;
129
+ recommendation = "proceed";
130
+ }
131
+ else if (riskLevel === "medium") {
132
+ reason = `${serviceName} has minor issues. Deploy with caution and monitor closely.`;
133
+ recommendation = "proceed_with_caution";
134
+ }
135
+ else {
136
+ reason = `${serviceName} has critical issues. Deploying now could worsen the situation.`;
137
+ recommendation = "wait_and_monitor";
138
+ }
139
+ return {
140
+ content: [{ type: "text", text: (0, formatters_1.formatSafetyCheck)({ safe, riskLevel, reason, activeIssues, recommendation }) }],
141
+ };
142
+ }
143
+ catch (err) {
144
+ const message = err instanceof api_client_1.ApiError ? err.message : err.message;
145
+ return { content: [{ type: "text", text: `Error: ${message}` }], isError: true };
146
+ }
147
+ }
148
+ //# sourceMappingURL=is-safe-to-deploy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"is-safe-to-deploy.js","sourceRoot":"","sources":["../../src/tools/is-safe-to-deploy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ export declare function handleRunRootCauseAnalysis(args: {
2
+ incident_id?: string;
3
+ service_id?: string;
4
+ language?: string;
5
+ tier?: string;
6
+ }, context?: {
7
+ authToken?: string;
8
+ }): Promise<{
9
+ content: {
10
+ type: "text";
11
+ text: string;
12
+ }[];
13
+ isError?: undefined;
14
+ } | {
15
+ content: {
16
+ type: "text";
17
+ text: string;
18
+ }[];
19
+ isError: boolean;
20
+ }>;
21
+ //# sourceMappingURL=run-root-cause-analysis.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-root-cause-analysis.d.ts","sourceRoot":"","sources":["../../src/tools/run-root-cause-analysis.ts"],"names":[],"mappings":"AAIA,wBAAsB,0BAA0B,CAAC,IAAI,EAAE;IACrD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,EAAE,OAAO,CAAC,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE;;;;;;;;;;;;GAiClC"}
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.handleRunRootCauseAnalysis = handleRunRootCauseAnalysis;
4
+ const api_client_1 = require("../api-client");
5
+ const formatters_1 = require("../formatters");
6
+ async function handleRunRootCauseAnalysis(args, context) {
7
+ try {
8
+ if (!args.incident_id && !args.service_id) {
9
+ return { content: [{ type: "text", text: "Please provide either incident_id or service_id." }] };
10
+ }
11
+ // Check if RCA already exists for this incident
12
+ if (args.incident_id) {
13
+ try {
14
+ const existing = await api_client_1.apiClient.get(`/rca/incident/${args.incident_id}`, undefined, undefined, context?.authToken);
15
+ if (existing && (Array.isArray(existing) ? existing.length > 0 : existing.id)) {
16
+ const rca = Array.isArray(existing) ? existing[0] : existing;
17
+ return { content: [{ type: "text", text: "[CACHED] Existing RCA found:\n\n" + (0, formatters_1.formatRca)(rca) }] };
18
+ }
19
+ }
20
+ catch {
21
+ // No existing RCA, proceed to generate
22
+ }
23
+ }
24
+ const body = {
25
+ language: args.language || "es",
26
+ tier: args.tier || "standard",
27
+ };
28
+ if (args.incident_id)
29
+ body.incidentId = args.incident_id;
30
+ if (args.service_id)
31
+ body.serviceId = args.service_id;
32
+ const rca = await api_client_1.apiClient.post("/rca/analyze", body, 300000, context?.authToken);
33
+ return { content: [{ type: "text", text: "[NEW] RCA generated:\n\n" + (0, formatters_1.formatRca)(rca) }] };
34
+ }
35
+ catch (err) {
36
+ const message = err instanceof api_client_1.ApiError ? err.message : err.message;
37
+ return { content: [{ type: "text", text: `Error: ${message}` }], isError: true };
38
+ }
39
+ }
40
+ //# sourceMappingURL=run-root-cause-analysis.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-root-cause-analysis.js","sourceRoot":"","sources":["../../src/tools/run-root-cause-analysis.ts"],"names":[],"mappings":";;AAIA,gEAsCC;AA1CD,8CAAoD;AACpD,8CAA0C;AAGnC,KAAK,UAAU,0BAA0B,CAAC,IAKhD,EAAE,OAAgC;IACjC,IAAI,CAAC;QACH,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YAC1C,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,kDAAkD,EAAE,CAAC,EAAE,CAAC;QAC5G,CAAC;QAED,gDAAgD;QAChD,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,MAAM,sBAAS,CAAC,GAAG,CAAC,iBAAiB,IAAI,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;gBACpH,IAAI,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;oBAC9E,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;oBAC7D,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,kCAAkC,GAAG,IAAA,sBAAS,EAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;gBAC7G,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,uCAAuC;YACzC,CAAC;QACH,CAAC;QAED,MAAM,IAAI,GAAQ;YAChB,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,IAAI;YAC/B,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,UAAU;SAC9B,CAAC;QACF,IAAI,IAAI,CAAC,WAAW;YAAE,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC;QACzD,IAAI,IAAI,CAAC,UAAU;YAAE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC;QAEtD,MAAM,GAAG,GAAG,MAAM,sBAAS,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;QAEnF,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,0BAA0B,GAAG,IAAA,sBAAS,EAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;IACrG,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,OAAO,GAAG,GAAG,YAAY,qBAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAE,GAAa,CAAC,OAAO,CAAC;QAC/E,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,UAAU,OAAO,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC5F,CAAC;AACH,CAAC"}