quicklify 1.1.0 → 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.
- package/LICENSE +1 -1
- package/README.md +46 -22
- 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 +41 -65
- 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/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 +115 -29
- 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 +14 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +23 -0
- package/dist/constants.js.map +1 -0
- package/dist/core/backup.d.ts +16 -0
- package/dist/core/backup.d.ts.map +1 -1
- package/dist/core/backup.js +159 -1
- package/dist/core/backup.js.map +1 -1
- 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 +42 -4
- 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 +7 -12
- 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/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 +18 -2
- package/dist/mcp/tools/serverInfo.d.ts.map +1 -1
- package/dist/mcp/tools/serverInfo.js +121 -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 +92 -109
- package/dist/mcp/tools/serverManage.js.map +1 -1
- package/dist/mcp/tools/serverProvision.d.ts +5 -0
- package/dist/mcp/tools/serverProvision.d.ts.map +1 -1
- package/dist/mcp/tools/serverProvision.js +67 -76
- 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 +2 -2
- package/dist/providers/base.d.ts.map +1 -1
- package/dist/providers/digitalocean.d.ts +2 -2
- package/dist/providers/digitalocean.d.ts.map +1 -1
- package/dist/providers/digitalocean.js +3 -3
- package/dist/providers/digitalocean.js.map +1 -1
- package/dist/providers/hetzner.d.ts +2 -2
- package/dist/providers/hetzner.d.ts.map +1 -1
- package/dist/providers/hetzner.js +7 -4
- package/dist/providers/hetzner.js.map +1 -1
- package/dist/providers/linode.d.ts +2 -2
- package/dist/providers/linode.d.ts.map +1 -1
- package/dist/providers/linode.js +2 -2
- package/dist/providers/linode.js.map +1 -1
- package/dist/providers/vultr.d.ts +2 -2
- package/dist/providers/vultr.d.ts.map +1 -1
- package/dist/providers/vultr.js +2 -2
- 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/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 +3 -3
- package/dist/utils/prompts.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/package.json +2 -2
|
@@ -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;AAUxB,eAAO,MAAM,kBAAkB
|
|
1
|
+
{"version":3,"file":"serverManage.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/serverManage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAUxB,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,7 +1,7 @@
|
|
|
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
5
|
export const serverManageSchema = {
|
|
6
6
|
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
7
|
server: z.string().optional().describe("Server name or IP (required for 'remove' and 'destroy' actions)"),
|
|
@@ -9,85 +9,85 @@ export const serverManageSchema = {
|
|
|
9
9
|
ip: z.string().optional().describe("Server public IP address (required for 'add' action)"),
|
|
10
10
|
name: z.string().optional().describe("Server name, 3-63 chars, lowercase alphanumeric and hyphens (required for 'add' action)"),
|
|
11
11
|
skipVerify: z.boolean().default(false).describe("Skip Coolify SSH verification when adding a server (only for 'add' action)"),
|
|
12
|
+
mode: z
|
|
13
|
+
.enum(["coolify", "bare"])
|
|
14
|
+
.default("coolify")
|
|
15
|
+
.describe("Server mode for 'add' action: 'coolify' or 'bare'. Default: coolify"),
|
|
12
16
|
};
|
|
13
17
|
export async function handleServerManage(params) {
|
|
14
18
|
try {
|
|
15
19
|
switch (params.action) {
|
|
16
20
|
case "add": {
|
|
17
21
|
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
|
-
};
|
|
22
|
+
return mcpError("Missing required parameter: provider", "Specify provider: 'hetzner', 'digitalocean', 'vultr', or 'linode'");
|
|
25
23
|
}
|
|
26
24
|
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
|
-
};
|
|
25
|
+
return mcpError("Missing required parameter: ip", "Specify the server's public IP address");
|
|
34
26
|
}
|
|
35
27
|
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
|
-
};
|
|
28
|
+
return mcpError("Missing required parameter: name", "Specify a server name (3-63 chars, lowercase, alphanumeric and hyphens)");
|
|
43
29
|
}
|
|
30
|
+
const mode = params.mode ?? "coolify";
|
|
44
31
|
const result = await addServerRecord({
|
|
45
32
|
provider: params.provider,
|
|
46
33
|
ip: params.ip,
|
|
47
34
|
name: params.name,
|
|
48
35
|
skipVerify: params.skipVerify ?? false,
|
|
36
|
+
mode,
|
|
49
37
|
});
|
|
50
38
|
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
|
-
};
|
|
39
|
+
return mcpError(result.error ?? "Add server failed", undefined, [
|
|
40
|
+
{ command: "server_info { action: 'list' }", reason: "Check existing servers" },
|
|
41
|
+
]);
|
|
60
42
|
}
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
43
|
+
const suggestedActions = mode === "bare"
|
|
44
|
+
? [
|
|
45
|
+
{
|
|
46
|
+
command: `server_info { action: 'status', server: '${result.server.name}' }`,
|
|
47
|
+
reason: "Check server status",
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
command: `server_secure { action: 'secure-setup', server: '${result.server.name}' }`,
|
|
51
|
+
reason: "Harden SSH security + install fail2ban",
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
command: `server_logs { action: 'logs', server: '${result.server.name}' }`,
|
|
55
|
+
reason: "View server logs",
|
|
56
|
+
},
|
|
57
|
+
]
|
|
58
|
+
: [
|
|
59
|
+
{
|
|
60
|
+
command: `server_info { action: 'status', server: '${result.server.name}' }`,
|
|
61
|
+
reason: "Check server status",
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
command: `server_info { action: 'health', server: '${result.server.name}' }`,
|
|
65
|
+
reason: "Check Coolify health",
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
command: `server_logs { action: 'logs', server: '${result.server.name}' }`,
|
|
69
|
+
reason: "View server logs",
|
|
70
|
+
},
|
|
71
|
+
];
|
|
72
|
+
return mcpSuccess({
|
|
73
|
+
success: true,
|
|
74
|
+
message: `Server "${result.server.name}" added successfully`,
|
|
75
|
+
server: {
|
|
76
|
+
name: result.server.name,
|
|
77
|
+
ip: result.server.ip,
|
|
78
|
+
provider: result.server.provider,
|
|
79
|
+
id: result.server.id,
|
|
80
|
+
mode,
|
|
81
|
+
},
|
|
82
|
+
coolifyStatus: result.coolifyStatus,
|
|
83
|
+
suggested_actions: suggestedActions,
|
|
84
|
+
});
|
|
79
85
|
}
|
|
80
86
|
case "remove": {
|
|
81
87
|
if (!params.server) {
|
|
82
88
|
const servers = getServers();
|
|
83
89
|
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
|
-
};
|
|
90
|
+
return mcpError("No servers found", undefined, [{ command: "quicklify init", reason: "Deploy a server first" }]);
|
|
91
91
|
}
|
|
92
92
|
return {
|
|
93
93
|
content: [{ type: "text", text: JSON.stringify({
|
|
@@ -109,46 +109,34 @@ export async function handleServerManage(params) {
|
|
|
109
109
|
isError: true,
|
|
110
110
|
};
|
|
111
111
|
}
|
|
112
|
-
return {
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
}) }],
|
|
126
|
-
};
|
|
112
|
+
return mcpSuccess({
|
|
113
|
+
success: true,
|
|
114
|
+
message: `Server "${result.server.name}" removed from local config`,
|
|
115
|
+
note: "The cloud server is still running. Use 'destroy' to delete it from the provider.",
|
|
116
|
+
server: {
|
|
117
|
+
name: result.server.name,
|
|
118
|
+
ip: result.server.ip,
|
|
119
|
+
provider: result.server.provider,
|
|
120
|
+
},
|
|
121
|
+
suggested_actions: [
|
|
122
|
+
{ command: "server_info { action: 'list' }", reason: "View remaining servers" },
|
|
123
|
+
],
|
|
124
|
+
});
|
|
127
125
|
}
|
|
128
126
|
case "destroy": {
|
|
129
127
|
// SAFE_MODE check
|
|
130
128
|
if (isSafeMode()) {
|
|
131
|
-
return
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
],
|
|
138
|
-
}) }],
|
|
139
|
-
isError: true,
|
|
140
|
-
};
|
|
129
|
+
return mcpError("Destroy is disabled in SAFE_MODE", "Set QUICKLIFY_SAFE_MODE=false to enable destructive operations", [
|
|
130
|
+
{
|
|
131
|
+
command: `server_manage { action: 'remove', server: '${params.server ?? ""}' }`,
|
|
132
|
+
reason: "Remove from local config only (non-destructive)",
|
|
133
|
+
},
|
|
134
|
+
]);
|
|
141
135
|
}
|
|
142
136
|
if (!params.server) {
|
|
143
137
|
const servers = getServers();
|
|
144
138
|
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
|
-
};
|
|
139
|
+
return mcpError("No servers found", undefined, [{ command: "quicklify init", reason: "Deploy a server first" }]);
|
|
152
140
|
}
|
|
153
141
|
return {
|
|
154
142
|
content: [{ type: "text", text: JSON.stringify({
|
|
@@ -177,31 +165,26 @@ export async function handleServerManage(params) {
|
|
|
177
165
|
isError: true,
|
|
178
166
|
};
|
|
179
167
|
}
|
|
180
|
-
return {
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
}) }],
|
|
196
|
-
};
|
|
168
|
+
return mcpSuccess({
|
|
169
|
+
success: true,
|
|
170
|
+
message: `Server "${result.server.name}" destroyed`,
|
|
171
|
+
cloudDeleted: result.cloudDeleted,
|
|
172
|
+
localRemoved: result.localRemoved,
|
|
173
|
+
...(result.hint ? { note: result.hint } : {}),
|
|
174
|
+
server: {
|
|
175
|
+
name: result.server.name,
|
|
176
|
+
ip: result.server.ip,
|
|
177
|
+
provider: result.server.provider,
|
|
178
|
+
},
|
|
179
|
+
suggested_actions: [
|
|
180
|
+
{ command: "server_info { action: 'list' }", reason: "Verify server was removed" },
|
|
181
|
+
],
|
|
182
|
+
});
|
|
197
183
|
}
|
|
198
184
|
}
|
|
199
185
|
}
|
|
200
186
|
catch (error) {
|
|
201
|
-
return
|
|
202
|
-
content: [{ type: "text", text: JSON.stringify({ error: getErrorMessage(error) }) }],
|
|
203
|
-
isError: true,
|
|
204
|
-
};
|
|
187
|
+
return mcpError(error instanceof Error ? error.message : String(error));
|
|
205
188
|
}
|
|
206
189
|
}
|
|
207
190
|
//# 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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"}
|
|
@@ -14,6 +14,10 @@ export declare const serverProvisionSchema: {
|
|
|
14
14
|
production: "production";
|
|
15
15
|
dev: "dev";
|
|
16
16
|
}>>;
|
|
17
|
+
mode: z.ZodDefault<z.ZodEnum<{
|
|
18
|
+
coolify: "coolify";
|
|
19
|
+
bare: "bare";
|
|
20
|
+
}>>;
|
|
17
21
|
};
|
|
18
22
|
export declare function handleServerProvision(params: {
|
|
19
23
|
provider: "hetzner" | "digitalocean" | "vultr" | "linode";
|
|
@@ -21,6 +25,7 @@ export declare function handleServerProvision(params: {
|
|
|
21
25
|
size?: string;
|
|
22
26
|
name: string;
|
|
23
27
|
template?: "starter" | "production" | "dev";
|
|
28
|
+
mode?: "coolify" | "bare";
|
|
24
29
|
}): Promise<{
|
|
25
30
|
content: Array<{
|
|
26
31
|
type: "text";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serverProvision.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/serverProvision.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAOxB,eAAO,MAAM,qBAAqB
|
|
1
|
+
{"version":3,"file":"serverProvision.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/serverProvision.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAOxB,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;CAiCjC,CAAC;AAIF,wBAAsB,qBAAqB,CAAC,MAAM,EAAE;IAClD,QAAQ,EAAE,SAAS,GAAG,cAAc,GAAG,OAAO,GAAG,QAAQ,CAAC;IAC1D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,SAAS,GAAG,YAAY,GAAG,KAAK,CAAC;IAC5C,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,CAoGjF"}
|