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,28 @@
1
+ import { type RetryConfig } from "../retry.js";
2
+ import type { ProxmoxConfig } from "../config/types.js";
3
+ import type { Logger } from "../log.js";
4
+ export interface ProxmoxClientOptions {
5
+ proxmox: ProxmoxConfig;
6
+ retry?: RetryConfig;
7
+ logger?: Logger;
8
+ }
9
+ export declare class ProxmoxClient {
10
+ private readonly http;
11
+ private readonly retryCfg;
12
+ private readonly logger;
13
+ constructor(opts: ProxmoxClientOptions);
14
+ /**
15
+ * Perform an authenticated GET. Returns the unwrapped `data` field.
16
+ */
17
+ get<T = unknown>(path: string, params?: Record<string, unknown>): Promise<T>;
18
+ /** POST with optional JSON body. */
19
+ post<T = unknown>(path: string, body?: Record<string, unknown>): Promise<T>;
20
+ /** PUT with optional JSON body. */
21
+ put<T = unknown>(path: string, body?: Record<string, unknown>): Promise<T>;
22
+ /** DELETE with optional query params. */
23
+ delete<T = unknown>(path: string, params?: Record<string, unknown>): Promise<T>;
24
+ private request;
25
+ /** Close underlying http agent (for graceful shutdown). */
26
+ close(): void;
27
+ }
28
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/proxmox/client.ts"],"names":[],"mappings":"AAsBA,OAAO,EAAa,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAExC,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,aAAa,CAAC;IACvB,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAgB;IACrC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAc;IACvC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqB;gBAEhC,IAAI,EAAE,oBAAoB;IAuCtC;;OAEG;IACG,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAIlF,oCAAoC;IAC9B,IAAI,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAIjF,mCAAmC;IAC7B,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAIhF,yCAAyC;IACnC,MAAM,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;YAMvE,OAAO;IA0DrB,2DAA2D;IAC3D,KAAK,IAAI,IAAI;CAGd"}
@@ -0,0 +1,192 @@
1
+ /**
2
+ * ProxmoxClient — thin axios wrapper for the Proxmox VE REST API.
3
+ *
4
+ * Responsibilities:
5
+ * - Inject Authorization: PVEAPIToken=... header on every request
6
+ * - Attach X-Request-Id for log correlation
7
+ * - Parse { data: ... } envelope
8
+ * - Map non-2xx responses into typed ProxmoxApiError subclasses
9
+ * - Optionally wrap calls in retry logic
10
+ */
11
+ import axios from "axios";
12
+ import { randomUUID } from "node:crypto";
13
+ import https from "node:https";
14
+ import { authHeader } from "./auth.js";
15
+ import { AuthenticationError, NotFoundError, PermissionDeniedError, ProxmoxApiError, RateLimitError, } from "./errors.js";
16
+ import { withRetry } from "../retry.js";
17
+ export class ProxmoxClient {
18
+ http;
19
+ retryCfg;
20
+ logger;
21
+ constructor(opts) {
22
+ this.retryCfg = opts.retry ?? { max: 3, baseMs: 200 };
23
+ this.logger = opts.logger;
24
+ const baseURL = `https://${opts.proxmox.host}:${opts.proxmox.port}/api2/json`;
25
+ this.http = axios.create({
26
+ baseURL,
27
+ timeout: opts.proxmox.timeoutMs,
28
+ httpsAgent: undefined, // use default TLS agent; verify_ssl is handled below
29
+ // axios honors `rejectUnauthorized` via the httpsAgent; we use a custom
30
+ // agent to keep that out of the global axios defaults.
31
+ headers: {
32
+ Authorization: authHeader(opts.proxmox.user, opts.proxmox.tokenName, opts.proxmox.tokenValue),
33
+ Accept: "application/json",
34
+ },
35
+ // Disable axios' default JSON parsing so we control it
36
+ transformResponse: (data) => data,
37
+ validateStatus: () => true, // we'll throw ourselves
38
+ });
39
+ // Custom httpsAgent for verify_ssl
40
+ if (!opts.proxmox.verifySsl) {
41
+ this.http.defaults.httpsAgent = new https.Agent({ rejectUnauthorized: false });
42
+ }
43
+ // Request interceptor: add X-Request-Id
44
+ this.http.interceptors.request.use((cfg) => {
45
+ cfg.headers.set("X-Request-Id", randomUUID());
46
+ return cfg;
47
+ });
48
+ }
49
+ // ---- Public API ---------------------------------------------------------
50
+ /**
51
+ * Perform an authenticated GET. Returns the unwrapped `data` field.
52
+ */
53
+ async get(path, params) {
54
+ return this.request("GET", path, undefined, params);
55
+ }
56
+ /** POST with optional JSON body. */
57
+ async post(path, body) {
58
+ return this.request("POST", path, body);
59
+ }
60
+ /** PUT with optional JSON body. */
61
+ async put(path, body) {
62
+ return this.request("PUT", path, body);
63
+ }
64
+ /** DELETE with optional query params. */
65
+ async delete(path, params) {
66
+ return this.request("DELETE", path, undefined, params);
67
+ }
68
+ // ---- Internals ----------------------------------------------------------
69
+ async request(method, path, body, params) {
70
+ const start = Date.now();
71
+ const op = async () => {
72
+ const reqCfg = {
73
+ method,
74
+ url: path,
75
+ params,
76
+ data: body,
77
+ // axios requires Content-Type for non-GET bodies
78
+ headers: body ? { "Content-Type": "application/x-www-form-urlencoded" } : {},
79
+ // Proxmox accepts both JSON body and form-encoded; we use form-encoded
80
+ // because Proxmox prefers it for /qemu and /lxc POST.
81
+ transformRequest: body
82
+ ? (data) => {
83
+ if (data == null)
84
+ return undefined;
85
+ if (typeof data === "string")
86
+ return data;
87
+ return Object.entries(data)
88
+ .filter(([, v]) => v !== undefined && v !== null)
89
+ .map(([k, v]) => `${encodeURIComponent(k)}=${encodeURIComponent(Array.isArray(v) ? v.join(",") : String(v))}`)
90
+ .join("&");
91
+ }
92
+ : undefined,
93
+ };
94
+ const res = await this.http.request(reqCfg);
95
+ const elapsedMs = Date.now() - start;
96
+ this.logger?.debug({ method, path, status: res.status, elapsedMs, requestId: res.headers["x-request-id"] }, "proxmox.request");
97
+ if (res.status >= 200 && res.status < 300) {
98
+ return parseResponse(res.data);
99
+ }
100
+ // Error path
101
+ const err = buildError(method, path, res.status, res.data, res.headers["x-request-id"]);
102
+ this.logger?.warn({ method, path, status: err.status, message: err.message, errors: err.errors }, "proxmox.error");
103
+ throw err;
104
+ };
105
+ return withRetry(op, this.retryCfg);
106
+ }
107
+ /** Close underlying http agent (for graceful shutdown). */
108
+ close() {
109
+ // axios will GC; nothing to do explicitly
110
+ }
111
+ }
112
+ // ---- Helpers --------------------------------------------------------------
113
+ function parseResponse(raw) {
114
+ if (raw == null)
115
+ return undefined;
116
+ if (typeof raw === "string") {
117
+ try {
118
+ const parsed = JSON.parse(raw);
119
+ if (parsed && typeof parsed === "object" && "data" in parsed) {
120
+ return parsed.data;
121
+ }
122
+ return parsed;
123
+ }
124
+ catch {
125
+ // Not JSON; return raw string
126
+ return raw;
127
+ }
128
+ }
129
+ if (typeof raw === "object" && "data" in raw) {
130
+ return raw.data;
131
+ }
132
+ return raw;
133
+ }
134
+ function buildError(method, path, status, body, requestId) {
135
+ const err = parseErrorBody(body);
136
+ const message = err.message ?? `${method} ${path} failed with ${status}`;
137
+ const errors = err.errors ?? {};
138
+ switch (status) {
139
+ case 401:
140
+ return new AuthenticationError(path, message, requestId ?? null);
141
+ case 403:
142
+ return new PermissionDeniedError(path, message, requestId ?? null);
143
+ case 404:
144
+ return new NotFoundError(path, message, requestId ?? null);
145
+ case 429: {
146
+ // Retry-After is read from raw response by caller in retry logic; here
147
+ // we just surface the error.
148
+ const retryAfter = extractRetryAfter(body);
149
+ return new RateLimitError(path, retryAfter, message, requestId ?? null);
150
+ }
151
+ default:
152
+ return new ProxmoxApiError({ status, message, errors, path, requestId: requestId ?? null });
153
+ }
154
+ }
155
+ function parseErrorBody(body) {
156
+ if (body == null)
157
+ return {};
158
+ if (typeof body === "string") {
159
+ try {
160
+ const parsed = JSON.parse(body);
161
+ return extractErrorFromObject(parsed);
162
+ }
163
+ catch {
164
+ return { message: body };
165
+ }
166
+ }
167
+ if (typeof body === "object") {
168
+ return extractErrorFromObject(body);
169
+ }
170
+ return {};
171
+ }
172
+ function extractErrorFromObject(obj) {
173
+ if (obj == null || typeof obj !== "object")
174
+ return {};
175
+ const o = obj;
176
+ return {
177
+ message: o.message,
178
+ errors: o.errors,
179
+ };
180
+ }
181
+ function extractRetryAfter(body) {
182
+ if (body == null || typeof body !== "object")
183
+ return null;
184
+ // Proxmox typically returns errors as JSON; sometimes Retry-After is in headers
185
+ const o = body;
186
+ if (typeof o.retry_after === "number")
187
+ return o.retry_after;
188
+ if (typeof o.retryAfter === "number")
189
+ return o.retryAfter;
190
+ return null;
191
+ }
192
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/proxmox/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Proxmox API error hierarchy.
3
+ *
4
+ * Proxmox returns errors as JSON:
5
+ * { "errors": { "field1": "msg1", "field2": "msg2" }, "data": null }
6
+ * or as plain text with a numeric status code.
7
+ *
8
+ * We normalize everything into typed errors so tool handlers can present
9
+ * user-friendly messages and decide whether to retry.
10
+ */
11
+ /** Base error for any Proxmox API failure. */
12
+ export declare class ProxmoxApiError extends Error {
13
+ readonly status: number;
14
+ readonly errors: Record<string, string>;
15
+ readonly path: string;
16
+ readonly requestId: string | null;
17
+ constructor(opts: {
18
+ status: number;
19
+ message: string;
20
+ errors?: Record<string, string>;
21
+ path: string;
22
+ requestId?: string | null;
23
+ cause?: unknown;
24
+ });
25
+ /** Whether this error is transient and worth retrying. */
26
+ get isTransient(): boolean;
27
+ /** Concatenated user-readable error message. */
28
+ get details(): string;
29
+ }
30
+ export declare class NotFoundError extends ProxmoxApiError {
31
+ constructor(path: string, message?: string, requestId?: string | null);
32
+ }
33
+ export declare class PermissionDeniedError extends ProxmoxApiError {
34
+ constructor(path: string, message?: string, requestId?: string | null);
35
+ }
36
+ export declare class AuthenticationError extends ProxmoxApiError {
37
+ constructor(path: string, message?: string, requestId?: string | null);
38
+ }
39
+ export declare class RateLimitError extends ProxmoxApiError {
40
+ readonly retryAfterSeconds: number | null;
41
+ constructor(path: string, retryAfterSeconds?: number | null, message?: string, requestId?: string | null);
42
+ }
43
+ /**
44
+ * Raised by the policy gate when a high-risk tool is invoked without approval.
45
+ */
46
+ export declare class ApprovalRequiredError extends Error {
47
+ readonly tool: string;
48
+ readonly risk: "high" | "destructive";
49
+ constructor(tool: string, risk: "high" | "destructive");
50
+ }
51
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/proxmox/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,8CAA8C;AAC9C,qBAAa,eAAgB,SAAQ,KAAK;IACxC,SAAgB,MAAM,EAAE,MAAM,CAAC;IAC/B,SAAgB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/C,SAAgB,IAAI,EAAE,MAAM,CAAC;IAC7B,SAAgB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;gBAE7B,IAAI,EAAE;QAChB,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAChC,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAC1B,KAAK,CAAC,EAAE,OAAO,CAAC;KACjB;IAYD,0DAA0D;IAC1D,IAAI,WAAW,IAAI,OAAO,CAEzB;IAED,gDAAgD;IAChD,IAAI,OAAO,IAAI,MAAM,CAIpB;CACF;AAED,qBAAa,aAAc,SAAQ,eAAe;gBACpC,IAAI,EAAE,MAAM,EAAE,OAAO,SAAuB,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI;CAIpF;AAED,qBAAa,qBAAsB,SAAQ,eAAe;gBAC5C,IAAI,EAAE,MAAM,EAAE,OAAO,SAAsB,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI;CAInF;AAED,qBAAa,mBAAoB,SAAQ,eAAe;gBAC1C,IAAI,EAAE,MAAM,EAAE,OAAO,SAA0B,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI;CAIvF;AAED,qBAAa,cAAe,SAAQ,eAAe;IACjD,SAAgB,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;gBAG/C,IAAI,EAAE,MAAM,EACZ,iBAAiB,GAAE,MAAM,GAAG,IAAW,EACvC,OAAO,SAAiB,EACxB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI;CAM5B;AAED;;GAEG;AACH,qBAAa,qBAAsB,SAAQ,KAAK;IAC9C,SAAgB,IAAI,EAAE,MAAM,CAAC;IAC7B,SAAgB,IAAI,EAAE,MAAM,GAAG,aAAa,CAAC;gBAEjC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,aAAa;CASvD"}
@@ -0,0 +1,80 @@
1
+ /**
2
+ * Proxmox API error hierarchy.
3
+ *
4
+ * Proxmox returns errors as JSON:
5
+ * { "errors": { "field1": "msg1", "field2": "msg2" }, "data": null }
6
+ * or as plain text with a numeric status code.
7
+ *
8
+ * We normalize everything into typed errors so tool handlers can present
9
+ * user-friendly messages and decide whether to retry.
10
+ */
11
+ /** Base error for any Proxmox API failure. */
12
+ export class ProxmoxApiError extends Error {
13
+ status;
14
+ errors;
15
+ path;
16
+ requestId;
17
+ constructor(opts) {
18
+ super(opts.message);
19
+ this.name = "ProxmoxApiError";
20
+ this.status = opts.status;
21
+ this.errors = opts.errors ?? {};
22
+ this.path = opts.path;
23
+ this.requestId = opts.requestId ?? null;
24
+ if (opts.cause !== undefined) {
25
+ this.cause = opts.cause;
26
+ }
27
+ }
28
+ /** Whether this error is transient and worth retrying. */
29
+ get isTransient() {
30
+ return this.status === 429 || (this.status >= 500 && this.status < 600);
31
+ }
32
+ /** Concatenated user-readable error message. */
33
+ get details() {
34
+ const fields = Object.entries(this.errors);
35
+ if (fields.length === 0)
36
+ return this.message;
37
+ return `${this.message}: ${fields.map(([k, v]) => `${k}=${v}`).join(", ")}`;
38
+ }
39
+ }
40
+ export class NotFoundError extends ProxmoxApiError {
41
+ constructor(path, message = "Resource not found", requestId) {
42
+ super({ status: 404, message, path, requestId });
43
+ this.name = "NotFoundError";
44
+ }
45
+ }
46
+ export class PermissionDeniedError extends ProxmoxApiError {
47
+ constructor(path, message = "Permission denied", requestId) {
48
+ super({ status: 403, message, path, requestId });
49
+ this.name = "PermissionDeniedError";
50
+ }
51
+ }
52
+ export class AuthenticationError extends ProxmoxApiError {
53
+ constructor(path, message = "Authentication failed", requestId) {
54
+ super({ status: 401, message, path, requestId });
55
+ this.name = "AuthenticationError";
56
+ }
57
+ }
58
+ export class RateLimitError extends ProxmoxApiError {
59
+ retryAfterSeconds;
60
+ constructor(path, retryAfterSeconds = null, message = "Rate limited", requestId) {
61
+ super({ status: 429, message, path, requestId });
62
+ this.name = "RateLimitError";
63
+ this.retryAfterSeconds = retryAfterSeconds;
64
+ }
65
+ }
66
+ /**
67
+ * Raised by the policy gate when a high-risk tool is invoked without approval.
68
+ */
69
+ export class ApprovalRequiredError extends Error {
70
+ tool;
71
+ risk;
72
+ constructor(tool, risk) {
73
+ super(`Tool '${tool}' is ${risk}-risk and requires either an 'approval_token' argument ` +
74
+ `matching PROXMOX_MCP_APPROVAL_TOKEN, or PROXMOX_DANGEROUSLY_ALLOW_DESTRUCTIVE=true.`);
75
+ this.name = "ApprovalRequiredError";
76
+ this.tool = tool;
77
+ this.risk = risk;
78
+ }
79
+ }
80
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/proxmox/errors.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,126 @@
1
+ /**
2
+ * URL path builders. Single source of truth for Proxmox API paths.
3
+ *
4
+ * Each function returns a string ready for the client to GET/POST/PUT/DELETE.
5
+ * Path parameters are typed to catch typos at compile time.
6
+ */
7
+ export declare const clusterStatus: () => string;
8
+ export declare const clusterResources: (type?: "vm" | "node" | "storage") => string;
9
+ export declare const nodes: () => string;
10
+ export declare const nodeStatus: (node: string) => string;
11
+ export declare const nodeSyslog: (node: string, limit?: number) => string;
12
+ export declare const nodeJournal: (node: string, limit?: number) => string;
13
+ export declare const storage: () => string;
14
+ export declare const nodeStorageStatus: (node: string, storage: string) => string;
15
+ export declare const nodeStorageContent: (node: string, storage: string, content: "iso" | "vztmpl" | "backup") => string;
16
+ export declare const storageDownloadUrl: (node: string, storage: string) => string;
17
+ export declare const storageContent: (node: string, storage: string, volume: string) => string;
18
+ export declare const pruneBackups: (storage: string) => string;
19
+ export declare const qemu: (node: string) => string;
20
+ export declare const qemuVm: (node: string, vmid: string | number) => string;
21
+ export declare const qemuConfig: (node: string, vmid: string | number) => string;
22
+ export declare const qemuPending: (node: string, vmid: string | number) => string;
23
+ export declare const qemuStatus: (node: string, vmid: string | number, action: "current" | "start" | "stop" | "shutdown" | "reboot" | "reset" | "suspend" | "resume") => string;
24
+ export declare const qemuClone: (node: string, vmid: string | number) => string;
25
+ export declare const qemuResize: (node: string, vmid: string | number, disk: string) => string;
26
+ export declare const qemuMoveDisk: (node: string, vmid: string | number, disk: string) => string;
27
+ export declare const qemuUnlink: (node: string, vmid: string | number, disk: string) => string;
28
+ export declare const qemuMigrate: (node: string, vmid: string | number) => string;
29
+ export declare const qemuTemplate: (node: string, vmid: string | number) => string;
30
+ export declare const qemuRrd: (node: string, vmid: string | number, timeframe: "hour" | "day" | "week" | "month" | "year") => string;
31
+ export declare const qemuRrdData: (node: string, vmid: string | number, timeframe: "hour" | "day" | "week" | "month" | "year") => string;
32
+ export declare const qemuVncProxy: (node: string, vmid: string | number) => string;
33
+ export declare const qemuTermProxy: (node: string, vmid: string | number) => string;
34
+ export declare const qemuSpiceProxy: (node: string, vmid: string | number) => string;
35
+ export declare const qemuMtunnel: (node: string, vmid: string | number) => string;
36
+ export declare const qemuMtunnelWebsocket: (node: string, vmid: string | number) => string;
37
+ export declare const qemuFeature: (node: string, vmid: string | number) => string;
38
+ export declare const qemuMonitor: (node: string, vmid: string | number) => string;
39
+ export declare const qemuSendkey: (node: string, vmid: string | number) => string;
40
+ export declare const qemuAgent: (node: string, vmid: string | number, action: "info" | "get-fsinfo" | "get-host-name" | "get-time" | "get-users" | "get-osinfo" | "get-vcpus" | "network-get-interfaces" | "fstrim" | "set-user-password" | "ping") => string;
41
+ export declare const qemuAgentExec: (node: string, vmid: string | number) => string;
42
+ export declare const qemuAgentExecStatus: (node: string, vmid: string | number, pid: string | number) => string;
43
+ export declare const qemuFirewallRules: (node: string, vmid: string | number) => string;
44
+ export declare const qemuFirewallOptions: (node: string, vmid: string | number) => string;
45
+ export declare const qemuCloudinit: (node: string, vmid: string | number) => string;
46
+ export declare const lxc: (node: string) => string;
47
+ export declare const lxcCt: (node: string, vmid: string | number) => string;
48
+ export declare const lxcConfig: (node: string, vmid: string | number) => string;
49
+ export declare const lxcPending: (node: string, vmid: string | number) => string;
50
+ export declare const lxcStatus: (node: string, vmid: string | number, action: "current" | "start" | "stop" | "shutdown" | "reboot") => string;
51
+ export declare const lxcClone: (node: string, vmid: string | number) => string;
52
+ export declare const lxcResize: (node: string, vmid: string | number, disk: string) => string;
53
+ export declare const lxcMoveDisk: (node: string, vmid: string | number, disk: string) => string;
54
+ export declare const lxcMoveVolume: (node: string, vmid: string | number, volume: string) => string;
55
+ export declare const lxcUnlink: (node: string, vmid: string | number, volume: string) => string;
56
+ export declare const lxcMigrate: (node: string, vmid: string | number) => string;
57
+ export declare const lxcTemplate: (node: string, vmid: string | number) => string;
58
+ export declare const lxcRrd: (node: string, vmid: string | number, timeframe: "hour" | "day" | "week" | "month" | "year") => string;
59
+ export declare const lxcRrdData: (node: string, vmid: string | number, timeframe: "hour" | "day" | "week" | "month" | "year") => string;
60
+ export declare const lxcInterfaces: (node: string, vmid: string | number) => string;
61
+ export declare const lxcVncProxy: (node: string, vmid: string | number) => string;
62
+ export declare const lxcTermProxy: (node: string, vmid: string | number) => string;
63
+ export declare const lxcSpiceProxy: (node: string, vmid: string | number) => string;
64
+ export declare const lxcFirewallRules: (node: string, vmid: string | number) => string;
65
+ export declare const lxcFirewallOptions: (node: string, vmid: string | number) => string;
66
+ export declare const snapshotList: (node: string, type: "qemu" | "lxc", vmid: string | number) => string;
67
+ export declare const snapshotCreate: (node: string, type: "qemu" | "lxc", vmid: string | number) => string;
68
+ export declare const snapshotDelete: (node: string, type: "qemu" | "lxc", vmid: string | number, snapname: string) => string;
69
+ export declare const snapshotRollback: (node: string, type: "qemu" | "lxc", vmid: string | number, snapname: string) => string;
70
+ export declare const vzdump: (node: string) => string;
71
+ export declare const taskStatus: (node: string, upid: string) => string;
72
+ export declare const taskLog: (node: string, upid: string, limit?: number) => string;
73
+ export declare const taskStop: (node: string, upid: string) => string;
74
+ export declare const clusterTasks: () => string;
75
+ export declare const pools: () => string;
76
+ export declare const pool: (poolid: string) => string;
77
+ export declare const haResources: () => string;
78
+ export declare const haResource: (sid: string) => string;
79
+ export declare const haResourceStatus: (sid: string) => string;
80
+ export declare const haGroups: () => string;
81
+ export declare const haGroup: (group: string) => string;
82
+ export declare const haStatus: () => string;
83
+ export declare const backupJobs: () => string;
84
+ export declare const backupJob: (id: string) => string;
85
+ export declare const runBackupJob: (id: string) => string;
86
+ export declare const backupJobIncluded: (id: string) => string;
87
+ export declare const replication: () => string;
88
+ export declare const replicationJob: (id: string) => string;
89
+ export declare const replicationStatus: (id: string) => string;
90
+ export declare const nodeReplication: (node: string) => string;
91
+ export declare const sdnControllers: () => string;
92
+ export declare const sdnController: (name: string) => string;
93
+ export declare const sdnVnets: () => string;
94
+ export declare const sdnVnet: (name: string) => string;
95
+ export declare const sdnZones: () => string;
96
+ export declare const sdnZone: (name: string) => string;
97
+ export declare const sdnSubnets: (vnet: string) => string;
98
+ export declare const sdnSubnet: (vnet: string, subnet: string) => string;
99
+ export declare const nodeAptUpdate: (node: string) => string;
100
+ export declare const nodeAptRepos: (node: string) => string;
101
+ export declare const nodeAptVersions: (node: string) => string;
102
+ export declare const nodeDns: (node: string) => string;
103
+ export declare const nodeHosts: (node: string) => string;
104
+ export declare const nodeTime: (node: string) => string;
105
+ export declare const nodeTimezone: (node: string) => string;
106
+ export declare const nodeConfig: (node: string) => string;
107
+ export declare const nodeReport: (node: string) => string;
108
+ export declare const nodeStartAll: (node: string) => string;
109
+ export declare const nodeStopAll: (node: string) => string;
110
+ export declare const nodeMigrateAll: (node: string) => string;
111
+ export declare const nodeWakeOnLan: (node: string) => string;
112
+ export declare const nodeSubscription: (node: string) => string;
113
+ export declare const nodeServices: (node: string) => string;
114
+ export declare const nodeService: (node: string, service: string) => string;
115
+ export declare const nodeNetwork: (node: string) => string;
116
+ export declare const nodeIface: (node: string, iface: string) => string;
117
+ export declare const nodeDisks: (node: string) => string;
118
+ export declare const nodeDisksList: (node: string) => string;
119
+ export declare const nodeDiskInit: (node: string, disk: string) => string;
120
+ export declare const nodeDiskWipe: (node: string, disk: string) => string;
121
+ export declare const nodeDiskZfs: (node: string) => string;
122
+ export declare const nodeDiskZfsCreate: (node: string) => string;
123
+ export declare const nodeCert: (node: string) => string;
124
+ export declare const storageCreate: () => string;
125
+ export declare const storageUpdate: (storage: string) => string;
126
+ //# sourceMappingURL=paths.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../src/proxmox/paths.ts"],"names":[],"mappings":"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"}