@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.
- package/README.md +100 -13
- package/dist/index.js +19 -1
- package/dist/index.js.map +1 -1
- package/dist/tools/alerts.js +83 -12
- package/dist/tools/alerts.js.map +1 -1
- package/dist/tools/backups.js +184 -16
- package/dist/tools/backups.js.map +1 -1
- package/dist/tools/billing.js +5 -1
- package/dist/tools/billing.js.map +1 -1
- package/dist/tools/capacity.d.ts +2 -0
- package/dist/tools/capacity.js +253 -0
- package/dist/tools/capacity.js.map +1 -0
- package/dist/tools/database-users.js +33 -6
- package/dist/tools/database-users.js.map +1 -1
- package/dist/tools/deployments.js +6 -2
- package/dist/tools/deployments.js.map +1 -1
- package/dist/tools/instance-logs.d.ts +2 -0
- package/dist/tools/instance-logs.js +151 -0
- package/dist/tools/instance-logs.js.map +1 -0
- package/dist/tools/instances.js +51 -7
- package/dist/tools/instances.js.map +1 -1
- package/dist/tools/organizations.js +98 -8
- package/dist/tools/organizations.js.map +1 -1
- package/dist/tools/postgres-tls.d.ts +16 -0
- package/dist/tools/postgres-tls.js +64 -0
- package/dist/tools/postgres-tls.js.map +1 -0
- package/dist/tools/project-activities.d.ts +2 -0
- package/dist/tools/project-activities.js +52 -0
- package/dist/tools/project-activities.js.map +1 -0
- package/dist/tools/project-backups.d.ts +2 -0
- package/dist/tools/project-backups.js +159 -0
- package/dist/tools/project-backups.js.map +1 -0
- package/dist/tools/project-databases.js +26 -2
- package/dist/tools/project-databases.js.map +1 -1
- package/dist/tools/project-services.js +136 -25
- package/dist/tools/project-services.js.map +1 -1
- package/dist/tools/projects.js +116 -13
- package/dist/tools/projects.js.map +1 -1
- package/dist/tools/scaling.js +135 -2
- package/dist/tools/scaling.js.map +1 -1
- package/dist/tools/webhooks.d.ts +2 -0
- package/dist/tools/webhooks.js +195 -0
- package/dist/tools/webhooks.js.map +1 -0
- package/package.json +3 -2
package/dist/tools/scaling.js
CHANGED
|
@@ -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",
|
|
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,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":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAExC;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,MAAM,YAAY,GAAG;IACnB,yBAAyB;IACzB,sBAAsB;IACtB,mBAAmB;IACnB,oBAAoB;IACpB,4BAA4B;IAC5B,8BAA8B;IAC9B,gCAAgC;CACxB,CAAC;AAEX,oFAAoF;AACpF,MAAM,WAAW,GAAG;IAClB,iPAAiP;IACjP,iKAAiK;IACjK,yHAAyH;IACzH,2WAA2W;CAC5W,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAEf,MAAM,YAAY,GAAG,wFAAwF,CAAC;AAE9G,SAAS,YAAY,CAAC,eAAwB;IAC5C,OAAO,eAAe,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,MAAiB;IACpD,MAAM,CAAC,IAAI,CACT,wBAAwB,EACxB;;;;2OAIuO,EACvO;QACE,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2CAA2C,CAAC;KAC7F,EACD,KAAK,EAAE,EAAE,eAAe,EAAE,EAAE,EAAE;QAC5B,MAAM,KAAK,GAAG,YAAY,CAAC,eAAe,CAAC,CAAC;QAC5C,IAAI,CAAC,KAAK;YAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC;QAEvE,MAAM,MAAM,GAAG,MAAM,UAAU,CAAU,kBAAkB,KAAK,oBAAoB,EAAE;YACpF,QAAQ,EAAE,wBAAwB;YAClC,gBAAgB,EAAE,IAAI;SACvB,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,qCAAqC,MAAM,CAAC,UAAU,MAAM,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC;QAC7H,CAAC;QACD,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IACrF,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,sBAAsB,EACtB,wJAAwJ,EACxJ;QACE,mBAAmB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,6CAA6C,CAAC;QAC9F,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2CAA2C,CAAC;KAC7F,EACD,KAAK,EAAE,EAAE,mBAAmB,EAAE,eAAe,EAAE,EAAE,EAAE;QACjD,MAAM,KAAK,GAAG,YAAY,CAAC,eAAe,CAAC,CAAC;QAC5C,IAAI,CAAC,KAAK;YAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC;QAEvE,MAAM,MAAM,GAAG,MAAM,UAAU,CAAU,kBAAkB,KAAK,sBAAsB,mBAAmB,EAAE,EAAE;YAC3G,QAAQ,EAAE,sBAAsB;YAChC,gBAAgB,EAAE,IAAI;SACvB,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,mCAAmC,MAAM,CAAC,UAAU,MAAM,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC;QAC3H,CAAC;QACD,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IACrF,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,yBAAyB,EACzB;;;;;IAKA,WAAW;;;;;;wDAMyC,EACpD;QACE,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2CAA2C,CAAC;QAC5F,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,sDAAsD,CAAC;QACtF,iBAAiB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,mFAAmF,CAAC;KACtJ,EACD,KAAK,EAAE,EAAE,eAAe,EAAE,GAAG,EAAE,iBAAiB,EAAE,EAAE,EAAE;QACpD,MAAM,KAAK,GAAG,YAAY,CAAC,eAAe,CAAC,CAAC;QAC5C,IAAI,CAAC,KAAK;YAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC;QAEvE,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC9C,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,mIAAmI,EAAE,CAAC,EAAE,CAAC;QACpL,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,UAAU,CAAU,kBAAkB,KAAK,oBAAoB,EAAE;YACpF,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,EAAE,gBAAgB,EAAE,EAAE,GAAG,EAAE,iBAAiB,EAAE,EAAE;YACtD,QAAQ,EAAE,yBAAyB;YACnC,gBAAgB,EAAE,IAAI;SACvB,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,sCAAsC,MAAM,CAAC,UAAU,MAAM,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC;QAC9H,CAAC;QACD,OAAO;YACL,OAAO,EAAE;gBACP,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,gCAAgC,GAAG,mBAAmB,iBAAiB,CAAC,MAAM,mJAAmJ,EAAE;gBACzP,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE;aAC7D;SACF,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,yBAAyB,EACzB;;;;;IAKA,WAAW;;wDAEyC,EACpD;QACE,mBAAmB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,6CAA6C,CAAC;QAC9F,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2CAA2C,CAAC;QAC5F,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC;QAC1D,iBAAiB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8FAA8F,CAAC;KAC5K,EACD,KAAK,EAAE,EAAE,mBAAmB,EAAE,eAAe,EAAE,GAAG,EAAE,iBAAiB,EAAE,EAAE,EAAE;QACzE,MAAM,KAAK,GAAG,YAAY,CAAC,eAAe,CAAC,CAAC;QAC5C,IAAI,CAAC,KAAK;YAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC;QAEvE,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YACrD,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,8DAA8D,EAAE,CAAC,EAAE,CAAC;QAC/G,CAAC;QAED,MAAM,QAAQ,GAA4B,EAAE,CAAC;QAC7C,IAAI,GAAG,KAAK,SAAS;YAAE,QAAQ,CAAC,GAAG,GAAG,GAAG,CAAC;QAC1C,IAAI,iBAAiB,KAAK,SAAS;YAAE,QAAQ,CAAC,iBAAiB,GAAG,iBAAiB,CAAC;QACpF,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,iEAAiE,EAAE,CAAC,EAAE,CAAC;QAClH,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,UAAU,CAAU,kBAAkB,KAAK,sBAAsB,mBAAmB,EAAE,EAAE;YAC3G,MAAM,EAAE,OAAO;YACf,IAAI,EAAE,EAAE,gBAAgB,EAAE,QAAQ,EAAE;YACpC,QAAQ,EAAE,yBAAyB;YACnC,gBAAgB,EAAE,IAAI;SACvB,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,sCAAsC,MAAM,CAAC,UAAU,MAAM,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC;QAC9H,CAAC;QACD,OAAO;YACL,OAAO,EAAE;gBACP,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,iBAAiB,CAAC,CAAC,CAAC,8EAA8E,CAAC,CAAC,CAAC,2BAA2B,EAAE;gBACxJ,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE;aAC7D;SACF,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,yBAAyB,EACzB;;;;;;oFAMgF,EAChF;QACE,mBAAmB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,6CAA6C,CAAC;QAC9F,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2CAA2C,CAAC;QAC5F,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,sFAAsF,CAAC;KACtH,EACD,KAAK,EAAE,EAAE,mBAAmB,EAAE,eAAe,EAAE,OAAO,EAAE,EAAE,EAAE;QAC1D,MAAM,KAAK,GAAG,YAAY,CAAC,eAAe,CAAC,CAAC;QAC5C,IAAI,CAAC,KAAK;YAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC;QAEvE,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO;gBACL,OAAO,EAAE,CAAC;wBACR,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,oCAAoC,mBAAmB,2YAA2Y;qBACzc,CAAC;aACH,CAAC;QACJ,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,UAAU,CAAU,kBAAkB,KAAK,sBAAsB,mBAAmB,EAAE,EAAE;YAC3G,MAAM,EAAE,QAAQ;YAChB,QAAQ,EAAE,yBAAyB;YACnC,gBAAgB,EAAE,IAAI;SACvB,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,sCAAsC,MAAM,CAAC,UAAU,MAAM,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC;QAC9H,CAAC;QACD,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,oBAAoB,mBAAmB,WAAW,EAAE,CAAC,EAAE,CAAC;IACnG,CAAC,CACF,CAAC;AACJ,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@selfhost.dev/mcp-server",
|
|
3
|
-
"version": "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",
|