quicklify 1.1.0 → 1.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +1 -1
- package/README.md +48 -24
- package/README.tr.md +46 -22
- package/SECURITY.md +63 -34
- package/dist/commands/add.d.ts +1 -0
- package/dist/commands/add.d.ts.map +1 -1
- package/dist/commands/add.js +48 -74
- package/dist/commands/add.js.map +1 -1
- package/dist/commands/backup.d.ts +2 -11
- package/dist/commands/backup.d.ts.map +1 -1
- package/dist/commands/backup.js +111 -53
- package/dist/commands/backup.js.map +1 -1
- package/dist/commands/destroy.d.ts.map +1 -1
- package/dist/commands/destroy.js +58 -37
- package/dist/commands/destroy.js.map +1 -1
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +16 -30
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/domain.d.ts +2 -9
- package/dist/commands/domain.d.ts.map +1 -1
- package/dist/commands/domain.js +47 -56
- package/dist/commands/domain.js.map +1 -1
- package/dist/commands/firewall.d.ts +3 -10
- package/dist/commands/firewall.d.ts.map +1 -1
- package/dist/commands/firewall.js +28 -51
- package/dist/commands/firewall.js.map +1 -1
- package/dist/commands/health.d.ts +2 -2
- package/dist/commands/health.d.ts.map +1 -1
- package/dist/commands/health.js +77 -19
- package/dist/commands/health.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +28 -306
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/interactive.d.ts +2 -0
- package/dist/commands/interactive.d.ts.map +1 -0
- package/dist/commands/interactive.js +357 -0
- package/dist/commands/interactive.js.map +1 -0
- package/dist/commands/list.d.ts.map +1 -1
- package/dist/commands/list.js +4 -2
- package/dist/commands/list.js.map +1 -1
- package/dist/commands/logs.d.ts.map +1 -1
- package/dist/commands/logs.js +9 -1
- package/dist/commands/logs.js.map +1 -1
- package/dist/commands/maintain.d.ts.map +1 -1
- package/dist/commands/maintain.js +28 -47
- package/dist/commands/maintain.js.map +1 -1
- package/dist/commands/monitor.js +1 -1
- package/dist/commands/monitor.js.map +1 -1
- package/dist/commands/remove.d.ts.map +1 -1
- package/dist/commands/remove.js +25 -0
- package/dist/commands/remove.js.map +1 -1
- package/dist/commands/restart.d.ts.map +1 -1
- package/dist/commands/restart.js +39 -39
- package/dist/commands/restart.js.map +1 -1
- package/dist/commands/restore.d.ts +2 -13
- package/dist/commands/restore.d.ts.map +1 -1
- package/dist/commands/restore.js +42 -54
- package/dist/commands/restore.js.map +1 -1
- package/dist/commands/secure.d.ts +2 -9
- package/dist/commands/secure.d.ts.map +1 -1
- package/dist/commands/secure.js +2 -97
- package/dist/commands/secure.js.map +1 -1
- package/dist/commands/snapshot.d.ts.map +1 -1
- package/dist/commands/snapshot.js +55 -67
- package/dist/commands/snapshot.js.map +1 -1
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +33 -16
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/update.d.ts.map +1 -1
- package/dist/commands/update.js +23 -16
- package/dist/commands/update.js.map +1 -1
- package/dist/constants.d.ts +42 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +54 -0
- package/dist/constants.js.map +1 -0
- package/dist/core/backup.d.ts +18 -2
- package/dist/core/backup.d.ts.map +1 -1
- package/dist/core/backup.js +184 -7
- package/dist/core/backup.js.map +1 -1
- package/dist/core/deploy.d.ts +4 -0
- package/dist/core/deploy.d.ts.map +1 -0
- package/dist/core/deploy.js +360 -0
- package/dist/core/deploy.js.map +1 -0
- package/dist/core/domain.d.ts.map +1 -1
- package/dist/core/domain.js +1 -5
- package/dist/core/domain.js.map +1 -1
- package/dist/core/firewall.d.ts +2 -0
- package/dist/core/firewall.d.ts.map +1 -1
- package/dist/core/firewall.js +12 -0
- package/dist/core/firewall.js.map +1 -1
- package/dist/core/logs.js +1 -1
- package/dist/core/logs.js.map +1 -1
- package/dist/core/maintain.d.ts.map +1 -1
- package/dist/core/maintain.js +1 -2
- package/dist/core/maintain.js.map +1 -1
- package/dist/core/manage.d.ts +10 -1
- package/dist/core/manage.d.ts.map +1 -1
- package/dist/core/manage.js +45 -7
- package/dist/core/manage.js.map +1 -1
- package/dist/core/provision.d.ts +2 -1
- package/dist/core/provision.d.ts.map +1 -1
- package/dist/core/provision.js +8 -13
- package/dist/core/provision.js.map +1 -1
- package/dist/core/secure.d.ts.map +1 -1
- package/dist/core/secure.js +8 -2
- package/dist/core/secure.js.map +1 -1
- package/dist/core/status.d.ts.map +1 -1
- package/dist/core/status.js +2 -1
- package/dist/core/status.js.map +1 -1
- package/dist/core/tokens.d.ts.map +1 -1
- package/dist/core/tokens.js +5 -8
- package/dist/core/tokens.js.map +1 -1
- package/dist/index.js +17 -4
- package/dist/index.js.map +1 -1
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +13 -7
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/tools/serverBackup.d.ts +2 -7
- package/dist/mcp/tools/serverBackup.d.ts.map +1 -1
- package/dist/mcp/tools/serverBackup.js +120 -234
- package/dist/mcp/tools/serverBackup.js.map +1 -1
- package/dist/mcp/tools/serverInfo.d.ts +19 -2
- package/dist/mcp/tools/serverInfo.d.ts.map +1 -1
- package/dist/mcp/tools/serverInfo.js +122 -57
- package/dist/mcp/tools/serverInfo.js.map +1 -1
- package/dist/mcp/tools/serverLogs.d.ts +2 -7
- package/dist/mcp/tools/serverLogs.d.ts.map +1 -1
- package/dist/mcp/tools/serverLogs.js +36 -57
- package/dist/mcp/tools/serverLogs.js.map +1 -1
- package/dist/mcp/tools/serverMaintain.d.ts +3 -8
- package/dist/mcp/tools/serverMaintain.d.ts.map +1 -1
- package/dist/mcp/tools/serverMaintain.js +48 -109
- package/dist/mcp/tools/serverMaintain.js.map +1 -1
- package/dist/mcp/tools/serverManage.d.ts +5 -0
- package/dist/mcp/tools/serverManage.d.ts.map +1 -1
- package/dist/mcp/tools/serverManage.js +94 -110
- package/dist/mcp/tools/serverManage.js.map +1 -1
- package/dist/mcp/tools/serverProvision.d.ts +7 -1
- package/dist/mcp/tools/serverProvision.d.ts.map +1 -1
- package/dist/mcp/tools/serverProvision.js +69 -77
- package/dist/mcp/tools/serverProvision.js.map +1 -1
- package/dist/mcp/tools/serverSecure.d.ts +2 -7
- package/dist/mcp/tools/serverSecure.d.ts.map +1 -1
- package/dist/mcp/tools/serverSecure.js +109 -170
- package/dist/mcp/tools/serverSecure.js.map +1 -1
- package/dist/mcp/utils.d.ts +42 -0
- package/dist/mcp/utils.d.ts.map +1 -0
- package/dist/mcp/utils.js +61 -0
- package/dist/mcp/utils.js.map +1 -0
- package/dist/providers/base.d.ts +9 -2
- package/dist/providers/base.d.ts.map +1 -1
- package/dist/providers/base.js +56 -1
- package/dist/providers/base.js.map +1 -1
- package/dist/providers/digitalocean.d.ts +3 -3
- package/dist/providers/digitalocean.d.ts.map +1 -1
- package/dist/providers/digitalocean.js +4 -12
- package/dist/providers/digitalocean.js.map +1 -1
- package/dist/providers/hetzner.d.ts +3 -3
- package/dist/providers/hetzner.d.ts.map +1 -1
- package/dist/providers/hetzner.js +8 -13
- package/dist/providers/hetzner.js.map +1 -1
- package/dist/providers/linode.d.ts +3 -3
- package/dist/providers/linode.d.ts.map +1 -1
- package/dist/providers/linode.js +3 -11
- package/dist/providers/linode.js.map +1 -1
- package/dist/providers/vultr.d.ts +3 -3
- package/dist/providers/vultr.d.ts.map +1 -1
- package/dist/providers/vultr.js +3 -11
- package/dist/providers/vultr.js.map +1 -1
- package/dist/types/index.d.ts +11 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/utils/cloudInit.d.ts +1 -0
- package/dist/utils/cloudInit.d.ts.map +1 -1
- package/dist/utils/cloudInit.js +62 -0
- package/dist/utils/cloudInit.js.map +1 -1
- package/dist/utils/config.js +1 -1
- package/dist/utils/config.js.map +1 -1
- package/dist/utils/defaults.d.ts.map +1 -1
- package/dist/utils/defaults.js +3 -2
- package/dist/utils/defaults.js.map +1 -1
- package/dist/utils/errorMapper.d.ts.map +1 -1
- package/dist/utils/errorMapper.js +5 -1
- package/dist/utils/errorMapper.js.map +1 -1
- package/dist/utils/modeGuard.d.ts +5 -0
- package/dist/utils/modeGuard.d.ts.map +1 -0
- package/dist/utils/modeGuard.js +13 -0
- package/dist/utils/modeGuard.js.map +1 -0
- package/dist/utils/openBrowser.d.ts.map +1 -1
- package/dist/utils/openBrowser.js +3 -1
- package/dist/utils/openBrowser.js.map +1 -1
- package/dist/utils/prompts.d.ts +2 -2
- package/dist/utils/prompts.d.ts.map +1 -1
- package/dist/utils/prompts.js +8 -9
- package/dist/utils/prompts.js.map +1 -1
- package/dist/utils/serverSelect.d.ts.map +1 -1
- package/dist/utils/serverSelect.js +2 -7
- package/dist/utils/serverSelect.js.map +1 -1
- package/dist/utils/ssh.d.ts +9 -0
- package/dist/utils/ssh.d.ts.map +1 -1
- package/dist/utils/ssh.js +175 -15
- package/dist/utils/ssh.js.map +1 -1
- package/dist/utils/sshKey.d.ts.map +1 -1
- package/dist/utils/sshKey.js +3 -0
- package/dist/utils/sshKey.js.map +1 -1
- package/dist/utils/yamlConfig.d.ts.map +1 -1
- package/dist/utils/yamlConfig.js +4 -3
- package/dist/utils/yamlConfig.js.map +1 -1
- package/package.json +5 -5
|
@@ -1,57 +1,38 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
-
import { getServers
|
|
2
|
+
import { getServers } from "../../utils/config.js";
|
|
3
3
|
import { getProviderToken } from "../../core/tokens.js";
|
|
4
4
|
import { isSafeMode } from "../../core/manage.js";
|
|
5
5
|
import { executeCoolifyUpdate, rebootAndWait, maintainServer, } from "../../core/maintain.js";
|
|
6
|
+
import { requireCoolifyMode } from "../../utils/modeGuard.js";
|
|
7
|
+
import { resolveServerForMcp, mcpSuccess, mcpError, } from "../utils.js";
|
|
6
8
|
import { getErrorMessage } from "../../utils/errorMapper.js";
|
|
7
9
|
export const serverMaintainSchema = {
|
|
8
|
-
action: z.enum(["update", "restart", "maintain"]).describe("Action: 'update' runs Coolify update via SSH, 'restart' reboots server via cloud API, 'maintain' runs full 5-step maintenance (status → update → health → reboot → final)"),
|
|
10
|
+
action: z.enum(["update", "restart", "maintain"]).describe("Action: 'update' runs Coolify update via SSH (Coolify servers only), 'restart' reboots server via cloud provider API (both modes), 'maintain' runs full 5-step maintenance (status → update → health → reboot → final, Coolify servers only)"),
|
|
9
11
|
server: z.string().optional().describe("Server name or IP. Auto-selected if only one server exists."),
|
|
10
12
|
skipReboot: z.boolean().default(false).describe("Skip reboot and final check steps (only for 'maintain' action). Useful during business hours."),
|
|
11
13
|
};
|
|
12
|
-
function resolveServer(params, servers) {
|
|
13
|
-
if (params.server) {
|
|
14
|
-
return findServer(params.server);
|
|
15
|
-
}
|
|
16
|
-
if (servers.length === 1) {
|
|
17
|
-
return servers[0];
|
|
18
|
-
}
|
|
19
|
-
return undefined;
|
|
20
|
-
}
|
|
21
14
|
export async function handleServerMaintain(params) {
|
|
22
15
|
try {
|
|
23
16
|
const servers = getServers();
|
|
24
17
|
if (servers.length === 0) {
|
|
25
|
-
return
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
suggested_actions: [{ command: "quicklify init", reason: "Deploy a server first" }],
|
|
29
|
-
}) }],
|
|
30
|
-
isError: true,
|
|
31
|
-
};
|
|
18
|
+
return mcpError("No servers found", undefined, [
|
|
19
|
+
{ command: "quicklify init", reason: "Deploy a server first" },
|
|
20
|
+
]);
|
|
32
21
|
}
|
|
33
|
-
const server =
|
|
22
|
+
const server = resolveServerForMcp(params, servers);
|
|
34
23
|
if (!server) {
|
|
35
24
|
if (params.server) {
|
|
36
|
-
return {
|
|
37
|
-
content: [{ type: "text", text: JSON.stringify({
|
|
38
|
-
error: `Server not found: ${params.server}`,
|
|
39
|
-
available_servers: servers.map((s) => s.name),
|
|
40
|
-
}) }],
|
|
41
|
-
isError: true,
|
|
42
|
-
};
|
|
25
|
+
return mcpError(`Server not found: ${params.server}`, `Available servers: ${servers.map((s) => s.name).join(", ")}`);
|
|
43
26
|
}
|
|
44
|
-
return {
|
|
45
|
-
content: [{ type: "text", text: JSON.stringify({
|
|
46
|
-
error: "Multiple servers found. Specify which server to use.",
|
|
47
|
-
available_servers: servers.map((s) => ({ name: s.name, ip: s.ip })),
|
|
48
|
-
}) }],
|
|
49
|
-
isError: true,
|
|
50
|
-
};
|
|
27
|
+
return mcpError("Multiple servers found. Specify which server to use.", `Available: ${servers.map((s) => s.name).join(", ")}`);
|
|
51
28
|
}
|
|
52
29
|
switch (params.action) {
|
|
53
30
|
case "update": {
|
|
54
|
-
//
|
|
31
|
+
// Guard: update requires Coolify
|
|
32
|
+
const modeError = requireCoolifyMode(server, "update");
|
|
33
|
+
if (modeError) {
|
|
34
|
+
return mcpError(modeError, "Use SSH to manage bare servers directly");
|
|
35
|
+
}
|
|
55
36
|
const result = await executeCoolifyUpdate(server.ip);
|
|
56
37
|
if (!result.success) {
|
|
57
38
|
return {
|
|
@@ -67,53 +48,29 @@ export async function handleServerMaintain(params) {
|
|
|
67
48
|
isError: true,
|
|
68
49
|
};
|
|
69
50
|
}
|
|
70
|
-
return {
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
}) }],
|
|
81
|
-
};
|
|
51
|
+
return mcpSuccess({
|
|
52
|
+
success: true,
|
|
53
|
+
server: server.name,
|
|
54
|
+
ip: server.ip,
|
|
55
|
+
message: "Coolify update completed successfully",
|
|
56
|
+
suggested_actions: [
|
|
57
|
+
{ command: `server_info { action: 'health', server: '${server.name}' }`, reason: "Verify Coolify is running after update" },
|
|
58
|
+
{ command: `server_logs { action: 'logs', server: '${server.name}' }`, reason: "Check logs after update" },
|
|
59
|
+
],
|
|
60
|
+
});
|
|
82
61
|
}
|
|
83
62
|
case "restart": {
|
|
84
63
|
if (isSafeMode()) {
|
|
85
|
-
return {
|
|
86
|
-
content: [{ type: "text", text: JSON.stringify({
|
|
87
|
-
error: "Restart is disabled in SAFE_MODE",
|
|
88
|
-
hint: "Set QUICKLIFY_SAFE_MODE=false to enable server reboot",
|
|
89
|
-
suggested_actions: [
|
|
90
|
-
{ command: `server_maintain { action: 'update', server: '${server.name}' }`, reason: "Run Coolify update instead (non-destructive)" },
|
|
91
|
-
],
|
|
92
|
-
}) }],
|
|
93
|
-
isError: true,
|
|
94
|
-
};
|
|
64
|
+
return mcpError("Restart is disabled in SAFE_MODE", "Set QUICKLIFY_SAFE_MODE=false to enable server reboot", [{ command: `server_maintain { action: 'update', server: '${server.name}' }`, reason: "Run Coolify update instead (non-destructive)" }]);
|
|
95
65
|
}
|
|
96
|
-
// Restart requires API token for cloud provider
|
|
66
|
+
// Restart requires API token for cloud provider — no mode guard (works on both)
|
|
97
67
|
const isManual = server.id.startsWith("manual-");
|
|
98
68
|
if (isManual) {
|
|
99
|
-
return {
|
|
100
|
-
content: [{ type: "text", text: JSON.stringify({
|
|
101
|
-
error: `Cannot reboot manually added server via API`,
|
|
102
|
-
hint: `Use SSH: ssh root@${server.ip} reboot`,
|
|
103
|
-
server: { name: server.name, ip: server.ip },
|
|
104
|
-
}) }],
|
|
105
|
-
isError: true,
|
|
106
|
-
};
|
|
69
|
+
return mcpError("Cannot reboot manually added server via API", `Use SSH: ssh root@${server.ip} reboot`);
|
|
107
70
|
}
|
|
108
71
|
const token = getProviderToken(server.provider);
|
|
109
72
|
if (!token) {
|
|
110
|
-
return {
|
|
111
|
-
content: [{ type: "text", text: JSON.stringify({
|
|
112
|
-
error: `No API token found for provider: ${server.provider}`,
|
|
113
|
-
hint: `Set environment variable: ${server.provider.toUpperCase()}_TOKEN`,
|
|
114
|
-
}) }],
|
|
115
|
-
isError: true,
|
|
116
|
-
};
|
|
73
|
+
return mcpError(`No API token found for provider: ${server.provider}`, `Set environment variable: ${server.provider.toUpperCase()}_TOKEN`);
|
|
117
74
|
}
|
|
118
75
|
const result = await rebootAndWait(server, token);
|
|
119
76
|
if (!result.success) {
|
|
@@ -130,32 +87,26 @@ export async function handleServerMaintain(params) {
|
|
|
130
87
|
isError: true,
|
|
131
88
|
};
|
|
132
89
|
}
|
|
133
|
-
return {
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
}) }],
|
|
145
|
-
};
|
|
90
|
+
return mcpSuccess({
|
|
91
|
+
success: true,
|
|
92
|
+
server: server.name,
|
|
93
|
+
ip: server.ip,
|
|
94
|
+
message: "Server restarted successfully",
|
|
95
|
+
finalStatus: result.finalStatus,
|
|
96
|
+
suggested_actions: [
|
|
97
|
+
{ command: `server_info { action: 'health', server: '${server.name}' }`, reason: "Verify Coolify is accessible" },
|
|
98
|
+
{ command: `server_logs { action: 'logs', server: '${server.name}' }`, reason: "Check logs after restart" },
|
|
99
|
+
],
|
|
100
|
+
});
|
|
146
101
|
}
|
|
147
102
|
case "maintain": {
|
|
103
|
+
// Guard: maintain requires Coolify
|
|
104
|
+
const modeError = requireCoolifyMode(server, "maintain");
|
|
105
|
+
if (modeError) {
|
|
106
|
+
return mcpError(modeError, "Use SSH to manage bare servers directly");
|
|
107
|
+
}
|
|
148
108
|
if (isSafeMode()) {
|
|
149
|
-
return {
|
|
150
|
-
content: [{ type: "text", text: JSON.stringify({
|
|
151
|
-
error: "Maintenance is disabled in SAFE_MODE",
|
|
152
|
-
hint: "Set QUICKLIFY_SAFE_MODE=false to enable full maintenance (includes reboot)",
|
|
153
|
-
suggested_actions: [
|
|
154
|
-
{ command: `server_maintain { action: 'update', server: '${server.name}' }`, reason: "Run Coolify update only (non-destructive)" },
|
|
155
|
-
],
|
|
156
|
-
}) }],
|
|
157
|
-
isError: true,
|
|
158
|
-
};
|
|
109
|
+
return mcpError("Maintenance is disabled in SAFE_MODE", "Set QUICKLIFY_SAFE_MODE=false to enable full maintenance (includes reboot)", [{ command: `server_maintain { action: 'update', server: '${server.name}' }`, reason: "Run Coolify update only (non-destructive)" }]);
|
|
159
110
|
}
|
|
160
111
|
// Maintain requires API token for non-manual servers
|
|
161
112
|
const isManual = server.id.startsWith("manual-");
|
|
@@ -163,16 +114,7 @@ export async function handleServerMaintain(params) {
|
|
|
163
114
|
if (!isManual) {
|
|
164
115
|
const envToken = getProviderToken(server.provider);
|
|
165
116
|
if (!envToken) {
|
|
166
|
-
return {
|
|
167
|
-
content: [{ type: "text", text: JSON.stringify({
|
|
168
|
-
error: `No API token found for provider: ${server.provider}`,
|
|
169
|
-
hint: `Set environment variable: ${server.provider.toUpperCase()}_TOKEN`,
|
|
170
|
-
suggested_actions: [
|
|
171
|
-
{ command: `server_maintain { action: 'update', server: '${server.name}' }`, reason: "Run update only (no token needed)" },
|
|
172
|
-
],
|
|
173
|
-
}) }],
|
|
174
|
-
isError: true,
|
|
175
|
-
};
|
|
117
|
+
return mcpError(`No API token found for provider: ${server.provider}`, `Set environment variable: ${server.provider.toUpperCase()}_TOKEN`, [{ command: `server_maintain { action: 'update', server: '${server.name}' }`, reason: "Run update only (no token needed)" }]);
|
|
176
118
|
}
|
|
177
119
|
token = envToken;
|
|
178
120
|
}
|
|
@@ -208,10 +150,7 @@ export async function handleServerMaintain(params) {
|
|
|
208
150
|
}
|
|
209
151
|
}
|
|
210
152
|
catch (error) {
|
|
211
|
-
return
|
|
212
|
-
content: [{ type: "text", text: JSON.stringify({ error: getErrorMessage(error) }) }],
|
|
213
|
-
isError: true,
|
|
214
|
-
};
|
|
153
|
+
return mcpError(getErrorMessage(error));
|
|
215
154
|
}
|
|
216
155
|
}
|
|
217
156
|
//# sourceMappingURL=serverMaintain.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serverMaintain.js","sourceRoot":"","sources":["../../../src/mcp/tools/serverMaintain.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,
|
|
1
|
+
{"version":3,"file":"serverMaintain.js","sourceRoot":"","sources":["../../../src/mcp/tools/serverMaintain.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,6 +15,10 @@ export declare const serverManageSchema: {
|
|
|
15
15
|
ip: z.ZodOptional<z.ZodString>;
|
|
16
16
|
name: z.ZodOptional<z.ZodString>;
|
|
17
17
|
skipVerify: z.ZodDefault<z.ZodBoolean>;
|
|
18
|
+
mode: z.ZodDefault<z.ZodEnum<{
|
|
19
|
+
coolify: "coolify";
|
|
20
|
+
bare: "bare";
|
|
21
|
+
}>>;
|
|
18
22
|
};
|
|
19
23
|
export declare function handleServerManage(params: {
|
|
20
24
|
action: "add" | "remove" | "destroy";
|
|
@@ -23,6 +27,7 @@ export declare function handleServerManage(params: {
|
|
|
23
27
|
ip?: string;
|
|
24
28
|
name?: string;
|
|
25
29
|
skipVerify?: boolean;
|
|
30
|
+
mode?: "coolify" | "bare";
|
|
26
31
|
}): Promise<{
|
|
27
32
|
content: Array<{
|
|
28
33
|
type: "text";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serverManage.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/serverManage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"serverManage.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/serverManage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAWxB,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;CAyB9B,CAAC;AAEF,wBAAsB,kBAAkB,CAAC,MAAM,EAAE;IAC/C,MAAM,EAAE,KAAK,GAAG,QAAQ,GAAG,SAAS,CAAC;IACrC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,IAAI,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC;CAC3B,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,CAqNjF"}
|
|
@@ -1,93 +1,94 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
import { getServers } from "../../utils/config.js";
|
|
3
3
|
import { isSafeMode, addServerRecord, removeServerRecord, destroyCloudServer, } from "../../core/manage.js";
|
|
4
|
-
import {
|
|
4
|
+
import { mcpSuccess, mcpError } from "../utils.js";
|
|
5
|
+
import { SUPPORTED_PROVIDERS } from "../../constants.js";
|
|
5
6
|
export const serverManageSchema = {
|
|
6
7
|
action: z.enum(["add", "remove", "destroy"]).describe("Action: 'add' register an existing server, 'remove' unregister from local config (server stays running), 'destroy' permanently delete from cloud provider AND local config"),
|
|
7
8
|
server: z.string().optional().describe("Server name or IP (required for 'remove' and 'destroy' actions)"),
|
|
8
|
-
provider: z.enum(
|
|
9
|
+
provider: z.enum(SUPPORTED_PROVIDERS).optional().describe("Cloud provider: 'hetzner', 'digitalocean', 'vultr', 'linode' (required for 'add' action)"),
|
|
9
10
|
ip: z.string().optional().describe("Server public IP address (required for 'add' action)"),
|
|
10
11
|
name: z.string().optional().describe("Server name, 3-63 chars, lowercase alphanumeric and hyphens (required for 'add' action)"),
|
|
11
12
|
skipVerify: z.boolean().default(false).describe("Skip Coolify SSH verification when adding a server (only for 'add' action)"),
|
|
13
|
+
mode: z
|
|
14
|
+
.enum(["coolify", "bare"])
|
|
15
|
+
.default("coolify")
|
|
16
|
+
.describe("Server mode for 'add' action: 'coolify' or 'bare'. Default: coolify"),
|
|
12
17
|
};
|
|
13
18
|
export async function handleServerManage(params) {
|
|
14
19
|
try {
|
|
15
20
|
switch (params.action) {
|
|
16
21
|
case "add": {
|
|
17
22
|
if (!params.provider) {
|
|
18
|
-
return
|
|
19
|
-
content: [{ type: "text", text: JSON.stringify({
|
|
20
|
-
error: "Missing required parameter: provider",
|
|
21
|
-
hint: "Specify provider: 'hetzner', 'digitalocean', 'vultr', or 'linode'",
|
|
22
|
-
}) }],
|
|
23
|
-
isError: true,
|
|
24
|
-
};
|
|
23
|
+
return mcpError("Missing required parameter: provider", "Specify provider: 'hetzner', 'digitalocean', 'vultr', or 'linode'");
|
|
25
24
|
}
|
|
26
25
|
if (!params.ip) {
|
|
27
|
-
return
|
|
28
|
-
content: [{ type: "text", text: JSON.stringify({
|
|
29
|
-
error: "Missing required parameter: ip",
|
|
30
|
-
hint: "Specify the server's public IP address",
|
|
31
|
-
}) }],
|
|
32
|
-
isError: true,
|
|
33
|
-
};
|
|
26
|
+
return mcpError("Missing required parameter: ip", "Specify the server's public IP address");
|
|
34
27
|
}
|
|
35
28
|
if (!params.name) {
|
|
36
|
-
return
|
|
37
|
-
content: [{ type: "text", text: JSON.stringify({
|
|
38
|
-
error: "Missing required parameter: name",
|
|
39
|
-
hint: "Specify a server name (3-63 chars, lowercase, alphanumeric and hyphens)",
|
|
40
|
-
}) }],
|
|
41
|
-
isError: true,
|
|
42
|
-
};
|
|
29
|
+
return mcpError("Missing required parameter: name", "Specify a server name (3-63 chars, lowercase, alphanumeric and hyphens)");
|
|
43
30
|
}
|
|
31
|
+
const mode = params.mode ?? "coolify";
|
|
44
32
|
const result = await addServerRecord({
|
|
45
33
|
provider: params.provider,
|
|
46
34
|
ip: params.ip,
|
|
47
35
|
name: params.name,
|
|
48
36
|
skipVerify: params.skipVerify ?? false,
|
|
37
|
+
mode,
|
|
49
38
|
});
|
|
50
39
|
if (!result.success) {
|
|
51
|
-
return
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
suggested_actions: [
|
|
55
|
-
{ command: "server_info { action: 'list' }", reason: "Check existing servers" },
|
|
56
|
-
],
|
|
57
|
-
}) }],
|
|
58
|
-
isError: true,
|
|
59
|
-
};
|
|
40
|
+
return mcpError(result.error ?? "Add server failed", undefined, [
|
|
41
|
+
{ command: "server_info { action: 'list' }", reason: "Check existing servers" },
|
|
42
|
+
]);
|
|
60
43
|
}
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
44
|
+
const suggestedActions = mode === "bare"
|
|
45
|
+
? [
|
|
46
|
+
{
|
|
47
|
+
command: `server_info { action: 'status', server: '${result.server.name}' }`,
|
|
48
|
+
reason: "Check server status",
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
command: `server_secure { action: 'secure-setup', server: '${result.server.name}' }`,
|
|
52
|
+
reason: "Harden SSH security + install fail2ban",
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
command: `server_logs { action: 'logs', server: '${result.server.name}' }`,
|
|
56
|
+
reason: "View server logs",
|
|
57
|
+
},
|
|
58
|
+
]
|
|
59
|
+
: [
|
|
60
|
+
{
|
|
61
|
+
command: `server_info { action: 'status', server: '${result.server.name}' }`,
|
|
62
|
+
reason: "Check server status",
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
command: `server_info { action: 'health', server: '${result.server.name}' }`,
|
|
66
|
+
reason: "Check Coolify health",
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
command: `server_logs { action: 'logs', server: '${result.server.name}' }`,
|
|
70
|
+
reason: "View server logs",
|
|
71
|
+
},
|
|
72
|
+
];
|
|
73
|
+
return mcpSuccess({
|
|
74
|
+
success: true,
|
|
75
|
+
message: `Server "${result.server.name}" added successfully`,
|
|
76
|
+
server: {
|
|
77
|
+
name: result.server.name,
|
|
78
|
+
ip: result.server.ip,
|
|
79
|
+
provider: result.server.provider,
|
|
80
|
+
id: result.server.id,
|
|
81
|
+
mode,
|
|
82
|
+
},
|
|
83
|
+
coolifyStatus: result.coolifyStatus,
|
|
84
|
+
suggested_actions: suggestedActions,
|
|
85
|
+
});
|
|
79
86
|
}
|
|
80
87
|
case "remove": {
|
|
81
88
|
if (!params.server) {
|
|
82
89
|
const servers = getServers();
|
|
83
90
|
if (servers.length === 0) {
|
|
84
|
-
return {
|
|
85
|
-
content: [{ type: "text", text: JSON.stringify({
|
|
86
|
-
error: "No servers found",
|
|
87
|
-
suggested_actions: [{ command: "quicklify init", reason: "Deploy a server first" }],
|
|
88
|
-
}) }],
|
|
89
|
-
isError: true,
|
|
90
|
-
};
|
|
91
|
+
return mcpError("No servers found", undefined, [{ command: "quicklify init", reason: "Deploy a server first" }]);
|
|
91
92
|
}
|
|
92
93
|
return {
|
|
93
94
|
content: [{ type: "text", text: JSON.stringify({
|
|
@@ -109,46 +110,34 @@ export async function handleServerManage(params) {
|
|
|
109
110
|
isError: true,
|
|
110
111
|
};
|
|
111
112
|
}
|
|
112
|
-
return {
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
}) }],
|
|
126
|
-
};
|
|
113
|
+
return mcpSuccess({
|
|
114
|
+
success: true,
|
|
115
|
+
message: `Server "${result.server.name}" removed from local config`,
|
|
116
|
+
note: "The cloud server is still running. Use 'destroy' to delete it from the provider.",
|
|
117
|
+
server: {
|
|
118
|
+
name: result.server.name,
|
|
119
|
+
ip: result.server.ip,
|
|
120
|
+
provider: result.server.provider,
|
|
121
|
+
},
|
|
122
|
+
suggested_actions: [
|
|
123
|
+
{ command: "server_info { action: 'list' }", reason: "View remaining servers" },
|
|
124
|
+
],
|
|
125
|
+
});
|
|
127
126
|
}
|
|
128
127
|
case "destroy": {
|
|
129
128
|
// SAFE_MODE check
|
|
130
129
|
if (isSafeMode()) {
|
|
131
|
-
return
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
],
|
|
138
|
-
}) }],
|
|
139
|
-
isError: true,
|
|
140
|
-
};
|
|
130
|
+
return mcpError("Destroy is disabled in SAFE_MODE", "Set QUICKLIFY_SAFE_MODE=false to enable destructive operations", [
|
|
131
|
+
{
|
|
132
|
+
command: `server_manage { action: 'remove', server: '${params.server ?? ""}' }`,
|
|
133
|
+
reason: "Remove from local config only (non-destructive)",
|
|
134
|
+
},
|
|
135
|
+
]);
|
|
141
136
|
}
|
|
142
137
|
if (!params.server) {
|
|
143
138
|
const servers = getServers();
|
|
144
139
|
if (servers.length === 0) {
|
|
145
|
-
return {
|
|
146
|
-
content: [{ type: "text", text: JSON.stringify({
|
|
147
|
-
error: "No servers found",
|
|
148
|
-
suggested_actions: [{ command: "quicklify init", reason: "Deploy a server first" }],
|
|
149
|
-
}) }],
|
|
150
|
-
isError: true,
|
|
151
|
-
};
|
|
140
|
+
return mcpError("No servers found", undefined, [{ command: "quicklify init", reason: "Deploy a server first" }]);
|
|
152
141
|
}
|
|
153
142
|
return {
|
|
154
143
|
content: [{ type: "text", text: JSON.stringify({
|
|
@@ -177,31 +166,26 @@ export async function handleServerManage(params) {
|
|
|
177
166
|
isError: true,
|
|
178
167
|
};
|
|
179
168
|
}
|
|
180
|
-
return {
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
}) }],
|
|
196
|
-
};
|
|
169
|
+
return mcpSuccess({
|
|
170
|
+
success: true,
|
|
171
|
+
message: `Server "${result.server.name}" destroyed`,
|
|
172
|
+
cloudDeleted: result.cloudDeleted,
|
|
173
|
+
localRemoved: result.localRemoved,
|
|
174
|
+
...(result.hint ? { note: result.hint } : {}),
|
|
175
|
+
server: {
|
|
176
|
+
name: result.server.name,
|
|
177
|
+
ip: result.server.ip,
|
|
178
|
+
provider: result.server.provider,
|
|
179
|
+
},
|
|
180
|
+
suggested_actions: [
|
|
181
|
+
{ command: "server_info { action: 'list' }", reason: "Verify server was removed" },
|
|
182
|
+
],
|
|
183
|
+
});
|
|
197
184
|
}
|
|
198
185
|
}
|
|
199
186
|
}
|
|
200
187
|
catch (error) {
|
|
201
|
-
return
|
|
202
|
-
content: [{ type: "text", text: JSON.stringify({ error: getErrorMessage(error) }) }],
|
|
203
|
-
isError: true,
|
|
204
|
-
};
|
|
188
|
+
return mcpError(error instanceof Error ? error.message : String(error));
|
|
205
189
|
}
|
|
206
190
|
}
|
|
207
191
|
//# sourceMappingURL=serverManage.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serverManage.js","sourceRoot":"","sources":["../../../src/mcp/tools/serverManage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EACL,UAAU,EACV,eAAe,EACf,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"serverManage.js","sourceRoot":"","sources":["../../../src/mcp/tools/serverManage.ts"],"names":[],"mappings":"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"}
|