@selfhost.dev/mcp-server 0.8.0 → 0.9.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 (44) hide show
  1. package/README.md +100 -13
  2. package/dist/index.js +19 -1
  3. package/dist/index.js.map +1 -1
  4. package/dist/tools/alerts.js +83 -12
  5. package/dist/tools/alerts.js.map +1 -1
  6. package/dist/tools/backups.js +184 -16
  7. package/dist/tools/backups.js.map +1 -1
  8. package/dist/tools/billing.js +5 -1
  9. package/dist/tools/billing.js.map +1 -1
  10. package/dist/tools/capacity.d.ts +2 -0
  11. package/dist/tools/capacity.js +253 -0
  12. package/dist/tools/capacity.js.map +1 -0
  13. package/dist/tools/database-users.js +33 -6
  14. package/dist/tools/database-users.js.map +1 -1
  15. package/dist/tools/deployments.js +6 -2
  16. package/dist/tools/deployments.js.map +1 -1
  17. package/dist/tools/instance-logs.d.ts +2 -0
  18. package/dist/tools/instance-logs.js +151 -0
  19. package/dist/tools/instance-logs.js.map +1 -0
  20. package/dist/tools/instances.js +51 -7
  21. package/dist/tools/instances.js.map +1 -1
  22. package/dist/tools/organizations.js +98 -8
  23. package/dist/tools/organizations.js.map +1 -1
  24. package/dist/tools/postgres-tls.d.ts +16 -0
  25. package/dist/tools/postgres-tls.js +64 -0
  26. package/dist/tools/postgres-tls.js.map +1 -0
  27. package/dist/tools/project-activities.d.ts +2 -0
  28. package/dist/tools/project-activities.js +52 -0
  29. package/dist/tools/project-activities.js.map +1 -0
  30. package/dist/tools/project-backups.d.ts +2 -0
  31. package/dist/tools/project-backups.js +159 -0
  32. package/dist/tools/project-backups.js.map +1 -0
  33. package/dist/tools/project-databases.js +26 -2
  34. package/dist/tools/project-databases.js.map +1 -1
  35. package/dist/tools/project-services.js +136 -25
  36. package/dist/tools/project-services.js.map +1 -1
  37. package/dist/tools/projects.js +116 -13
  38. package/dist/tools/projects.js.map +1 -1
  39. package/dist/tools/scaling.js +135 -2
  40. package/dist/tools/scaling.js.map +1 -1
  41. package/dist/tools/webhooks.d.ts +2 -0
  42. package/dist/tools/webhooks.js +195 -0
  43. package/dist/tools/webhooks.js.map +1 -0
  44. package/package.json +3 -2
@@ -32,11 +32,47 @@ import { session } from "../session.js";
32
32
  * - The backend requires the reactive fields on EVERY non-start/stop policy
33
33
  * even when the trigger is a cron schedule, so scheduled rules get neutral
34
34
  * defaults injected here; ScheduledScalingJob fires on cron alone.
35
+ *
36
+ * TIER POLICIES are a distinct shape sharing this endpoint. A policy becomes one
37
+ * when `scaling_action` is `resize_instance` AND `group_id` is set. It then
38
+ * triggers a whole-GROUP move along a capacity ladder instead of resizing one
39
+ * instance, and its fields change completely: `direction` plus paired cpu/memory
40
+ * thresholds and `window_minutes`, never `metric_name`/`threshold`. It also
41
+ * requires an enabled GroupCapacityConfig for (group_id, target_class) to already
42
+ * exist - see `create_capacity_config`. `schedule_type` is FORBIDDEN on one.
35
43
  */
36
44
  function resolveOrgId(organization_id) {
37
45
  return organization_id || session.getActiveOrgId();
38
46
  }
39
47
  const noOrgMessage = "No organization selected. Call `select_organization` first or pass an organization_id.";
48
+ /**
49
+ * Pre-flight for a tier policy. Everything here is enforced backend-side too; it
50
+ * is checked first so the model gets an actionable sentence instead of a bare 422.
51
+ */
52
+ function validateTierPolicy(p) {
53
+ if (!p.target_class) {
54
+ return "A tier policy needs `target_class`: `data` for the data plane (the usual case) or `non_data` for ClickHouse keepers.";
55
+ }
56
+ if (!p.direction) {
57
+ return "A tier policy needs `direction`: `scale_up` or `scale_down`. Up and down are separate policies - create one now and the other in a second call.";
58
+ }
59
+ if (p.schedule_type) {
60
+ return "`schedule_type` is not allowed on a tier policy (the backend 422s it) - tier scaling is reactive only. Drop it and set the direction's CPU/memory thresholds and `window_minutes` instead.";
61
+ }
62
+ if (p.cloud_instance_pid || (p.cloud_instance_pids?.length ?? 0) > 0) {
63
+ return "A tier policy targets the GROUP, not an instance. Drop cloud_instance_pid / cloud_instance_pids - `group_id` is the target.";
64
+ }
65
+ if (p.details && Object.keys(p.details).length > 0) {
66
+ return "A tier policy takes no `details`. The capacity ladder decides the next machine size, so `target_instance_type` has no meaning here - remove it.";
67
+ }
68
+ if (p.direction === "scale_up" && (p.cpu_down_threshold !== undefined || p.memory_down_threshold !== undefined)) {
69
+ return "A `scale_up` policy carries `cpu_up_threshold` / `memory_up_threshold`. The down thresholds belong on the separate `scale_down` policy.";
70
+ }
71
+ if (p.direction === "scale_down" && (p.cpu_up_threshold !== undefined || p.memory_up_threshold !== undefined)) {
72
+ return "A `scale_down` policy carries `cpu_down_threshold` / `memory_down_threshold`. The up thresholds belong on the separate `scale_up` policy.";
73
+ }
74
+ return null;
75
+ }
40
76
  const VOLUME_TYPES = ["gp2", "gp3", "io1", "io2", "st1", "sc1", "standard"];
41
77
  const SCALING_ACTIONS = [
42
78
  "start_instance",
@@ -192,7 +228,14 @@ export function registerScalingTools(server) {
192
228
  ],
193
229
  };
194
230
  });
195
- server.tool("list_scaling_policies", "List scaling policies, optionally filtered to one instance. Covers both start/stop schedules and auto-scaling rules; each row carries `cloud_instance_pid` so you can tell which instance it belongs to.\n\nAn `expand_storage` policy whose `details` still has `new_size_gb` (instead of `cluster_max_storage_gb`) predates the cluster-cascade contract: it is outdated, cannot be edited or disabled (every save 422s), and must be deleted and recreated. Flag those to the user rather than trying to patch them.", {
231
+ server.tool("list_scaling_policies", `List scaling policies, optionally filtered to one instance. Covers start/stop schedules, auto-scaling rules and cluster tier triggers; each row carries \`cloud_instance_pid\` so you can tell which instance it belongs to.
232
+
233
+ TELLING THE THREE APART matters, because they behave nothing alike:
234
+ - \`cloud_instance_pid\` set, \`group_id\` empty - an ordinary single-instance rule.
235
+ - \`group_id\` set with \`scaling_action: resize_instance\` - a CLUSTER TIER trigger. It moves the whole group along a capacity ladder and its thresholds are the \`cpu_*\`/\`memory_*\` pair plus \`window_minutes\`, not \`metric_name\`/\`threshold\`. Its bounds live on the group's capacity config (\`get_capacity_config\`), so this row alone does not tell you how far the group can move. Tier triggers come in pairs - one \`scale_up\`, one \`scale_down\` - and a group with only an up policy will grow and never shrink, which is worth pointing out.
236
+ - Filtering by instance will NOT return a group's tier policies, since they have no instance target. Use \`get_capacity_config\` for those.
237
+
238
+ An \`expand_storage\` policy whose \`details\` still has \`new_size_gb\` (instead of \`cluster_max_storage_gb\`) predates the cluster-cascade contract: it is outdated, cannot be edited or disabled (every save 422s), and must be deleted and recreated. Flag those to the user rather than trying to patch them.`, {
196
239
  organization_id: z.string().optional()
197
240
  .describe("Org PID; defaults to active org. Used as `organization_pid` on the wire."),
198
241
  cloud_instance_pid: z.string().optional()
@@ -238,7 +281,18 @@ STORAGE AUTO-SCALE (expand_storage) - read before writing one:
238
281
  - cluster_max_storage_gb must EXCEED the volume's current size.
239
282
  - threshold must be between ${EXPAND_THRESHOLD_MIN} and ${EXPAND_THRESHOLD_MAX}, and the operator must be '>' or '>=' (disk metrics: disk_used_percent / disk_usage_percent).
240
283
  - The rule may only attach to a DATA, non-replica node (ClickHouse keeper-only nodes are not data nodes).
241
- - Expansion CASCADES: when the volume commits, every live data peer in the cluster is expanded to match, and storage bills per node. Warn the user about the multiplied cost on a multi-node cluster.`, {
284
+ - Expansion CASCADES: when the volume commits, every live data peer in the cluster is expanded to match, and storage bills per node. Warn the user about the multiplied cost on a multi-node cluster.
285
+
286
+ TIER POLICIES (whole-cluster ladder scaling) are a FOURTH shape and none of the above applies to them. A policy is a tier policy when \`scaling_action\` is \`resize_instance\` AND \`group_id\` is set:
287
+ - Required: \`group_id\`, \`target_class\`, \`direction\` (\`scale_up\` or \`scale_down\`), and \`window_minutes\`.
288
+ - Thresholds are the direction's CPU **and** memory pair - \`cpu_up_threshold\` + \`memory_up_threshold\` for up, \`cpu_down_threshold\` + \`memory_down_threshold\` for down. NOT \`metric_name\` / \`threshold\` / \`comparison_operator\`, which are ignored.
289
+ - \`schedule_type\` is FORBIDDEN (422). Tier scaling is reactive only.
290
+ - \`details.target_instance_type\` is NOT used - the ladder decides the next size.
291
+ - ONE POLICY PER DIRECTION. Scaling up and scaling down are two separate rules against the same group.
292
+ - An enabled capacity config for (\`group_id\`, \`target_class\`) must ALREADY EXIST or this is refused. Create it with \`create_capacity_config\` first.
293
+ - HYSTERESIS IS ENFORCED across the pair: a scale_down threshold must be strictly below its scale_up sibling, on both CPU and memory. Equal values are rejected, because they would let the cluster oscillate.
294
+ - Server defaults if omitted: 80/80 up, 20/20 down, \`window_minutes\` 10 up and 360 down, cooldown 30. The long scale-down window is intentional - a quiet afternoon should not shrink a production cluster.
295
+ - Use this instead of a plain \`resize_instance\` rule for any clustered engine: a single-node switchover fired at a multi-node cluster desyncs its tier state.`, {
242
296
  organization_id: z.string().optional()
243
297
  .describe("Org PID; defaults to active org. Wire field: organization_pid"),
244
298
  cloud_instance_pid: z.string().min(1).optional()
@@ -270,6 +324,23 @@ STORAGE AUTO-SCALE (expand_storage) - read before writing one:
270
324
  days_of_week: z.array(z.enum(["monday", "tuesday", "wednesday", "thursday", "friday", "saturday", "sunday"])).optional(),
271
325
  timezone: z.string().optional().describe("Default UTC; BE supports UTC | EST | PST | GMT | CET"),
272
326
  // Action-specific details
327
+ // ── Tier-policy fields (group-wide ladder scaling) ──────────────────
328
+ group_id: z.string().optional()
329
+ .describe("TIER POLICY: the instance group to scale as a whole. Setting this with scaling_action `resize_instance` makes this a tier policy, not a single-instance resize. Requires an enabled capacity config for (group_id, target_class)."),
330
+ target_class: z.enum(["data", "non_data"]).optional()
331
+ .describe("TIER POLICY: which plane this trigger governs. `data` is the normal choice; `non_data` is ClickHouse keepers."),
332
+ direction: z.enum(["scale_up", "scale_down"]).optional()
333
+ .describe("TIER POLICY: required. One policy per direction - up and down are separate rules, not one rule with two thresholds."),
334
+ cpu_up_threshold: z.number().int().min(1).max(99).optional()
335
+ .describe("TIER POLICY (scale_up): CPU percent that must be exceeded. Defaults to 80."),
336
+ memory_up_threshold: z.number().int().min(1).max(99).optional()
337
+ .describe("TIER POLICY (scale_up): memory percent that must be exceeded. Defaults to 80. Both CPU and memory apply."),
338
+ cpu_down_threshold: z.number().int().min(1).max(99).optional()
339
+ .describe("TIER POLICY (scale_down): CPU percent to fall below. Defaults to 20. Must be strictly BELOW the sibling scale_up threshold."),
340
+ memory_down_threshold: z.number().int().min(1).max(99).optional()
341
+ .describe("TIER POLICY (scale_down): memory percent to fall below. Defaults to 20. Must be strictly BELOW the sibling scale_up threshold."),
342
+ window_minutes: z.number().int().min(1).optional()
343
+ .describe("TIER POLICY: how long the condition must hold. Defaults to 10 for scale_up, 360 for scale_down - the asymmetry is deliberate, so a lull does not shrink a cluster."),
273
344
  details: z.record(z.unknown()).optional()
274
345
  .describe("Action-specific payload: { target_instance_type } | { cluster_max_storage_gb } | { max_replicas }. Required for every action except start_instance / stop_instance."),
275
346
  }, async (params) => {
@@ -280,6 +351,61 @@ STORAGE AUTO-SCALE (expand_storage) - read before writing one:
280
351
  const action = params.scaling_action;
281
352
  const isStartStop = START_STOP_ACTIONS.has(action);
282
353
  const targets = params.cloud_instance_pids ?? [];
354
+ // ── Tier policy: a whole-group ladder move, not a single-instance resize.
355
+ // Handled first and returned from, because every check below assumes an
356
+ // instance target and an action `details` payload, and a tier policy has
357
+ // neither - the group is the target and the ladder picks the size.
358
+ const isTierPolicy = action === "resize_instance" && !!params.group_id;
359
+ if (isTierPolicy) {
360
+ const tierError = validateTierPolicy(params);
361
+ if (tierError) {
362
+ return { content: [{ type: "text", text: tierError }] };
363
+ }
364
+ const tierFields = {
365
+ organization_pid: orgId,
366
+ scaling_action: action,
367
+ group_id: params.group_id,
368
+ target_class: params.target_class,
369
+ direction: params.direction,
370
+ enabled: params.enabled,
371
+ };
372
+ if (params.window_minutes !== undefined)
373
+ tierFields.window_minutes = params.window_minutes;
374
+ if (params.cooldown_minutes !== undefined)
375
+ tierFields.cooldown_minutes = params.cooldown_minutes;
376
+ if (params.direction === "scale_up") {
377
+ if (params.cpu_up_threshold !== undefined)
378
+ tierFields.cpu_up_threshold = params.cpu_up_threshold;
379
+ if (params.memory_up_threshold !== undefined)
380
+ tierFields.memory_up_threshold = params.memory_up_threshold;
381
+ }
382
+ else {
383
+ if (params.cpu_down_threshold !== undefined)
384
+ tierFields.cpu_down_threshold = params.cpu_down_threshold;
385
+ if (params.memory_down_threshold !== undefined)
386
+ tierFields.memory_down_threshold = params.memory_down_threshold;
387
+ }
388
+ const tierResult = await apiRequest("/scaling_policies", {
389
+ method: "POST",
390
+ body: { scaling_policy: tierFields },
391
+ toolName: "create_scaling_policy",
392
+ skipOrgInjection: true,
393
+ });
394
+ if (!tierResult.success) {
395
+ return { content: [{ type: "text", text: explainPolicyError("create", tierResult.statusCode, tierResult.message) }] };
396
+ }
397
+ const dir = params.direction === "scale_up" ? "up" : "down";
398
+ const win = params.window_minutes ?? (params.direction === "scale_up" ? 10 : 360);
399
+ return {
400
+ content: [
401
+ {
402
+ type: "text",
403
+ text: `Tier ${dir}-scaling trigger created for group ${params.group_id} (${params.target_class}). It fires when BOTH CPU and memory stay past their thresholds for ${win} minutes, and the capacity config's bounds decide how far the group may move. Watch a move with \`get_capacity_config\`.${params.direction === "scale_up" ? " Add a matching scale_down policy separately if the group should shrink again." : ""}`,
404
+ },
405
+ { type: "text", text: JSON.stringify(tierResult.data, null, 2) },
406
+ ],
407
+ };
408
+ }
283
409
  // Target shape. Only start/stop fan out; everything else is single-instance
284
410
  // (the backend enforces this for expand/resize/add_replica in
285
411
  // `validate_multi_target_restrictions`).
@@ -425,6 +551,13 @@ LEGACY expand_storage RULES: policies still carrying details.new_size_gb are out
425
551
 
426
552
  Pass scaling_action when you know it so the storage-specific rules (${EXPAND_THRESHOLD_MIN}-${EXPAND_THRESHOLD_MAX} threshold band, '>' / '>=' only, doubling ceiling) can be checked before the request goes out.`, {
427
553
  policy_id: z.string().min(1).describe("Scaling policy PID"),
554
+ direction: z.enum(["scale_up", "scale_down"]).optional()
555
+ .describe("TIER POLICY only. Changing direction rewrites which threshold pair applies - normally leave alone."),
556
+ cpu_up_threshold: z.number().int().min(1).max(99).optional().describe("TIER POLICY (scale_up). Must stay above the sibling scale_down value."),
557
+ memory_up_threshold: z.number().int().min(1).max(99).optional().describe("TIER POLICY (scale_up). Must stay above the sibling scale_down value."),
558
+ cpu_down_threshold: z.number().int().min(1).max(99).optional().describe("TIER POLICY (scale_down). Must stay below the sibling scale_up value."),
559
+ memory_down_threshold: z.number().int().min(1).max(99).optional().describe("TIER POLICY (scale_down). Must stay below the sibling scale_up value."),
560
+ window_minutes: z.number().int().min(1).optional().describe("TIER POLICY: how long the condition must hold before firing."),
428
561
  scaling_action: z.enum(SCALING_ACTIONS).optional()
429
562
  .describe("The policy's action, from `list_scaling_policies`. Not sent as a change - used to validate the fields below against the right rules."),
430
563
  enabled: z.boolean().optional(),
@@ -1 +1 @@
1
- {"version":3,"file":"scaling.js","sourceRoot":"","sources":["../../src/tools/scaling.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"scaling.js","sourceRoot":"","sources":["../../src/tools/scaling.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function registerWebhookTools(server: McpServer): void;
@@ -0,0 +1,195 @@
1
+ import { z } from "zod";
2
+ import { apiRequest } from "../client.js";
3
+ import { session } from "../session.js";
4
+ /**
5
+ * Outgoing webhook endpoints - HTTPS callbacks the platform POSTs to when
6
+ * something happens in the organization.
7
+ *
8
+ * Endpoints (org-scoped, full CRUD):
9
+ * - GET /organizations/:pid/webhook_endpoints
10
+ * - GET /organizations/:pid/webhook_endpoints/:id
11
+ * - POST /organizations/:pid/webhook_endpoints
12
+ * - PATCH /organizations/:pid/webhook_endpoints/:id
13
+ * - DELETE /organizations/:pid/webhook_endpoints/:id (204)
14
+ *
15
+ * These are ORG-WIDE and event-typed, which makes them different from the
16
+ * deployment notification bindings in `deployment-notifications.ts` - those wire
17
+ * one deployment's outcomes to a notification channel (Slack, email). If a user
18
+ * wants "tell my Slack when this app deploys", that is the other module. If they
19
+ * want "POST to my service when anything of this type happens anywhere in the
20
+ * org", it is this one.
21
+ *
22
+ * A `secret` is generated server-side at create so the receiver can verify the
23
+ * signature. It is not settable.
24
+ */
25
+ const VALID_EVENTS = [
26
+ "instance.scaling_failed",
27
+ "deploy_run.succeeded",
28
+ "deploy_run.failed",
29
+ "deploy_run.aborted",
30
+ "preview_deployment.created",
31
+ "preview_deployment.destroyed",
32
+ "database_user.password_rotated",
33
+ ];
34
+ /** What each event is actually for - so a subscription is a choice, not a guess. */
35
+ const EVENT_NOTES = [
36
+ "`instance.scaling_failed` - an auto-scale or resize did not complete. The one worth subscribing to for anything production: a failed scale is silent otherwise, and a failed cluster scale plan also blocks all further scaling for that group.",
37
+ "`deploy_run.succeeded` / `deploy_run.failed` / `deploy_run.aborted` - a build run reached a terminal state. Fires for every deployment in the org, not one app.",
38
+ "`preview_deployment.created` / `preview_deployment.destroyed` - a per-branch preview environment appeared or went away.",
39
+ "`database_user.password_rotated` - a database user's password was rotated. THIS IS THE SIGNAL a credential consumer needs when `password_rotation_enabled` is true on that user: the payload never carries the password, so the receiver must refetch with `rotate_database_user_password`. Subscribing to it is what makes automatic rotation safe rather than breaking.",
40
+ ].join("\n- ");
41
+ const noOrgMessage = "No organization selected. Call `select_organization` first or pass an organization_id.";
42
+ function resolveOrgId(organization_id) {
43
+ return organization_id || session.getActiveOrgId();
44
+ }
45
+ export function registerWebhookTools(server) {
46
+ server.tool("list_webhook_endpoints", `List the organization's outgoing webhook endpoints - the HTTPS URLs the platform calls when subscribed events happen.
47
+
48
+ Each row carries its \`pid\`, \`url\` and \`subscribed_events\`.
49
+
50
+ Not to be confused with deployment notification channels (\`list_deployment_notification_bindings\`), which push a specific deployment's outcome to Slack or email. These are org-wide, event-typed HTTP callbacks for a receiver you run.`, {
51
+ organization_id: z.string().optional().describe("Organization PID (defaults to active org)"),
52
+ }, async ({ organization_id }) => {
53
+ const orgId = resolveOrgId(organization_id);
54
+ if (!orgId)
55
+ return { content: [{ type: "text", text: noOrgMessage }] };
56
+ const result = await apiRequest(`/organizations/${orgId}/webhook_endpoints`, {
57
+ toolName: "list_webhook_endpoints",
58
+ skipOrgInjection: true,
59
+ });
60
+ if (!result.success) {
61
+ return { content: [{ type: "text", text: `Failed to list webhook endpoints (${result.statusCode}): ${result.message}` }] };
62
+ }
63
+ return { content: [{ type: "text", text: JSON.stringify(result.data, null, 2) }] };
64
+ });
65
+ server.tool("get_webhook_endpoint", "Get one webhook endpoint - its URL and the events it is subscribed to. Use it to check what a receiver will actually be told before changing anything.", {
66
+ webhook_endpoint_id: z.string().min(1).describe("Endpoint pid, from `list_webhook_endpoints`"),
67
+ organization_id: z.string().optional().describe("Organization PID (defaults to active org)"),
68
+ }, async ({ webhook_endpoint_id, organization_id }) => {
69
+ const orgId = resolveOrgId(organization_id);
70
+ if (!orgId)
71
+ return { content: [{ type: "text", text: noOrgMessage }] };
72
+ const result = await apiRequest(`/organizations/${orgId}/webhook_endpoints/${webhook_endpoint_id}`, {
73
+ toolName: "get_webhook_endpoint",
74
+ skipOrgInjection: true,
75
+ });
76
+ if (!result.success) {
77
+ return { content: [{ type: "text", text: `Failed to get webhook endpoint (${result.statusCode}): ${result.message}` }] };
78
+ }
79
+ return { content: [{ type: "text", text: JSON.stringify(result.data, null, 2) }] };
80
+ });
81
+ server.tool("create_webhook_endpoint", `Register an HTTPS URL to receive platform events for this organization.
82
+
83
+ The URL MUST be HTTPS - plain HTTP is rejected. At least one event is required.
84
+
85
+ Available events:
86
+ - ${EVENT_NOTES}
87
+
88
+ Subscribe deliberately: every event fires for the WHOLE organization, so \`deploy_run.*\` on a busy org is a lot of traffic to a receiver that only cares about one app.
89
+
90
+ A signing \`secret\` is generated server-side at create and is NOT settable. The receiver should verify it - tell the user to grab it from the create response, because that is how they authenticate the calls.
91
+
92
+ Requires \`webhook_endpoints:create\` (owner or admin).`, {
93
+ organization_id: z.string().optional().describe("Organization PID (defaults to active org)"),
94
+ url: z.string().url().describe("HTTPS URL to POST events to. Plain HTTP is rejected."),
95
+ subscribed_events: z.array(z.enum(VALID_EVENTS)).min(1).describe("Events to send. An unknown event name is rejected with the offending value named."),
96
+ }, async ({ organization_id, url, subscribed_events }) => {
97
+ const orgId = resolveOrgId(organization_id);
98
+ if (!orgId)
99
+ return { content: [{ type: "text", text: noOrgMessage }] };
100
+ if (!url.toLowerCase().startsWith("https://")) {
101
+ return { content: [{ type: "text", text: "Webhook URLs must be HTTPS - the backend rejects plain HTTP. Events carry account activity, so the transport has to be encrypted." }] };
102
+ }
103
+ const result = await apiRequest(`/organizations/${orgId}/webhook_endpoints`, {
104
+ method: "POST",
105
+ body: { webhook_endpoint: { url, subscribed_events } },
106
+ toolName: "create_webhook_endpoint",
107
+ skipOrgInjection: true,
108
+ });
109
+ if (!result.success) {
110
+ return { content: [{ type: "text", text: `Failed to create webhook endpoint (${result.statusCode}): ${result.message}` }] };
111
+ }
112
+ return {
113
+ content: [
114
+ { type: "text", text: `Webhook endpoint created for ${url}, subscribed to ${subscribed_events.length} event type(s). The response includes a signing secret - the receiver needs it to verify calls, so pass it to the user now; it is generated once.` },
115
+ { type: "text", text: JSON.stringify(result.data, null, 2) },
116
+ ],
117
+ };
118
+ });
119
+ server.tool("update_webhook_endpoint", `Change a webhook endpoint's URL or which events it receives.
120
+
121
+ \`subscribed_events\` REPLACES the list, it does not add to it. Read the current set with \`get_webhook_endpoint\` and send the full intended list, or you will silently unsubscribe the receiver from everything you left out.
122
+
123
+ Available events:
124
+ - ${EVENT_NOTES}
125
+
126
+ Requires \`webhook_endpoints:update\` (owner or admin).`, {
127
+ webhook_endpoint_id: z.string().min(1).describe("Endpoint pid, from `list_webhook_endpoints`"),
128
+ organization_id: z.string().optional().describe("Organization PID (defaults to active org)"),
129
+ url: z.string().url().optional().describe("New HTTPS URL"),
130
+ subscribed_events: z.array(z.enum(VALID_EVENTS)).min(1).optional().describe("REPLACES the whole subscription list - include everything the endpoint should keep receiving"),
131
+ }, async ({ webhook_endpoint_id, organization_id, url, subscribed_events }) => {
132
+ const orgId = resolveOrgId(organization_id);
133
+ if (!orgId)
134
+ return { content: [{ type: "text", text: noOrgMessage }] };
135
+ if (url && !url.toLowerCase().startsWith("https://")) {
136
+ return { content: [{ type: "text", text: "Webhook URLs must be HTTPS - the backend rejects plain HTTP." }] };
137
+ }
138
+ const endpoint = {};
139
+ if (url !== undefined)
140
+ endpoint.url = url;
141
+ if (subscribed_events !== undefined)
142
+ endpoint.subscribed_events = subscribed_events;
143
+ if (Object.keys(endpoint).length === 0) {
144
+ return { content: [{ type: "text", text: "No changes to apply - pass `url`, `subscribed_events`, or both." }] };
145
+ }
146
+ const result = await apiRequest(`/organizations/${orgId}/webhook_endpoints/${webhook_endpoint_id}`, {
147
+ method: "PATCH",
148
+ body: { webhook_endpoint: endpoint },
149
+ toolName: "update_webhook_endpoint",
150
+ skipOrgInjection: true,
151
+ });
152
+ if (!result.success) {
153
+ return { content: [{ type: "text", text: `Failed to update webhook endpoint (${result.statusCode}): ${result.message}` }] };
154
+ }
155
+ return {
156
+ content: [
157
+ { type: "text", text: subscribed_events ? "Webhook endpoint updated. Its subscription is now exactly the list you sent." : "Webhook endpoint updated." },
158
+ { type: "text", text: JSON.stringify(result.data, null, 2) },
159
+ ],
160
+ };
161
+ });
162
+ server.tool("delete_webhook_endpoint", `DESTRUCTIVE: delete a webhook endpoint. Its delivery history goes with it and the receiver stops being told anything.
163
+
164
+ Check what it was subscribed to first (\`get_webhook_endpoint\`). If it carried \`database_user.password_rotated\` for a user with automatic rotation on, deleting this silently removes the only signal that credential's consumer gets - that consumer will break at the next rotation with nothing to explain why. Say so before proceeding.
165
+
166
+ If the goal is to receive less rather than nothing, \`update_webhook_endpoint\` can narrow the event list instead.
167
+
168
+ Requires \`webhook_endpoints:destroy\` (owner or admin). You MUST set confirm=true.`, {
169
+ webhook_endpoint_id: z.string().min(1).describe("Endpoint pid, from `list_webhook_endpoints`"),
170
+ organization_id: z.string().optional().describe("Organization PID (defaults to active org)"),
171
+ confirm: z.boolean().describe("Must be true. The receiver stops getting events and the delivery history is removed."),
172
+ }, async ({ webhook_endpoint_id, organization_id, confirm }) => {
173
+ const orgId = resolveOrgId(organization_id);
174
+ if (!orgId)
175
+ return { content: [{ type: "text", text: noOrgMessage }] };
176
+ if (!confirm) {
177
+ return {
178
+ content: [{
179
+ type: "text",
180
+ text: `About to delete webhook endpoint ${webhook_endpoint_id}. Its receiver stops getting events and the delivery history is removed.\n\nCall \`get_webhook_endpoint\` first and check what it is subscribed to - if it carries \`database_user.password_rotated\`, something downstream may depend on it to refetch credentials. To narrow the events instead of removing the endpoint, use \`update_webhook_endpoint\`.\n\nTo proceed, call again with confirm=true.`,
181
+ }],
182
+ };
183
+ }
184
+ const result = await apiRequest(`/organizations/${orgId}/webhook_endpoints/${webhook_endpoint_id}`, {
185
+ method: "DELETE",
186
+ toolName: "delete_webhook_endpoint",
187
+ skipOrgInjection: true,
188
+ });
189
+ if (!result.success) {
190
+ return { content: [{ type: "text", text: `Failed to delete webhook endpoint (${result.statusCode}): ${result.message}` }] };
191
+ }
192
+ return { content: [{ type: "text", text: `Webhook endpoint ${webhook_endpoint_id} deleted.` }] };
193
+ });
194
+ }
195
+ //# sourceMappingURL=webhooks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webhooks.js","sourceRoot":"","sources":["../../src/tools/webhooks.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@selfhost.dev/mcp-server",
3
- "version": "0.8.0",
3
+ "version": "0.9.0",
4
4
  "description": "MCP server for SelfHost.dev - provision managed databases and deploy apps (PaaS) via natural language",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -48,7 +48,8 @@
48
48
  "start": "node dist/index.js",
49
49
  "dev": "tsx src/index.ts",
50
50
  "typecheck": "tsc --noEmit",
51
- "prepublishOnly": "npm run build"
51
+ "prepublishOnly": "npm run check && npm run build",
52
+ "check": "node scripts/check-tools.mjs"
52
53
  },
53
54
  "dependencies": {
54
55
  "@modelcontextprotocol/sdk": "^1.12.1",