quicklify 1.0.5 → 1.2.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 (214) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +86 -25
  3. package/README.tr.md +86 -25
  4. package/SECURITY.md +79 -17
  5. package/bin/quicklify-mcp +5 -0
  6. package/dist/commands/add.d.ts +1 -0
  7. package/dist/commands/add.d.ts.map +1 -1
  8. package/dist/commands/add.js +41 -65
  9. package/dist/commands/add.js.map +1 -1
  10. package/dist/commands/backup.d.ts +2 -11
  11. package/dist/commands/backup.d.ts.map +1 -1
  12. package/dist/commands/backup.js +113 -57
  13. package/dist/commands/backup.js.map +1 -1
  14. package/dist/commands/destroy.d.ts.map +1 -1
  15. package/dist/commands/destroy.js +58 -37
  16. package/dist/commands/destroy.js.map +1 -1
  17. package/dist/commands/domain.d.ts +2 -9
  18. package/dist/commands/domain.d.ts.map +1 -1
  19. package/dist/commands/domain.js +47 -56
  20. package/dist/commands/domain.js.map +1 -1
  21. package/dist/commands/firewall.d.ts +3 -10
  22. package/dist/commands/firewall.d.ts.map +1 -1
  23. package/dist/commands/firewall.js +28 -51
  24. package/dist/commands/firewall.js.map +1 -1
  25. package/dist/commands/health.d.ts +2 -2
  26. package/dist/commands/health.d.ts.map +1 -1
  27. package/dist/commands/health.js +77 -19
  28. package/dist/commands/health.js.map +1 -1
  29. package/dist/commands/init.d.ts.map +1 -1
  30. package/dist/commands/init.js +142 -24
  31. package/dist/commands/init.js.map +1 -1
  32. package/dist/commands/interactive.d.ts +2 -0
  33. package/dist/commands/interactive.d.ts.map +1 -0
  34. package/dist/commands/interactive.js +357 -0
  35. package/dist/commands/interactive.js.map +1 -0
  36. package/dist/commands/list.d.ts.map +1 -1
  37. package/dist/commands/list.js +4 -2
  38. package/dist/commands/list.js.map +1 -1
  39. package/dist/commands/logs.d.ts +3 -2
  40. package/dist/commands/logs.d.ts.map +1 -1
  41. package/dist/commands/logs.js +15 -12
  42. package/dist/commands/logs.js.map +1 -1
  43. package/dist/commands/maintain.d.ts.map +1 -1
  44. package/dist/commands/maintain.js +28 -47
  45. package/dist/commands/maintain.js.map +1 -1
  46. package/dist/commands/monitor.d.ts +3 -9
  47. package/dist/commands/monitor.d.ts.map +1 -1
  48. package/dist/commands/monitor.js +3 -48
  49. package/dist/commands/monitor.js.map +1 -1
  50. package/dist/commands/remove.d.ts.map +1 -1
  51. package/dist/commands/remove.js +25 -0
  52. package/dist/commands/remove.js.map +1 -1
  53. package/dist/commands/restart.d.ts.map +1 -1
  54. package/dist/commands/restart.js +39 -39
  55. package/dist/commands/restart.js.map +1 -1
  56. package/dist/commands/restore.d.ts +2 -13
  57. package/dist/commands/restore.d.ts.map +1 -1
  58. package/dist/commands/restore.js +42 -54
  59. package/dist/commands/restore.js.map +1 -1
  60. package/dist/commands/secure.d.ts +2 -9
  61. package/dist/commands/secure.d.ts.map +1 -1
  62. package/dist/commands/secure.js +2 -97
  63. package/dist/commands/secure.js.map +1 -1
  64. package/dist/commands/snapshot.d.ts.map +1 -1
  65. package/dist/commands/snapshot.js +55 -67
  66. package/dist/commands/snapshot.js.map +1 -1
  67. package/dist/commands/ssh.d.ts.map +1 -1
  68. package/dist/commands/ssh.js +4 -1
  69. package/dist/commands/ssh.js.map +1 -1
  70. package/dist/commands/status.d.ts.map +1 -1
  71. package/dist/commands/status.js +53 -85
  72. package/dist/commands/status.js.map +1 -1
  73. package/dist/commands/update.d.ts.map +1 -1
  74. package/dist/commands/update.js +23 -16
  75. package/dist/commands/update.js.map +1 -1
  76. package/dist/constants.d.ts +14 -0
  77. package/dist/constants.d.ts.map +1 -0
  78. package/dist/constants.js +23 -0
  79. package/dist/constants.js.map +1 -0
  80. package/dist/core/backup.d.ts +59 -0
  81. package/dist/core/backup.d.ts.map +1 -0
  82. package/dist/core/backup.js +417 -0
  83. package/dist/core/backup.js.map +1 -0
  84. package/dist/core/domain.d.ts +30 -0
  85. package/dist/core/domain.d.ts.map +1 -0
  86. package/dist/core/domain.js +170 -0
  87. package/dist/core/domain.js.map +1 -0
  88. package/dist/core/firewall.d.ts +27 -0
  89. package/dist/core/firewall.d.ts.map +1 -0
  90. package/dist/core/firewall.js +158 -0
  91. package/dist/core/firewall.js.map +1 -0
  92. package/dist/core/logs.d.ts +28 -0
  93. package/dist/core/logs.d.ts.map +1 -0
  94. package/dist/core/logs.js +129 -0
  95. package/dist/core/logs.js.map +1 -0
  96. package/dist/core/maintain.d.ts +41 -0
  97. package/dist/core/maintain.d.ts.map +1 -0
  98. package/dist/core/maintain.js +179 -0
  99. package/dist/core/maintain.js.map +1 -0
  100. package/dist/core/manage.d.ts +43 -0
  101. package/dist/core/manage.d.ts.map +1 -0
  102. package/dist/core/manage.js +241 -0
  103. package/dist/core/manage.js.map +1 -0
  104. package/dist/core/provision.d.ts +19 -0
  105. package/dist/core/provision.d.ts.map +1 -0
  106. package/dist/core/provision.js +192 -0
  107. package/dist/core/provision.js.map +1 -0
  108. package/dist/core/secure.d.ts +29 -0
  109. package/dist/core/secure.d.ts.map +1 -0
  110. package/dist/core/secure.js +204 -0
  111. package/dist/core/secure.js.map +1 -0
  112. package/dist/core/snapshot.d.ts +22 -0
  113. package/dist/core/snapshot.d.ts.map +1 -0
  114. package/dist/core/snapshot.js +58 -0
  115. package/dist/core/snapshot.js.map +1 -0
  116. package/dist/core/status.d.ts +12 -0
  117. package/dist/core/status.d.ts.map +1 -0
  118. package/dist/core/status.js +44 -0
  119. package/dist/core/status.js.map +1 -0
  120. package/dist/core/tokens.d.ts +4 -0
  121. package/dist/core/tokens.d.ts.map +1 -0
  122. package/dist/core/tokens.js +23 -0
  123. package/dist/core/tokens.js.map +1 -0
  124. package/dist/index.js +17 -4
  125. package/dist/index.js.map +1 -1
  126. package/dist/mcp/index.d.ts +3 -0
  127. package/dist/mcp/index.d.ts.map +1 -0
  128. package/dist/mcp/index.js +16 -0
  129. package/dist/mcp/index.js.map +1 -0
  130. package/dist/mcp/server.d.ts +3 -0
  131. package/dist/mcp/server.d.ts.map +1 -0
  132. package/dist/mcp/server.js +111 -0
  133. package/dist/mcp/server.js.map +1 -0
  134. package/dist/mcp/tools/serverBackup.d.ts +24 -0
  135. package/dist/mcp/tools/serverBackup.d.ts.map +1 -0
  136. package/dist/mcp/tools/serverBackup.js +262 -0
  137. package/dist/mcp/tools/serverBackup.js.map +1 -0
  138. package/dist/mcp/tools/serverInfo.d.ts +36 -0
  139. package/dist/mcp/tools/serverInfo.d.ts.map +1 -0
  140. package/dist/mcp/tools/serverInfo.js +283 -0
  141. package/dist/mcp/tools/serverInfo.js.map +1 -0
  142. package/dist/mcp/tools/serverLogs.d.ts +25 -0
  143. package/dist/mcp/tools/serverLogs.d.ts.map +1 -0
  144. package/dist/mcp/tools/serverLogs.js +124 -0
  145. package/dist/mcp/tools/serverLogs.js.map +1 -0
  146. package/dist/mcp/tools/serverMaintain.d.ts +17 -0
  147. package/dist/mcp/tools/serverMaintain.d.ts.map +1 -0
  148. package/dist/mcp/tools/serverMaintain.js +156 -0
  149. package/dist/mcp/tools/serverMaintain.js.map +1 -0
  150. package/dist/mcp/tools/serverManage.d.ts +38 -0
  151. package/dist/mcp/tools/serverManage.d.ts.map +1 -0
  152. package/dist/mcp/tools/serverManage.js +190 -0
  153. package/dist/mcp/tools/serverManage.js.map +1 -0
  154. package/dist/mcp/tools/serverProvision.d.ts +36 -0
  155. package/dist/mcp/tools/serverProvision.d.ts.map +1 -0
  156. package/dist/mcp/tools/serverProvision.js +116 -0
  157. package/dist/mcp/tools/serverProvision.js.map +1 -0
  158. package/dist/mcp/tools/serverSecure.d.ts +35 -0
  159. package/dist/mcp/tools/serverSecure.d.ts.map +1 -0
  160. package/dist/mcp/tools/serverSecure.js +335 -0
  161. package/dist/mcp/tools/serverSecure.js.map +1 -0
  162. package/dist/mcp/utils.d.ts +42 -0
  163. package/dist/mcp/utils.d.ts.map +1 -0
  164. package/dist/mcp/utils.js +61 -0
  165. package/dist/mcp/utils.js.map +1 -0
  166. package/dist/providers/base.d.ts +2 -2
  167. package/dist/providers/base.d.ts.map +1 -1
  168. package/dist/providers/digitalocean.d.ts +2 -2
  169. package/dist/providers/digitalocean.d.ts.map +1 -1
  170. package/dist/providers/digitalocean.js +3 -3
  171. package/dist/providers/digitalocean.js.map +1 -1
  172. package/dist/providers/hetzner.d.ts +2 -2
  173. package/dist/providers/hetzner.d.ts.map +1 -1
  174. package/dist/providers/hetzner.js +7 -4
  175. package/dist/providers/hetzner.js.map +1 -1
  176. package/dist/providers/linode.d.ts +2 -2
  177. package/dist/providers/linode.d.ts.map +1 -1
  178. package/dist/providers/linode.js +2 -2
  179. package/dist/providers/linode.js.map +1 -1
  180. package/dist/providers/vultr.d.ts +2 -2
  181. package/dist/providers/vultr.d.ts.map +1 -1
  182. package/dist/providers/vultr.js +9 -3
  183. package/dist/providers/vultr.js.map +1 -1
  184. package/dist/types/index.d.ts +11 -1
  185. package/dist/types/index.d.ts.map +1 -1
  186. package/dist/utils/cloudInit.d.ts +1 -0
  187. package/dist/utils/cloudInit.d.ts.map +1 -1
  188. package/dist/utils/cloudInit.js +62 -0
  189. package/dist/utils/cloudInit.js.map +1 -1
  190. package/dist/utils/config.js +1 -1
  191. package/dist/utils/config.js.map +1 -1
  192. package/dist/utils/errorMapper.d.ts +1 -0
  193. package/dist/utils/errorMapper.d.ts.map +1 -1
  194. package/dist/utils/errorMapper.js +25 -1
  195. package/dist/utils/errorMapper.js.map +1 -1
  196. package/dist/utils/modeGuard.d.ts +5 -0
  197. package/dist/utils/modeGuard.d.ts.map +1 -0
  198. package/dist/utils/modeGuard.js +13 -0
  199. package/dist/utils/modeGuard.js.map +1 -0
  200. package/dist/utils/openBrowser.d.ts.map +1 -1
  201. package/dist/utils/openBrowser.js +9 -2
  202. package/dist/utils/openBrowser.js.map +1 -1
  203. package/dist/utils/prompts.d.ts +2 -2
  204. package/dist/utils/prompts.d.ts.map +1 -1
  205. package/dist/utils/prompts.js +3 -3
  206. package/dist/utils/prompts.js.map +1 -1
  207. package/dist/utils/ssh.d.ts +10 -0
  208. package/dist/utils/ssh.d.ts.map +1 -1
  209. package/dist/utils/ssh.js +181 -17
  210. package/dist/utils/ssh.js.map +1 -1
  211. package/dist/utils/sshKey.d.ts.map +1 -1
  212. package/dist/utils/sshKey.js +3 -0
  213. package/dist/utils/sshKey.js.map +1 -1
  214. package/package.json +7 -4
@@ -0,0 +1,111 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import { readFileSync } from "fs";
3
+ import { fileURLToPath } from "url";
4
+ import { dirname, join } from "path";
5
+ import { serverInfoSchema, handleServerInfo } from "./tools/serverInfo.js";
6
+ import { serverLogsSchema, handleServerLogs } from "./tools/serverLogs.js";
7
+ import { serverManageSchema, handleServerManage } from "./tools/serverManage.js";
8
+ import { serverMaintainSchema, handleServerMaintain } from "./tools/serverMaintain.js";
9
+ import { serverSecureSchema, handleServerSecure } from "./tools/serverSecure.js";
10
+ import { serverBackupSchema, handleServerBackup } from "./tools/serverBackup.js";
11
+ import { serverProvisionSchema, handleServerProvision } from "./tools/serverProvision.js";
12
+ const __filename = fileURLToPath(import.meta.url);
13
+ const __dirname = dirname(__filename);
14
+ const pkgPath = join(__dirname, "..", "..", "package.json");
15
+ const pkg = JSON.parse(readFileSync(pkgPath, "utf-8"));
16
+ export function createMcpServer() {
17
+ const server = new McpServer({ name: pkg.name, version: pkg.version }, { capabilities: { logging: {} } });
18
+ server.registerTool("server_info", {
19
+ description: "Get information about Quicklify-managed servers. Actions: 'list' all servers, 'status' check cloud provider + Coolify/bare status, 'health' check Coolify reachability or SSH access for bare servers, 'sizes' list available server types with prices for a provider+region. Requires provider API tokens as environment variables (HETZNER_TOKEN, DIGITALOCEAN_TOKEN, VULTR_TOKEN, LINODE_TOKEN) for status/sizes checks. Avoid calling repeatedly in short intervals to prevent provider API rate limiting.",
20
+ inputSchema: serverInfoSchema,
21
+ annotations: {
22
+ title: "Server Information",
23
+ readOnlyHint: true,
24
+ destructiveHint: false,
25
+ idempotentHint: true,
26
+ openWorldHint: true,
27
+ },
28
+ }, async (params) => {
29
+ return handleServerInfo(params);
30
+ });
31
+ server.registerTool("server_logs", {
32
+ description: "Fetch logs and system metrics from Quicklify-managed servers via SSH. Actions: 'logs' retrieves recent log lines from Coolify container (Coolify servers only), Docker service, or system journal. Bare servers: use service 'system' or 'docker' (coolify service not available). 'monitor' fetches CPU, RAM, and disk usage metrics (works for all server modes). Requires SSH access to target server (root@ip). Note: live streaming (--follow) is not available via MCP — use the CLI for live log tailing.",
33
+ inputSchema: serverLogsSchema,
34
+ annotations: {
35
+ title: "Server Logs & Metrics",
36
+ readOnlyHint: true,
37
+ destructiveHint: false,
38
+ idempotentHint: true,
39
+ openWorldHint: true,
40
+ },
41
+ }, async (params) => {
42
+ return handleServerLogs(params);
43
+ });
44
+ server.registerTool("server_manage", {
45
+ description: "Manage Quicklify servers. Actions: 'add' registers an existing Coolify or bare server to local config (validates API token, optionally verifies Coolify via SSH — pass mode:'bare' for servers without Coolify). 'remove' unregisters a server from local config only (cloud server keeps running). 'destroy' PERMANENTLY DELETES the server from the cloud provider and removes from local config. Requires provider API tokens as environment variables. Destroy is blocked when QUICKLIFY_SAFE_MODE=true.",
46
+ inputSchema: serverManageSchema,
47
+ annotations: {
48
+ title: "Server Management",
49
+ readOnlyHint: false,
50
+ destructiveHint: true,
51
+ idempotentHint: false,
52
+ openWorldHint: true,
53
+ },
54
+ }, async (params) => {
55
+ return handleServerManage(params);
56
+ });
57
+ server.registerTool("server_maintain", {
58
+ description: "Maintain Quicklify servers. Actions: 'update' runs Coolify update via SSH (Coolify servers only — bare servers are blocked), 'restart' reboots server via cloud provider API (works for both Coolify and bare servers), 'maintain' runs full 5-step maintenance (Coolify servers only — bare servers are blocked). Snapshot not included — use server_backup tool. Requires SSH access for update, provider API tokens for restart/status. Manual servers: restart not available.",
59
+ inputSchema: serverMaintainSchema,
60
+ annotations: {
61
+ title: "Server Maintenance",
62
+ readOnlyHint: false,
63
+ destructiveHint: false,
64
+ idempotentHint: true,
65
+ openWorldHint: true,
66
+ },
67
+ }, async (params) => {
68
+ return handleServerMaintain(params);
69
+ });
70
+ server.registerTool("server_secure", {
71
+ description: "Secure Quicklify servers. Secure: 'secure-setup' applies SSH hardening + fail2ban, 'secure-audit' runs security audit with score. Firewall: 'firewall-setup' installs UFW with Coolify ports, 'firewall-add'/'firewall-remove' manage port rules, 'firewall-status' shows current rules. Domain: 'domain-set'/'domain-remove' manage custom domain with optional SSL, 'domain-check' verifies DNS, 'domain-info' shows current FQDN. All require SSH access to server.",
72
+ inputSchema: serverSecureSchema,
73
+ annotations: {
74
+ title: "Server Security",
75
+ readOnlyHint: false,
76
+ destructiveHint: false,
77
+ idempotentHint: true,
78
+ openWorldHint: true,
79
+ },
80
+ }, async (params) => {
81
+ return handleServerSecure(params);
82
+ });
83
+ server.registerTool("server_backup", {
84
+ description: "Backup and snapshot Quicklify servers. Backup: 'backup-create' dumps Coolify DB + config via SSH (Coolify servers) or system config files (bare servers), 'backup-list' shows local backups, 'backup-restore' restores from backup — bare servers restore system config, Coolify servers restore DB+config (SAFE_MODE blocks restore). Snapshot: 'snapshot-create'/'snapshot-list'/'snapshot-delete' manage cloud provider snapshots (requires provider API token). Snapshots not available for manually added servers.",
85
+ inputSchema: serverBackupSchema,
86
+ annotations: {
87
+ title: "Server Backup & Snapshots",
88
+ readOnlyHint: false,
89
+ destructiveHint: true,
90
+ idempotentHint: false,
91
+ openWorldHint: true,
92
+ },
93
+ }, async (params) => {
94
+ return handleServerBackup(params);
95
+ });
96
+ server.registerTool("server_provision", {
97
+ description: "Provision a new server on a cloud provider. Default: Coolify auto-install via cloud-init. Pass mode:'bare' for a generic VPS without Coolify (installs UFW and runs system updates only). Requires provider API token as environment variable (HETZNER_TOKEN, DIGITALOCEAN_TOKEN, VULTR_TOKEN, LINODE_TOKEN). WARNING: Creates a billable cloud resource. Blocked when QUICKLIFY_SAFE_MODE=true. Server takes 3-5 minutes to fully initialize after provisioning.",
98
+ inputSchema: serverProvisionSchema,
99
+ annotations: {
100
+ title: "Server Provisioning",
101
+ readOnlyHint: false,
102
+ destructiveHint: true,
103
+ idempotentHint: false,
104
+ openWorldHint: true,
105
+ },
106
+ }, async (params) => {
107
+ return handleServerProvision(params);
108
+ });
109
+ return server;
110
+ }
111
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import { z } from "zod";
2
+ import { type McpResponse } from "../utils.js";
3
+ export declare const serverBackupSchema: {
4
+ action: z.ZodEnum<{
5
+ "backup-create": "backup-create";
6
+ "backup-list": "backup-list";
7
+ "backup-restore": "backup-restore";
8
+ "snapshot-create": "snapshot-create";
9
+ "snapshot-list": "snapshot-list";
10
+ "snapshot-delete": "snapshot-delete";
11
+ }>;
12
+ server: z.ZodOptional<z.ZodString>;
13
+ backupId: z.ZodOptional<z.ZodString>;
14
+ snapshotId: z.ZodOptional<z.ZodString>;
15
+ };
16
+ type Action = z.infer<typeof serverBackupSchema.action>;
17
+ export declare function handleServerBackup(params: {
18
+ action: Action;
19
+ server?: string;
20
+ backupId?: string;
21
+ snapshotId?: string;
22
+ }): Promise<McpResponse>;
23
+ export {};
24
+ //# sourceMappingURL=serverBackup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serverBackup.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/serverBackup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAiBxB,OAAO,EAKL,KAAK,WAAW,EACjB,MAAM,aAAa,CAAC;AAGrB,eAAO,MAAM,kBAAkB;;;;;;;;;;;;CAgB9B,CAAC;AAEF,KAAK,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,MAAM,CAAC,CAAC;AAExD,wBAAsB,kBAAkB,CAAC,MAAM,EAAE;IAC/C,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,GAAG,OAAO,CAAC,WAAW,CAAC,CAsTvB"}
@@ -0,0 +1,262 @@
1
+ import { z } from "zod";
2
+ import { getServers } from "../../utils/config.js";
3
+ import { isSafeMode } from "../../core/manage.js";
4
+ import { createBackup, createBareBackup, restoreBackup, restoreBareBackup, listBackups, loadManifest, } from "../../core/backup.js";
5
+ import { createSnapshot, listSnapshots, deleteSnapshot, } from "../../core/snapshot.js";
6
+ import { isBareServer } from "../../utils/modeGuard.js";
7
+ import { resolveServerForMcp, mcpSuccess, mcpError, requireProviderToken, } from "../utils.js";
8
+ import { getErrorMessage } from "../../utils/errorMapper.js";
9
+ export const serverBackupSchema = {
10
+ action: z.enum([
11
+ "backup-create", "backup-list", "backup-restore",
12
+ "snapshot-create", "snapshot-list", "snapshot-delete",
13
+ ]).describe("Backup: 'backup-create' dumps Coolify DB+config via SSH (or system config for bare servers), 'backup-list' shows local backups, 'backup-restore' restores (SAFE_MODE blocks). Snapshot: 'snapshot-create'/'snapshot-list'/'snapshot-delete' manage cloud snapshots (requires API token)."),
14
+ server: z.string().optional().describe("Server name or IP. Auto-selected if only one server exists."),
15
+ backupId: z.string().regex(/^[\w-]+$/, "Invalid backupId: only alphanumeric, hyphens, underscores allowed").optional().describe("Backup timestamp folder name (required for backup-restore)."),
16
+ snapshotId: z.string().optional().describe("Cloud snapshot ID (required for snapshot-delete)."),
17
+ };
18
+ export async function handleServerBackup(params) {
19
+ try {
20
+ const servers = getServers();
21
+ if (servers.length === 0) {
22
+ return mcpError("No servers found", undefined, [
23
+ { command: "quicklify init", reason: "Deploy a server first" },
24
+ ]);
25
+ }
26
+ const server = resolveServerForMcp(params, servers);
27
+ if (!server) {
28
+ if (params.server) {
29
+ return mcpError(`Server not found: ${params.server}`, `Available servers: ${servers.map((s) => s.name).join(", ")}`);
30
+ }
31
+ return mcpError("Multiple servers found. Specify which server to use.", `Available: ${servers.map((s) => s.name).join(", ")}`);
32
+ }
33
+ switch (params.action) {
34
+ // ─── Backup Actions ──────────────────────────────────────────────
35
+ case "backup-create": {
36
+ const bare = isBareServer(server);
37
+ const result = bare
38
+ ? await createBareBackup(server.ip, server.name, server.provider)
39
+ : await createBackup(server.ip, server.name, server.provider);
40
+ if (!result.success) {
41
+ return {
42
+ content: [{ type: "text", text: JSON.stringify({
43
+ server: server.name,
44
+ ip: server.ip,
45
+ error: result.error,
46
+ ...(result.hint ? { hint: result.hint } : {}),
47
+ suggested_actions: [
48
+ { command: `server_info { action: 'health', server: '${server.name}' }`, reason: "Check if server is reachable" },
49
+ ],
50
+ }) }],
51
+ isError: true,
52
+ };
53
+ }
54
+ return mcpSuccess({
55
+ success: true,
56
+ server: server.name,
57
+ ip: server.ip,
58
+ backupPath: result.backupPath,
59
+ manifest: result.manifest,
60
+ suggested_actions: [
61
+ { command: `server_backup { action: 'backup-list', server: '${server.name}' }`, reason: "View all backups" },
62
+ { command: `server_secure { action: 'secure-audit', server: '${server.name}' }`, reason: "Run security audit" },
63
+ ],
64
+ });
65
+ }
66
+ case "backup-list": {
67
+ const backupIds = listBackups(server.name);
68
+ if (backupIds.length === 0) {
69
+ return mcpSuccess({
70
+ server: server.name,
71
+ backups: [],
72
+ message: "No backups found for this server",
73
+ suggested_actions: [
74
+ { command: `server_backup { action: 'backup-create', server: '${server.name}' }`, reason: "Create a backup" },
75
+ ],
76
+ });
77
+ }
78
+ const { getBackupDir } = await import("../../core/backup.js");
79
+ const { join } = await import("path");
80
+ const backups = backupIds.map((id) => {
81
+ const manifest = loadManifest(join(getBackupDir(server.name), id));
82
+ if (manifest) {
83
+ return {
84
+ backupId: id,
85
+ timestamp: manifest.timestamp,
86
+ coolifyVersion: manifest.coolifyVersion,
87
+ files: manifest.files,
88
+ };
89
+ }
90
+ return { backupId: id, status: "corrupt/unreadable" };
91
+ });
92
+ return mcpSuccess({
93
+ server: server.name,
94
+ backupCount: backupIds.length,
95
+ backups,
96
+ suggested_actions: [
97
+ { command: `server_backup { action: 'backup-restore', server: '${server.name}', backupId: '${backupIds[0]}' }`, reason: "Restore latest backup" },
98
+ ],
99
+ });
100
+ }
101
+ case "backup-restore": {
102
+ if (isSafeMode()) {
103
+ return mcpError("Restore disabled in SAFE_MODE", "Set QUICKLIFY_SAFE_MODE=false to enable restore operations");
104
+ }
105
+ if (!params.backupId) {
106
+ return mcpError("backupId is required for backup-restore", "Use backup-list to see available backups", [{ command: `server_backup { action: 'backup-list', server: '${server.name}' }`, reason: "List available backups" }]);
107
+ }
108
+ const bare = isBareServer(server);
109
+ const result = bare
110
+ ? await restoreBareBackup(server.ip, server.name, params.backupId)
111
+ : await restoreBackup(server.ip, server.name, params.backupId);
112
+ if (!result.success) {
113
+ return {
114
+ content: [{ type: "text", text: JSON.stringify({
115
+ server: server.name,
116
+ ip: server.ip,
117
+ backupId: params.backupId,
118
+ error: result.error,
119
+ steps: result.steps,
120
+ ...(result.hint ? { hint: result.hint } : {}),
121
+ }) }],
122
+ isError: true,
123
+ };
124
+ }
125
+ const successPayload = {
126
+ success: true,
127
+ server: server.name,
128
+ ip: server.ip,
129
+ backupId: params.backupId,
130
+ steps: result.steps,
131
+ suggested_actions: [
132
+ {
133
+ command: `server_info { action: 'health', server: '${server.name}' }`,
134
+ reason: bare ? "Verify SSH access after restore" : "Verify Coolify is running",
135
+ },
136
+ ],
137
+ };
138
+ if (bare) {
139
+ successPayload.hint = "Config restored. You may need to restart services (e.g., nginx, fail2ban) for changes to take effect.";
140
+ }
141
+ return mcpSuccess(successPayload);
142
+ }
143
+ // ─── Snapshot Actions ────────────────────────────────────────────
144
+ case "snapshot-create": {
145
+ if (isSafeMode()) {
146
+ return mcpError("Snapshot creation is disabled in SAFE_MODE", "Set QUICKLIFY_SAFE_MODE=false to enable snapshot creation (billable operation)", [{ command: `server_backup { action: 'backup-create', server: '${server.name}' }`, reason: "Use SSH-based backup instead (free)" }]);
147
+ }
148
+ const isManual = server.id.startsWith("manual-");
149
+ if (isManual) {
150
+ return mcpError("Snapshots require cloud provider API. Manual servers don't have provider IDs.", "Use backup-create for SSH-based backup instead.", [{ command: `server_backup { action: 'backup-create', server: '${server.name}' }`, reason: "SSH-based backup" }]);
151
+ }
152
+ const tokenResult = requireProviderToken(server.provider);
153
+ if ("error" in tokenResult)
154
+ return tokenResult.error;
155
+ const result = await createSnapshot(server, tokenResult.token);
156
+ if (!result.success) {
157
+ return {
158
+ content: [{ type: "text", text: JSON.stringify({
159
+ server: server.name,
160
+ ip: server.ip,
161
+ error: result.error,
162
+ ...(result.hint ? { hint: result.hint } : {}),
163
+ }) }],
164
+ isError: true,
165
+ };
166
+ }
167
+ return mcpSuccess({
168
+ success: true,
169
+ server: server.name,
170
+ ip: server.ip,
171
+ snapshot: result.snapshot,
172
+ costEstimate: result.costEstimate,
173
+ suggested_actions: [
174
+ { command: `server_backup { action: 'snapshot-list', server: '${server.name}' }`, reason: "View all snapshots" },
175
+ ],
176
+ });
177
+ }
178
+ case "snapshot-list": {
179
+ const isManual = server.id.startsWith("manual-");
180
+ if (isManual) {
181
+ return mcpError("Snapshots require cloud provider API. Manual servers don't have provider IDs.", "Use backup-list for local backups instead.", [{ command: `server_backup { action: 'backup-list', server: '${server.name}' }`, reason: "List local backups" }]);
182
+ }
183
+ const tokenResult = requireProviderToken(server.provider);
184
+ if ("error" in tokenResult)
185
+ return tokenResult.error;
186
+ const result = await listSnapshots(server, tokenResult.token);
187
+ if (result.error) {
188
+ return {
189
+ content: [{ type: "text", text: JSON.stringify({
190
+ server: server.name,
191
+ ip: server.ip,
192
+ error: result.error,
193
+ ...(result.hint ? { hint: result.hint } : {}),
194
+ }) }],
195
+ isError: true,
196
+ };
197
+ }
198
+ if (result.snapshots.length === 0) {
199
+ return mcpSuccess({
200
+ server: server.name,
201
+ snapshots: [],
202
+ message: "No snapshots found",
203
+ suggested_actions: [
204
+ { command: `server_backup { action: 'snapshot-create', server: '${server.name}' }`, reason: "Create a snapshot" },
205
+ ],
206
+ });
207
+ }
208
+ return mcpSuccess({
209
+ server: server.name,
210
+ ip: server.ip,
211
+ snapshotCount: result.snapshots.length,
212
+ snapshots: result.snapshots,
213
+ suggested_actions: [
214
+ { command: `server_backup { action: 'snapshot-delete', server: '${server.name}', snapshotId: '${result.snapshots[0].id}' }`, reason: "Delete a snapshot" },
215
+ ],
216
+ });
217
+ }
218
+ case "snapshot-delete": {
219
+ if (isSafeMode()) {
220
+ return mcpError("Snapshot delete disabled in SAFE_MODE", "Set QUICKLIFY_SAFE_MODE=false to enable snapshot deletion");
221
+ }
222
+ const isManual = server.id.startsWith("manual-");
223
+ if (isManual) {
224
+ return mcpError("Snapshots require cloud provider API. Manual servers don't have provider IDs.", "Manual servers cannot manage cloud snapshots.");
225
+ }
226
+ const tokenResult = requireProviderToken(server.provider);
227
+ if ("error" in tokenResult)
228
+ return tokenResult.error;
229
+ if (!params.snapshotId) {
230
+ return mcpError("snapshotId is required for snapshot-delete", "Use snapshot-list to see available snapshots", [{ command: `server_backup { action: 'snapshot-list', server: '${server.name}' }`, reason: "List snapshots" }]);
231
+ }
232
+ const result = await deleteSnapshot(server, tokenResult.token, params.snapshotId);
233
+ if (!result.success) {
234
+ return {
235
+ content: [{ type: "text", text: JSON.stringify({
236
+ server: server.name,
237
+ ip: server.ip,
238
+ snapshotId: params.snapshotId,
239
+ error: result.error,
240
+ ...(result.hint ? { hint: result.hint } : {}),
241
+ }) }],
242
+ isError: true,
243
+ };
244
+ }
245
+ return mcpSuccess({
246
+ success: true,
247
+ server: server.name,
248
+ ip: server.ip,
249
+ snapshotId: params.snapshotId,
250
+ message: "Snapshot deleted",
251
+ suggested_actions: [
252
+ { command: `server_backup { action: 'snapshot-list', server: '${server.name}' }`, reason: "View remaining snapshots" },
253
+ ],
254
+ });
255
+ }
256
+ }
257
+ }
258
+ catch (error) {
259
+ return mcpError(getErrorMessage(error));
260
+ }
261
+ }
262
+ //# sourceMappingURL=serverBackup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serverBackup.js","sourceRoot":"","sources":["../../../src/mcp/tools/serverBackup.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ import { z } from "zod";
2
+ import type { ServerMode } from "../../types/index.js";
3
+ export declare const serverInfoSchema: {
4
+ action: z.ZodEnum<{
5
+ list: "list";
6
+ status: "status";
7
+ health: "health";
8
+ sizes: "sizes";
9
+ }>;
10
+ server: z.ZodOptional<z.ZodString>;
11
+ provider: z.ZodOptional<z.ZodEnum<{
12
+ hetzner: "hetzner";
13
+ digitalocean: "digitalocean";
14
+ vultr: "vultr";
15
+ linode: "linode";
16
+ }>>;
17
+ region: z.ZodOptional<z.ZodString>;
18
+ mode: z.ZodOptional<z.ZodEnum<{
19
+ coolify: "coolify";
20
+ bare: "bare";
21
+ }>>;
22
+ };
23
+ export declare function handleServerInfo(params: {
24
+ action: "list" | "status" | "health" | "sizes";
25
+ server?: string;
26
+ provider?: "hetzner" | "digitalocean" | "vultr" | "linode";
27
+ region?: string;
28
+ mode?: ServerMode;
29
+ }): Promise<{
30
+ content: Array<{
31
+ type: "text";
32
+ text: string;
33
+ }>;
34
+ isError?: boolean;
35
+ }>;
36
+ //# sourceMappingURL=serverInfo.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serverInfo.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/serverInfo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AASxB,OAAO,KAAK,EAAgB,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAGrE,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;CAgB5B,CAAC;AAqGF,wBAAsB,gBAAgB,CAAC,MAAM,EAAE;IAC7C,MAAM,EAAE,MAAM,GAAG,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAAC;IAC/C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,SAAS,GAAG,cAAc,GAAG,OAAO,GAAG,QAAQ,CAAC;IAC3D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,UAAU,CAAC;CACnB,GAAG,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC,CA8NjF"}