@drumbeats/mcp 0.1.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 (120) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +130 -0
  3. package/dist/api/client.d.ts +47 -0
  4. package/dist/api/client.d.ts.map +1 -0
  5. package/dist/api/client.js +57 -0
  6. package/dist/api/client.js.map +1 -0
  7. package/dist/api/errors.d.ts +14 -0
  8. package/dist/api/errors.d.ts.map +1 -0
  9. package/dist/api/errors.js +59 -0
  10. package/dist/api/errors.js.map +1 -0
  11. package/dist/api/schemas.d.ts +14 -0
  12. package/dist/api/schemas.d.ts.map +1 -0
  13. package/dist/api/schemas.js +13 -0
  14. package/dist/api/schemas.js.map +1 -0
  15. package/dist/auth/resource-metadata.d.ts +22 -0
  16. package/dist/auth/resource-metadata.d.ts.map +1 -0
  17. package/dist/auth/resource-metadata.js +18 -0
  18. package/dist/auth/resource-metadata.js.map +1 -0
  19. package/dist/auth/scope-map.d.ts +20 -0
  20. package/dist/auth/scope-map.d.ts.map +1 -0
  21. package/dist/auth/scope-map.js +32 -0
  22. package/dist/auth/scope-map.js.map +1 -0
  23. package/dist/auth/verify-token.d.ts +29 -0
  24. package/dist/auth/verify-token.d.ts.map +1 -0
  25. package/dist/auth/verify-token.js +23 -0
  26. package/dist/auth/verify-token.js.map +1 -0
  27. package/dist/config.d.ts +16 -0
  28. package/dist/config.d.ts.map +1 -0
  29. package/dist/config.js +32 -0
  30. package/dist/config.js.map +1 -0
  31. package/dist/server-http.d.ts +2 -0
  32. package/dist/server-http.d.ts.map +1 -0
  33. package/dist/server-http.js +83 -0
  34. package/dist/server-http.js.map +1 -0
  35. package/dist/stdio.d.ts +3 -0
  36. package/dist/stdio.d.ts.map +1 -0
  37. package/dist/stdio.js +35 -0
  38. package/dist/stdio.js.map +1 -0
  39. package/dist/tools/context/list-projects.d.ts +21 -0
  40. package/dist/tools/context/list-projects.d.ts.map +1 -0
  41. package/dist/tools/context/list-projects.js +73 -0
  42. package/dist/tools/context/list-projects.js.map +1 -0
  43. package/dist/tools/diagnostics/check-dns.d.ts +13 -0
  44. package/dist/tools/diagnostics/check-dns.d.ts.map +1 -0
  45. package/dist/tools/diagnostics/check-dns.js +25 -0
  46. package/dist/tools/diagnostics/check-dns.js.map +1 -0
  47. package/dist/tools/diagnostics/check-http.d.ts +20 -0
  48. package/dist/tools/diagnostics/check-http.d.ts.map +1 -0
  49. package/dist/tools/diagnostics/check-http.js +30 -0
  50. package/dist/tools/diagnostics/check-http.js.map +1 -0
  51. package/dist/tools/diagnostics/check-ssl.d.ts +15 -0
  52. package/dist/tools/diagnostics/check-ssl.d.ts.map +1 -0
  53. package/dist/tools/diagnostics/check-ssl.js +26 -0
  54. package/dist/tools/diagnostics/check-ssl.js.map +1 -0
  55. package/dist/tools/incidents/list-incidents.d.ts +25 -0
  56. package/dist/tools/incidents/list-incidents.d.ts.map +1 -0
  57. package/dist/tools/incidents/list-incidents.js +39 -0
  58. package/dist/tools/incidents/list-incidents.js.map +1 -0
  59. package/dist/tools/incidents/manage-incident.d.ts +19 -0
  60. package/dist/tools/incidents/manage-incident.d.ts.map +1 -0
  61. package/dist/tools/incidents/manage-incident.js +30 -0
  62. package/dist/tools/incidents/manage-incident.js.map +1 -0
  63. package/dist/tools/incidents/shared.d.ts +25 -0
  64. package/dist/tools/incidents/shared.d.ts.map +1 -0
  65. package/dist/tools/incidents/shared.js +14 -0
  66. package/dist/tools/incidents/shared.js.map +1 -0
  67. package/dist/tools/index.d.ts +5 -0
  68. package/dist/tools/index.d.ts.map +1 -0
  69. package/dist/tools/index.js +45 -0
  70. package/dist/tools/index.js.map +1 -0
  71. package/dist/tools/monitors/create-monitor.d.ts +46 -0
  72. package/dist/tools/monitors/create-monitor.d.ts.map +1 -0
  73. package/dist/tools/monitors/create-monitor.js +98 -0
  74. package/dist/tools/monitors/create-monitor.js.map +1 -0
  75. package/dist/tools/monitors/get-monitor-history.d.ts +29 -0
  76. package/dist/tools/monitors/get-monitor-history.d.ts.map +1 -0
  77. package/dist/tools/monitors/get-monitor-history.js +68 -0
  78. package/dist/tools/monitors/get-monitor-history.js.map +1 -0
  79. package/dist/tools/monitors/get-monitor.d.ts +13 -0
  80. package/dist/tools/monitors/get-monitor.d.ts.map +1 -0
  81. package/dist/tools/monitors/get-monitor.js +23 -0
  82. package/dist/tools/monitors/get-monitor.js.map +1 -0
  83. package/dist/tools/monitors/list-monitors.d.ts +13 -0
  84. package/dist/tools/monitors/list-monitors.d.ts.map +1 -0
  85. package/dist/tools/monitors/list-monitors.js +29 -0
  86. package/dist/tools/monitors/list-monitors.js.map +1 -0
  87. package/dist/tools/monitors/pause-resume.d.ts +16 -0
  88. package/dist/tools/monitors/pause-resume.d.ts.map +1 -0
  89. package/dist/tools/monitors/pause-resume.js +41 -0
  90. package/dist/tools/monitors/pause-resume.js.map +1 -0
  91. package/dist/tools/monitors/shared.d.ts +40 -0
  92. package/dist/tools/monitors/shared.d.ts.map +1 -0
  93. package/dist/tools/monitors/shared.js +21 -0
  94. package/dist/tools/monitors/shared.js.map +1 -0
  95. package/dist/tools/monitors/update-monitor.d.ts +50 -0
  96. package/dist/tools/monitors/update-monitor.d.ts.map +1 -0
  97. package/dist/tools/monitors/update-monitor.js +75 -0
  98. package/dist/tools/monitors/update-monitor.js.map +1 -0
  99. package/dist/tools/result.d.ts +8 -0
  100. package/dist/tools/result.d.ts.map +1 -0
  101. package/dist/tools/result.js +13 -0
  102. package/dist/tools/result.js.map +1 -0
  103. package/dist/tools/types.d.ts +13 -0
  104. package/dist/tools/types.d.ts.map +1 -0
  105. package/dist/tools/types.js +2 -0
  106. package/dist/tools/types.js.map +1 -0
  107. package/dist/tools/uptime/get-uptime-summary.d.ts +15 -0
  108. package/dist/tools/uptime/get-uptime-summary.d.ts.map +1 -0
  109. package/dist/tools/uptime/get-uptime-summary.js +69 -0
  110. package/dist/tools/uptime/get-uptime-summary.js.map +1 -0
  111. package/dist/tools/validation.d.ts +5 -0
  112. package/dist/tools/validation.d.ts.map +1 -0
  113. package/dist/tools/validation.js +7 -0
  114. package/dist/tools/validation.js.map +1 -0
  115. package/dist/version.d.ts +3 -0
  116. package/dist/version.d.ts.map +1 -0
  117. package/dist/version.js +7 -0
  118. package/dist/version.js.map +1 -0
  119. package/manifest.json +35 -0
  120. package/package.json +64 -0
@@ -0,0 +1,39 @@
1
+ import { z } from 'zod';
2
+ import { toToolErrorResult } from '../../api/errors.js';
3
+ import { jsonResult } from '../result.js';
4
+ import { toIncidentSummary } from './shared.js';
5
+ const MAX_LIMIT = 200;
6
+ export const listIncidentsInputShape = {
7
+ project_id: z.string().min(1).describe('The project to list incidents for (from list_projects).'),
8
+ status: z.enum(['OPEN', 'ACKNOWLEDGED', 'RESOLVED']).optional().describe('Filter by incident status.'),
9
+ monitor_id: z.string().optional().describe('Filter to a single monitor.'),
10
+ page: z.number().int().positive().optional().describe('Page number (default 1).'),
11
+ limit: z.number().int().positive().max(MAX_LIMIT).optional().describe('Page size (max 200, default 20).'),
12
+ };
13
+ const DESCRIPTION = 'List incidents for a Drumbeats project (downtime / missed-run events), newest first and paginated. ' +
14
+ 'Requires a project_id from list_projects. Filter by status (OPEN, ACKNOWLEDGED, RESOLVED) or a single monitor.';
15
+ export async function listIncidents(ctx, args) {
16
+ try {
17
+ const result = await ctx.api.request({
18
+ path: '/v1/incidents',
19
+ query: {
20
+ project_id: args.project_id,
21
+ status: args.status,
22
+ monitor_id: args.monitor_id,
23
+ page: args.page,
24
+ limit: args.limit === undefined ? undefined : Math.min(args.limit, MAX_LIMIT),
25
+ },
26
+ });
27
+ return jsonResult({
28
+ incidents: (result.data ?? []).map(toIncidentSummary),
29
+ pagination: result.pagination ?? null,
30
+ });
31
+ }
32
+ catch (error) {
33
+ return toToolErrorResult(error);
34
+ }
35
+ }
36
+ export function registerListIncidents(server, ctx) {
37
+ server.registerTool('list_incidents', { title: 'List incidents', description: DESCRIPTION, inputSchema: listIncidentsInputShape }, (args) => listIncidents(ctx, args));
38
+ }
39
+ //# sourceMappingURL=list-incidents.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-incidents.js","sourceRoot":"","sources":["../../../src/tools/incidents/list-incidents.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAEzC,OAAO,EAAoB,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAEjE,MAAM,SAAS,GAAG,GAAG,CAAA;AAErB,MAAM,CAAC,MAAM,uBAAuB,GAAG;IACrC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,yDAAyD,CAAC;IACjG,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,cAAc,EAAE,UAAU,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4BAA4B,CAAC;IACtG,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;IACzE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;IACjF,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kCAAkC,CAAC;CAC1G,CAAA;AAUD,MAAM,WAAW,GACf,qGAAqG;IACrG,gHAAgH,CAAA;AAElH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,GAAgB,EAAE,IAAuB;IAC3E,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,OAAO,CAAiD;YACnF,IAAI,EAAE,eAAe;YACrB,KAAK,EAAE;gBACL,UAAU,EAAE,IAAI,CAAC,UAAU;gBAC3B,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,UAAU,EAAE,IAAI,CAAC,UAAU;gBAC3B,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,KAAK,EAAE,IAAI,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,CAAC;aAC9E;SACF,CAAC,CAAA;QACF,OAAO,UAAU,CAAC;YAChB,SAAS,EAAE,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,iBAAiB,CAAC;YACrD,UAAU,EAAE,MAAM,CAAC,UAAU,IAAI,IAAI;SACtC,CAAC,CAAA;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,iBAAiB,CAAC,KAAK,CAAC,CAAA;IACjC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,MAAiB,EAAE,GAAgB;IACvE,MAAM,CAAC,YAAY,CACjB,gBAAgB,EAChB,EAAE,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,uBAAuB,EAAE,EAC3F,CAAC,IAAI,EAAE,EAAE,CAAC,aAAa,CAAC,GAAG,EAAE,IAAI,CAAC,CACnC,CAAA;AACH,CAAC"}
@@ -0,0 +1,19 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import type { CallToolResult } from '@modelcontextprotocol/sdk/types.js';
3
+ import { z } from 'zod';
4
+ import type { ToolContext } from '../types.js';
5
+ export declare const manageIncidentInputShape: {
6
+ incident_id: z.ZodString;
7
+ action: z.ZodDefault<z.ZodEnum<{
8
+ get: "get";
9
+ acknowledge: "acknowledge";
10
+ resolve: "resolve";
11
+ }>>;
12
+ };
13
+ export type ManageIncidentArgs = {
14
+ incident_id: string;
15
+ action?: 'get' | 'acknowledge' | 'resolve';
16
+ };
17
+ export declare function manageIncident(ctx: ToolContext, args: ManageIncidentArgs): Promise<CallToolResult>;
18
+ export declare function registerManageIncident(server: McpServer, ctx: ToolContext): void;
19
+ //# sourceMappingURL=manage-incident.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manage-incident.d.ts","sourceRoot":"","sources":["../../../src/tools/incidents/manage-incident.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AACxE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAA;AACxE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAGvB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAG9C,eAAO,MAAM,wBAAwB;;;;;;;CAMpC,CAAA;AAED,MAAM,MAAM,kBAAkB,GAAG;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,KAAK,GAAG,aAAa,GAAG,SAAS,CAAA;CAAE,CAAA;AAKpG,wBAAsB,cAAc,CAAC,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,cAAc,CAAC,CAaxG;AAED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,GAAG,IAAI,CAMhF"}
@@ -0,0 +1,30 @@
1
+ import { z } from 'zod';
2
+ import { toToolErrorResult } from '../../api/errors.js';
3
+ import { jsonResult } from '../result.js';
4
+ import { toIncidentSummary } from './shared.js';
5
+ export const manageIncidentInputShape = {
6
+ incident_id: z.string().min(1).describe('The incident id (from list_incidents).'),
7
+ action: z
8
+ .enum(['get', 'acknowledge', 'resolve'])
9
+ .default('get')
10
+ .describe('get = fetch incident details; acknowledge = mark it as being worked on; resolve = close it.'),
11
+ };
12
+ const DESCRIPTION = 'Triage a Drumbeats incident: get its details, acknowledge it, or resolve it. One tool with an "action" argument.';
13
+ export async function manageIncident(ctx, args) {
14
+ const action = args.action ?? 'get';
15
+ const base = `/v1/incidents/${encodeURIComponent(args.incident_id)}`;
16
+ try {
17
+ const body = action === 'get'
18
+ ? await ctx.api.request({ path: base })
19
+ : await ctx.api.request({ method: 'POST', path: `${base}/${action}` });
20
+ const incident = body.incident ?? body;
21
+ return jsonResult({ action, incident: toIncidentSummary(incident) });
22
+ }
23
+ catch (error) {
24
+ return toToolErrorResult(error);
25
+ }
26
+ }
27
+ export function registerManageIncident(server, ctx) {
28
+ server.registerTool('manage_incident', { title: 'Manage incident', description: DESCRIPTION, inputSchema: manageIncidentInputShape }, (args) => manageIncident(ctx, args));
29
+ }
30
+ //# sourceMappingURL=manage-incident.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manage-incident.js","sourceRoot":"","sources":["../../../src/tools/incidents/manage-incident.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAEzC,OAAO,EAAoB,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAEjE,MAAM,CAAC,MAAM,wBAAwB,GAAG;IACtC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,wCAAwC,CAAC;IACjF,MAAM,EAAE,CAAC;SACN,IAAI,CAAC,CAAC,KAAK,EAAE,aAAa,EAAE,SAAS,CAAC,CAAC;SACvC,OAAO,CAAC,KAAK,CAAC;SACd,QAAQ,CAAC,6FAA6F,CAAC;CAC3G,CAAA;AAID,MAAM,WAAW,GACf,kHAAkH,CAAA;AAEpH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,GAAgB,EAAE,IAAwB;IAC7E,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,KAAK,CAAA;IACnC,MAAM,IAAI,GAAG,iBAAiB,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAA;IACpE,IAAI,CAAC;QACH,MAAM,IAAI,GACR,MAAM,KAAK,KAAK;YACd,CAAC,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,OAAO,CAA6B,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;YACnE,CAAC,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,OAAO,CAA6B,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,IAAI,MAAM,EAAE,EAAE,CAAC,CAAA;QACtG,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAK,IAA+B,CAAA;QAClE,OAAO,UAAU,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,iBAAiB,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;IACtE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,iBAAiB,CAAC,KAAK,CAAC,CAAA;IACjC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,MAAiB,EAAE,GAAgB;IACxE,MAAM,CAAC,YAAY,CACjB,iBAAiB,EACjB,EAAE,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,wBAAwB,EAAE,EAC7F,CAAC,IAAI,EAAE,EAAE,CAAC,cAAc,CAAC,GAAG,EAAE,IAAI,CAAC,CACpC,CAAA;AACH,CAAC"}
@@ -0,0 +1,25 @@
1
+ export interface RawIncident {
2
+ id: string;
3
+ monitor_id?: string | null;
4
+ project_id?: string | null;
5
+ event?: string | null;
6
+ status?: string | null;
7
+ started_at?: string | null;
8
+ acknowledged_at?: string | null;
9
+ resolved_at?: string | null;
10
+ reopened_at?: string | null;
11
+ }
12
+ /** Concise, model-facing incident view. */
13
+ export interface IncidentSummary {
14
+ id: string;
15
+ monitor_id: string | null;
16
+ project_id: string | null;
17
+ event: string | null;
18
+ status: string | null;
19
+ started_at: string | null;
20
+ acknowledged_at: string | null;
21
+ resolved_at: string | null;
22
+ reopened_at: string | null;
23
+ }
24
+ export declare function toIncidentSummary(incident: RawIncident): IncidentSummary;
25
+ //# sourceMappingURL=shared.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../../src/tools/incidents/shared.ts"],"names":[],"mappings":"AACA,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAA;IACV,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC/B,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAC5B;AAED,2CAA2C;AAC3C,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAA;IACV,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAA;IAC9B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;CAC3B;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,WAAW,GAAG,eAAe,CAYxE"}
@@ -0,0 +1,14 @@
1
+ export function toIncidentSummary(incident) {
2
+ return {
3
+ id: incident.id,
4
+ monitor_id: incident.monitor_id ?? null,
5
+ project_id: incident.project_id ?? null,
6
+ event: incident.event ?? null,
7
+ status: incident.status ?? null,
8
+ started_at: incident.started_at ?? null,
9
+ acknowledged_at: incident.acknowledged_at ?? null,
10
+ resolved_at: incident.resolved_at ?? null,
11
+ reopened_at: incident.reopened_at ?? null,
12
+ };
13
+ }
14
+ //# sourceMappingURL=shared.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared.js","sourceRoot":"","sources":["../../../src/tools/incidents/shared.ts"],"names":[],"mappings":"AA0BA,MAAM,UAAU,iBAAiB,CAAC,QAAqB;IACrD,OAAO;QACL,EAAE,EAAE,QAAQ,CAAC,EAAE;QACf,UAAU,EAAE,QAAQ,CAAC,UAAU,IAAI,IAAI;QACvC,UAAU,EAAE,QAAQ,CAAC,UAAU,IAAI,IAAI;QACvC,KAAK,EAAE,QAAQ,CAAC,KAAK,IAAI,IAAI;QAC7B,MAAM,EAAE,QAAQ,CAAC,MAAM,IAAI,IAAI;QAC/B,UAAU,EAAE,QAAQ,CAAC,UAAU,IAAI,IAAI;QACvC,eAAe,EAAE,QAAQ,CAAC,eAAe,IAAI,IAAI;QACjD,WAAW,EAAE,QAAQ,CAAC,WAAW,IAAI,IAAI;QACzC,WAAW,EAAE,QAAQ,CAAC,WAAW,IAAI,IAAI;KAC1C,CAAA;AACH,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import type { ToolContext } from './types.js';
3
+ /** Registers every tool against the given MCP server using `ctx`. */
4
+ export declare function registerTools(server: McpServer, ctx: ToolContext): void;
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AAaxE,OAAO,KAAK,EAAE,WAAW,EAAoB,MAAM,YAAY,CAAA;AA6B/D,qEAAqE;AACrE,wBAAgB,aAAa,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,GAAG,IAAI,CAIvE"}
@@ -0,0 +1,45 @@
1
+ import { registerListProjects } from './context/list-projects.js';
2
+ import { registerCheckDns } from './diagnostics/check-dns.js';
3
+ import { registerCheckHttp } from './diagnostics/check-http.js';
4
+ import { registerCheckSsl } from './diagnostics/check-ssl.js';
5
+ import { registerListIncidents } from './incidents/list-incidents.js';
6
+ import { registerManageIncident } from './incidents/manage-incident.js';
7
+ import { registerCreateMonitor } from './monitors/create-monitor.js';
8
+ import { registerGetMonitor } from './monitors/get-monitor.js';
9
+ import { registerGetMonitorHistory } from './monitors/get-monitor-history.js';
10
+ import { registerListMonitors } from './monitors/list-monitors.js';
11
+ import { registerPauseMonitor, registerResumeMonitor } from './monitors/pause-resume.js';
12
+ import { registerUpdateMonitor } from './monitors/update-monitor.js';
13
+ import { registerGetUptimeSummary } from './uptime/get-uptime-summary.js';
14
+ /**
15
+ * The shared tool layer — the single registration point consumed by both
16
+ * transports (one definition, two transports). Add a tool by appending its
17
+ * registration function here.
18
+ */
19
+ const registry = [
20
+ // Context
21
+ registerListProjects,
22
+ // Monitor lifecycle
23
+ registerCreateMonitor,
24
+ registerListMonitors,
25
+ registerGetMonitor,
26
+ registerUpdateMonitor,
27
+ registerPauseMonitor,
28
+ registerResumeMonitor,
29
+ // Observation & triage
30
+ registerGetMonitorHistory,
31
+ registerGetUptimeSummary,
32
+ registerListIncidents,
33
+ registerManageIncident,
34
+ // Diagnostics (no account required)
35
+ registerCheckHttp,
36
+ registerCheckSsl,
37
+ registerCheckDns,
38
+ ];
39
+ /** Registers every tool against the given MCP server using `ctx`. */
40
+ export function registerTools(server, ctx) {
41
+ for (const register of registry) {
42
+ register(server, ctx);
43
+ }
44
+ }
45
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAA;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAA;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAA;AAC/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAA;AAC7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAA;AACrE,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAA;AACvE,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAA;AACpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAA;AAC9D,OAAO,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAA;AAC7E,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAClE,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAA;AACxF,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAA;AAEpE,OAAO,EAAE,wBAAwB,EAAE,MAAM,gCAAgC,CAAA;AAEzE;;;;GAIG;AACH,MAAM,QAAQ,GAAgC;IAC5C,UAAU;IACV,oBAAoB;IACpB,oBAAoB;IACpB,qBAAqB;IACrB,oBAAoB;IACpB,kBAAkB;IAClB,qBAAqB;IACrB,oBAAoB;IACpB,qBAAqB;IACrB,uBAAuB;IACvB,yBAAyB;IACzB,wBAAwB;IACxB,qBAAqB;IACrB,sBAAsB;IACtB,oCAAoC;IACpC,iBAAiB;IACjB,gBAAgB;IAChB,gBAAgB;CACjB,CAAA;AAED,qEAAqE;AACrE,MAAM,UAAU,aAAa,CAAC,MAAiB,EAAE,GAAgB;IAC/D,KAAK,MAAM,QAAQ,IAAI,QAAQ,EAAE,CAAC;QAChC,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IACvB,CAAC;AACH,CAAC"}
@@ -0,0 +1,46 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import type { CallToolResult } from '@modelcontextprotocol/sdk/types.js';
3
+ import { z } from 'zod';
4
+ import type { ToolContext } from '../types.js';
5
+ export declare const createMonitorInputShape: {
6
+ uptime_method: z.ZodOptional<z.ZodEnum<{
7
+ GET: "GET";
8
+ POST: "POST";
9
+ HEAD: "HEAD";
10
+ }>>;
11
+ uptime_expected_status: z.ZodOptional<z.ZodArray<z.ZodNumber>>;
12
+ uptime_keyword: z.ZodOptional<z.ZodNullable<z.ZodString>>;
13
+ uptime_keyword_absent: z.ZodOptional<z.ZodBoolean>;
14
+ uptime_headers: z.ZodOptional<z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodString>>>;
15
+ uptime_timeout_ms: z.ZodOptional<z.ZodNumber>;
16
+ uptime_follow_redirects: z.ZodOptional<z.ZodBoolean>;
17
+ uptime_request_body: z.ZodOptional<z.ZodNullable<z.ZodString>>;
18
+ uptime_verify_ssl: z.ZodOptional<z.ZodBoolean>;
19
+ type: z.ZodEnum<{
20
+ JOB_BASIC: "JOB_BASIC";
21
+ JOB_CRON: "JOB_CRON";
22
+ JOB_HEARTBEAT: "JOB_HEARTBEAT";
23
+ UPTIME_HTTP: "UPTIME_HTTP";
24
+ }>;
25
+ uptime_url: z.ZodOptional<z.ZodString>;
26
+ project_id: z.ZodString;
27
+ name: z.ZodString;
28
+ schedule: z.ZodString;
29
+ slug: z.ZodOptional<z.ZodString>;
30
+ description: z.ZodOptional<z.ZodString>;
31
+ tags: z.ZodOptional<z.ZodArray<z.ZodString>>;
32
+ timezone: z.ZodOptional<z.ZodString>;
33
+ grace_period_seconds: z.ZodOptional<z.ZodNumber>;
34
+ schedule_tolerance: z.ZodOptional<z.ZodNumber>;
35
+ failure_tolerance: z.ZodOptional<z.ZodNumber>;
36
+ min_duration_seconds: z.ZodOptional<z.ZodNumber>;
37
+ max_duration_seconds: z.ZodOptional<z.ZodNumber>;
38
+ alert_surge_threshold: z.ZodOptional<z.ZodNumber>;
39
+ alert_enabled: z.ZodOptional<z.ZodBoolean>;
40
+ retention_count: z.ZodOptional<z.ZodNumber>;
41
+ notification_group_ids: z.ZodOptional<z.ZodArray<z.ZodString>>;
42
+ notification_channel_ids: z.ZodOptional<z.ZodArray<z.ZodString>>;
43
+ };
44
+ export declare function createMonitor(ctx: ToolContext, args: unknown): Promise<CallToolResult>;
45
+ export declare function registerCreateMonitor(server: McpServer, ctx: ToolContext): void;
46
+ //# sourceMappingURL=create-monitor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-monitor.d.ts","sourceRoot":"","sources":["../../../src/tools/monitors/create-monitor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AACxE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAA;AACxE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAGvB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAgD9C,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAKnC,CAAA;AA+BD,wBAAsB,aAAa,CAAC,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,cAAc,CAAC,CAgB5F;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,GAAG,IAAI,CAM/E"}
@@ -0,0 +1,98 @@
1
+ import { z } from 'zod';
2
+ import { toToolErrorResult } from '../../api/errors.js';
3
+ import { jsonResult } from '../result.js';
4
+ import { zodErrorResult } from '../validation.js';
5
+ import { toMonitorSummary } from './shared.js';
6
+ const UUID_RE = /^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/;
7
+ const uuid = () => z.string().regex(UUID_RE, 'must be a UUID');
8
+ const httpUrl = z.string().refine((value) => URL.canParse(value), { message: 'must be a valid URL' });
9
+ // Fields common to every monitor type.
10
+ const commonFields = {
11
+ project_id: uuid(),
12
+ name: z.string().min(1).max(100),
13
+ schedule: z.string().min(1),
14
+ slug: z
15
+ .string()
16
+ .regex(/^[a-z0-9-]+$/, 'lowercase letters, numbers, and hyphens only')
17
+ .max(50)
18
+ .optional(),
19
+ description: z.string().max(500).optional(),
20
+ tags: z.array(z.string().max(50)).max(10).optional(),
21
+ timezone: z.string().optional(),
22
+ grace_period_seconds: z.number().int().min(0).optional(),
23
+ schedule_tolerance: z.number().int().min(1).optional(),
24
+ failure_tolerance: z.number().int().min(1).optional(),
25
+ min_duration_seconds: z.number().int().min(1).optional(),
26
+ max_duration_seconds: z.number().int().min(1).optional(),
27
+ alert_surge_threshold: z.number().int().min(1).optional(),
28
+ alert_enabled: z.boolean().optional(),
29
+ retention_count: z.number().int().min(10).max(1000).optional(),
30
+ notification_group_ids: z.array(uuid()).optional(),
31
+ notification_channel_ids: z.array(uuid()).optional(),
32
+ };
33
+ // Uptime-only fields (besides the required uptime_url). Valid only for UPTIME_HTTP.
34
+ const uptimeOptionalFields = {
35
+ uptime_method: z.enum(['GET', 'HEAD', 'POST']).optional(),
36
+ uptime_expected_status: z.array(z.number().int().min(100).max(599)).optional(),
37
+ uptime_keyword: z.string().max(1024).nullable().optional(),
38
+ uptime_keyword_absent: z.boolean().optional(),
39
+ uptime_headers: z.record(z.string(), z.string()).nullable().optional(),
40
+ uptime_timeout_ms: z.number().int().min(1000).max(30000).optional(),
41
+ uptime_follow_redirects: z.boolean().optional(),
42
+ uptime_request_body: z.string().max(10000).nullable().optional(),
43
+ uptime_verify_ssl: z.boolean().optional(),
44
+ };
45
+ // Flat shape advertised to clients. The cross-field rules (uptime_* only for
46
+ // UPTIME_HTTP, uptime_url required there) are enforced by the validator below.
47
+ export const createMonitorInputShape = {
48
+ ...commonFields,
49
+ type: z.enum(['JOB_BASIC', 'JOB_CRON', 'JOB_HEARTBEAT', 'UPTIME_HTTP']),
50
+ uptime_url: httpUrl.optional(),
51
+ ...uptimeOptionalFields,
52
+ };
53
+ // Strict, type-discriminated validator: job types reject any uptime_* field,
54
+ // and UPTIME_HTTP requires uptime_url. An invalid combination is rejected here
55
+ // with a clear message rather than reaching the API as a raw 400.
56
+ const jobMember = (type) => z.object({ ...commonFields, type: z.literal(type) }).strict();
57
+ const uptimeMember = z
58
+ .object({ ...commonFields, type: z.literal('UPTIME_HTTP'), uptime_url: httpUrl, ...uptimeOptionalFields })
59
+ .strict();
60
+ const createMonitorValidator = z.discriminatedUnion('type', [
61
+ jobMember('JOB_BASIC'),
62
+ jobMember('JOB_CRON'),
63
+ jobMember('JOB_HEARTBEAT'),
64
+ uptimeMember,
65
+ ]);
66
+ const DESCRIPTION = [
67
+ 'Create a Drumbeats monitor. One tool for all four types, chosen via "type":',
68
+ '- JOB_CRON: a job that should run on a cron schedule (schedule = cron expression).',
69
+ '- JOB_BASIC: a job expected on a fixed interval (schedule = interval, e.g. "5m").',
70
+ '- JOB_HEARTBEAT: a passive endpoint your job pings (schedule = expected interval).',
71
+ '- UPTIME_HTTP: Drumbeats polls a URL (schedule = poll interval; requires uptime_url).',
72
+ 'All uptime_* fields are only valid when type is UPTIME_HTTP.',
73
+ 'Wire alerts at create time with notification_channel_ids / notification_group_ids',
74
+ '(UUIDs discoverable via list_projects include=channels,groups).',
75
+ 'Notification channel types: EMAIL, SLACK, TELEGRAM, DISCORD, WEBHOOK, PAGERDUTY, SMS, PUSH.',
76
+ ].join('\n');
77
+ export async function createMonitor(ctx, args) {
78
+ const parsed = createMonitorValidator.safeParse(args);
79
+ if (!parsed.success) {
80
+ return zodErrorResult('create_monitor', parsed.error);
81
+ }
82
+ try {
83
+ const body = await ctx.api.request({
84
+ method: 'POST',
85
+ path: '/v1/monitors',
86
+ body: parsed.data,
87
+ });
88
+ const monitor = body.monitor ?? body;
89
+ return jsonResult({ monitor: toMonitorSummary(monitor) });
90
+ }
91
+ catch (error) {
92
+ return toToolErrorResult(error);
93
+ }
94
+ }
95
+ export function registerCreateMonitor(server, ctx) {
96
+ server.registerTool('create_monitor', { title: 'Create monitor', description: DESCRIPTION, inputSchema: createMonitorInputShape }, (args) => createMonitor(ctx, args));
97
+ }
98
+ //# sourceMappingURL=create-monitor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-monitor.js","sourceRoot":"","sources":["../../../src/tools/monitors/create-monitor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import type { CallToolResult } from '@modelcontextprotocol/sdk/types.js';
3
+ import { z } from 'zod';
4
+ import type { ToolContext } from '../types.js';
5
+ declare const KINDS: readonly ["pings", "warnings", "checks", "response_times"];
6
+ type HistoryKind = (typeof KINDS)[number];
7
+ export declare const getMonitorHistoryInputShape: {
8
+ monitor_id: z.ZodString;
9
+ kind: z.ZodDefault<z.ZodEnum<{
10
+ checks: "checks";
11
+ pings: "pings";
12
+ warnings: "warnings";
13
+ response_times: "response_times";
14
+ }>>;
15
+ page: z.ZodOptional<z.ZodNumber>;
16
+ limit: z.ZodOptional<z.ZodNumber>;
17
+ period_hours: z.ZodOptional<z.ZodNumber>;
18
+ };
19
+ export type GetMonitorHistoryArgs = {
20
+ monitor_id: string;
21
+ kind?: HistoryKind;
22
+ page?: number;
23
+ limit?: number;
24
+ period_hours?: number;
25
+ };
26
+ export declare function getMonitorHistory(ctx: ToolContext, args: GetMonitorHistoryArgs): Promise<CallToolResult>;
27
+ export declare function registerGetMonitorHistory(server: McpServer, ctx: ToolContext): void;
28
+ export {};
29
+ //# sourceMappingURL=get-monitor-history.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-monitor-history.d.ts","sourceRoot":"","sources":["../../../src/tools/monitors/get-monitor-history.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AACxE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAA;AACxE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAGvB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAE9C,QAAA,MAAM,KAAK,4DAA6D,CAAA;AACxE,KAAK,WAAW,GAAG,CAAC,OAAO,KAAK,CAAC,CAAC,MAAM,CAAC,CAAA;AAIzC,eAAO,MAAM,2BAA2B;;;;;;;;;;;CAwBvC,CAAA;AAED,MAAM,MAAM,qBAAqB,GAAG;IAClC,UAAU,EAAE,MAAM,CAAA;IAClB,IAAI,CAAC,EAAE,WAAW,CAAA;IAClB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB,CAAA;AAMD,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,qBAAqB,GAAG,OAAO,CAAC,cAAc,CAAC,CAgC9G;AAED,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,GAAG,IAAI,CAMnF"}
@@ -0,0 +1,68 @@
1
+ import { z } from 'zod';
2
+ import { toToolErrorResult } from '../../api/errors.js';
3
+ import { jsonResult } from '../result.js';
4
+ const KINDS = ['pings', 'warnings', 'checks', 'response_times'];
5
+ const MAX_PING_LIMIT = 100;
6
+ export const getMonitorHistoryInputShape = {
7
+ monitor_id: z.string().min(1).describe('The monitor id (from list_monitors).'),
8
+ kind: z
9
+ .enum(KINDS)
10
+ .default('pings')
11
+ .describe('Which history to fetch: pings (job check-ins, paginated), warnings (JOB_BASIC ping-hygiene issues), ' +
12
+ 'checks (latest uptime check result), response_times (uptime response-time statistics).'),
13
+ page: z.number().int().positive().optional().describe('Page number for kind=pings (default 1).'),
14
+ limit: z
15
+ .number()
16
+ .int()
17
+ .positive()
18
+ .max(MAX_PING_LIMIT)
19
+ .optional()
20
+ .describe('Page size for kind=pings (max 100, default 20).'),
21
+ period_hours: z
22
+ .number()
23
+ .int()
24
+ .positive()
25
+ .max(720)
26
+ .optional()
27
+ .describe('Look-back window in hours for kind=response_times (default 24).'),
28
+ };
29
+ const DESCRIPTION = 'Fetch a monitor\'s recent history. One tool with a "kind" argument: pings | warnings | checks | ' +
30
+ 'response_times. Defaults to pings. Use it to answer "what happened with this monitor lately?".';
31
+ export async function getMonitorHistory(ctx, args) {
32
+ const kind = args.kind ?? 'pings';
33
+ const base = `/v1/monitors/${encodeURIComponent(args.monitor_id)}`;
34
+ try {
35
+ let data;
36
+ switch (kind) {
37
+ case 'pings':
38
+ data = await ctx.api.request({
39
+ path: `${base}/pings`,
40
+ query: {
41
+ page: args.page,
42
+ limit: args.limit === undefined ? undefined : Math.min(args.limit, MAX_PING_LIMIT),
43
+ },
44
+ });
45
+ break;
46
+ case 'warnings':
47
+ data = await ctx.api.request({ path: `${base}/warnings` });
48
+ break;
49
+ case 'checks':
50
+ data = await ctx.api.request({ path: `${base}/check-results/latest` });
51
+ break;
52
+ case 'response_times':
53
+ data = await ctx.api.request({
54
+ path: `${base}/response-time-stats`,
55
+ query: { period_hours: args.period_hours },
56
+ });
57
+ break;
58
+ }
59
+ return jsonResult({ monitor_id: args.monitor_id, kind, data });
60
+ }
61
+ catch (error) {
62
+ return toToolErrorResult(error);
63
+ }
64
+ }
65
+ export function registerGetMonitorHistory(server, ctx) {
66
+ server.registerTool('get_monitor_history', { title: 'Get monitor history', description: DESCRIPTION, inputSchema: getMonitorHistoryInputShape }, (args) => getMonitorHistory(ctx, args));
67
+ }
68
+ //# sourceMappingURL=get-monitor-history.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-monitor-history.js","sourceRoot":"","sources":["../../../src/tools/monitors/get-monitor-history.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import type { CallToolResult } from '@modelcontextprotocol/sdk/types.js';
3
+ import { z } from 'zod';
4
+ import type { ToolContext } from '../types.js';
5
+ export declare const getMonitorInputShape: {
6
+ monitor_id: z.ZodString;
7
+ };
8
+ export type GetMonitorArgs = {
9
+ monitor_id: string;
10
+ };
11
+ export declare function getMonitor(ctx: ToolContext, args: GetMonitorArgs): Promise<CallToolResult>;
12
+ export declare function registerGetMonitor(server: McpServer, ctx: ToolContext): void;
13
+ //# sourceMappingURL=get-monitor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-monitor.d.ts","sourceRoot":"","sources":["../../../src/tools/monitors/get-monitor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AACxE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAA;AACxE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAGvB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAG9C,eAAO,MAAM,oBAAoB;;CAEhC,CAAA;AAED,MAAM,MAAM,cAAc,GAAG;IAAE,UAAU,EAAE,MAAM,CAAA;CAAE,CAAA;AAInD,wBAAsB,UAAU,CAAC,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC,CAShG;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,GAAG,IAAI,CAM5E"}
@@ -0,0 +1,23 @@
1
+ import { z } from 'zod';
2
+ import { toToolErrorResult } from '../../api/errors.js';
3
+ import { jsonResult } from '../result.js';
4
+ import { toMonitorSummary } from './shared.js';
5
+ export const getMonitorInputShape = {
6
+ monitor_id: z.string().min(1).describe('The monitor id (from list_monitors).'),
7
+ };
8
+ const DESCRIPTION = 'Get a single Drumbeats monitor by id, including its type, status, schedule, and alerting metadata.';
9
+ export async function getMonitor(ctx, args) {
10
+ try {
11
+ const { monitor } = await ctx.api.request({
12
+ path: `/v1/monitors/${encodeURIComponent(args.monitor_id)}`,
13
+ });
14
+ return jsonResult({ monitor: toMonitorSummary(monitor) });
15
+ }
16
+ catch (error) {
17
+ return toToolErrorResult(error);
18
+ }
19
+ }
20
+ export function registerGetMonitor(server, ctx) {
21
+ server.registerTool('get_monitor', { title: 'Get monitor', description: DESCRIPTION, inputSchema: getMonitorInputShape }, (args) => getMonitor(ctx, args));
22
+ }
23
+ //# sourceMappingURL=get-monitor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-monitor.js","sourceRoot":"","sources":["../../../src/tools/monitors/get-monitor.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAEzC,OAAO,EAAmB,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAE/D,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,sCAAsC,CAAC;CAC/E,CAAA;AAID,MAAM,WAAW,GAAG,oGAAoG,CAAA;AAExH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,GAAgB,EAAE,IAAoB;IACrE,IAAI,CAAC;QACH,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,OAAO,CAA0B;YACjE,IAAI,EAAE,gBAAgB,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;SAC5D,CAAC,CAAA;QACF,OAAO,UAAU,CAAC,EAAE,OAAO,EAAE,gBAAgB,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;IAC3D,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,iBAAiB,CAAC,KAAK,CAAC,CAAA;IACjC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,MAAiB,EAAE,GAAgB;IACpE,MAAM,CAAC,YAAY,CACjB,aAAa,EACb,EAAE,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,oBAAoB,EAAE,EACrF,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,CAChC,CAAA;AACH,CAAC"}
@@ -0,0 +1,13 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import type { CallToolResult } from '@modelcontextprotocol/sdk/types.js';
3
+ import { z } from 'zod';
4
+ import type { ToolContext } from '../types.js';
5
+ export declare const listMonitorsInputShape: {
6
+ project_id: z.ZodString;
7
+ };
8
+ export type ListMonitorsArgs = {
9
+ project_id: string;
10
+ };
11
+ export declare function listMonitors(ctx: ToolContext, args: ListMonitorsArgs): Promise<CallToolResult>;
12
+ export declare function registerListMonitors(server: McpServer, ctx: ToolContext): void;
13
+ //# sourceMappingURL=list-monitors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-monitors.d.ts","sourceRoot":"","sources":["../../../src/tools/monitors/list-monitors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AACxE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAA;AACxE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAGvB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAG9C,eAAO,MAAM,sBAAsB;;CAOlC,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG;IAAE,UAAU,EAAE,MAAM,CAAA;CAAE,CAAA;AAOrD,wBAAsB,YAAY,CAAC,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,cAAc,CAAC,CAUpG;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,GAAG,IAAI,CAM9E"}
@@ -0,0 +1,29 @@
1
+ import { z } from 'zod';
2
+ import { toToolErrorResult } from '../../api/errors.js';
3
+ import { jsonResult } from '../result.js';
4
+ import { toMonitorSummary } from './shared.js';
5
+ export const listMonitorsInputShape = {
6
+ project_id: z
7
+ .string()
8
+ .min(1)
9
+ .describe('The project to list monitors for. Obtain the id from list_projects (an account key spans many projects).'),
10
+ };
11
+ const DESCRIPTION = 'List all monitors in a Drumbeats project (jobs and uptime checks), with their type, status, and ' +
12
+ 'schedule metadata. Requires a project_id from list_projects. Use it to find a monitor id before ' +
13
+ 'fetching details, history, or incidents.';
14
+ export async function listMonitors(ctx, args) {
15
+ try {
16
+ const { monitors } = await ctx.api.request({
17
+ path: '/v1/monitors',
18
+ query: { project_id: args.project_id },
19
+ });
20
+ return jsonResult({ monitors: (monitors ?? []).map(toMonitorSummary) });
21
+ }
22
+ catch (error) {
23
+ return toToolErrorResult(error);
24
+ }
25
+ }
26
+ export function registerListMonitors(server, ctx) {
27
+ server.registerTool('list_monitors', { title: 'List monitors', description: DESCRIPTION, inputSchema: listMonitorsInputShape }, (args) => listMonitors(ctx, args));
28
+ }
29
+ //# sourceMappingURL=list-monitors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-monitors.js","sourceRoot":"","sources":["../../../src/tools/monitors/list-monitors.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAEzC,OAAO,EAAmB,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAE/D,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,UAAU,EAAE,CAAC;SACV,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,CACP,0GAA0G,CAC3G;CACJ,CAAA;AAID,MAAM,WAAW,GACf,kGAAkG;IAClG,kGAAkG;IAClG,0CAA0C,CAAA;AAE5C,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,GAAgB,EAAE,IAAsB;IACzE,IAAI,CAAC;QACH,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,OAAO,CAA6B;YACrE,IAAI,EAAE,cAAc;YACpB,KAAK,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE;SACvC,CAAC,CAAA;QACF,OAAO,UAAU,CAAC,EAAE,QAAQ,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAA;IACzE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,iBAAiB,CAAC,KAAK,CAAC,CAAA;IACjC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,MAAiB,EAAE,GAAgB;IACtE,MAAM,CAAC,YAAY,CACjB,eAAe,EACf,EAAE,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,sBAAsB,EAAE,EACzF,CAAC,IAAI,EAAE,EAAE,CAAC,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,CAClC,CAAA;AACH,CAAC"}
@@ -0,0 +1,16 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import type { CallToolResult } from '@modelcontextprotocol/sdk/types.js';
3
+ import { z } from 'zod';
4
+ import type { ToolContext } from '../types.js';
5
+ export declare const pauseResumeInputShape: {
6
+ monitor_id: z.ZodString;
7
+ };
8
+ type PauseResumeArgs = {
9
+ monitor_id: string;
10
+ };
11
+ export declare function pauseMonitor(ctx: ToolContext, args: PauseResumeArgs): Promise<CallToolResult>;
12
+ export declare function resumeMonitor(ctx: ToolContext, args: PauseResumeArgs): Promise<CallToolResult>;
13
+ export declare function registerPauseMonitor(server: McpServer, ctx: ToolContext): void;
14
+ export declare function registerResumeMonitor(server: McpServer, ctx: ToolContext): void;
15
+ export {};
16
+ //# sourceMappingURL=pause-resume.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pause-resume.d.ts","sourceRoot":"","sources":["../../../src/tools/monitors/pause-resume.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AACxE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAA;AACxE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAGvB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAG9C,eAAO,MAAM,qBAAqB;;CAEjC,CAAA;AAED,KAAK,eAAe,GAAG;IAAE,UAAU,EAAE,MAAM,CAAA;CAAE,CAAA;AAe7C,wBAAgB,YAAY,CAAC,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC,CAE7F;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC,CAE9F;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,GAAG,IAAI,CAU9E;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,GAAG,IAAI,CAU/E"}