proxmox-mcps 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (217) hide show
  1. package/.env.example +60 -0
  2. package/.mcp.json.example +19 -0
  3. package/LICENSE +21 -0
  4. package/README.md +72 -0
  5. package/dist/cli/check-config.d.ts +3 -0
  6. package/dist/cli/check-config.d.ts.map +1 -0
  7. package/dist/cli/check-config.js +29 -0
  8. package/dist/cli/check-config.js.map +1 -0
  9. package/dist/cli/print-tools.d.ts +4 -0
  10. package/dist/cli/print-tools.d.ts.map +1 -0
  11. package/dist/cli/print-tools.js +45 -0
  12. package/dist/cli/print-tools.js.map +1 -0
  13. package/dist/config/env.d.ts +183 -0
  14. package/dist/config/env.d.ts.map +1 -0
  15. package/dist/config/env.js +149 -0
  16. package/dist/config/env.js.map +1 -0
  17. package/dist/config/index.d.ts +26 -0
  18. package/dist/config/index.d.ts.map +1 -0
  19. package/dist/config/index.js +42 -0
  20. package/dist/config/index.js.map +1 -0
  21. package/dist/config/types.d.ts +60 -0
  22. package/dist/config/types.d.ts.map +1 -0
  23. package/dist/config/types.js +50 -0
  24. package/dist/config/types.js.map +1 -0
  25. package/dist/format/response.d.ts +40 -0
  26. package/dist/format/response.d.ts.map +1 -0
  27. package/dist/format/response.js +109 -0
  28. package/dist/format/response.js.map +1 -0
  29. package/dist/index.d.ts +3 -0
  30. package/dist/index.d.ts.map +1 -0
  31. package/dist/index.js +200 -0
  32. package/dist/index.js.map +1 -0
  33. package/dist/jobs/sqlite-store.d.ts +34 -0
  34. package/dist/jobs/sqlite-store.d.ts.map +1 -0
  35. package/dist/jobs/sqlite-store.js +282 -0
  36. package/dist/jobs/sqlite-store.js.map +1 -0
  37. package/dist/jobs/store.d.ts +66 -0
  38. package/dist/jobs/store.d.ts.map +1 -0
  39. package/dist/jobs/store.js +101 -0
  40. package/dist/jobs/store.js.map +1 -0
  41. package/dist/log.d.ts +24 -0
  42. package/dist/log.d.ts.map +1 -0
  43. package/dist/log.js +64 -0
  44. package/dist/log.js.map +1 -0
  45. package/dist/proxmox/auth.d.ts +30 -0
  46. package/dist/proxmox/auth.d.ts.map +1 -0
  47. package/dist/proxmox/auth.js +39 -0
  48. package/dist/proxmox/auth.js.map +1 -0
  49. package/dist/proxmox/client.d.ts +28 -0
  50. package/dist/proxmox/client.d.ts.map +1 -0
  51. package/dist/proxmox/client.js +192 -0
  52. package/dist/proxmox/client.js.map +1 -0
  53. package/dist/proxmox/errors.d.ts +51 -0
  54. package/dist/proxmox/errors.d.ts.map +1 -0
  55. package/dist/proxmox/errors.js +80 -0
  56. package/dist/proxmox/errors.js.map +1 -0
  57. package/dist/proxmox/paths.d.ts +126 -0
  58. package/dist/proxmox/paths.d.ts.map +1 -0
  59. package/dist/proxmox/paths.js +157 -0
  60. package/dist/proxmox/paths.js.map +1 -0
  61. package/dist/proxmox/types.d.ts +255 -0
  62. package/dist/proxmox/types.d.ts.map +1 -0
  63. package/dist/proxmox/types.js +9 -0
  64. package/dist/proxmox/types.js.map +1 -0
  65. package/dist/retry.d.ts +18 -0
  66. package/dist/retry.d.ts.map +1 -0
  67. package/dist/retry.js +50 -0
  68. package/dist/retry.js.map +1 -0
  69. package/dist/safety/policy.d.ts +23 -0
  70. package/dist/safety/policy.d.ts.map +1 -0
  71. package/dist/safety/policy.js +81 -0
  72. package/dist/safety/policy.js.map +1 -0
  73. package/dist/safety/risk.d.ts +3 -0
  74. package/dist/safety/risk.d.ts.map +1 -0
  75. package/dist/safety/risk.js +234 -0
  76. package/dist/safety/risk.js.map +1 -0
  77. package/dist/security/url-guard.d.ts +22 -0
  78. package/dist/security/url-guard.d.ts.map +1 -0
  79. package/dist/security/url-guard.js +166 -0
  80. package/dist/security/url-guard.js.map +1 -0
  81. package/dist/server.d.ts +24 -0
  82. package/dist/server.d.ts.map +1 -0
  83. package/dist/server.js +74 -0
  84. package/dist/server.js.map +1 -0
  85. package/dist/ssh/client.d.ts +32 -0
  86. package/dist/ssh/client.d.ts.map +1 -0
  87. package/dist/ssh/client.js +128 -0
  88. package/dist/ssh/client.js.map +1 -0
  89. package/dist/tools/backup-schedule.d.ts +10 -0
  90. package/dist/tools/backup-schedule.d.ts.map +1 -0
  91. package/dist/tools/backup-schedule.js +194 -0
  92. package/dist/tools/backup-schedule.js.map +1 -0
  93. package/dist/tools/backup.d.ts +7 -0
  94. package/dist/tools/backup.d.ts.map +1 -0
  95. package/dist/tools/backup.js +163 -0
  96. package/dist/tools/backup.js.map +1 -0
  97. package/dist/tools/cluster.d.ts +7 -0
  98. package/dist/tools/cluster.d.ts.map +1 -0
  99. package/dist/tools/cluster.js +20 -0
  100. package/dist/tools/cluster.js.map +1 -0
  101. package/dist/tools/container/config.d.ts +7 -0
  102. package/dist/tools/container/config.d.ts.map +1 -0
  103. package/dist/tools/container/config.js +97 -0
  104. package/dist/tools/container/config.js.map +1 -0
  105. package/dist/tools/container/console.d.ts +7 -0
  106. package/dist/tools/container/console.d.ts.map +1 -0
  107. package/dist/tools/container/console.js +65 -0
  108. package/dist/tools/container/console.js.map +1 -0
  109. package/dist/tools/container/crud.d.ts +7 -0
  110. package/dist/tools/container/crud.d.ts.map +1 -0
  111. package/dist/tools/container/crud.js +362 -0
  112. package/dist/tools/container/crud.js.map +1 -0
  113. package/dist/tools/container/diagnostics.d.ts +7 -0
  114. package/dist/tools/container/diagnostics.d.ts.map +1 -0
  115. package/dist/tools/container/diagnostics.js +115 -0
  116. package/dist/tools/container/diagnostics.js.map +1 -0
  117. package/dist/tools/container/migration.d.ts +7 -0
  118. package/dist/tools/container/migration.d.ts.map +1 -0
  119. package/dist/tools/container/migration.js +134 -0
  120. package/dist/tools/container/migration.js.map +1 -0
  121. package/dist/tools/context.d.ts +21 -0
  122. package/dist/tools/context.d.ts.map +1 -0
  123. package/dist/tools/context.js +2 -0
  124. package/dist/tools/context.js.map +1 -0
  125. package/dist/tools/ha.d.ts +7 -0
  126. package/dist/tools/ha.d.ts.map +1 -0
  127. package/dist/tools/ha.js +241 -0
  128. package/dist/tools/ha.js.map +1 -0
  129. package/dist/tools/helpers.d.ts +15 -0
  130. package/dist/tools/helpers.d.ts.map +1 -0
  131. package/dist/tools/helpers.js +7 -0
  132. package/dist/tools/helpers.js.map +1 -0
  133. package/dist/tools/index.d.ts +10 -0
  134. package/dist/tools/index.d.ts.map +1 -0
  135. package/dist/tools/index.js +66 -0
  136. package/dist/tools/index.js.map +1 -0
  137. package/dist/tools/iso.d.ts +7 -0
  138. package/dist/tools/iso.d.ts.map +1 -0
  139. package/dist/tools/iso.js +131 -0
  140. package/dist/tools/iso.js.map +1 -0
  141. package/dist/tools/jobs.d.ts +11 -0
  142. package/dist/tools/jobs.d.ts.map +1 -0
  143. package/dist/tools/jobs.js +173 -0
  144. package/dist/tools/jobs.js.map +1 -0
  145. package/dist/tools/node-admin.d.ts +10 -0
  146. package/dist/tools/node-admin.d.ts.map +1 -0
  147. package/dist/tools/node-admin.js +361 -0
  148. package/dist/tools/node-admin.js.map +1 -0
  149. package/dist/tools/node-certs.d.ts +7 -0
  150. package/dist/tools/node-certs.d.ts.map +1 -0
  151. package/dist/tools/node-certs.js +36 -0
  152. package/dist/tools/node-certs.js.map +1 -0
  153. package/dist/tools/node-disks.d.ts +7 -0
  154. package/dist/tools/node-disks.d.ts.map +1 -0
  155. package/dist/tools/node-disks.js +100 -0
  156. package/dist/tools/node-disks.js.map +1 -0
  157. package/dist/tools/node-network.d.ts +7 -0
  158. package/dist/tools/node-network.d.ts.map +1 -0
  159. package/dist/tools/node-network.js +102 -0
  160. package/dist/tools/node-network.js.map +1 -0
  161. package/dist/tools/node-services.d.ts +7 -0
  162. package/dist/tools/node-services.d.ts.map +1 -0
  163. package/dist/tools/node-services.js +39 -0
  164. package/dist/tools/node-services.js.map +1 -0
  165. package/dist/tools/node.d.ts +7 -0
  166. package/dist/tools/node.d.ts.map +1 -0
  167. package/dist/tools/node.js +85 -0
  168. package/dist/tools/node.js.map +1 -0
  169. package/dist/tools/pools.d.ts +10 -0
  170. package/dist/tools/pools.d.ts.map +1 -0
  171. package/dist/tools/pools.js +111 -0
  172. package/dist/tools/pools.js.map +1 -0
  173. package/dist/tools/replication.d.ts +7 -0
  174. package/dist/tools/replication.d.ts.map +1 -0
  175. package/dist/tools/replication.js +116 -0
  176. package/dist/tools/replication.js.map +1 -0
  177. package/dist/tools/sdn.d.ts +7 -0
  178. package/dist/tools/sdn.d.ts.map +1 -0
  179. package/dist/tools/sdn.js +358 -0
  180. package/dist/tools/sdn.js.map +1 -0
  181. package/dist/tools/snapshot.d.ts +10 -0
  182. package/dist/tools/snapshot.d.ts.map +1 -0
  183. package/dist/tools/snapshot.js +115 -0
  184. package/dist/tools/snapshot.js.map +1 -0
  185. package/dist/tools/storage-admin.d.ts +9 -0
  186. package/dist/tools/storage-admin.d.ts.map +1 -0
  187. package/dist/tools/storage-admin.js +126 -0
  188. package/dist/tools/storage-admin.js.map +1 -0
  189. package/dist/tools/storage.d.ts +7 -0
  190. package/dist/tools/storage.d.ts.map +1 -0
  191. package/dist/tools/storage.js +20 -0
  192. package/dist/tools/storage.js.map +1 -0
  193. package/dist/tools/tasks.d.ts +11 -0
  194. package/dist/tools/tasks.d.ts.map +1 -0
  195. package/dist/tools/tasks.js +85 -0
  196. package/dist/tools/tasks.js.map +1 -0
  197. package/dist/tools/vm/config.d.ts +28 -0
  198. package/dist/tools/vm/config.d.ts.map +1 -0
  199. package/dist/tools/vm/config.js +221 -0
  200. package/dist/tools/vm/config.js.map +1 -0
  201. package/dist/tools/vm/console.d.ts +9 -0
  202. package/dist/tools/vm/console.d.ts.map +1 -0
  203. package/dist/tools/vm/console.js +141 -0
  204. package/dist/tools/vm/console.js.map +1 -0
  205. package/dist/tools/vm/crud.d.ts +10 -0
  206. package/dist/tools/vm/crud.d.ts.map +1 -0
  207. package/dist/tools/vm/crud.js +333 -0
  208. package/dist/tools/vm/crud.js.map +1 -0
  209. package/dist/tools/vm/diagnostics.d.ts +10 -0
  210. package/dist/tools/vm/diagnostics.d.ts.map +1 -0
  211. package/dist/tools/vm/diagnostics.js +256 -0
  212. package/dist/tools/vm/diagnostics.js.map +1 -0
  213. package/dist/tools/vm/migration.d.ts +7 -0
  214. package/dist/tools/vm/migration.d.ts.map +1 -0
  215. package/dist/tools/vm/migration.js +131 -0
  216. package/dist/tools/vm/migration.js.map +1 -0
  217. package/package.json +74 -0
@@ -0,0 +1,141 @@
1
+ import { z } from "zod";
2
+ import * as paths from "../../proxmox/paths.js";
3
+ import { runTool, jsonResult } from "../../format/response.js";
4
+ export function registerVmConsoleTools(server, ctx) {
5
+ server.registerTool("vm_vncproxy", {
6
+ title: "Get VM VNC proxy ticket",
7
+ description: "Generate a VNC ticket and port to open a remote console to the VM. Returns a one-time ticket for noVNC clients.",
8
+ inputSchema: z
9
+ .object({
10
+ node: z.string().min(1),
11
+ vmid: z.string().regex(/^\d+$/),
12
+ websocket: z.boolean().optional().describe("Generate a WebSocket ticket (default true)"),
13
+ })
14
+ .strict(),
15
+ annotations: {
16
+ readOnlyHint: false,
17
+ destructiveHint: false,
18
+ idempotentHint: false,
19
+ openWorldHint: true,
20
+ },
21
+ }, async ({ node, vmid, websocket }) => runTool(ctx, "vm_vncproxy", { node, vmid, websocket }, async () => {
22
+ const body = { websocket: websocket === false ? 0 : 1 };
23
+ const data = await ctx.client.post(paths.qemuVncProxy(node, vmid), body);
24
+ return jsonResult(`VNC ticket for VM ${vmid}:`, data);
25
+ }));
26
+ server.registerTool("vm_termproxy", {
27
+ title: "Get VM terminal proxy ticket",
28
+ description: "Generate a serial terminal (termproxy) ticket for the VM.",
29
+ inputSchema: z
30
+ .object({
31
+ node: z.string().min(1),
32
+ vmid: z.string().regex(/^\d+$/),
33
+ })
34
+ .strict(),
35
+ annotations: {
36
+ readOnlyHint: false,
37
+ destructiveHint: false,
38
+ idempotentHint: false,
39
+ openWorldHint: true,
40
+ },
41
+ }, async ({ node, vmid }) => runTool(ctx, "vm_termproxy", { node, vmid }, async () => {
42
+ const data = await ctx.client.post(paths.qemuTermProxy(node, vmid));
43
+ return jsonResult(`Terminal ticket for VM ${vmid}:`, data);
44
+ }));
45
+ server.registerTool("vm_spiceproxy", {
46
+ title: "Get VM SPICE proxy ticket",
47
+ description: "Generate a SPICE ticket for high-fidelity VM console access.",
48
+ inputSchema: z
49
+ .object({
50
+ node: z.string().min(1),
51
+ vmid: z.string().regex(/^\d+$/),
52
+ })
53
+ .strict(),
54
+ annotations: {
55
+ readOnlyHint: false,
56
+ destructiveHint: false,
57
+ idempotentHint: false,
58
+ openWorldHint: true,
59
+ },
60
+ }, async ({ node, vmid }) => runTool(ctx, "vm_spiceproxy", { node, vmid }, async () => {
61
+ const data = await ctx.client.post(paths.qemuSpiceProxy(node, vmid));
62
+ return jsonResult(`SPICE ticket for VM ${vmid}:`, data);
63
+ }));
64
+ server.registerTool("vm_mtunnel", {
65
+ title: "Open VM migration tunnel",
66
+ description: "Open a tunnel for VM migration. Returns port/ticket info for the migration proxy.",
67
+ inputSchema: z
68
+ .object({
69
+ node: z.string().min(1),
70
+ vmid: z.string().regex(/^\d+$/),
71
+ port: z.number().int().min(1).max(65535).optional(),
72
+ })
73
+ .strict(),
74
+ annotations: {
75
+ readOnlyHint: false,
76
+ destructiveHint: false,
77
+ idempotentHint: false,
78
+ openWorldHint: true,
79
+ },
80
+ }, async ({ node, vmid, port }) => runTool(ctx, "vm_mtunnel", { node, vmid, port }, async () => {
81
+ const body = {};
82
+ if (port !== undefined)
83
+ body.port = port;
84
+ const data = await ctx.client.post(paths.qemuMtunnel(node, vmid), body);
85
+ return jsonResult(`Migration tunnel for VM ${vmid}:`, data);
86
+ }));
87
+ server.registerTool("vm_mtunnelwebsocket", {
88
+ title: "Upgrade migration tunnel to WebSocket",
89
+ description: "Upgrade an existing migration tunnel to a WebSocket.",
90
+ inputSchema: z
91
+ .object({
92
+ node: z.string().min(1),
93
+ vmid: z.string().regex(/^\d+$/),
94
+ port: z.number().int().min(1).max(65535).optional(),
95
+ ticket: z.string().optional(),
96
+ })
97
+ .strict(),
98
+ annotations: {
99
+ readOnlyHint: false,
100
+ destructiveHint: false,
101
+ idempotentHint: false,
102
+ openWorldHint: true,
103
+ },
104
+ }, async ({ node, vmid, port, ticket }) => runTool(ctx, "vm_mtunnelwebsocket", { node, vmid, port, ticket }, async () => {
105
+ const body = {};
106
+ if (port !== undefined)
107
+ body.port = port;
108
+ if (ticket)
109
+ body.ticket = ticket;
110
+ const data = await ctx.client.post(paths.qemuMtunnelWebsocket(node, vmid), body);
111
+ return jsonResult(`Migration WebSocket ticket:`, data);
112
+ }));
113
+ server.registerTool("vm_feature", {
114
+ title: "Toggle VM feature",
115
+ description: "Enable or disable a Proxmox VM feature (snapshot, clone, clone_from_template, migration).",
116
+ inputSchema: z
117
+ .object({
118
+ node: z.string().min(1),
119
+ vmid: z.string().regex(/^\d+$/),
120
+ feature: z
121
+ .enum(["snapshot", "clone", "clone_from_template", "migration", "suspend"])
122
+ .describe("Feature name"),
123
+ enable: z.boolean().default(true).describe("Enable (true) or disable (false)"),
124
+ force: z.boolean().optional(),
125
+ })
126
+ .strict(),
127
+ annotations: {
128
+ readOnlyHint: false,
129
+ destructiveHint: false,
130
+ idempotentHint: true,
131
+ openWorldHint: true,
132
+ },
133
+ }, async ({ node, vmid, feature, enable, force }) => runTool(ctx, "vm_feature", { node, vmid, feature, enable, force }, async () => {
134
+ const body = { feature, enable: enable ? 1 : 0 };
135
+ if (force !== undefined)
136
+ body.force = force ? 1 : 0;
137
+ const data = await ctx.client.post(paths.qemuFeature(node, vmid), body);
138
+ return jsonResult(`VM ${vmid} feature ${feature} → ${enable ? "on" : "off"}.`, data);
139
+ }));
140
+ }
141
+ //# sourceMappingURL=console.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"console.js","sourceRoot":"","sources":["../../../src/tools/vm/console.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * VM (QEMU) CRUD + lifecycle tools.
3
+ *
4
+ * Phase 1B — covers create/clone/start/stop/shutdown/reset/reboot/delete +
5
+ * get_vms / get_vm_config / get_vm_status.
6
+ */
7
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
8
+ import type { ToolContext } from "../context.js";
9
+ export declare function registerVmCrudTools(server: McpServer, ctx: ToolContext): void;
10
+ //# sourceMappingURL=crud.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crud.d.ts","sourceRoot":"","sources":["../../../src/tools/vm/crud.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAGzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAIjD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,GAAG,IAAI,CA4X7E"}
@@ -0,0 +1,333 @@
1
+ import { z } from "zod";
2
+ import * as paths from "../../proxmox/paths.js";
3
+ import { runTool, jsonResult } from "../../format/response.js";
4
+ import { trackUpid } from "../helpers.js";
5
+ export function registerVmCrudTools(server, ctx) {
6
+ // ---- Read ----------------------------------------------------------------
7
+ server.registerTool("get_vms", {
8
+ title: "List VMs (cluster-wide)",
9
+ description: "List all QEMU VMs across the cluster with current status and resource usage.",
10
+ inputSchema: z.object({}).strict(),
11
+ annotations: {
12
+ readOnlyHint: true,
13
+ destructiveHint: false,
14
+ idempotentHint: true,
15
+ openWorldHint: false,
16
+ },
17
+ }, async () => runTool(ctx, "get_vms", {}, async () => {
18
+ const data = await ctx.client.get(paths.clusterResources("vm"));
19
+ // Filter for QEMU only (exclude LXC)
20
+ const qemu = data.filter((r) => String(r.type) === "qemu");
21
+ return jsonResult(`VMs (${qemu.length}):`, qemu);
22
+ }));
23
+ server.registerTool("get_vm_config", {
24
+ title: "Get VM hardware config",
25
+ description: "Return the full Proxmox VM configuration (cores, memory, disks, network, etc.).",
26
+ inputSchema: z
27
+ .object({
28
+ node: z.string().min(1).describe("Host node name"),
29
+ vmid: z.string().regex(/^\d+$/).describe("VM ID"),
30
+ current: z
31
+ .boolean()
32
+ .optional()
33
+ .describe("If true, fetch the *current* (running) config rather than pending"),
34
+ })
35
+ .strict(),
36
+ annotations: {
37
+ readOnlyHint: true,
38
+ destructiveHint: false,
39
+ idempotentHint: true,
40
+ openWorldHint: false,
41
+ },
42
+ }, async ({ node, vmid, current }) => runTool(ctx, "get_vm_config", { node, vmid, current }, async () => {
43
+ const params = {};
44
+ if (current)
45
+ params.current = 1;
46
+ const data = await ctx.client.get(paths.qemuConfig(node, vmid), params);
47
+ return jsonResult(`VM ${vmid} config:`, data);
48
+ }));
49
+ server.registerTool("get_vm_status", {
50
+ title: "Get VM live status",
51
+ description: "Return live status (cpu, mem, uptime, qmpstatus) of a VM.",
52
+ inputSchema: z
53
+ .object({
54
+ node: z.string().min(1),
55
+ vmid: z.string().regex(/^\d+$/),
56
+ })
57
+ .strict(),
58
+ annotations: {
59
+ readOnlyHint: true,
60
+ destructiveHint: false,
61
+ idempotentHint: true,
62
+ openWorldHint: false,
63
+ },
64
+ }, async ({ node, vmid }) => runTool(ctx, "get_vm_status", { node, vmid }, async () => {
65
+ const data = await ctx.client.get(paths.qemuStatus(node, vmid, "current"));
66
+ return jsonResult(`VM ${vmid} status:`, data);
67
+ }));
68
+ // ---- Create / Clone ------------------------------------------------------
69
+ server.registerTool("create_vm", {
70
+ title: "Create VM",
71
+ description: "Create a new QEMU VM. Auto-detects default storage for the disk. Use clone_vm to duplicate from a template.",
72
+ inputSchema: z
73
+ .object({
74
+ node: z.string().min(1).describe("Host node name"),
75
+ vmid: z.string().regex(/^\d+$/).describe("New VM ID (must be unique cluster-wide)"),
76
+ name: z.string().min(1).max(255).describe("VM name"),
77
+ cpus: z.number().int().min(1).max(32).default(1).describe("vCPU cores"),
78
+ memory: z
79
+ .number()
80
+ .int()
81
+ .min(512)
82
+ .max(131072)
83
+ .default(2048)
84
+ .describe("Memory in MB (default 2048)"),
85
+ disk_size: z
86
+ .number()
87
+ .int()
88
+ .min(5)
89
+ .max(1000)
90
+ .default(10)
91
+ .describe("Primary disk size in GB (default 10)"),
92
+ storage: z.string().optional().describe("Storage pool for the primary disk"),
93
+ ostype: z
94
+ .string()
95
+ .optional()
96
+ .describe("OS type hint, e.g. 'l26' (Linux 2.6+), 'win11', 'other'"),
97
+ network_bridge: z.string().default("vmbr0").describe("Network bridge (default vmbr0)"),
98
+ iso: z.string().optional().describe("Optional ISO volume to attach (e.g. 'local:iso/ubuntu.iso')"),
99
+ start_after_create: z.boolean().default(false).describe("Start VM after creation"),
100
+ })
101
+ .strict(),
102
+ annotations: {
103
+ readOnlyHint: false,
104
+ destructiveHint: false,
105
+ idempotentHint: false,
106
+ openWorldHint: true,
107
+ },
108
+ }, async (args) => runTool(ctx, "create_vm", args, async () => {
109
+ const targetStorage = args.storage ?? (await detectDefaultStorage(ctx, args.node));
110
+ const body = {
111
+ vmid: args.vmid,
112
+ name: args.name,
113
+ cores: args.cpus,
114
+ memory: args.memory,
115
+ scsihw: "virtio-scsi-single",
116
+ ostype: args.ostype ?? "l26",
117
+ net0: `${args.network_bridge},virtio=`,
118
+ scsi0: `${targetStorage}:${args.disk_size}`,
119
+ start: args.start_after_create ? 1 : 0,
120
+ };
121
+ if (args.iso)
122
+ body.ide2 = `${args.iso},media=cdrom`;
123
+ const upid = await ctx.client.post(paths.qemu(args.node), body);
124
+ const job = trackUpid(ctx, upid, { node: args.node, tool: "create_vm", args: args });
125
+ return jsonResult(`VM ${args.vmid} creation started on ${args.node}.`, {
126
+ job_id: job.job_id,
127
+ upid,
128
+ });
129
+ }));
130
+ server.registerTool("clone_vm", {
131
+ title: "Clone VM",
132
+ description: "Full or linked clone of an existing VM.",
133
+ inputSchema: z
134
+ .object({
135
+ node: z.string().min(1).describe("Source node"),
136
+ source_vmid: z.string().regex(/^\d+$/).describe("Source VM ID"),
137
+ target_vmid: z.string().regex(/^\d+$/).describe("New VM ID"),
138
+ name: z.string().optional().describe("New VM name"),
139
+ target_node: z.string().optional().describe("Destination node (default: same as source)"),
140
+ full: z.boolean().default(true).describe("Full clone (true) or linked (false)"),
141
+ storage: z.string().optional().describe("Target storage"),
142
+ pool: z.string().optional().describe("Resource pool"),
143
+ snapname: z.string().optional().describe("Source snapshot name to clone from"),
144
+ })
145
+ .strict(),
146
+ annotations: {
147
+ readOnlyHint: false,
148
+ destructiveHint: false,
149
+ idempotentHint: false,
150
+ openWorldHint: true,
151
+ },
152
+ }, async (args) => runTool(ctx, "clone_vm", args, async () => {
153
+ const body = {
154
+ newid: args.target_vmid,
155
+ full: args.full ? 1 : 0,
156
+ };
157
+ if (args.name)
158
+ body.name = args.name;
159
+ if (args.target_node)
160
+ body.target = args.target_node;
161
+ if (args.storage)
162
+ body.storage = args.storage;
163
+ if (args.pool)
164
+ body.pool = args.pool;
165
+ if (args.snapname)
166
+ body.snapname = args.snapname;
167
+ const upid = await ctx.client.post(paths.qemuClone(args.node, args.source_vmid), body);
168
+ const job = trackUpid(ctx, upid, {
169
+ node: args.target_node ?? args.node,
170
+ tool: "clone_vm",
171
+ args: args,
172
+ });
173
+ return jsonResult(`VM ${args.source_vmid} → ${args.target_vmid} clone started.`, {
174
+ job_id: job.job_id,
175
+ upid,
176
+ });
177
+ }));
178
+ // ---- Lifecycle -----------------------------------------------------------
179
+ server.registerTool("start_vm", {
180
+ title: "Start VM",
181
+ description: "Power on a QEMU VM.",
182
+ inputSchema: z
183
+ .object({
184
+ node: z.string().min(1),
185
+ vmid: z.string().regex(/^\d+$/),
186
+ })
187
+ .strict(),
188
+ annotations: {
189
+ readOnlyHint: false,
190
+ destructiveHint: false,
191
+ idempotentHint: false,
192
+ openWorldHint: true,
193
+ },
194
+ }, async ({ node, vmid }) => runTool(ctx, "start_vm", { node, vmid }, async () => {
195
+ const upid = await ctx.client.post(paths.qemuStatus(node, vmid, "start"));
196
+ const job = trackUpid(ctx, upid, { node, tool: "start_vm", args: { node, vmid } });
197
+ return jsonResult(`VM ${vmid} start requested.`, { job_id: job.job_id, upid });
198
+ }));
199
+ server.registerTool("stop_vm", {
200
+ title: "Stop VM (force)",
201
+ description: "Hard stop (immediate power off) — equivalent to pulling the plug.",
202
+ inputSchema: z
203
+ .object({ node: z.string().min(1), vmid: z.string().regex(/^\d+$/) })
204
+ .strict(),
205
+ annotations: {
206
+ readOnlyHint: false,
207
+ destructiveHint: false,
208
+ idempotentHint: false,
209
+ openWorldHint: true,
210
+ },
211
+ }, async ({ node, vmid }) => runTool(ctx, "stop_vm", { node, vmid }, async () => {
212
+ const upid = await ctx.client.post(paths.qemuStatus(node, vmid, "stop"));
213
+ const job = trackUpid(ctx, upid, { node, tool: "stop_vm", args: { node, vmid } });
214
+ return jsonResult(`VM ${vmid} stop requested.`, { job_id: job.job_id, upid });
215
+ }));
216
+ server.registerTool("shutdown_vm", {
217
+ title: "Shutdown VM (graceful)",
218
+ description: "ACPI shutdown. The guest OS must respond (install qemu-guest-agent for reliability).",
219
+ inputSchema: z
220
+ .object({
221
+ node: z.string().min(1),
222
+ vmid: z.string().regex(/^\d+$/),
223
+ timeout: z.number().int().min(0).max(600).optional().describe("Max wait seconds (default 60)"),
224
+ forceStop: z.boolean().optional().describe("Force stop after timeout"),
225
+ })
226
+ .strict(),
227
+ annotations: {
228
+ readOnlyHint: false,
229
+ destructiveHint: false,
230
+ idempotentHint: false,
231
+ openWorldHint: true,
232
+ },
233
+ }, async ({ node, vmid, timeout, forceStop }) => runTool(ctx, "shutdown_vm", { node, vmid, timeout, forceStop }, async () => {
234
+ const body = {};
235
+ if (timeout !== undefined)
236
+ body.timeout = timeout;
237
+ if (forceStop !== undefined)
238
+ body.forceStop = forceStop ? 1 : 0;
239
+ const upid = await ctx.client.post(paths.qemuStatus(node, vmid, "shutdown"), body);
240
+ const job = trackUpid(ctx, upid, { node, tool: "shutdown_vm", args: { node, vmid } });
241
+ return jsonResult(`VM ${vmid} shutdown requested.`, { job_id: job.job_id, upid });
242
+ }));
243
+ server.registerTool("reset_vm", {
244
+ title: "Reset VM (hard)",
245
+ description: "Hard reset — equivalent to pressing the reset button.",
246
+ inputSchema: z
247
+ .object({ node: z.string().min(1), vmid: z.string().regex(/^\d+$/) })
248
+ .strict(),
249
+ annotations: {
250
+ readOnlyHint: false,
251
+ destructiveHint: false,
252
+ idempotentHint: false,
253
+ openWorldHint: true,
254
+ },
255
+ }, async ({ node, vmid }) => runTool(ctx, "reset_vm", { node, vmid }, async () => {
256
+ const upid = await ctx.client.post(paths.qemuStatus(node, vmid, "reset"));
257
+ const job = trackUpid(ctx, upid, { node, tool: "reset_vm", args: { node, vmid } });
258
+ return jsonResult(`VM ${vmid} reset requested.`, { job_id: job.job_id, upid });
259
+ }));
260
+ server.registerTool("reboot_vm", {
261
+ title: "Reboot VM (graceful)",
262
+ description: "ACPI reboot. Guest OS must respond.",
263
+ inputSchema: z
264
+ .object({ node: z.string().min(1), vmid: z.string().regex(/^\d+$/), timeout: z.number().int().min(0).max(600).optional() })
265
+ .strict(),
266
+ annotations: {
267
+ readOnlyHint: false,
268
+ destructiveHint: false,
269
+ idempotentHint: false,
270
+ openWorldHint: true,
271
+ },
272
+ }, async ({ node, vmid, timeout }) => runTool(ctx, "reboot_vm", { node, vmid, timeout }, async () => {
273
+ const body = {};
274
+ if (timeout !== undefined)
275
+ body.timeout = timeout;
276
+ const upid = await ctx.client.post(paths.qemuStatus(node, vmid, "reboot"), body);
277
+ const job = trackUpid(ctx, upid, { node, tool: "reboot_vm", args: { node, vmid } });
278
+ return jsonResult(`VM ${vmid} reboot requested.`, { job_id: job.job_id, upid });
279
+ }));
280
+ server.registerTool("delete_vm", {
281
+ title: "Delete VM",
282
+ description: "Permanently delete a VM and its disks. DESTRUCTIVE. Requires approval_token or dangerously_allow_destructive.",
283
+ inputSchema: z
284
+ .object({
285
+ node: z.string().min(1),
286
+ vmid: z.string().regex(/^\d+$/),
287
+ force: z.boolean().default(false).describe("Force-delete if running"),
288
+ purge: z.boolean().default(false).describe("Purge from backup jobs"),
289
+ approval_token: z.string().optional().describe("Approval token for destructive operation"),
290
+ })
291
+ .strict(),
292
+ annotations: {
293
+ readOnlyHint: false,
294
+ destructiveHint: true,
295
+ idempotentHint: false,
296
+ openWorldHint: true,
297
+ },
298
+ }, async (args) => runTool(ctx, "delete_vm", args, async () => {
299
+ // If running and force=true, stop first
300
+ try {
301
+ const status = (await ctx.client.get(paths.qemuStatus(args.node, args.vmid, "current")));
302
+ if (status.status === "running" && args.force) {
303
+ await ctx.client.post(paths.qemuStatus(args.node, args.vmid, "stop"));
304
+ }
305
+ }
306
+ catch {
307
+ // ignore status check failure
308
+ }
309
+ const params = {};
310
+ if (args.force)
311
+ params.force = 1;
312
+ if (args.purge)
313
+ params.purge = 1;
314
+ const upid = await ctx.client.delete(paths.qemuVm(args.node, args.vmid), params);
315
+ const job = trackUpid(ctx, upid, { node: args.node, tool: "delete_vm", args: args });
316
+ return jsonResult(`VM ${args.vmid} deletion started.`, { job_id: job.job_id, upid });
317
+ }));
318
+ }
319
+ async function detectDefaultStorage(ctx, node) {
320
+ const storage = (await ctx.client.get(paths.storage()));
321
+ const nodeStorage = storage.find((s) => (s.content ?? "").includes("images"));
322
+ if (nodeStorage)
323
+ return nodeStorage.storage;
324
+ // Fall back to first available
325
+ if (storage[0])
326
+ return storage[0].storage;
327
+ // Probe the node's storage list
328
+ const nodeStorageList = (await ctx.client.get(paths.nodeStorageStatus(node, "")));
329
+ if (nodeStorageList[0])
330
+ return nodeStorageList[0].storage;
331
+ throw new Error(`No storage pool available on node ${node}`);
332
+ }
333
+ //# sourceMappingURL=crud.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crud.js","sourceRoot":"","sources":["../../../src/tools/vm/crud.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * VM Diagnostics & AI debug tools.
3
+ *
4
+ * Covers RRD metrics, QEMU guest agent introspection, sendkey, monitor,
5
+ * and firewall rules/options.
6
+ */
7
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
8
+ import type { ToolContext } from "../context.js";
9
+ export declare function registerVmDiagnosticsTools(server: McpServer, ctx: ToolContext): void;
10
+ //# sourceMappingURL=diagnostics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diagnostics.d.ts","sourceRoot":"","sources":["../../../src/tools/vm/diagnostics.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAGzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAOjD,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,GAAG,IAAI,CA0WpF"}