@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,294 @@
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
+ export function registerBackupTools(server) {
9
+ // --- Backups ---
10
+ server.tool("list_backups", "List backups for an organization. Triggers a sync with AWS to refresh snapshot sizes.", {
11
+ organization_id: z.string().optional().describe("Organization PID (defaults to active org)"),
12
+ }, async ({ organization_id }) => {
13
+ const orgId = resolveOrgId(organization_id);
14
+ if (!orgId) {
15
+ return { content: [{ type: "text", text: noOrgMessage }] };
16
+ }
17
+ const result = await apiRequest("/aws/v1/backups", {
18
+ toolName: "list_backups",
19
+ query: { organization_id: orgId },
20
+ skipOrgInjection: true,
21
+ });
22
+ if (!result.success) {
23
+ return { content: [{ type: "text", text: `Failed to list backups (${result.statusCode}): ${result.message}` }] };
24
+ }
25
+ return { content: [{ type: "text", text: JSON.stringify(result.data, null, 2) }] };
26
+ });
27
+ server.tool("create_backup", "Create a backup for a database instance. Cannot backup replicas. Types: s3_file_backup (requires s3_bucket) or aws_backup_job (requires backup_vault_name + backup_plan_id).", {
28
+ organization_id: z.string().optional().describe("Organization PID (defaults to active org)"),
29
+ resource_id: z.string().min(1, "Instance PID to backup"),
30
+ backup_type: z.enum(["s3_file_backup", "aws_backup_job"]).describe("Backup method"),
31
+ region: z.string().min(1, "AWS region of the instance"),
32
+ options: z.record(z.unknown()).optional().describe("Type-specific options: s3_file_backup needs {s3_bucket}, aws_backup_job needs {backup_vault_name, backup_plan_id}"),
33
+ }, async ({ organization_id, resource_id, backup_type, region, options }) => {
34
+ const orgId = resolveOrgId(organization_id);
35
+ if (!orgId) {
36
+ return { content: [{ type: "text", text: noOrgMessage }] };
37
+ }
38
+ const result = await apiRequest("/aws/v1/backups", {
39
+ method: "POST",
40
+ body: {
41
+ backup: {
42
+ backup_type,
43
+ resource_id,
44
+ organization_id: orgId,
45
+ region,
46
+ options,
47
+ },
48
+ },
49
+ toolName: "create_backup",
50
+ skipOrgInjection: true,
51
+ });
52
+ if (!result.success) {
53
+ return { content: [{ type: "text", text: `Failed to create backup (${result.statusCode}): ${result.message}` }] };
54
+ }
55
+ return {
56
+ content: [
57
+ { type: "text", text: "Backup initiated." },
58
+ { type: "text", text: JSON.stringify(result.data, null, 2) },
59
+ ],
60
+ };
61
+ });
62
+ server.tool("delete_backup", "DESTRUCTIVE: Delete a backup. Removes the AWS snapshot if present and soft-deletes the backup record. This cannot be undone. You MUST set confirm=true to proceed.", {
63
+ backup_id: z.string().min(1, "Backup PID is required"),
64
+ confirm: z.boolean().describe("Must be true to proceed. Ask the user for explicit confirmation before setting this."),
65
+ }, async ({ backup_id, confirm }) => {
66
+ if (!confirm) {
67
+ return {
68
+ content: [{
69
+ type: "text",
70
+ text: `You are about to DELETE backup ${backup_id}. The AWS snapshot will be removed permanently.\n\nTo proceed, call this tool again with confirm=true.`,
71
+ }],
72
+ };
73
+ }
74
+ const result = await apiRequest(`/aws/v1/backups/${backup_id}`, {
75
+ method: "DELETE",
76
+ toolName: "delete_backup",
77
+ skipOrgInjection: true,
78
+ });
79
+ if (!result.success) {
80
+ return { content: [{ type: "text", text: `Failed to delete backup (${result.statusCode}): ${result.message}` }] };
81
+ }
82
+ return { content: [{ type: "text", text: `Backup ${backup_id} deleted.` }] };
83
+ });
84
+ // --- Backup Policies (DLM) ---
85
+ server.tool("list_backup_policies", "List DLM backup policies for an organization. Optionally filter by instance.", {
86
+ organization_id: z.string().optional().describe("Organization PID (defaults to active org)"),
87
+ cloud_instance_pid: z.string().optional().describe("Filter by instance PID"),
88
+ }, async ({ organization_id, cloud_instance_pid }) => {
89
+ const orgId = resolveOrgId(organization_id);
90
+ if (!orgId) {
91
+ return { content: [{ type: "text", text: noOrgMessage }] };
92
+ }
93
+ const result = await apiRequest("/aws/v1/backup_policies", {
94
+ toolName: "list_backup_policies",
95
+ query: { organization_id: orgId, cloud_instance_pid },
96
+ skipOrgInjection: true,
97
+ });
98
+ if (!result.success) {
99
+ return { content: [{ type: "text", text: `Failed to list backup policies (${result.statusCode}): ${result.message}` }] };
100
+ }
101
+ return { content: [{ type: "text", text: JSON.stringify(result.data, null, 2) }] };
102
+ });
103
+ server.tool("create_backup_policy", "Create a DLM backup policy for automated EBS snapshots.", {
104
+ organization_id: z.string().optional().describe("Organization PID (defaults to active org)"),
105
+ policy_name: z.string().min(1, "Policy name is required"),
106
+ description: z.string().min(1, "Description is required"),
107
+ target_tags: z.array(z.object({ key: z.string(), value: z.string() })).min(1, "At least one target tag is required"),
108
+ schedule_interval: z.number().int().min(1, "Schedule interval must be > 0"),
109
+ schedule_unit: z.enum(["HOURS", "DAYS", "WEEKS"]).describe("Schedule unit"),
110
+ retain_rule_count: z.number().int().min(1, "Retention count must be > 0"),
111
+ region: z.string().min(1, "AWS region is required"),
112
+ cloud_instance_pid: z.string().optional().describe("Associate with a specific instance"),
113
+ cloud_credential_id: z.string().optional(),
114
+ execution_role_arn: z.string().optional(),
115
+ starting_at: z.array(z.string()).optional().describe("Start times (e.g. ['02:00'])"),
116
+ timezone: z.string().optional().describe("Timezone (default: UTC)"),
117
+ encryption: z.boolean().optional().describe("Encrypt snapshots (default: true)"),
118
+ }, async ({ organization_id, ...policyParams }) => {
119
+ const orgId = resolveOrgId(organization_id);
120
+ if (!orgId) {
121
+ return { content: [{ type: "text", text: noOrgMessage }] };
122
+ }
123
+ const result = await apiRequest("/aws/v1/backup_policies", {
124
+ method: "POST",
125
+ body: { ...policyParams, organization_id: orgId },
126
+ toolName: "create_backup_policy",
127
+ skipOrgInjection: true,
128
+ });
129
+ if (!result.success) {
130
+ return { content: [{ type: "text", text: `Failed to create backup policy (${result.statusCode}): ${result.message}` }] };
131
+ }
132
+ return {
133
+ content: [
134
+ { type: "text", text: "Backup policy created." },
135
+ { type: "text", text: JSON.stringify(result.data, null, 2) },
136
+ ],
137
+ };
138
+ });
139
+ server.tool("update_backup_policy", "Update a DLM backup policy. Can enable/disable, change schedule, or update details.", {
140
+ policy_id: z.string().min(1, "Backup policy PID is required"),
141
+ organization_id: z.string().optional().describe("Organization PID (defaults to active org)"),
142
+ state: z.enum(["ENABLED", "DISABLED"]).optional(),
143
+ description: z.string().optional(),
144
+ execution_role_arn: z.string().optional(),
145
+ cloud_credential_id: z.string().optional(),
146
+ region: z.string().optional(),
147
+ policy_details: z.record(z.unknown()).optional().describe("Full AWS DLM policy details structure"),
148
+ }, async ({ policy_id, organization_id, ...updateParams }) => {
149
+ const orgId = resolveOrgId(organization_id);
150
+ if (!orgId) {
151
+ return { content: [{ type: "text", text: noOrgMessage }] };
152
+ }
153
+ const result = await apiRequest(`/aws/v1/backup_policies/${policy_id}`, {
154
+ method: "PUT",
155
+ body: { ...updateParams, organization_id: orgId },
156
+ toolName: "update_backup_policy",
157
+ skipOrgInjection: true,
158
+ });
159
+ if (!result.success) {
160
+ return { content: [{ type: "text", text: `Failed to update backup policy (${result.statusCode}): ${result.message}` }] };
161
+ }
162
+ return {
163
+ content: [
164
+ { type: "text", text: "Backup policy updated." },
165
+ { type: "text", text: JSON.stringify(result.data, null, 2) },
166
+ ],
167
+ };
168
+ });
169
+ server.tool("delete_backup_policy", "DESTRUCTIVE: Delete a DLM backup policy. Removes from AWS and clears backup fields on the associated instance. Automated backups will stop. You MUST set confirm=true to proceed.", {
170
+ policy_id: z.string().min(1, "Backup policy PID is required"),
171
+ organization_id: z.string().optional().describe("Organization PID (defaults to active org)"),
172
+ cloud_credential_id: z.string().optional(),
173
+ region: z.string().optional().describe("Auto-resolved from DB if not provided"),
174
+ confirm: z.boolean().describe("Must be true to proceed. Ask the user for explicit confirmation before setting this."),
175
+ }, async ({ policy_id, organization_id, cloud_credential_id, region, confirm }) => {
176
+ const orgId = resolveOrgId(organization_id);
177
+ if (!orgId) {
178
+ return { content: [{ type: "text", text: noOrgMessage }] };
179
+ }
180
+ if (!confirm) {
181
+ return {
182
+ content: [{
183
+ type: "text",
184
+ text: `You are about to DELETE backup policy ${policy_id}. This will remove the DLM policy from AWS and stop automated backups for the associated instance.\n\nTo proceed, call this tool again with confirm=true.`,
185
+ }],
186
+ };
187
+ }
188
+ const result = await apiRequest(`/aws/v1/backup_policies/${policy_id}`, {
189
+ method: "DELETE",
190
+ body: { organization_id: orgId, cloud_credential_id, region },
191
+ toolName: "delete_backup_policy",
192
+ skipOrgInjection: true,
193
+ });
194
+ if (!result.success) {
195
+ return { content: [{ type: "text", text: `Failed to delete backup policy (${result.statusCode}): ${result.message}` }] };
196
+ }
197
+ return { content: [{ type: "text", text: `Backup policy ${policy_id} deleted.` }] };
198
+ });
199
+ // --- Snapshots ---
200
+ server.tool("list_snapshots", "List EBS snapshots for an organization in a given region.", {
201
+ organization_id: z.string().optional().describe("Organization PID (defaults to active org)"),
202
+ region: z.string().optional().describe("AWS region (default: us-east-1)"),
203
+ cloud_credential_id: z.string().optional(),
204
+ }, async ({ organization_id, region, cloud_credential_id }) => {
205
+ const orgId = resolveOrgId(organization_id);
206
+ if (!orgId) {
207
+ return { content: [{ type: "text", text: noOrgMessage }] };
208
+ }
209
+ const result = await apiRequest("/aws/v1/snapshots", {
210
+ toolName: "list_snapshots",
211
+ query: { organization_id: orgId, region, cloud_credential_id },
212
+ skipOrgInjection: true,
213
+ });
214
+ if (!result.success) {
215
+ return { content: [{ type: "text", text: `Failed to list snapshots (${result.statusCode}): ${result.message}` }] };
216
+ }
217
+ return { content: [{ type: "text", text: JSON.stringify(result.data, null, 2) }] };
218
+ });
219
+ server.tool("get_snapshot", "Get details of a specific EBS snapshot.", {
220
+ snapshot_id: z.string().min(1, "Snapshot ID is required"),
221
+ organization_id: z.string().optional().describe("Organization PID (defaults to active org)"),
222
+ region: z.string().optional(),
223
+ cloud_credential_id: z.string().optional(),
224
+ }, async ({ snapshot_id, organization_id, region, cloud_credential_id }) => {
225
+ const orgId = resolveOrgId(organization_id);
226
+ if (!orgId) {
227
+ return { content: [{ type: "text", text: noOrgMessage }] };
228
+ }
229
+ const result = await apiRequest(`/aws/v1/snapshots/${snapshot_id}`, {
230
+ toolName: "get_snapshot",
231
+ query: { organization_id: orgId, region, cloud_credential_id },
232
+ skipOrgInjection: true,
233
+ });
234
+ if (!result.success) {
235
+ return { content: [{ type: "text", text: `Failed to get snapshot (${result.statusCode}): ${result.message}` }] };
236
+ }
237
+ return { content: [{ type: "text", text: JSON.stringify(result.data, null, 2) }] };
238
+ });
239
+ server.tool("delete_snapshot", "DESTRUCTIVE: Delete an EBS snapshot from AWS and update the associated backup record. This cannot be undone. You MUST set confirm=true to proceed.", {
240
+ snapshot_id: z.string().min(1, "Snapshot ID is required"),
241
+ organization_id: z.string().optional().describe("Organization PID (defaults to active org)"),
242
+ cloud_credential_id: z.string().optional(),
243
+ confirm: z.boolean().describe("Must be true to proceed. Ask the user for explicit confirmation before setting this."),
244
+ }, async ({ snapshot_id, organization_id, cloud_credential_id, confirm }) => {
245
+ const orgId = resolveOrgId(organization_id);
246
+ if (!orgId) {
247
+ return { content: [{ type: "text", text: noOrgMessage }] };
248
+ }
249
+ if (!confirm) {
250
+ return {
251
+ content: [{
252
+ type: "text",
253
+ text: `You are about to DELETE snapshot ${snapshot_id}. The EBS snapshot will be permanently removed from AWS.\n\nTo proceed, call this tool again with confirm=true.`,
254
+ }],
255
+ };
256
+ }
257
+ const result = await apiRequest(`/aws/v1/snapshots/${snapshot_id}`, {
258
+ method: "DELETE",
259
+ query: { organization_id: orgId, cloud_credential_id },
260
+ toolName: "delete_snapshot",
261
+ skipOrgInjection: true,
262
+ });
263
+ if (!result.success) {
264
+ return { content: [{ type: "text", text: `Failed to delete snapshot (${result.statusCode}): ${result.message}` }] };
265
+ }
266
+ return { content: [{ type: "text", text: `Snapshot ${snapshot_id} deleted.` }] };
267
+ });
268
+ server.tool("create_snapshot", "Create an EBS snapshot from an instance's volume.", {
269
+ organization_id: z.string().optional().describe("Organization PID (defaults to active org)"),
270
+ cloud_instance_pid: z.string().min(1, "Instance PID is required"),
271
+ cloud_credential_id: z.string().optional(),
272
+ }, async ({ organization_id, cloud_instance_pid, cloud_credential_id }) => {
273
+ const orgId = resolveOrgId(organization_id);
274
+ if (!orgId) {
275
+ return { content: [{ type: "text", text: noOrgMessage }] };
276
+ }
277
+ const result = await apiRequest("/aws/v1/volumes/create_snapshot", {
278
+ method: "POST",
279
+ body: { organization_id: orgId, cloud_instance_pid, cloud_credential_id },
280
+ toolName: "create_snapshot",
281
+ skipOrgInjection: true,
282
+ });
283
+ if (!result.success) {
284
+ return { content: [{ type: "text", text: `Failed to create snapshot (${result.statusCode}): ${result.message}` }] };
285
+ }
286
+ return {
287
+ content: [
288
+ { type: "text", text: "Snapshot creation initiated." },
289
+ { type: "text", text: JSON.stringify(result.data, null, 2) },
290
+ ],
291
+ };
292
+ });
293
+ }
294
+ //# sourceMappingURL=backups.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backups.js","sourceRoot":"","sources":["../../src/tools/backups.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 registerCredentialTools(server: McpServer): void;
@@ -0,0 +1,187 @@
1
+ import { z } from "zod";
2
+ import { apiRequest } from "../client.js";
3
+ import { session } from "../session.js";
4
+ /** Returns the org PID from the param or falls back to the active session org. */
5
+ function resolveOrgId(organization_id) {
6
+ return organization_id || session.getActiveOrgId();
7
+ }
8
+ const noOrgMessage = "No organization selected. Call `select_organization` first or pass an organization_id.";
9
+ export function registerCredentialTools(server) {
10
+ server.tool("list_credentials", `List cloud credentials for an organization. Credential secrets are never returned.
11
+
12
+ Each credential has: id (PID), name, cloud_provider (e.g. "aws"), auth_method, status ("active"/"inactive"), is_platform_managed (bool), is_default (bool).
13
+
14
+ When selecting credentials for instance creation:
15
+ - Filter by cloud_provider matching the user's chosen provider (e.g. "aws")
16
+ - Only use credentials with status "active"
17
+ - is_platform_managed=true → SelfHost's cloud account (no VPC needed)
18
+ - is_platform_managed=false → user's own cloud account (BYOC — VPC required, use list_vpcs)
19
+ - Present the user with a choice between platform-managed and their own credentials`, {
20
+ organization_id: z.string().optional().describe("Organization PID (defaults to active org)"),
21
+ }, async ({ organization_id }) => {
22
+ const orgId = resolveOrgId(organization_id);
23
+ if (!orgId) {
24
+ return { content: [{ type: "text", text: noOrgMessage }] };
25
+ }
26
+ const result = await apiRequest(`/organizations/${orgId}/cloud_credentials`, {
27
+ toolName: "list_credentials",
28
+ skipOrgInjection: true,
29
+ });
30
+ if (!result.success) {
31
+ return { content: [{ type: "text", text: `Failed to list credentials (${result.statusCode}): ${result.message}` }] };
32
+ }
33
+ return { content: [{ type: "text", text: JSON.stringify(result.data, null, 2) }] };
34
+ });
35
+ server.tool("add_credential", "Add a cloud credential to an organization (requires owner or admin). Auth methods: access_key (provide AWS keys), iam_role, or platform_managed.", {
36
+ organization_id: z.string().optional().describe("Organization PID (defaults to active org)"),
37
+ name: z.string().min(1).max(255, "Name must be 1-255 characters"),
38
+ cloud_provider: z.literal("aws").describe("Cloud provider (only 'aws' supported)"),
39
+ auth_method: z.enum(["access_key", "platform_managed", "iam_role"]).describe("Authentication method"),
40
+ description: z.string().optional(),
41
+ credential_data: z.object({
42
+ access_key_id: z.string().min(1),
43
+ secret_access_key: z.string().min(1),
44
+ }).optional().describe("AWS credentials (required for access_key auth method)"),
45
+ metadata: z.record(z.unknown()).optional().describe("Optional metadata object"),
46
+ }, async ({ organization_id, name, cloud_provider, auth_method, description, credential_data, metadata }) => {
47
+ const orgId = resolveOrgId(organization_id);
48
+ if (!orgId) {
49
+ return { content: [{ type: "text", text: noOrgMessage }] };
50
+ }
51
+ if (auth_method === "access_key" && !credential_data) {
52
+ return {
53
+ content: [{ type: "text", text: "credential_data with access_key_id and secret_access_key is required for access_key auth method." }],
54
+ };
55
+ }
56
+ const body = {
57
+ cloud_credential: {
58
+ name,
59
+ cloud_provider,
60
+ auth_method,
61
+ description,
62
+ credential_data,
63
+ metadata,
64
+ },
65
+ };
66
+ const result = await apiRequest(`/organizations/${orgId}/cloud_credentials`, {
67
+ method: "POST",
68
+ body,
69
+ toolName: "add_credential",
70
+ skipOrgInjection: true,
71
+ });
72
+ if (!result.success) {
73
+ return { content: [{ type: "text", text: `Failed to add credential (${result.statusCode}): ${result.message}` }] };
74
+ }
75
+ return {
76
+ content: [
77
+ { type: "text", text: `Credential "${name}" added.` },
78
+ { type: "text", text: JSON.stringify(result.data, null, 2) },
79
+ ],
80
+ };
81
+ });
82
+ server.tool("update_credential", "Update a cloud credential's name, description, or keys (requires owner or admin). Cannot modify platform-managed credentials. cloud_provider and auth_method are immutable.", {
83
+ organization_id: z.string().optional().describe("Organization PID (defaults to active org)"),
84
+ credential_id: z.string().min(1, "Credential PID is required"),
85
+ name: z.string().min(1).max(255).optional(),
86
+ description: z.string().optional(),
87
+ credential_data: z.object({
88
+ access_key_id: z.string().min(1),
89
+ secret_access_key: z.string().min(1),
90
+ }).optional().describe("Updated AWS credentials"),
91
+ metadata: z.record(z.unknown()).optional(),
92
+ }, async ({ organization_id, credential_id, name, description, credential_data, metadata }) => {
93
+ const orgId = resolveOrgId(organization_id);
94
+ if (!orgId) {
95
+ return { content: [{ type: "text", text: noOrgMessage }] };
96
+ }
97
+ const body = {
98
+ cloud_credential: { name, description, credential_data, metadata },
99
+ };
100
+ const result = await apiRequest(`/organizations/${orgId}/cloud_credentials/${credential_id}`, {
101
+ method: "PUT",
102
+ body,
103
+ toolName: "update_credential",
104
+ skipOrgInjection: true,
105
+ });
106
+ if (!result.success) {
107
+ return { content: [{ type: "text", text: `Failed to update credential (${result.statusCode}): ${result.message}` }] };
108
+ }
109
+ return {
110
+ content: [
111
+ { type: "text", text: "Credential updated." },
112
+ { type: "text", text: JSON.stringify(result.data, null, 2) },
113
+ ],
114
+ };
115
+ });
116
+ server.tool("delete_credential", "DESTRUCTIVE: Delete a cloud credential (requires owner or admin). Cannot delete platform-managed credentials or credentials in use by instances. You MUST set confirm=true to proceed.", {
117
+ organization_id: z.string().optional().describe("Organization PID (defaults to active org)"),
118
+ credential_id: z.string().min(1, "Credential PID is required"),
119
+ confirm: z.boolean().describe("Must be true to proceed. Ask the user for explicit confirmation before setting this."),
120
+ }, async ({ organization_id, credential_id, confirm }) => {
121
+ const orgId = resolveOrgId(organization_id);
122
+ if (!orgId) {
123
+ return { content: [{ type: "text", text: noOrgMessage }] };
124
+ }
125
+ if (!confirm) {
126
+ return {
127
+ content: [{
128
+ type: "text",
129
+ text: `You are about to DELETE credential ${credential_id}. Instances using this credential will not be affected, but you won't be able to create new instances with it.\n\nTo proceed, call this tool again with confirm=true.`,
130
+ }],
131
+ };
132
+ }
133
+ const result = await apiRequest(`/organizations/${orgId}/cloud_credentials/${credential_id}`, {
134
+ method: "DELETE",
135
+ toolName: "delete_credential",
136
+ skipOrgInjection: true,
137
+ });
138
+ if (!result.success) {
139
+ return { content: [{ type: "text", text: `Failed to delete credential (${result.statusCode}): ${result.message}` }] };
140
+ }
141
+ return { content: [{ type: "text", text: `Credential ${credential_id} deleted.` }] };
142
+ });
143
+ server.tool("set_default_credential", "Set a credential as the default for its cloud provider in this organization (requires owner or admin). Cannot set platform-managed as default.", {
144
+ organization_id: z.string().optional().describe("Organization PID (defaults to active org)"),
145
+ credential_id: z.string().min(1, "Credential PID is required"),
146
+ }, async ({ organization_id, credential_id }) => {
147
+ const orgId = resolveOrgId(organization_id);
148
+ if (!orgId) {
149
+ return { content: [{ type: "text", text: noOrgMessage }] };
150
+ }
151
+ const result = await apiRequest(`/organizations/${orgId}/cloud_credentials/${credential_id}/set_default`, {
152
+ method: "POST",
153
+ toolName: "set_default_credential",
154
+ skipOrgInjection: true,
155
+ });
156
+ if (!result.success) {
157
+ return { content: [{ type: "text", text: `Failed to set default credential (${result.statusCode}): ${result.message}` }] };
158
+ }
159
+ return {
160
+ content: [
161
+ { type: "text", text: `Credential ${credential_id} set as default.` },
162
+ { type: "text", text: JSON.stringify(result.data, null, 2) },
163
+ ],
164
+ };
165
+ });
166
+ server.tool("get_aws_account_info", "Get AWS account ID and free tier status for a credential (requires owner or admin). Not available for platform-managed credentials.", {
167
+ organization_id: z.string().optional().describe("Organization PID (defaults to active org)"),
168
+ credential_id: z.string().min(1, "Credential PID is required"),
169
+ }, async ({ organization_id, credential_id }) => {
170
+ const orgId = resolveOrgId(organization_id);
171
+ if (!orgId) {
172
+ return { content: [{ type: "text", text: noOrgMessage }] };
173
+ }
174
+ const result = await apiRequest(`/organizations/${orgId}/cloud_credentials/${credential_id}/account_info`, {
175
+ toolName: "get_aws_account_info",
176
+ skipOrgInjection: true,
177
+ });
178
+ if (!result.success) {
179
+ if (result.statusCode === 502) {
180
+ return { content: [{ type: "text", text: "AWS credentials are invalid or expired. Update the credential with valid keys." }] };
181
+ }
182
+ return { content: [{ type: "text", text: `Failed to get account info (${result.statusCode}): ${result.message}` }] };
183
+ }
184
+ return { content: [{ type: "text", text: JSON.stringify(result.data, null, 2) }] };
185
+ });
186
+ }
187
+ //# sourceMappingURL=credentials.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"credentials.js","sourceRoot":"","sources":["../../src/tools/credentials.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 registerInstanceTools(server: McpServer): void;