@selfhost.dev/mcp-server 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. package/README.md +382 -0
  2. package/dist/auth.d.ts +18 -0
  3. package/dist/auth.js +204 -0
  4. package/dist/auth.js.map +1 -0
  5. package/dist/client.d.ts +10 -0
  6. package/dist/client.js +84 -0
  7. package/dist/client.js.map +1 -0
  8. package/dist/config.d.ts +13 -0
  9. package/dist/config.js +20 -0
  10. package/dist/config.js.map +1 -0
  11. package/dist/index.d.ts +2 -0
  12. package/dist/index.js +71 -0
  13. package/dist/index.js.map +1 -0
  14. package/dist/rate-limiter.d.ts +22 -0
  15. package/dist/rate-limiter.js +124 -0
  16. package/dist/rate-limiter.js.map +1 -0
  17. package/dist/session.d.ts +25 -0
  18. package/dist/session.js +48 -0
  19. package/dist/session.js.map +1 -0
  20. package/dist/tools/alerts.d.ts +2 -0
  21. package/dist/tools/alerts.js +372 -0
  22. package/dist/tools/alerts.js.map +1 -0
  23. package/dist/tools/auth.d.ts +2 -0
  24. package/dist/tools/auth.js +142 -0
  25. package/dist/tools/auth.js.map +1 -0
  26. package/dist/tools/backups.d.ts +2 -0
  27. package/dist/tools/backups.js +294 -0
  28. package/dist/tools/backups.js.map +1 -0
  29. package/dist/tools/credentials.d.ts +2 -0
  30. package/dist/tools/credentials.js +187 -0
  31. package/dist/tools/credentials.js.map +1 -0
  32. package/dist/tools/instances.d.ts +2 -0
  33. package/dist/tools/instances.js +555 -0
  34. package/dist/tools/instances.js.map +1 -0
  35. package/dist/tools/networking.d.ts +2 -0
  36. package/dist/tools/networking.js +240 -0
  37. package/dist/tools/networking.js.map +1 -0
  38. package/dist/tools/organizations.d.ts +2 -0
  39. package/dist/tools/organizations.js +260 -0
  40. package/dist/tools/organizations.js.map +1 -0
  41. package/dist/tools/pg-config.d.ts +2 -0
  42. package/dist/tools/pg-config.js +59 -0
  43. package/dist/tools/pg-config.js.map +1 -0
  44. package/dist/types/api.d.ts +20 -0
  45. package/dist/types/api.js +2 -0
  46. package/dist/types/api.js.map +1 -0
  47. package/dist/types/models.d.ts +44 -0
  48. package/dist/types/models.js +3 -0
  49. package/dist/types/models.js.map +1 -0
  50. package/dist/types/tiers.d.ts +15 -0
  51. package/dist/types/tiers.js +91 -0
  52. package/dist/types/tiers.js.map +1 -0
  53. package/dist/utils/formatters.d.ts +1 -0
  54. package/dist/utils/formatters.js +28 -0
  55. package/dist/utils/formatters.js.map +1 -0
  56. package/dist/utils/validators.d.ts +14 -0
  57. package/dist/utils/validators.js +9 -0
  58. package/dist/utils/validators.js.map +1 -0
  59. package/package.json +51 -0
@@ -0,0 +1,555 @@
1
+ import { z } from "zod";
2
+ import { apiRequest } from "../client.js";
3
+ import { session } from "../session.js";
4
+ function resolveOrgId(organization_id) {
5
+ return organization_id || session.getActiveOrgId();
6
+ }
7
+ const noOrgMessage = "No organization selected. Call `select_organization` first or pass an organization_id.";
8
+ // --- Storage type reference data for client-side validation & pricing ---
9
+ const STORAGE_TYPES = {
10
+ gp3: { minSize: 1, maxSize: 65536, iopsConfigurable: true, throughputConfigurable: true, minIops: 3000, maxIops: 80000, minThroughput: 125, maxThroughput: 1000, pricePerGb: 0.08, pricePerIops: 0.005, freeIops: 3000, pricePerMBps: 0.04, freeMBps: 125 },
11
+ gp2: { minSize: 1, maxSize: 16384, iopsConfigurable: false, throughputConfigurable: false, pricePerGb: 0.10, pricePerIops: 0, freeIops: 0, pricePerMBps: 0, freeMBps: 0 },
12
+ io2: { minSize: 1, maxSize: 65536, iopsConfigurable: true, throughputConfigurable: false, minIops: 100, maxIops: 256000, pricePerGb: 0.125, pricePerIops: 0.065, freeIops: 0, pricePerMBps: 0, freeMBps: 0 },
13
+ io1: { minSize: 1, maxSize: 16384, iopsConfigurable: true, throughputConfigurable: false, minIops: 100, maxIops: 640000, pricePerGb: 0.125, pricePerIops: 0.065, freeIops: 0, pricePerMBps: 0, freeMBps: 0 },
14
+ st1: { minSize: 125, maxSize: 16384, iopsConfigurable: false, throughputConfigurable: false, pricePerGb: 0.045, pricePerIops: 0, freeIops: 0, pricePerMBps: 0, freeMBps: 0 },
15
+ sc1: { minSize: 125, maxSize: 16384, iopsConfigurable: false, throughputConfigurable: false, pricePerGb: 0.015, pricePerIops: 0, freeIops: 0, pricePerMBps: 0, freeMBps: 0 },
16
+ };
17
+ function validateStorageParams(type, iops, throughput) {
18
+ const spec = STORAGE_TYPES[type];
19
+ if (!spec)
20
+ return `Invalid storage type '${type}'. Must be one of: ${Object.keys(STORAGE_TYPES).join(", ")}`;
21
+ if (spec.iopsConfigurable) {
22
+ if (iops === undefined || iops === null)
23
+ return `IOPS is required for ${type} storage type (min: ${spec.minIops})`;
24
+ if (iops < spec.minIops)
25
+ return `For ${type}, IOPS must be at least ${spec.minIops}`;
26
+ if (iops > spec.maxIops)
27
+ return `For ${type}, IOPS must be at most ${spec.maxIops}`;
28
+ }
29
+ if (spec.throughputConfigurable) {
30
+ if (throughput === undefined || throughput === null)
31
+ return `Throughput is required for ${type} storage type (min: ${spec.minThroughput} MB/s)`;
32
+ if (throughput < spec.minThroughput)
33
+ return `For ${type}, throughput must be at least ${spec.minThroughput} MB/s`;
34
+ if (throughput > spec.maxThroughput)
35
+ return `For ${type}, throughput must be at most ${spec.maxThroughput} MB/s`;
36
+ }
37
+ return null;
38
+ }
39
+ // --- Zod schemas ---
40
+ const storageSchema = z.object({
41
+ type: z.enum(["gp3", "gp2", "io2", "io1", "st1", "sc1"]).describe("EBS volume type"),
42
+ size: z.number().int().min(1).describe("Storage size in GiB"),
43
+ iops: z.number().int().optional().describe("Provisioned IOPS (required for gp3/io1/io2)"),
44
+ throughput: z.number().int().optional().describe("Throughput in MB/s (required for gp3 only)"),
45
+ });
46
+ const cidrRangeSchema = z.object({
47
+ cidr: z.string().min(1),
48
+ name: z.string().optional(),
49
+ port: z.number().int().optional(),
50
+ description: z.string().optional(),
51
+ });
52
+ const dlmPolicySchema = z.object({
53
+ schedule_interval: z.number().int().describe("Backup interval (1,2,3,4,6,8,12,24)"),
54
+ schedule_unit: z.string().default("HOURS").describe("Schedule unit (HOURS)"),
55
+ starting_at: z.array(z.string()).describe("Start times array (e.g. ['02:00'])"),
56
+ timezone: z.string().default("UTC").optional(),
57
+ retain_rule_count: z.number().int().min(1).max(1000).describe("Number of snapshots to retain"),
58
+ encryption: z.boolean().default(true).optional(),
59
+ });
60
+ const tagSchema = z.object({
61
+ key: z.string().min(1),
62
+ value: z.string(),
63
+ });
64
+ export function registerInstanceTools(server) {
65
+ // --- Reference data tools (exempt from rate limits) ---
66
+ server.tool("list_regions", "List available AWS regions for instance deployment", {}, async () => {
67
+ const result = await apiRequest("/aws/v1/regions", {
68
+ toolName: "list_regions",
69
+ skipOrgInjection: true,
70
+ });
71
+ if (!result.success) {
72
+ return { content: [{ type: "text", text: `Failed to list regions (${result.statusCode}): ${result.message}` }] };
73
+ }
74
+ return { content: [{ type: "text", text: JSON.stringify(result.data, null, 2) }] };
75
+ });
76
+ server.tool("get_instance_types_for_region", "List available EC2 instance types for a region with specs and hourly pricing. Supports filtering by family, generation, vCPU, and memory.", {
77
+ region_code: z.string().min(1, "Region code is required (e.g. us-east-1)"),
78
+ family: z.string().optional().describe("Filter by instance family (e.g. t3, r6i, m5)"),
79
+ current_gen: z.boolean().optional().describe("Filter to current generation only"),
80
+ min_vcpu: z.number().int().optional().describe("Minimum vCPUs"),
81
+ min_memory: z.number().optional().describe("Minimum memory in GiB"),
82
+ }, async ({ region_code, family, current_gen, min_vcpu, min_memory }) => {
83
+ const query = {};
84
+ if (family)
85
+ query.family = family;
86
+ if (current_gen !== undefined)
87
+ query.current_gen = String(current_gen);
88
+ if (min_vcpu !== undefined)
89
+ query.min_vcpu = String(min_vcpu);
90
+ if (min_memory !== undefined)
91
+ query.min_memory = String(min_memory);
92
+ const result = await apiRequest(`/aws/v1/regions/${region_code}/instance_types`, {
93
+ toolName: "get_instance_types_for_region",
94
+ query,
95
+ skipOrgInjection: true,
96
+ });
97
+ if (!result.success) {
98
+ return { content: [{ type: "text", text: `Failed to get instance types (${result.statusCode}): ${result.message}` }] };
99
+ }
100
+ return { content: [{ type: "text", text: JSON.stringify(result.data, null, 2) }] };
101
+ });
102
+ server.tool("list_storage_types", "List available EBS storage types with pricing, IOPS ranges, and throughput specs", {}, async () => {
103
+ const result = await apiRequest("/aws/v1/storage_types", {
104
+ toolName: "list_storage_types",
105
+ skipOrgInjection: true,
106
+ });
107
+ if (!result.success) {
108
+ return { content: [{ type: "text", text: `Failed to list storage types (${result.statusCode}): ${result.message}` }] };
109
+ }
110
+ return { content: [{ type: "text", text: JSON.stringify(result.data, null, 2) }] };
111
+ });
112
+ // --- Cost estimation ---
113
+ server.tool("estimate_instance_cost", `Estimate the monthly cost of a database instance BEFORE creating it. Call this to present cost to the user for approval before calling create_instance.
114
+
115
+ Returns an itemized cost breakdown: instance, storage, IOPS, throughput, and multi-AZ costs.`, {
116
+ region: z.string().min(1, "AWS region is required (e.g. us-east-1)"),
117
+ instance_type: z.string().min(1, "EC2 instance type (e.g. t3.micro)"),
118
+ storage: z.object({
119
+ type: z.enum(["gp3", "gp2", "io2", "io1", "st1", "sc1"]).describe("EBS volume type"),
120
+ size: z.number().int().min(1).describe("Storage size in GiB"),
121
+ iops: z.number().int().optional().describe("Provisioned IOPS"),
122
+ throughput: z.number().int().optional().describe("Throughput in MB/s"),
123
+ }),
124
+ multi_az: z.boolean().optional().describe("Multi-AZ replication (default: false)"),
125
+ replica_count: z.number().int().min(1).max(2).optional().describe("Number of replicas if multi_az (1 or 2)"),
126
+ }, async ({ region, instance_type, storage, multi_az, replica_count }) => {
127
+ // Fetch instance hourly price from API
128
+ const instanceResult = await apiRequest(`/aws/v1/regions/${region}/instance_types`, {
129
+ toolName: "estimate_instance_cost",
130
+ query: { family: instance_type.split(".")[0] },
131
+ skipOrgInjection: true,
132
+ });
133
+ let hourlyPrice = 0;
134
+ let instanceSpecs = "";
135
+ if (instanceResult.success && instanceResult.data?.instance_types) {
136
+ const match = instanceResult.data.instance_types.find((it) => it.instance_type === instance_type);
137
+ if (match) {
138
+ hourlyPrice = match.hourly_price;
139
+ instanceSpecs = ` (${match.vcpu} vCPU, ${match.memory_gib} GiB RAM)`;
140
+ }
141
+ }
142
+ const spec = STORAGE_TYPES[storage.type];
143
+ if (!spec) {
144
+ return { content: [{ type: "text", text: `Invalid storage type '${storage.type}'.` }] };
145
+ }
146
+ // Instance cost: hourly * 730 hours/month
147
+ const instanceCost = hourlyPrice * 730;
148
+ // Storage cost: GB * price per GB
149
+ const storageCost = storage.size * spec.pricePerGb;
150
+ // IOPS cost: (configured - free) * price, clamped to 0
151
+ const iops = storage.iops ?? 0;
152
+ const billableIops = Math.max(0, iops - spec.freeIops);
153
+ const iopsCost = billableIops * spec.pricePerIops;
154
+ // Throughput cost: (configured - free) * price, clamped to 0
155
+ const throughput = storage.throughput ?? 0;
156
+ const billableMBps = Math.max(0, throughput - spec.freeMBps);
157
+ const throughputCost = billableMBps * spec.pricePerMBps;
158
+ let baseCost = instanceCost + storageCost + iopsCost + throughputCost;
159
+ // Multi-AZ multiplier
160
+ let multiAzNote = "";
161
+ if (multi_az) {
162
+ const replicas = Math.max(1, Math.min(10, replica_count ?? 1));
163
+ baseCost = baseCost * replicas * 1.1;
164
+ multiAzNote = `\nMulti-AZ: ${replicas} replica(s) x 1.1 multiplier applied`;
165
+ }
166
+ const lines = [
167
+ "Estimated Monthly Cost Breakdown",
168
+ "=================================",
169
+ `Instance: ${instance_type}${instanceSpecs}`,
170
+ ` $${hourlyPrice.toFixed(4)}/hr x 730 hrs = $${instanceCost.toFixed(2)}/mo`,
171
+ `Storage: ${storage.size} GiB ${storage.type} @ $${spec.pricePerGb}/GiB = $${storageCost.toFixed(2)}/mo`,
172
+ ];
173
+ if (spec.iopsConfigurable && iops > 0) {
174
+ lines.push(`IOPS: ${iops} (${spec.freeIops} free) → ${billableIops} billable @ $${spec.pricePerIops}/IOPS = $${iopsCost.toFixed(2)}/mo`);
175
+ }
176
+ if (spec.throughputConfigurable && throughput > 0) {
177
+ lines.push(`Throughput: ${throughput} MB/s (${spec.freeMBps} free) → ${billableMBps} billable @ $${spec.pricePerMBps}/MBps = $${throughputCost.toFixed(2)}/mo`);
178
+ }
179
+ if (multiAzNote) {
180
+ lines.push(multiAzNote);
181
+ }
182
+ lines.push("");
183
+ lines.push(`TOTAL: ~$${baseCost.toFixed(2)}/month`);
184
+ lines.push("");
185
+ lines.push("* Prices are estimates based on AWS on-demand pricing and may vary with usage, data transfer, and AWS pricing changes.");
186
+ if (hourlyPrice === 0) {
187
+ lines.push(`* WARNING: Could not fetch hourly price for ${instance_type} in ${region}. Instance cost shown as $0 — actual cost will be higher.`);
188
+ }
189
+ return { content: [{ type: "text", text: lines.join("\n") }] };
190
+ });
191
+ // --- Instance lifecycle tools ---
192
+ server.tool("create_instance", `Create a new database instance. This is the core provisioning tool.
193
+
194
+ RECOMMENDED FLOW (follow this before calling create_instance):
195
+ 1. Ask the user: host on SelfHost's cloud (platform-managed) or their own AWS account (BYOC)?
196
+ 2. Call list_credentials — filter results by cloud_provider matching chosen provider AND status "active".
197
+ - Platform-managed: pick credential where is_platform_managed=true
198
+ - BYOC: pick credential where is_platform_managed=false. If none exist, user must add_credential first.
199
+ 3. If BYOC: call list_vpcs with the credential's id and chosen region — only present VPCs from the "public" group. vpc_id is REQUIRED for BYOC.
200
+ 4. If platform-managed: vpc_id is NOT needed (skip VPC selection entirely).
201
+ 5. Call estimate_instance_cost to show the user the estimated monthly cost before deploying.
202
+ 6. Only call create_instance after the user confirms the cost is acceptable.
203
+
204
+ IMPORTANT:
205
+ - The password in the response is shown ONCE and can never be retrieved again. Save it immediately.
206
+ - public_access is always true (private access not yet supported).
207
+ - Storage IOPS/throughput requirements depend on storage type:
208
+ gp3: iops required (3000-80000), throughput required (125-1000 MB/s)
209
+ io1/io2: iops required (100+), throughput NOT used
210
+ gp2/st1/sc1: iops and throughput NOT used`, {
211
+ organization_id: z.string().optional().describe("Organization PID (defaults to active org)"),
212
+ region: z.string().min(1, "AWS region is required (e.g. us-east-1)"),
213
+ identifier: z.string().min(1, "Database instance name"),
214
+ instance_type: z.string().min(1, "EC2 instance type (e.g. t3.micro, r6i.xlarge)"),
215
+ type_of_dbms: z.enum(["postgres", "mysql", "mongo"]).describe("Database engine"),
216
+ storage: storageSchema,
217
+ db_version: z.string().optional().describe("Database version (postgres: 18, 17, 16)"),
218
+ username: z.string().regex(/^[a-z_][a-z0-9_-]{0,30}$/i).optional().describe("Database username (default: admin)"),
219
+ custom_password: z.string().min(8).max(128).optional().describe("Database password (8-128 printable ASCII chars). Auto-generated if omitted."),
220
+ description: z.string().optional(),
221
+ cloud_credential_id: z.string().optional().describe("Credential PID from list_credentials. Use is_platform_managed=true credential for SelfHost's cloud, or is_platform_managed=false for BYOC. Always ask the user which they prefer."),
222
+ vpc_id: z.string().optional().describe("VPC ID — REQUIRED when using BYOC credentials (is_platform_managed=false). Use list_vpcs and only pick from the 'public' group. Not needed for platform-managed."),
223
+ multi_az: z.boolean().optional().describe("Enable multi-AZ replication (default: false)"),
224
+ replica_count: z.number().int().min(1).max(2).optional().describe("Number of replicas if multi_az (1 or 2)"),
225
+ delete_protection: z.boolean().optional().describe("Prevent accidental deletion (default: true recommended)"),
226
+ backup_enabled: z.boolean().optional().describe("Enable automated backups (default: true recommended)"),
227
+ dlm_policy_config: dlmPolicySchema.optional().describe("Backup schedule config (required if backup_enabled)"),
228
+ allowed_cidr_ranges: z.array(cidrRangeSchema).max(24).optional().describe("IP whitelist (max 24 CIDR ranges)"),
229
+ tags: z.array(tagSchema).optional().describe("AWS resource tags"),
230
+ snapshot_id: z.string().optional().describe("Restore from a backup snapshot ID"),
231
+ postgresql_config: z.record(z.unknown()).optional().describe("PostgreSQL parameter overrides (use preview_pg_config to see available params)"),
232
+ iam_role_arn: z.string().optional().describe("IAM role ARN for the EC2 instance"),
233
+ db_port: z.number().int().min(0).max(65535).optional().describe("Database port (default: 5432 for postgres)"),
234
+ }, async (params) => {
235
+ const orgId = resolveOrgId(params.organization_id);
236
+ if (!orgId) {
237
+ return { content: [{ type: "text", text: noOrgMessage }] };
238
+ }
239
+ // Client-side storage validation
240
+ const storageError = validateStorageParams(params.storage.type, params.storage.iops, params.storage.throughput);
241
+ if (storageError) {
242
+ return { content: [{ type: "text", text: storageError }] };
243
+ }
244
+ const spec = STORAGE_TYPES[params.storage.type];
245
+ if (params.storage.size < spec.minSize) {
246
+ return { content: [{ type: "text", text: `For ${params.storage.type}, storage size must be at least ${spec.minSize} GiB` }] };
247
+ }
248
+ // Build request body — only include defined fields
249
+ const body = {
250
+ organization_id: orgId,
251
+ identifier: params.identifier,
252
+ instance_type: params.instance_type,
253
+ type_of_dbms: params.type_of_dbms,
254
+ storage: {
255
+ type: params.storage.type,
256
+ size: params.storage.size,
257
+ iops: params.storage.iops ?? 0,
258
+ throughput: params.storage.throughput ?? 0,
259
+ },
260
+ public_access: true, // Always true — private access not yet supported
261
+ };
262
+ if (params.db_version)
263
+ body.db_version = params.db_version;
264
+ if (params.username)
265
+ body.username = params.username;
266
+ if (params.custom_password)
267
+ body.custom_password = params.custom_password;
268
+ if (params.description)
269
+ body.description = params.description;
270
+ if (params.cloud_credential_id)
271
+ body.cloud_credential_id = params.cloud_credential_id;
272
+ if (params.vpc_id)
273
+ body.vpc_id = params.vpc_id;
274
+ if (params.multi_az !== undefined)
275
+ body.multi_az = params.multi_az;
276
+ if (params.replica_count !== undefined)
277
+ body.replica_count = params.replica_count;
278
+ if (params.delete_protection !== undefined)
279
+ body.delete_protection = params.delete_protection;
280
+ if (params.backup_enabled !== undefined)
281
+ body.backup_enabled = params.backup_enabled;
282
+ if (params.dlm_policy_config)
283
+ body.dlm_policy_config = params.dlm_policy_config;
284
+ if (params.allowed_cidr_ranges?.length)
285
+ body.allowed_cidr_ranges = params.allowed_cidr_ranges;
286
+ if (params.tags?.length)
287
+ body.tags = params.tags;
288
+ if (params.snapshot_id)
289
+ body.snapshot_id = params.snapshot_id;
290
+ if (params.postgresql_config)
291
+ body.postgresql_config = params.postgresql_config;
292
+ if (params.iam_role_arn)
293
+ body.iam_role_arn = params.iam_role_arn;
294
+ if (params.db_port !== undefined)
295
+ body.db_port = params.db_port;
296
+ const result = await apiRequest(`/aws/v1/instances`, {
297
+ method: "POST",
298
+ body,
299
+ query: { region: params.region },
300
+ toolName: "create_instance",
301
+ skipOrgInjection: true,
302
+ });
303
+ if (!result.success) {
304
+ return { content: [{ type: "text", text: `Failed to create instance (${result.statusCode}): ${result.message}` }] };
305
+ }
306
+ const data = result.data;
307
+ return {
308
+ content: [
309
+ {
310
+ type: "text",
311
+ text: [
312
+ "Instance provisioning started!",
313
+ "",
314
+ `PID: ${data.pid}`,
315
+ `Host: ${data.host}`,
316
+ `Username: ${data.username}`,
317
+ `Password: ${data.password}`,
318
+ "",
319
+ "⚠️ SAVE THIS PASSWORD NOW — it cannot be retrieved again.",
320
+ "",
321
+ `Group ID: ${data.group_id}`,
322
+ `Organization: ${data.organization_id}`,
323
+ ].join("\n"),
324
+ },
325
+ ],
326
+ };
327
+ });
328
+ server.tool("list_instances", "List all database instances for an organization, grouped by group_id (master + replicas).", {
329
+ organization_id: z.string().optional().describe("Organization PID (defaults to active org)"),
330
+ }, async ({ organization_id }) => {
331
+ const orgId = resolveOrgId(organization_id);
332
+ if (!orgId) {
333
+ return { content: [{ type: "text", text: noOrgMessage }] };
334
+ }
335
+ const result = await apiRequest("/aws/v1/instances/by_organization", {
336
+ toolName: "list_instances",
337
+ query: { organization_id: orgId },
338
+ skipOrgInjection: true,
339
+ });
340
+ if (!result.success) {
341
+ return { content: [{ type: "text", text: `Failed to list instances (${result.statusCode}): ${result.message}` }] };
342
+ }
343
+ return { content: [{ type: "text", text: JSON.stringify(result.data, null, 2) }] };
344
+ });
345
+ server.tool("get_instance", "Get detailed information about a specific database instance including latest metrics.", {
346
+ pid: z.string().optional().describe("Instance PID (e.g. awsinst_xxx)"),
347
+ instance_id: z.string().optional().describe("AWS EC2 instance ID (alternative to pid)"),
348
+ snapshot_id: z.string().optional().describe("Snapshot ID (to get original instance context for restore)"),
349
+ }, async ({ pid, instance_id, snapshot_id }) => {
350
+ if (!pid && !instance_id && !snapshot_id) {
351
+ return { content: [{ type: "text", text: "Provide at least one of: pid, instance_id, or snapshot_id" }] };
352
+ }
353
+ const query = {};
354
+ if (pid)
355
+ query.pid = pid;
356
+ if (instance_id)
357
+ query.instance_id = instance_id;
358
+ if (snapshot_id)
359
+ query.snapshot_id = snapshot_id;
360
+ const result = await apiRequest("/aws/v1/instances/details", {
361
+ toolName: "get_instance",
362
+ query,
363
+ skipOrgInjection: true,
364
+ });
365
+ if (!result.success) {
366
+ return { content: [{ type: "text", text: `Failed to get instance (${result.statusCode}): ${result.message}` }] };
367
+ }
368
+ return { content: [{ type: "text", text: JSON.stringify(result.data, null, 2) }] };
369
+ });
370
+ server.tool("update_instance", "Update an instance's configuration. Some changes are synchronous (db_port, backup, CIDR ranges), others are async (instance_type, multi_az, storage). Cannot update replicas — update the master instead.", {
371
+ instance_id: z.string().min(1, "Instance PID is required"),
372
+ identifier: z.string().optional().describe("New instance name"),
373
+ delete_protection: z.boolean().optional(),
374
+ instance_type: z.string().optional().describe("New EC2 instance type (triggers async resize)"),
375
+ multi_az: z.boolean().optional().describe("Enable/disable multi-AZ (triggers async operation)"),
376
+ backup_enabled: z.boolean().optional(),
377
+ db_port: z.number().int().min(0).max(65535).optional(),
378
+ security_group_ids: z.array(z.string()).optional(),
379
+ allowed_cidr_ranges: z.array(cidrRangeSchema).max(24).optional(),
380
+ storage: z.object({
381
+ type: z.string().optional(),
382
+ size: z.number().int().optional(),
383
+ iops: z.number().int().optional(),
384
+ throughput: z.number().int().optional(),
385
+ }).optional(),
386
+ tags: z.record(z.string()).optional(),
387
+ dlm_policy_config: dlmPolicySchema.optional(),
388
+ }, async ({ instance_id, ...updateParams }) => {
389
+ const body = {};
390
+ for (const [key, value] of Object.entries(updateParams)) {
391
+ if (value !== undefined)
392
+ body[key] = value;
393
+ }
394
+ if (Object.keys(body).length === 0) {
395
+ return { content: [{ type: "text", text: "No update parameters provided." }] };
396
+ }
397
+ const result = await apiRequest(`/aws/v1/instances/${instance_id}`, {
398
+ method: "PATCH",
399
+ body,
400
+ toolName: "update_instance",
401
+ skipOrgInjection: true,
402
+ });
403
+ if (!result.success) {
404
+ return { content: [{ type: "text", text: `Failed to update instance (${result.statusCode}): ${result.message}` }] };
405
+ }
406
+ return {
407
+ content: [
408
+ { type: "text", text: "Instance updated." },
409
+ { type: "text", text: JSON.stringify(result.data, null, 2) },
410
+ ],
411
+ };
412
+ });
413
+ server.tool("stop_instance", "DESTRUCTIVE: Stop one or more running database instances. Databases will become unavailable. Cannot stop replicas independently — stop the master to stop all. You MUST set confirm=true to proceed.", {
414
+ pids: z.array(z.string().min(1)).min(1, "At least one instance PID is required"),
415
+ confirm: z.boolean().describe("Must be true to proceed. Ask the user for explicit confirmation before setting this."),
416
+ }, async ({ pids, confirm }) => {
417
+ if (!confirm) {
418
+ return {
419
+ content: [{
420
+ type: "text",
421
+ text: `You are about to STOP ${pids.length} instance(s): ${pids.join(", ")}. All databases on these instances will become unavailable.\n\nTo proceed, call this tool again with confirm=true.`,
422
+ }],
423
+ };
424
+ }
425
+ const result = await apiRequest("/aws/v1/instances/stop", {
426
+ method: "PUT",
427
+ body: { pids },
428
+ toolName: "stop_instance",
429
+ skipOrgInjection: true,
430
+ });
431
+ if (!result.success) {
432
+ return { content: [{ type: "text", text: `Failed to stop instance(s) (${result.statusCode}): ${result.message}` }] };
433
+ }
434
+ return { content: [{ type: "text", text: `Instance(s) ${pids.join(", ")} stopping.` }] };
435
+ });
436
+ server.tool("start_instance", "Start one or more stopped database instances. Cannot start replicas independently.", {
437
+ pids: z.array(z.string().min(1)).min(1, "At least one instance PID is required"),
438
+ }, async ({ pids }) => {
439
+ const result = await apiRequest("/aws/v1/instances/start", {
440
+ method: "PUT",
441
+ body: { pids },
442
+ toolName: "start_instance",
443
+ skipOrgInjection: true,
444
+ });
445
+ if (!result.success) {
446
+ return { content: [{ type: "text", text: `Failed to start instance(s) (${result.statusCode}): ${result.message}` }] };
447
+ }
448
+ return { content: [{ type: "text", text: `Instance(s) ${pids.join(", ")} starting.` }] };
449
+ });
450
+ server.tool("reboot_instance", "DESTRUCTIVE: Reboot one or more database instances. This will cause brief downtime. Cannot reboot replicas independently. You MUST set confirm=true to proceed.", {
451
+ pids: z.array(z.string().min(1)).min(1, "At least one instance PID is required"),
452
+ confirm: z.boolean().describe("Must be true to proceed. Ask the user for explicit confirmation before setting this."),
453
+ }, async ({ pids, confirm }) => {
454
+ if (!confirm) {
455
+ return {
456
+ content: [{
457
+ type: "text",
458
+ text: `You are about to REBOOT ${pids.length} instance(s): ${pids.join(", ")}. This will cause brief downtime for databases on these instances.\n\nTo proceed, call this tool again with confirm=true.`,
459
+ }],
460
+ };
461
+ }
462
+ const result = await apiRequest("/aws/v1/instances/reboot", {
463
+ method: "PUT",
464
+ body: { pids },
465
+ toolName: "reboot_instance",
466
+ skipOrgInjection: true,
467
+ });
468
+ if (!result.success) {
469
+ return { content: [{ type: "text", text: `Failed to reboot instance(s) (${result.statusCode}): ${result.message}` }] };
470
+ }
471
+ return { content: [{ type: "text", text: `Instance(s) ${pids.join(", ")} rebooting.` }] };
472
+ });
473
+ server.tool("delete_instance", `DESTRUCTIVE: Delete one or more database instances. This action is irreversible.
474
+ Delete protection must be disabled first. Master deletion must include all replicas.
475
+ You MUST set confirm=true to proceed. Before calling this tool, always ask the user to confirm they want to delete these specific instances.`, {
476
+ pids: z.array(z.string().min(1)).min(1, "At least one instance PID is required"),
477
+ confirm: z.boolean().describe("Must be true to proceed. Ask the user for explicit confirmation before setting this."),
478
+ create_snapshot: z.boolean().optional().describe("Create a snapshot before deleting (recommended)"),
479
+ }, async ({ pids, confirm, create_snapshot }) => {
480
+ if (!confirm) {
481
+ return {
482
+ content: [{
483
+ type: "text",
484
+ text: `⚠️ You are about to DELETE ${pids.length} instance(s): ${pids.join(", ")}\n\nThis action is IRREVERSIBLE. All data will be lost unless you create a snapshot first.\n\nTo proceed, call this tool again with confirm=true. Consider setting create_snapshot=true to save a backup first.`,
485
+ }],
486
+ };
487
+ }
488
+ const body = { pids };
489
+ if (create_snapshot !== undefined)
490
+ body.create_snapshot = create_snapshot;
491
+ const result = await apiRequest("/aws/v1/instances/delete", {
492
+ method: "POST",
493
+ body,
494
+ toolName: "delete_instance",
495
+ skipOrgInjection: true,
496
+ });
497
+ if (!result.success) {
498
+ return { content: [{ type: "text", text: `Failed to delete instance(s) (${result.statusCode}): ${result.message}` }] };
499
+ }
500
+ return { content: [{ type: "text", text: `Instance(s) ${pids.join(", ")} deletion initiated.` }] };
501
+ });
502
+ server.tool("fork_instance", "Fork (clone) an existing database instance into a new independent instance. Cannot fork replicas or deleted instances. Returns a new password — save it immediately.", {
503
+ instance_id: z.string().min(1, "Source instance PID is required"),
504
+ instance_name: z.string().min(1, "Name for the forked instance"),
505
+ cloud_credential_id: z.string().optional().describe("Credential PID (defaults to source instance's credential)"),
506
+ }, async ({ instance_id, instance_name, cloud_credential_id }) => {
507
+ const body = { instance_name };
508
+ if (cloud_credential_id)
509
+ body.cloud_credential_id = cloud_credential_id;
510
+ const result = await apiRequest(`/aws/v1/instances/${instance_id}/fork`, {
511
+ method: "POST",
512
+ body,
513
+ toolName: "fork_instance",
514
+ skipOrgInjection: true,
515
+ });
516
+ if (!result.success) {
517
+ return { content: [{ type: "text", text: `Failed to fork instance (${result.statusCode}): ${result.message}` }] };
518
+ }
519
+ const data = result.data;
520
+ return {
521
+ content: [
522
+ {
523
+ type: "text",
524
+ text: [
525
+ "Instance fork started!",
526
+ "",
527
+ `Host: ${data.host}`,
528
+ `Username: ${data.username}`,
529
+ `Password: ${data.password}`,
530
+ "",
531
+ "⚠️ SAVE THIS PASSWORD NOW — it cannot be retrieved again.",
532
+ "",
533
+ `Group ID: ${data.group_id}`,
534
+ `Organization: ${data.organization_id}`,
535
+ ].join("\n"),
536
+ },
537
+ ],
538
+ };
539
+ });
540
+ server.tool("refresh_instance_group", "Refresh instance data for a group (master + replicas). Use this to get updated status after async operations.", {
541
+ group_id: z.string().min(1, "Group ID is required (e.g. grp_xxx)"),
542
+ }, async ({ group_id }) => {
543
+ const result = await apiRequest("/aws/v1/instances/refresh_by_group_id", {
544
+ method: "POST",
545
+ body: { group_id },
546
+ toolName: "refresh_instance_group",
547
+ skipOrgInjection: true,
548
+ });
549
+ if (!result.success) {
550
+ return { content: [{ type: "text", text: `Failed to refresh group (${result.statusCode}): ${result.message}` }] };
551
+ }
552
+ return { content: [{ type: "text", text: JSON.stringify(result.data, null, 2) }] };
553
+ });
554
+ }
555
+ //# sourceMappingURL=instances.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"instances.js","sourceRoot":"","sources":["../../src/tools/instances.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 registerNetworkingTools(server: McpServer): void;