@selfhost.dev/mcp-server 0.4.0 → 0.5.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 +91 -51
- package/dist/auth.d.ts +1 -1
- package/dist/auth.js +3 -3
- package/dist/client.js +1 -1
- package/dist/config.js +1 -1
- package/dist/index.js +11 -7
- package/dist/index.js.map +1 -1
- package/dist/rate-limiter.js +9 -11
- package/dist/rate-limiter.js.map +1 -1
- package/dist/session.d.ts +0 -1
- package/dist/session.js +3 -12
- package/dist/session.js.map +1 -1
- package/dist/tools/alerts.js +5 -3
- package/dist/tools/alerts.js.map +1 -1
- package/dist/tools/auth.js +0 -1
- package/dist/tools/auth.js.map +1 -1
- package/dist/tools/billing.js +68 -72
- package/dist/tools/billing.js.map +1 -1
- package/dist/tools/credentials.js +1 -1
- package/dist/tools/database-users.js +15 -11
- package/dist/tools/database-users.js.map +1 -1
- package/dist/tools/hetzner.js +13 -13
- package/dist/tools/instances.js +22 -16
- package/dist/tools/instances.js.map +1 -1
- package/dist/tools/mysql-config.d.ts +2 -0
- package/dist/tools/mysql-config.js +43 -0
- package/dist/tools/mysql-config.js.map +1 -0
- package/dist/tools/organizations.js +0 -1
- package/dist/tools/organizations.js.map +1 -1
- package/dist/tools/pgbouncer.js +7 -6
- package/dist/tools/pgbouncer.js.map +1 -1
- package/dist/tools/pitr.js +22 -20
- package/dist/tools/pitr.js.map +1 -1
- package/dist/tools/project-databases.js +4 -4
- package/dist/tools/project-databases.js.map +1 -1
- package/dist/tools/project-services.js +3 -4
- package/dist/tools/project-services.js.map +1 -1
- package/dist/tools/proxysql.d.ts +15 -0
- package/dist/tools/proxysql.js +141 -0
- package/dist/tools/proxysql.js.map +1 -0
- package/dist/tools/scaling.js +13 -13
- package/dist/types/models.d.ts +1 -1
- package/dist/types/models.js +1 -1
- package/dist/types/tiers.d.ts +1 -1
- package/dist/types/tiers.js +8 -26
- package/dist/types/tiers.js.map +1 -1
- package/package.json +4 -1
package/dist/tools/pitr.js
CHANGED
|
@@ -1,20 +1,22 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
import { apiRequest } from "../client.js";
|
|
3
3
|
/**
|
|
4
|
-
* Point-in-Time Recovery (PITR)
|
|
5
|
-
* to any
|
|
4
|
+
* Point-in-Time Recovery (PITR) - continuous transaction-log archiving to S3 +
|
|
5
|
+
* restore to any point within the retention window. Postgres streams WAL (via
|
|
6
|
+
* wal-g); MySQL streams binlog with ~1 minute restore granularity.
|
|
6
7
|
*
|
|
7
8
|
* Endpoints:
|
|
8
|
-
* - GET /aws/v1/instances/:id/pitr
|
|
9
|
-
* - POST /aws/v1/instances/:id/pitr
|
|
10
|
-
* - PUT /aws/v1/instances/:id/pitr/configure
|
|
11
|
-
* - POST /aws/v1/instances/:id/pitr/retry
|
|
12
|
-
* - POST /aws/v1/instances/:id/pitr/base_backup
|
|
13
|
-
* - GET /aws/v1/instances/:id/pitr/base_backups
|
|
14
|
-
* - POST /aws/v1/instances/:id/pitr/restore
|
|
9
|
+
* - GET /aws/v1/instances/:id/pitr - current config + restore window
|
|
10
|
+
* - POST /aws/v1/instances/:id/pitr - enable
|
|
11
|
+
* - PUT /aws/v1/instances/:id/pitr/configure - toggle enabled/disabled
|
|
12
|
+
* - POST /aws/v1/instances/:id/pitr/retry - recover from error
|
|
13
|
+
* - POST /aws/v1/instances/:id/pitr/base_backup - trigger one-off backup
|
|
14
|
+
* - GET /aws/v1/instances/:id/pitr/base_backups - list base backups
|
|
15
|
+
* - POST /aws/v1/instances/:id/pitr/restore - restore to point-in-time
|
|
15
16
|
*
|
|
16
|
-
* Postgres
|
|
17
|
-
*
|
|
17
|
+
* Postgres + MySQL only - NOT available for Redis. PITR is included (metered by
|
|
18
|
+
* usage, not a paid plan). Status: configuring | enabled | disabled | error.
|
|
19
|
+
* Restore creates a NEW instance - the source stays untouched.
|
|
18
20
|
*/
|
|
19
21
|
const PITR_TOGGLE = ["enabled", "disabled"];
|
|
20
22
|
export function registerPitrTools(server) {
|
|
@@ -35,7 +37,7 @@ export function registerPitrTools(server) {
|
|
|
35
37
|
}
|
|
36
38
|
return { content: [{ type: "text", text: JSON.stringify(result.data, null, 2) }] };
|
|
37
39
|
});
|
|
38
|
-
server.tool("enable_pitr", "Enable PITR on a Postgres instance
|
|
40
|
+
server.tool("enable_pitr", "Enable PITR on a Postgres or MySQL instance - streams the transaction log to S3 continuously and takes nightly base backups. Postgres archives WAL (via wal-g); MySQL archives binlog with ~1 minute restore granularity. Not available for Redis. The S3 bucket must exist in the same region; the instance role needs s3:PutObject / GetObject / ListBucket. Status transitions: configuring → enabled (or error).", {
|
|
39
41
|
instance_id: z.string().min(1),
|
|
40
42
|
s3_bucket: z.string().min(3).max(63).regex(/^[a-z0-9.-]+$/, "lowercase letters, digits, dots, hyphens only")
|
|
41
43
|
.describe("S3 bucket name (must exist in same region)"),
|
|
@@ -65,7 +67,7 @@ export function registerPitrTools(server) {
|
|
|
65
67
|
});
|
|
66
68
|
server.tool("configure_pitr", "Toggle an existing PITR config between `enabled` (resume WAL archiving) and `disabled` (pause). The bucket and retention are preserved either way. Use `enable_pitr` for first-time setup, not this.", {
|
|
67
69
|
instance_id: z.string().min(1),
|
|
68
|
-
status: z.enum(PITR_TOGGLE).describe("Target state
|
|
70
|
+
status: z.enum(PITR_TOGGLE).describe("Target state - enabled resumes WAL, disabled pauses it"),
|
|
69
71
|
}, async ({ instance_id, status }) => {
|
|
70
72
|
const result = await apiRequest(`/aws/v1/instances/${instance_id}/pitr/configure`, {
|
|
71
73
|
method: "PUT",
|
|
@@ -86,14 +88,14 @@ export function registerPitrTools(server) {
|
|
|
86
88
|
{
|
|
87
89
|
type: "text",
|
|
88
90
|
text: status === "enabled"
|
|
89
|
-
? "PITR resumed
|
|
90
|
-
: "PITR paused
|
|
91
|
+
? "PITR resumed - WAL archiving is back on."
|
|
92
|
+
: "PITR paused - no new WAL or base backups. Existing backups are preserved.",
|
|
91
93
|
},
|
|
92
94
|
{ type: "text", text: JSON.stringify(result.data, null, 2) },
|
|
93
95
|
],
|
|
94
96
|
};
|
|
95
97
|
});
|
|
96
|
-
server.tool("retry_pitr", "Retry PITR setup after an `error` state. Common error causes: missing IAM permissions on the bucket, wrong bucket region, or
|
|
98
|
+
server.tool("retry_pitr", "Retry PITR setup after an `error` state. Common error causes: missing IAM permissions on the bucket, wrong bucket region, or archiver setup failure (wal-g on Postgres, binlog streaming on MySQL). Fix the underlying issue first, then retry.", {
|
|
97
99
|
instance_id: z.string().min(1),
|
|
98
100
|
}, async ({ instance_id }) => {
|
|
99
101
|
const result = await apiRequest(`/aws/v1/instances/${instance_id}/pitr/retry`, {
|
|
@@ -116,7 +118,7 @@ export function registerPitrTools(server) {
|
|
|
116
118
|
],
|
|
117
119
|
};
|
|
118
120
|
});
|
|
119
|
-
server.tool("trigger_pitr_base_backup", "Trigger a one-off base backup now.
|
|
121
|
+
server.tool("trigger_pitr_base_backup", "Trigger a one-off base backup now. Runs in the background (Postgres uses `wal-g backup-push`; MySQL takes a full base backup) - your instance keeps serving traffic. Useful before risky migrations or to seed the restore window after a fresh enable. Postgres and MySQL only.", {
|
|
120
122
|
instance_id: z.string().min(1),
|
|
121
123
|
}, async ({ instance_id }) => {
|
|
122
124
|
const result = await apiRequest(`/aws/v1/instances/${instance_id}/pitr/base_backup`, {
|
|
@@ -134,7 +136,7 @@ export function registerPitrTools(server) {
|
|
|
134
136
|
}
|
|
135
137
|
return {
|
|
136
138
|
content: [
|
|
137
|
-
{ type: "text", text: "Base backup triggered. Track it via `list_pitr_base_backups`
|
|
139
|
+
{ type: "text", text: "Base backup triggered. Track it via `list_pitr_base_backups` - status moves pending → running → completed (or failed)." },
|
|
138
140
|
{ type: "text", text: JSON.stringify(result.data, null, 2) },
|
|
139
141
|
],
|
|
140
142
|
};
|
|
@@ -156,7 +158,7 @@ export function registerPitrTools(server) {
|
|
|
156
158
|
}
|
|
157
159
|
return { content: [{ type: "text", text: JSON.stringify(result.data, null, 2) }] };
|
|
158
160
|
});
|
|
159
|
-
server.tool("restore_pitr", "Restore an instance to a point in time. Creates a NEW Postgres
|
|
161
|
+
server.tool("restore_pitr", "Restore an instance to a point in time. Creates a NEW instance of the same engine (Postgres or MySQL) recovered to `target_time` - the source instance is untouched. `target_time` must fall within the source instance's [oldest_restore_point, latest_restore_point] window (see `get_pitr`). `name` is the new instance name; must start with a letter and use letters/digits/hyphens only.", {
|
|
160
162
|
instance_id: z.string().min(1).describe("Source instance to restore FROM"),
|
|
161
163
|
target_time: z.string().regex(/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d+)?Z?$/, "ISO 8601 timestamp, ideally with Z suffix (UTC)").describe("Target moment, e.g. 2026-05-12T14:30:00Z"),
|
|
162
164
|
name: z.string().regex(/^[a-zA-Z][a-zA-Z0-9-]{0,62}$/, "1-63 chars, must start with a letter")
|
|
@@ -167,7 +169,7 @@ export function registerPitrTools(server) {
|
|
|
167
169
|
return {
|
|
168
170
|
content: [{
|
|
169
171
|
type: "text",
|
|
170
|
-
text: `⚠️ About to RESTORE instance ${instance_id} to ${target_time}.\n\nThis creates a NEW Postgres
|
|
172
|
+
text: `⚠️ About to RESTORE instance ${instance_id} to ${target_time}.\n\nThis creates a NEW instance (same engine as the source, Postgres or MySQL) named \`${name}\` and starts provider charges. The source instance is untouched.\n\nCall again with confirm=true to proceed.`,
|
|
171
173
|
}],
|
|
172
174
|
};
|
|
173
175
|
}
|
package/dist/tools/pitr.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pitr.js","sourceRoot":"","sources":["../../src/tools/pitr.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C
|
|
1
|
+
{"version":3,"file":"pitr.js","sourceRoot":"","sources":["../../src/tools/pitr.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,7 +3,7 @@ import { apiRequest } from "../client.js";
|
|
|
3
3
|
import { session } from "../session.js";
|
|
4
4
|
/**
|
|
5
5
|
* Project databases (CoolifyDatabase) - Postgres/Redis/MySQL/MongoDB instances
|
|
6
|
-
* attached to a project, provisioned via Coolify. Distinct from the AWS
|
|
6
|
+
* attached to a project, provisioned via Coolify. Distinct from the AWS
|
|
7
7
|
* *managed instances* (`list_instances`/`create_instance`) - these live inside a
|
|
8
8
|
* PaaS project and share its server.
|
|
9
9
|
*
|
|
@@ -49,11 +49,11 @@ export function registerProjectDatabaseTools(server) {
|
|
|
49
49
|
}
|
|
50
50
|
return { content: [{ type: "text", text: JSON.stringify(result.data, null, 2) }] };
|
|
51
51
|
});
|
|
52
|
-
server.tool("create_project_database", "Create a database inside a project (provisioned via Coolify; returns 202, status starts `creating` - poll `list_project_databases`). The project must be `active`. Provide the type-specific credentials (see fields). Passwords must be 8+ chars with no spaces or shell-dangerous chars.
|
|
52
|
+
server.tool("create_project_database", "Create a database inside a project (provisioned via Coolify; returns 202, status starts `creating` - poll `list_project_databases`). The project must be `active`. Provide the type-specific credentials (see fields). Passwords must be 8+ chars with no spaces or shell-dangerous chars. `is_public` is REQUIRED and has no default: ASK THE USER whether the database should be publicly reachable on a port (convenient for external clients but exposes it to the internet) or kept private to the project (safer). Do not assume.", {
|
|
53
53
|
project_pid: z.string().min(1),
|
|
54
54
|
db_type: z.enum(DB_TYPES).describe("postgres | redis | mysql | mongodb"),
|
|
55
55
|
name: z.string().min(1).max(255),
|
|
56
|
-
is_public: z.boolean().
|
|
56
|
+
is_public: z.boolean().describe("Required choice (ask the user, do not assume): true = expose on a public port (internet-reachable); false = private to the project."),
|
|
57
57
|
public_port: z.number().int().min(1024).max(65535).optional().describe("Public port when is_public (defaults: pg 5432, redis 6379, mysql 3306, mongo 27017)"),
|
|
58
58
|
// postgres
|
|
59
59
|
postgres_user: z.string().max(255).optional(),
|
|
@@ -74,7 +74,7 @@ export function registerProjectDatabaseTools(server) {
|
|
|
74
74
|
if (!hasOrg())
|
|
75
75
|
return { content: [{ type: "text", text: NO_ORG }] };
|
|
76
76
|
const dbType = args.db_type;
|
|
77
|
-
const isPublic = args.is_public
|
|
77
|
+
const isPublic = args.is_public;
|
|
78
78
|
const body = { name: args.name, is_public: isPublic };
|
|
79
79
|
if (isPublic)
|
|
80
80
|
body.public_port = args.public_port ?? DEFAULT_PORTS[dbType];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project-databases.js","sourceRoot":"","sources":["../../src/tools/project-databases.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;;;;;;;;;;;;GAYG;AAEH,MAAM,aAAa,GAAG,2BAA2B,CAAC;AAClD,MAAM,QAAQ,GAAG,CAAC,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,CAAU,CAAC;AAGpE,uEAAuE;AACvE,MAAM,WAAW,GAAG,yCAAyC,CAAC;AAC9D,MAAM,aAAa,GAA2B,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;AAE3G,MAAM,MAAM,GACV,qFAAqF,CAAC;AAExF,SAAS,MAAM;IACb,OAAO,OAAO,CAAC,cAAc,EAAE,KAAK,IAAI,CAAC;AAC3C,CAAC;AAED,SAAS,UAAU,CAAC,CAAS;IAC3B,OAAO,CAAC,KAAK,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7C,CAAC;AAED,SAAS,aAAa,CAAC,KAAa,EAAE,CAAqB;IACzD,IAAI,CAAC,CAAC;QAAE,OAAO,GAAG,KAAK,sCAAsC,CAAC;IAC9D,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,GAAG,KAAK,iCAAiC,CAAC;IACnE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;QAAE,OAAO,GAAG,KAAK,oEAAoE,CAAC;IAC9G,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,4BAA4B,CAAC,MAAiB;IAC5D,MAAM,CAAC,IAAI,CACT,wBAAwB,EACxB,kRAAkR,EAClR;QACE,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;KAC/B,EACD,KAAK,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE;QACxB,IAAI,CAAC,MAAM,EAAE;YAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;QACpE,MAAM,MAAM,GAAG,MAAM,UAAU,CAAU,GAAG,aAAa,IAAI,WAAW,YAAY,EAAE;YACpF,QAAQ,EAAE,wBAAwB;SACnC,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,yBAAyB,EACzB,
|
|
1
|
+
{"version":3,"file":"project-databases.js","sourceRoot":"","sources":["../../src/tools/project-databases.ts"],"names":[],"mappings":"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"}
|
|
@@ -33,13 +33,13 @@ export function registerProjectServiceTools(server) {
|
|
|
33
33
|
}
|
|
34
34
|
return { content: [{ type: "text", text: JSON.stringify(result.data, null, 2) }] };
|
|
35
35
|
});
|
|
36
|
-
server.tool("create_project_service", "Deploy a service template into a project (currently only `supabase`). Returns 202, status starts `creating` - poll `list_project_services`. The project must be `active`. The dashboard password must be 8+ characters.", {
|
|
36
|
+
server.tool("create_project_service", "Deploy a service template into a project (currently only `supabase`). Returns 202, status starts `creating` - poll `list_project_services`. The project must be `active`. The dashboard password must be 8+ characters. `is_public` is REQUIRED and has no default: ASK THE USER whether the service should be publicly reachable (internet-exposed) or private to the project. Do not assume.", {
|
|
37
37
|
project_pid: z.string().min(1),
|
|
38
38
|
template_type: z.enum(TEMPLATE_TYPES).describe("Service template (only `supabase` is supported today)"),
|
|
39
39
|
name: z.string().min(1).max(255),
|
|
40
40
|
dashboard_username: z.string().min(1).max(255).describe("Supabase Studio dashboard username"),
|
|
41
41
|
dashboard_password: z.string().min(8).max(255).describe("Supabase Studio dashboard password (8+ chars)"),
|
|
42
|
-
is_public: z.boolean().
|
|
42
|
+
is_public: z.boolean().describe("Required choice (ask the user, do not assume): true = expose publicly (internet-reachable); false = private to the project."),
|
|
43
43
|
public_port: z.number().int().min(1024).max(65535).optional(),
|
|
44
44
|
}, async ({ project_pid, template_type, name, dashboard_username, dashboard_password, is_public, public_port }) => {
|
|
45
45
|
if (!hasOrg())
|
|
@@ -49,9 +49,8 @@ export function registerProjectServiceTools(server) {
|
|
|
49
49
|
dashboard_username,
|
|
50
50
|
dashboard_password,
|
|
51
51
|
instant_deploy: true,
|
|
52
|
+
is_public,
|
|
52
53
|
};
|
|
53
|
-
if (is_public !== undefined)
|
|
54
|
-
body.is_public = is_public;
|
|
55
54
|
if (public_port !== undefined)
|
|
56
55
|
body.public_port = public_port;
|
|
57
56
|
const result = await apiRequest(`${PROJECTS_BASE}/${project_pid}/services/${template_type}`, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project-services.js","sourceRoot":"","sources":["../../src/tools/project-services.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;;;;;;;;;;;GAWG;AAEH,MAAM,aAAa,GAAG,2BAA2B,CAAC;AAClD,MAAM,cAAc,GAAG,CAAC,UAAU,CAAU,CAAC;AAE7C,MAAM,MAAM,GACV,qFAAqF,CAAC;AAExF,SAAS,MAAM;IACb,OAAO,OAAO,CAAC,cAAc,EAAE,KAAK,IAAI,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,MAAiB;IAC3D,MAAM,CAAC,IAAI,CACT,uBAAuB,EACvB,4PAA4P,EAC5P;QACE,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;KAC/B,EACD,KAAK,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE;QACxB,IAAI,CAAC,MAAM,EAAE;YAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;QACpE,MAAM,MAAM,GAAG,MAAM,UAAU,CAAU,GAAG,aAAa,IAAI,WAAW,WAAW,EAAE;YACnF,QAAQ,EAAE,uBAAuB;SAClC,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,oCAAoC,MAAM,CAAC,UAAU,MAAM,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC;QAC5H,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,wBAAwB,EACxB,
|
|
1
|
+
{"version":3,"file":"project-services.js","sourceRoot":"","sources":["../../src/tools/project-services.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;;;;;;;;;;;GAWG;AAEH,MAAM,aAAa,GAAG,2BAA2B,CAAC;AAClD,MAAM,cAAc,GAAG,CAAC,UAAU,CAAU,CAAC;AAE7C,MAAM,MAAM,GACV,qFAAqF,CAAC;AAExF,SAAS,MAAM;IACb,OAAO,OAAO,CAAC,cAAc,EAAE,KAAK,IAAI,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,MAAiB;IAC3D,MAAM,CAAC,IAAI,CACT,uBAAuB,EACvB,4PAA4P,EAC5P;QACE,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;KAC/B,EACD,KAAK,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE;QACxB,IAAI,CAAC,MAAM,EAAE;YAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;QACpE,MAAM,MAAM,GAAG,MAAM,UAAU,CAAU,GAAG,aAAa,IAAI,WAAW,WAAW,EAAE;YACnF,QAAQ,EAAE,uBAAuB;SAClC,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,oCAAoC,MAAM,CAAC,UAAU,MAAM,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC;QAC5H,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,wBAAwB,EACxB,gYAAgY,EAChY;QACE,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QAC9B,aAAa,EAAE,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,QAAQ,CAAC,uDAAuD,CAAC;QACvG,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;QAChC,kBAAkB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,oCAAoC,CAAC;QAC7F,kBAAkB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,+CAA+C,CAAC;QACxG,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,6HAA6H,CAAC;QAC9J,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE;KAC9D,EACD,KAAK,EAAE,EAAE,WAAW,EAAE,aAAa,EAAE,IAAI,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,SAAS,EAAE,WAAW,EAAE,EAAE,EAAE;QAC7G,IAAI,CAAC,MAAM,EAAE;YAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;QACpE,MAAM,IAAI,GAA4B;YACpC,IAAI;YACJ,kBAAkB;YAClB,kBAAkB;YAClB,cAAc,EAAE,IAAI;YACpB,SAAS;SACV,CAAC;QACF,IAAI,WAAW,KAAK,SAAS;YAAE,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAE9D,MAAM,MAAM,GAAG,MAAM,UAAU,CAAU,GAAG,aAAa,IAAI,WAAW,aAAa,aAAa,EAAE,EAAE;YACpG,MAAM,EAAE,MAAM;YACd,IAAI;YACJ,QAAQ,EAAE,wBAAwB;SACnC,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,6BAA6B,MAAM,CAAC,UAAU,MAAM,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC;QACrH,CAAC;QACD,OAAO;YACL,OAAO,EAAE;gBACP,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,IAAI,OAAO,aAAa,oFAAoF,EAAE;gBACjJ,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,wBAAwB,EACxB,6JAA6J,EAC7J;QACE,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QAC9B,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QAC9B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,yCAAyC,CAAC;QAC3E,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,8DAA8D,CAAC;KAC9F,EACD,KAAK,EAAE,EAAE,WAAW,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE;QACpD,IAAI,CAAC,MAAM,EAAE;YAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;QACpE,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,iCAAiC,IAAI,OAAO,WAAW,qFAAqF,EAAE,CAAC,EAAE,CAAC;QAC7L,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,UAAU,CAAU,GAAG,aAAa,IAAI,WAAW,aAAa,WAAW,EAAE,EAAE;YAClG,MAAM,EAAE,QAAQ;YAChB,IAAI,EAAE,EAAE,IAAI,EAAE;YACd,QAAQ,EAAE,wBAAwB;SACnC,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,6BAA6B,MAAM,CAAC,UAAU,MAAM,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC;QACrH,CAAC;QACD,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,0BAA0B,EAAE,CAAC,EAAE,CAAC;IAC3E,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
|
+
/**
|
|
3
|
+
* ProxySQL connection-pooling tools.
|
|
4
|
+
*
|
|
5
|
+
* Endpoint family: `/aws/v1/instances/:id/proxysql`
|
|
6
|
+
* - GET → current config / status
|
|
7
|
+
* - POST → enable (transitions to `enabling` → `enabled`)
|
|
8
|
+
* - PUT → reconfigure (only valid while `enabled`)
|
|
9
|
+
* - DELETE → disable (drains connections, valid from `enabled` or `error`)
|
|
10
|
+
*
|
|
11
|
+
* MySQL-only. Clients connect on port 6033 once `status: enabled` is reached;
|
|
12
|
+
* the ProxySQL admin interface listens on port 6032. Connection multiplexing
|
|
13
|
+
* and limits are tunable per workload.
|
|
14
|
+
*/
|
|
15
|
+
export declare function registerProxySqlTools(server: McpServer): void;
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { apiRequest } from "../client.js";
|
|
3
|
+
/**
|
|
4
|
+
* ProxySQL connection-pooling tools.
|
|
5
|
+
*
|
|
6
|
+
* Endpoint family: `/aws/v1/instances/:id/proxysql`
|
|
7
|
+
* - GET → current config / status
|
|
8
|
+
* - POST → enable (transitions to `enabling` → `enabled`)
|
|
9
|
+
* - PUT → reconfigure (only valid while `enabled`)
|
|
10
|
+
* - DELETE → disable (drains connections, valid from `enabled` or `error`)
|
|
11
|
+
*
|
|
12
|
+
* MySQL-only. Clients connect on port 6033 once `status: enabled` is reached;
|
|
13
|
+
* the ProxySQL admin interface listens on port 6032. Connection multiplexing
|
|
14
|
+
* and limits are tunable per workload.
|
|
15
|
+
*/
|
|
16
|
+
export function registerProxySqlTools(server) {
|
|
17
|
+
server.tool("get_proxysql", "Get the ProxySQL connection-pooling config and status for a MySQL instance. Returns null when pooling has never been configured. ProxySQL status: disabled | enabling | enabled | disabling | error.", {
|
|
18
|
+
instance_id: z.string().min(1).describe("Instance PID (e.g. awsinst_xxx)"),
|
|
19
|
+
}, async ({ instance_id }) => {
|
|
20
|
+
const result = await apiRequest(`/aws/v1/instances/${instance_id}/proxysql`, {
|
|
21
|
+
toolName: "get_proxysql",
|
|
22
|
+
skipOrgInjection: true,
|
|
23
|
+
});
|
|
24
|
+
if (!result.success) {
|
|
25
|
+
return {
|
|
26
|
+
content: [{
|
|
27
|
+
type: "text",
|
|
28
|
+
text: `Failed to get ProxySQL config (${result.statusCode}): ${result.message}`,
|
|
29
|
+
}],
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
return { content: [{ type: "text", text: JSON.stringify(result.data, null, 2) }] };
|
|
33
|
+
});
|
|
34
|
+
server.tool("enable_proxysql", "Enable ProxySQL connection pooling on a MySQL instance (MySQL-only). Clients connect on port 6033 once status reaches `enabled`; the ProxySQL admin interface listens on port 6032. Status is one of disabled | enabling | enabled | disabling | error. After enabling, poll `get_proxysql` until status is `enabled`.", {
|
|
35
|
+
instance_id: z.string().min(1),
|
|
36
|
+
max_connections: z.number().int().min(1).max(100000).optional()
|
|
37
|
+
.describe("Max client connections to ProxySQL (range 1-100000)"),
|
|
38
|
+
multiplexing: z.boolean().optional()
|
|
39
|
+
.describe("Reuse backend connections across clients when safe"),
|
|
40
|
+
connection_max_age_ms: z.number().int().min(0).optional()
|
|
41
|
+
.describe("Max age of a backend connection in milliseconds before recycling (>= 0)"),
|
|
42
|
+
}, async ({ instance_id, max_connections, multiplexing, connection_max_age_ms }) => {
|
|
43
|
+
const body = {};
|
|
44
|
+
if (max_connections !== undefined)
|
|
45
|
+
body.max_connections = max_connections;
|
|
46
|
+
if (multiplexing !== undefined)
|
|
47
|
+
body.multiplexing = multiplexing;
|
|
48
|
+
if (connection_max_age_ms !== undefined)
|
|
49
|
+
body.connection_max_age_ms = connection_max_age_ms;
|
|
50
|
+
const result = await apiRequest(`/aws/v1/instances/${instance_id}/proxysql`, {
|
|
51
|
+
method: "POST",
|
|
52
|
+
body,
|
|
53
|
+
toolName: "enable_proxysql",
|
|
54
|
+
skipOrgInjection: true,
|
|
55
|
+
});
|
|
56
|
+
if (!result.success) {
|
|
57
|
+
return {
|
|
58
|
+
content: [{
|
|
59
|
+
type: "text",
|
|
60
|
+
text: `Failed to enable ProxySQL (${result.statusCode}): ${result.message}`,
|
|
61
|
+
}],
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
return {
|
|
65
|
+
content: [
|
|
66
|
+
{ type: "text", text: "ProxySQL enable requested - status will transition to `enabled` once the configuration is applied. Poll `get_proxysql` to track progress." },
|
|
67
|
+
{ type: "text", text: JSON.stringify(result.data, null, 2) },
|
|
68
|
+
],
|
|
69
|
+
};
|
|
70
|
+
});
|
|
71
|
+
server.tool("reconfigure_proxysql", "Apply new ProxySQL settings on an already-enabled MySQL instance. Only sends the fields you provide (PATCH-style). Status must be `enabled`; will return an error otherwise.", {
|
|
72
|
+
instance_id: z.string().min(1),
|
|
73
|
+
max_connections: z.number().int().min(1).max(100000).optional(),
|
|
74
|
+
multiplexing: z.boolean().optional(),
|
|
75
|
+
connection_max_age_ms: z.number().int().min(0).optional(),
|
|
76
|
+
}, async ({ instance_id, max_connections, multiplexing, connection_max_age_ms }) => {
|
|
77
|
+
const body = {};
|
|
78
|
+
if (max_connections !== undefined)
|
|
79
|
+
body.max_connections = max_connections;
|
|
80
|
+
if (multiplexing !== undefined)
|
|
81
|
+
body.multiplexing = multiplexing;
|
|
82
|
+
if (connection_max_age_ms !== undefined)
|
|
83
|
+
body.connection_max_age_ms = connection_max_age_ms;
|
|
84
|
+
if (Object.keys(body).length === 0) {
|
|
85
|
+
return {
|
|
86
|
+
content: [{
|
|
87
|
+
type: "text",
|
|
88
|
+
text: "No changes to apply - pass at least one of max_connections / multiplexing / connection_max_age_ms.",
|
|
89
|
+
}],
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
const result = await apiRequest(`/aws/v1/instances/${instance_id}/proxysql`, {
|
|
93
|
+
method: "PUT",
|
|
94
|
+
body,
|
|
95
|
+
toolName: "reconfigure_proxysql",
|
|
96
|
+
skipOrgInjection: true,
|
|
97
|
+
});
|
|
98
|
+
if (!result.success) {
|
|
99
|
+
return {
|
|
100
|
+
content: [{
|
|
101
|
+
type: "text",
|
|
102
|
+
text: `Failed to reconfigure ProxySQL (${result.statusCode}): ${result.message}`,
|
|
103
|
+
}],
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
return { content: [{ type: "text", text: JSON.stringify(result.data, null, 2) }] };
|
|
107
|
+
});
|
|
108
|
+
server.tool("disable_proxysql", "Disable ProxySQL on a MySQL instance. Existing connections drain gracefully. The config row is preserved so you can re-enable later with `enable_proxysql`. Valid from `enabled` or `error` state - use this to recover from `error`.", {
|
|
109
|
+
instance_id: z.string().min(1),
|
|
110
|
+
confirm: z.boolean().describe("Must be true to proceed. Disabling will drop pool warmth and force clients back to port 3306."),
|
|
111
|
+
}, async ({ instance_id, confirm }) => {
|
|
112
|
+
if (!confirm) {
|
|
113
|
+
return {
|
|
114
|
+
content: [{
|
|
115
|
+
type: "text",
|
|
116
|
+
text: `⚠️ About to DISABLE ProxySQL on instance ${instance_id}. Existing pooled connections will drain. Re-enable any time with \`enable_proxysql\`.\n\nCall again with confirm=true to proceed.`,
|
|
117
|
+
}],
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
const result = await apiRequest(`/aws/v1/instances/${instance_id}/proxysql`, {
|
|
121
|
+
method: "DELETE",
|
|
122
|
+
toolName: "disable_proxysql",
|
|
123
|
+
skipOrgInjection: true,
|
|
124
|
+
});
|
|
125
|
+
if (!result.success) {
|
|
126
|
+
return {
|
|
127
|
+
content: [{
|
|
128
|
+
type: "text",
|
|
129
|
+
text: `Failed to disable ProxySQL (${result.statusCode}): ${result.message}`,
|
|
130
|
+
}],
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
return {
|
|
134
|
+
content: [
|
|
135
|
+
{ type: "text", text: "ProxySQL disable requested - clients should switch to port 3306." },
|
|
136
|
+
{ type: "text", text: JSON.stringify(result.data, null, 2) },
|
|
137
|
+
],
|
|
138
|
+
};
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
//# sourceMappingURL=proxysql.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"proxysql.js","sourceRoot":"","sources":["../../src/tools/proxysql.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/scaling.js
CHANGED
|
@@ -2,14 +2,14 @@ import { z } from "zod";
|
|
|
2
2
|
import { apiRequest } from "../client.js";
|
|
3
3
|
import { session } from "../session.js";
|
|
4
4
|
/**
|
|
5
|
-
* Scaling
|
|
5
|
+
* Scaling - manual one-off resize + auto-scaling policies.
|
|
6
6
|
*
|
|
7
7
|
* Endpoints:
|
|
8
|
-
* - PUT /aws/v1/instances/:id/scale
|
|
9
|
-
* - GET /scaling_policies
|
|
10
|
-
* - POST /scaling_policies
|
|
11
|
-
* - PATCH /scaling_policies/:id
|
|
12
|
-
* - DELETE /scaling_policies/:id
|
|
8
|
+
* - PUT /aws/v1/instances/:id/scale - manual scale
|
|
9
|
+
* - GET /scaling_policies - list (filterable by instance)
|
|
10
|
+
* - POST /scaling_policies - create
|
|
11
|
+
* - PATCH /scaling_policies/:id - update
|
|
12
|
+
* - DELETE /scaling_policies/:id - delete
|
|
13
13
|
*
|
|
14
14
|
* Scaling-policy actions: start_instance | stop_instance | resize_instance |
|
|
15
15
|
* expand_storage | add_replica | manual_scale.
|
|
@@ -41,7 +41,7 @@ const METRIC_NAMES = [
|
|
|
41
41
|
];
|
|
42
42
|
const COMPARISON_OPERATORS = [">", "<", ">=", "<="];
|
|
43
43
|
export function registerScalingTools(server) {
|
|
44
|
-
server.tool("scale_instance", "Manual one-off resize of an instance
|
|
44
|
+
server.tool("scale_instance", "Manual one-off resize of an instance - change instance type, volume type, size, IOPS, throughput. Only fields you pass are sent (PATCH-style). Response includes `scaling_event_id` you can poll on the instance status (`resizing` / `modifying_storage` → terminal state). Storage must grow, not shrink.", {
|
|
45
45
|
instance_id: z.string().min(1),
|
|
46
46
|
target_instance_type: z.string().optional()
|
|
47
47
|
.describe("e.g. t3.medium, m6i.xlarge, r7g.4xlarge"),
|
|
@@ -68,7 +68,7 @@ export function registerScalingTools(server) {
|
|
|
68
68
|
return {
|
|
69
69
|
content: [{
|
|
70
70
|
type: "text",
|
|
71
|
-
text: "Nothing to scale
|
|
71
|
+
text: "Nothing to scale - pass at least one of target_instance_type / new_size_gb / new_iops / new_throughput / new_volume_type.",
|
|
72
72
|
}],
|
|
73
73
|
};
|
|
74
74
|
}
|
|
@@ -135,7 +135,7 @@ export function registerScalingTools(server) {
|
|
|
135
135
|
metric_name: z.enum(METRIC_NAMES).optional(),
|
|
136
136
|
comparison_operator: z.enum(COMPARISON_OPERATORS).optional(),
|
|
137
137
|
threshold: z.number().optional()
|
|
138
|
-
.describe("0
|
|
138
|
+
.describe("0-100 for percentage metrics"),
|
|
139
139
|
duration_minutes: z.number().int().min(1).optional(),
|
|
140
140
|
cooldown_minutes: z.number().int().min(0).optional(),
|
|
141
141
|
// Scheduled / start-stop trigger
|
|
@@ -146,9 +146,9 @@ export function registerScalingTools(server) {
|
|
|
146
146
|
end_time: z.string().optional()
|
|
147
147
|
.describe("ISO 8601 window end"),
|
|
148
148
|
scheduled_start_time: z.string().optional()
|
|
149
|
-
.describe("HH:MM UTC
|
|
149
|
+
.describe("HH:MM UTC - only for action=start_instance"),
|
|
150
150
|
scheduled_stop_time: z.string().optional()
|
|
151
|
-
.describe("HH:MM UTC
|
|
151
|
+
.describe("HH:MM UTC - only for action=stop_instance"),
|
|
152
152
|
days_of_week: z.array(z.enum(["monday", "tuesday", "wednesday", "thursday", "friday", "saturday", "sunday"])).optional(),
|
|
153
153
|
timezone: z.string().optional().describe("Default UTC; BE supports UTC | EST | PST | GMT | CET"),
|
|
154
154
|
// Action-specific details
|
|
@@ -239,7 +239,7 @@ export function registerScalingTools(server) {
|
|
|
239
239
|
return {
|
|
240
240
|
content: [{
|
|
241
241
|
type: "text",
|
|
242
|
-
text: "No changes to apply
|
|
242
|
+
text: "No changes to apply - pass at least one field to update.",
|
|
243
243
|
}],
|
|
244
244
|
};
|
|
245
245
|
}
|
|
@@ -259,7 +259,7 @@ export function registerScalingTools(server) {
|
|
|
259
259
|
}
|
|
260
260
|
return { content: [{ type: "text", text: JSON.stringify(result.data, null, 2) }] };
|
|
261
261
|
});
|
|
262
|
-
server.tool("delete_scaling_policy", "Delete a scaling policy. The associated instance is unaffected
|
|
262
|
+
server.tool("delete_scaling_policy", "Delete a scaling policy. The associated instance is unaffected - only the schedule / rule is removed.", {
|
|
263
263
|
policy_id: z.string().min(1),
|
|
264
264
|
confirm: z.boolean().describe("Must be true to proceed."),
|
|
265
265
|
}, async ({ policy_id, confirm }) => {
|
package/dist/types/models.d.ts
CHANGED
package/dist/types/models.js
CHANGED
package/dist/types/tiers.d.ts
CHANGED
package/dist/types/tiers.js
CHANGED
|
@@ -1,33 +1,14 @@
|
|
|
1
1
|
export const TIER_CONFIGS = {
|
|
2
|
-
|
|
3
|
-
readBucket: { burst: 20, ratePerSecond: 1 },
|
|
4
|
-
writeBucket: { burst: 10, ratePerSecond: 0.33 },
|
|
5
|
-
maxConcurrent: 3,
|
|
6
|
-
},
|
|
7
|
-
STARTER: {
|
|
8
|
-
readBucket: { burst: 40, ratePerSecond: 2.5 },
|
|
9
|
-
writeBucket: { burst: 15, ratePerSecond: 0.83 },
|
|
10
|
-
maxConcurrent: 5,
|
|
11
|
-
},
|
|
12
|
-
PRO: {
|
|
2
|
+
DEFAULT: {
|
|
13
3
|
readBucket: { burst: 80, ratePerSecond: 5 },
|
|
14
4
|
writeBucket: { burst: 30, ratePerSecond: 2 },
|
|
15
5
|
maxConcurrent: 10,
|
|
16
6
|
},
|
|
17
|
-
ENTERPRISE: {
|
|
18
|
-
readBucket: { burst: 150, ratePerSecond: 10 },
|
|
19
|
-
writeBucket: { burst: 50, ratePerSecond: 5 },
|
|
20
|
-
maxConcurrent: Infinity,
|
|
21
|
-
},
|
|
22
7
|
};
|
|
23
8
|
export const EXEMPT_TOOLS = new Set([
|
|
24
9
|
"list_regions",
|
|
25
10
|
"get_instance_types_for_region",
|
|
26
11
|
"list_storage_types",
|
|
27
|
-
// Provider / Hetzner reference data - static, no BE call
|
|
28
|
-
"list_cloud_providers",
|
|
29
|
-
"list_hetzner_locations",
|
|
30
|
-
"list_hetzner_server_types",
|
|
31
12
|
]);
|
|
32
13
|
export const WRITE_TOOLS = new Set([
|
|
33
14
|
"create_or_login_user",
|
|
@@ -92,14 +73,9 @@ export const WRITE_TOOLS = new Set([
|
|
|
92
73
|
"trigger_pitr_base_backup",
|
|
93
74
|
"restore_pitr",
|
|
94
75
|
// Billing (Module 13)
|
|
95
|
-
"
|
|
96
|
-
"change_subscription",
|
|
97
|
-
"cancel_subscription",
|
|
76
|
+
"create_topup",
|
|
98
77
|
"link_billing_payment_method",
|
|
99
78
|
"update_billing_contact",
|
|
100
|
-
// Hetzner (Module 14)
|
|
101
|
-
"create_hetzner_instance",
|
|
102
|
-
"delete_hetzner_instance",
|
|
103
79
|
"create_webhook",
|
|
104
80
|
"update_webhook",
|
|
105
81
|
"delete_webhook",
|
|
@@ -137,6 +113,12 @@ export const WRITE_TOOLS = new Set([
|
|
|
137
113
|
// PaaS - Deployment notifications (Module 22)
|
|
138
114
|
"bind_deployment_notification_channel",
|
|
139
115
|
"unbind_deployment_notification_channel",
|
|
116
|
+
// ProxySQL (Module 23)
|
|
117
|
+
"enable_proxysql",
|
|
118
|
+
"reconfigure_proxysql",
|
|
119
|
+
"disable_proxysql",
|
|
120
|
+
// MySQL config (Module 24)
|
|
121
|
+
"update_mysql_config",
|
|
140
122
|
]);
|
|
141
123
|
export function categorizeOperation(toolName) {
|
|
142
124
|
if (EXEMPT_TOOLS.has(toolName))
|
package/dist/types/tiers.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tiers.js","sourceRoot":"","sources":["../../src/types/tiers.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"tiers.js","sourceRoot":"","sources":["../../src/types/tiers.ts"],"names":[],"mappings":"AAgBA,MAAM,CAAC,MAAM,YAAY,GAAmD;IAC1E,OAAO,EAAE;QACP,UAAU,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,aAAa,EAAE,CAAC,EAAE;QAC3C,WAAW,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,aAAa,EAAE,CAAC,EAAE;QAC5C,aAAa,EAAE,EAAE;KAClB;CACF,CAAC;AAIF,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC;IAClC,cAAc;IACd,+BAA+B;IAC/B,oBAAoB;CACrB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC;IACjC,sBAAsB;IACtB,sBAAsB;IACtB,qBAAqB;IACrB,qBAAqB;IACrB,qBAAqB;IACrB,eAAe;IACf,eAAe;IACf,mBAAmB;IACnB,gBAAgB;IAChB,mBAAmB;IACnB,mBAAmB;IACnB,wBAAwB;IACxB,YAAY;IACZ,YAAY;IACZ,eAAe;IACf,uBAAuB;IACvB,uBAAuB;IACvB,iBAAiB;IACjB,iBAAiB;IACjB,eAAe;IACf,gBAAgB;IAChB,iBAAiB;IACjB,iBAAiB;IACjB,eAAe;IACf,gBAAgB;IAChB,iBAAiB;IACjB,kBAAkB;IAClB,eAAe;IACf,eAAe;IACf,sBAAsB;IACtB,sBAAsB;IACtB,sBAAsB;IACtB,iBAAiB;IACjB,iBAAiB;IACjB,mBAAmB;IACnB,mBAAmB;IACnB,mBAAmB;IACnB,mBAAmB;IACnB,eAAe;IACf,6BAA6B;IAC7B,6BAA6B;IAC7B,6BAA6B;IAC7B,2BAA2B;IAC3B,uBAAuB;IACvB,uBAAuB;IACvB,uBAAuB;IACvB,uBAAuB;IACvB,kBAAkB;IAClB,uBAAuB;IACvB,mBAAmB;IACnB,6BAA6B;IAC7B,sBAAsB;IACtB,sBAAsB;IACtB,sBAAsB;IACtB,+BAA+B;IAC/B,mBAAmB;IACnB,aAAa;IACb,gBAAgB;IAChB,YAAY;IACZ,0BAA0B;IAC1B,cAAc;IACd,sBAAsB;IACtB,cAAc;IACd,6BAA6B;IAC7B,wBAAwB;IACxB,gBAAgB;IAChB,gBAAgB;IAChB,gBAAgB;IAChB,oBAAoB;IACpB,oBAAoB;IACpB,yBAAyB;IACzB,qBAAqB;IACrB,8BAA8B;IAC9B,gBAAgB;IAChB,gBAAgB;IAChB,gBAAgB;IAChB,iCAAiC;IACjC,mBAAmB;IACnB,mBAAmB;IACnB,gCAAgC;IAChC,mBAAmB;IACnB,gBAAgB;IAChB,cAAc;IACd,cAAc;IACd,oCAAoC;IACpC,yBAAyB;IACzB,uBAAuB;IACvB,0BAA0B;IAC1B,sBAAsB;IACtB,2CAA2C;IAC3C,cAAc;IACd,gBAAgB;IAChB,gBAAgB;IAChB,uCAAuC;IACvC,yBAAyB;IACzB,yBAAyB;IACzB,sCAAsC;IACtC,wBAAwB;IACxB,wBAAwB;IACxB,8CAA8C;IAC9C,sCAAsC;IACtC,wCAAwC;IACxC,uBAAuB;IACvB,iBAAiB;IACjB,sBAAsB;IACtB,kBAAkB;IAClB,2BAA2B;IAC3B,qBAAqB;CACtB,CAAC,CAAC;AAEH,MAAM,UAAU,mBAAmB,CAAC,QAAgB;IAClD,IAAI,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC;QAAE,OAAO,QAAQ,CAAC;IAChD,IAAI,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC;QAAE,OAAO,OAAO,CAAC;IAC9C,OAAO,MAAM,CAAC;AAChB,CAAC"}
|