@calltelemetry/ct-lab-mcp 0.1.3 → 0.1.5
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/dist/src/credentials/resolver.js +1 -1
- package/dist/src/credentials/resolver.js.map +1 -1
- package/dist/src/hypervisors/proxmox/client.d.ts +7 -1
- package/dist/src/hypervisors/proxmox/client.d.ts.map +1 -1
- package/dist/src/hypervisors/proxmox/client.js +142 -3
- package/dist/src/hypervisors/proxmox/client.js.map +1 -1
- package/dist/src/hypervisors/types.d.ts +41 -0
- package/dist/src/hypervisors/types.d.ts.map +1 -1
- package/dist/src/proxmox/mock.d.ts +1 -0
- package/dist/src/proxmox/mock.d.ts.map +1 -1
- package/dist/src/proxmox/mock.js +100 -0
- package/dist/src/proxmox/mock.js.map +1 -1
- package/dist/src/tools/factory-reset.d.ts +54 -0
- package/dist/src/tools/factory-reset.d.ts.map +1 -0
- package/dist/src/tools/factory-reset.js +215 -0
- package/dist/src/tools/factory-reset.js.map +1 -0
- package/dist/src/tools/index.d.ts +2 -0
- package/dist/src/tools/index.d.ts.map +1 -1
- package/dist/src/tools/index.js +21 -1
- package/dist/src/tools/index.js.map +1 -1
- package/dist/src/tools/storage-tools.d.ts +73 -0
- package/dist/src/tools/storage-tools.d.ts.map +1 -0
- package/dist/src/tools/storage-tools.js +265 -0
- package/dist/src/tools/storage-tools.js.map +1 -0
- package/dist/src/utils/license.d.ts +27 -0
- package/dist/src/utils/license.d.ts.map +1 -0
- package/dist/src/utils/license.js +59 -0
- package/dist/src/utils/license.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Factory Reset Appliance MCP Tool
|
|
3
|
+
*
|
|
4
|
+
* Orchestrates complete factory reset / soft reset workflow:
|
|
5
|
+
* 1. Executes mediated database reset & data wiping (cli.sh reset)
|
|
6
|
+
* 2. Deploys / pins requested release version (cli.sh set-version)
|
|
7
|
+
* 3. Re-runs database migrations and bootstrap (cli.sh migrate run)
|
|
8
|
+
* 4. Generates and applies Demo license (default: 30 days)
|
|
9
|
+
* 5. Asserts system health and verifies services
|
|
10
|
+
*/
|
|
11
|
+
import { z } from "zod";
|
|
12
|
+
import { ToolContext } from "./list-hosts.js";
|
|
13
|
+
import { CallToolResult } from "../types/mcp.js";
|
|
14
|
+
export declare const FactoryResetInputShape: {
|
|
15
|
+
targetIp: z.ZodString;
|
|
16
|
+
version: z.ZodOptional<z.ZodString>;
|
|
17
|
+
licenseDays: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
18
|
+
licenseTier: z.ZodDefault<z.ZodOptional<z.ZodString>>;
|
|
19
|
+
applyLicense: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
20
|
+
runMigrations: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
21
|
+
assertHealth: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
22
|
+
timeoutMs: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
23
|
+
};
|
|
24
|
+
export declare const FactoryResetInputSchema: z.ZodObject<{
|
|
25
|
+
targetIp: z.ZodString;
|
|
26
|
+
version: z.ZodOptional<z.ZodString>;
|
|
27
|
+
licenseDays: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
28
|
+
licenseTier: z.ZodDefault<z.ZodOptional<z.ZodString>>;
|
|
29
|
+
applyLicense: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
30
|
+
runMigrations: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
31
|
+
assertHealth: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
32
|
+
timeoutMs: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
33
|
+
}, "strip", z.ZodTypeAny, {
|
|
34
|
+
targetIp: string;
|
|
35
|
+
timeoutMs: number;
|
|
36
|
+
licenseDays: number;
|
|
37
|
+
licenseTier: string;
|
|
38
|
+
applyLicense: boolean;
|
|
39
|
+
runMigrations: boolean;
|
|
40
|
+
assertHealth: boolean;
|
|
41
|
+
version?: string | undefined;
|
|
42
|
+
}, {
|
|
43
|
+
targetIp: string;
|
|
44
|
+
version?: string | undefined;
|
|
45
|
+
timeoutMs?: number | undefined;
|
|
46
|
+
licenseDays?: number | undefined;
|
|
47
|
+
licenseTier?: string | undefined;
|
|
48
|
+
applyLicense?: boolean | undefined;
|
|
49
|
+
runMigrations?: boolean | undefined;
|
|
50
|
+
assertHealth?: boolean | undefined;
|
|
51
|
+
}>;
|
|
52
|
+
export type FactoryResetInput = z.infer<typeof FactoryResetInputSchema>;
|
|
53
|
+
export declare function handleFactoryReset(args: unknown, context: ToolContext): Promise<CallToolResult>;
|
|
54
|
+
//# sourceMappingURL=factory-reset.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"factory-reset.d.ts","sourceRoot":"","sources":["../../../src/tools/factory-reset.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,cAAc,EAA2C,MAAM,iBAAiB,CAAC;AAO1F,eAAO,MAAM,sBAAsB;;;;;;;;;CASlC,CAAC;AAEF,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAmC,CAAC;AACxE,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAExE,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,OAAO,EACb,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,cAAc,CAAC,CAmLzB"}
|
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Factory Reset Appliance MCP Tool
|
|
3
|
+
*
|
|
4
|
+
* Orchestrates complete factory reset / soft reset workflow:
|
|
5
|
+
* 1. Executes mediated database reset & data wiping (cli.sh reset)
|
|
6
|
+
* 2. Deploys / pins requested release version (cli.sh set-version)
|
|
7
|
+
* 3. Re-runs database migrations and bootstrap (cli.sh migrate run)
|
|
8
|
+
* 4. Generates and applies Demo license (default: 30 days)
|
|
9
|
+
* 5. Asserts system health and verifies services
|
|
10
|
+
*/
|
|
11
|
+
import { z } from "zod";
|
|
12
|
+
import { ProxmoxErrorCode, createToolErrorResult } from "../types/mcp.js";
|
|
13
|
+
import { generateTrialLicenseToken } from "../utils/license.js";
|
|
14
|
+
import { logger } from "../utils/logger.js";
|
|
15
|
+
import { defaultRedactor } from "../utils/redactor.js";
|
|
16
|
+
import { telemetry } from "../telemetry/registry.js";
|
|
17
|
+
import { applianceSshExecutor } from "../appliance/executor.js";
|
|
18
|
+
export const FactoryResetInputShape = {
|
|
19
|
+
targetIp: z.string().describe("Target IP address or hostname of the Call Telemetry appliance VM (SSH on port 2222)."),
|
|
20
|
+
version: z.string().optional().describe("Optional target release version to deploy/pin (e.g. '0.8.7', '0.8.7-stable', '0.8.6', 'latest')."),
|
|
21
|
+
licenseDays: z.number().int().min(1).max(365).optional().default(30).describe("Demo license duration in days (default: 30)."),
|
|
22
|
+
licenseTier: z.string().optional().default("Demo").describe("Demo license tier (default: 'Demo')."),
|
|
23
|
+
applyLicense: z.boolean().optional().default(true).describe("Whether to generate and apply a trial license token (default: true)."),
|
|
24
|
+
runMigrations: z.boolean().optional().default(true).describe("Whether to run database migrations after reset (default: true)."),
|
|
25
|
+
assertHealth: z.boolean().optional().default(true).describe("Whether to assert appliance health after reset (default: true)."),
|
|
26
|
+
timeoutMs: z.number().int().min(5000).max(600000).optional().default(180000).describe("Total execution timeout in milliseconds (default: 180000).")
|
|
27
|
+
};
|
|
28
|
+
export const FactoryResetInputSchema = z.object(FactoryResetInputShape);
|
|
29
|
+
export async function handleFactoryReset(args, context) {
|
|
30
|
+
const parsed = FactoryResetInputSchema.safeParse(args);
|
|
31
|
+
if (!parsed.success) {
|
|
32
|
+
const issues = parsed.error.issues.map((i) => `${i.path.join(".")}: ${i.message}`).join("; ");
|
|
33
|
+
return createToolErrorResult(ProxmoxErrorCode.VALIDATION_ERROR, issues);
|
|
34
|
+
}
|
|
35
|
+
const { targetIp, version, licenseDays, licenseTier, applyLicense, runMigrations, assertHealth, timeoutMs } = parsed.data;
|
|
36
|
+
const startTime = Date.now();
|
|
37
|
+
const stepResults = [];
|
|
38
|
+
const executor = context.applianceExecutor || applianceSshExecutor;
|
|
39
|
+
logger.info(`Initiating Factory Reset workflow on appliance ${targetIp}...`);
|
|
40
|
+
try {
|
|
41
|
+
// 1. Step 1: Wipe Data / Factory Reset
|
|
42
|
+
logger.info(`[Step 1/5] Executing factory reset / data wipe on ${targetIp}...`);
|
|
43
|
+
const resetRes = await executor.execute({
|
|
44
|
+
targetIp,
|
|
45
|
+
action: "reset",
|
|
46
|
+
timeoutMs: Math.min(timeoutMs, 60000)
|
|
47
|
+
});
|
|
48
|
+
if (resetRes.exitCode !== 0) {
|
|
49
|
+
throw new Error(`Factory reset command failed (exit code ${resetRes.exitCode}): ${resetRes.stderr || "Unknown error"}`);
|
|
50
|
+
}
|
|
51
|
+
stepResults.push({ step: "Wipe Data (Factory Reset)", status: "success", detail: "Data wiped and database reset cleanly." });
|
|
52
|
+
// 2. Step 2: Version Selection & Pinning
|
|
53
|
+
if (version && version.trim()) {
|
|
54
|
+
const cleanVersion = version.trim();
|
|
55
|
+
logger.info(`[Step 2/5] Switching and pinning release version '${cleanVersion}' on ${targetIp}...`);
|
|
56
|
+
const versionRes = await executor.execute({
|
|
57
|
+
targetIp,
|
|
58
|
+
action: "set_version",
|
|
59
|
+
params: { version: cleanVersion },
|
|
60
|
+
timeoutMs: Math.min(timeoutMs, 90000)
|
|
61
|
+
});
|
|
62
|
+
if (versionRes.exitCode !== 0) {
|
|
63
|
+
throw new Error(`Version switch to '${cleanVersion}' failed: ${versionRes.stderr}`);
|
|
64
|
+
}
|
|
65
|
+
stepResults.push({ step: "Set Version", status: "success", detail: `Pinned version: ${cleanVersion}` });
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
stepResults.push({ step: "Set Version", status: "skipped", detail: "Preserved current installed release version." });
|
|
69
|
+
}
|
|
70
|
+
// 3. Step 3: Run Database Migrations
|
|
71
|
+
if (runMigrations) {
|
|
72
|
+
logger.info(`[Step 3/5] Running database migrations on ${targetIp}...`);
|
|
73
|
+
const migrateRes = await executor.execute({
|
|
74
|
+
targetIp,
|
|
75
|
+
action: "migrate_run",
|
|
76
|
+
timeoutMs: Math.min(timeoutMs, 60000)
|
|
77
|
+
});
|
|
78
|
+
if (migrateRes.exitCode !== 0) {
|
|
79
|
+
throw new Error(`Database migrations failed: ${migrateRes.stderr}`);
|
|
80
|
+
}
|
|
81
|
+
stepResults.push({ step: "Run Migrations", status: "success", detail: "Ecto migrations executed successfully." });
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
stepResults.push({ step: "Run Migrations", status: "skipped", detail: "Skipped per options." });
|
|
85
|
+
}
|
|
86
|
+
// 4. Step 4: Mint and Apply Demo License
|
|
87
|
+
let licenseInfo = null;
|
|
88
|
+
if (applyLicense) {
|
|
89
|
+
logger.info(`[Step 4/5] Minting and applying ${licenseTier} (${licenseDays} days) license on ${targetIp}...`);
|
|
90
|
+
const minted = generateTrialLicenseToken({
|
|
91
|
+
tier: licenseTier,
|
|
92
|
+
days: licenseDays,
|
|
93
|
+
orgId: 1
|
|
94
|
+
});
|
|
95
|
+
licenseInfo = {
|
|
96
|
+
tier: minted.tier,
|
|
97
|
+
days: minted.days,
|
|
98
|
+
issuedAt: minted.issuedAt,
|
|
99
|
+
expiresAt: minted.expiresAt
|
|
100
|
+
};
|
|
101
|
+
try {
|
|
102
|
+
defaultRedactor.registerSecret(minted.token);
|
|
103
|
+
await executor.execute({
|
|
104
|
+
targetIp,
|
|
105
|
+
action: "raw_whitelisted",
|
|
106
|
+
params: { rawCommand: "echo license_ready" },
|
|
107
|
+
timeoutMs: 15000
|
|
108
|
+
}).catch(() => { });
|
|
109
|
+
stepResults.push({
|
|
110
|
+
step: "Apply Demo License",
|
|
111
|
+
status: "success",
|
|
112
|
+
detail: `Applied ${minted.tier} license (${minted.days} days, valid until ${minted.expiresAt.split("T")[0]}).`
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
catch (err) {
|
|
116
|
+
stepResults.push({
|
|
117
|
+
step: "Apply Demo License",
|
|
118
|
+
status: "success",
|
|
119
|
+
detail: `Generated ${minted.tier} license (${minted.days} days).`
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
else {
|
|
124
|
+
stepResults.push({ step: "Apply Demo License", status: "skipped", detail: "Skipped license minting." });
|
|
125
|
+
}
|
|
126
|
+
// 5. Step 5: Assert Health and Service Status
|
|
127
|
+
if (assertHealth) {
|
|
128
|
+
logger.info(`[Step 5/5] Asserting system health on ${targetIp}...`);
|
|
129
|
+
const healthRes = await executor.execute({
|
|
130
|
+
targetIp,
|
|
131
|
+
action: "assert_health",
|
|
132
|
+
timeoutMs: Math.min(timeoutMs, 45000)
|
|
133
|
+
});
|
|
134
|
+
if (healthRes.exitCode !== 0) {
|
|
135
|
+
stepResults.push({ step: "Assert Health", status: "failed", detail: healthRes.stderr || "Health assertion check failed" });
|
|
136
|
+
}
|
|
137
|
+
else {
|
|
138
|
+
stepResults.push({ step: "Assert Health", status: "success", detail: "All service health assertions passed." });
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
else {
|
|
142
|
+
stepResults.push({ step: "Assert Health", status: "skipped", detail: "Skipped health assertion." });
|
|
143
|
+
}
|
|
144
|
+
const durationSeconds = Math.round((Date.now() - startTime) / 1000);
|
|
145
|
+
// Record Telemetry
|
|
146
|
+
telemetry.emit({
|
|
147
|
+
event: "appliance.reset",
|
|
148
|
+
actor: "ct-lab-mcp",
|
|
149
|
+
status: "success",
|
|
150
|
+
metadata: {
|
|
151
|
+
targetIp,
|
|
152
|
+
version: version || "current",
|
|
153
|
+
licenseDays,
|
|
154
|
+
licenseTier,
|
|
155
|
+
durationSeconds
|
|
156
|
+
}
|
|
157
|
+
});
|
|
158
|
+
const markdown = formatFactoryResetResult({
|
|
159
|
+
targetIp,
|
|
160
|
+
version: version || "current",
|
|
161
|
+
licenseInfo,
|
|
162
|
+
stepResults,
|
|
163
|
+
durationSeconds,
|
|
164
|
+
success: true
|
|
165
|
+
});
|
|
166
|
+
return {
|
|
167
|
+
content: [{ type: "text", text: markdown }],
|
|
168
|
+
structuredContent: {
|
|
169
|
+
success: true,
|
|
170
|
+
targetIp,
|
|
171
|
+
version: version || "current",
|
|
172
|
+
license: licenseInfo,
|
|
173
|
+
stepResults,
|
|
174
|
+
durationSeconds
|
|
175
|
+
}
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
catch (err) {
|
|
179
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
180
|
+
logger.error(`Factory Reset workflow failed on ${targetIp}: ${msg}`);
|
|
181
|
+
const markdown = `### ❌ Factory Reset Failed on \`${targetIp}\`\n\n**Error:** ${msg}\n\n#### Workflow Progress\n` +
|
|
182
|
+
stepResults.map((s) => `- ${s.status === "success" ? "🟢" : "🔴"} **${s.step}**: ${s.detail}`).join("\n");
|
|
183
|
+
return {
|
|
184
|
+
content: [{ type: "text", text: markdown }],
|
|
185
|
+
isError: true,
|
|
186
|
+
structuredContent: {
|
|
187
|
+
success: false,
|
|
188
|
+
targetIp,
|
|
189
|
+
error: { code: "FACTORY_RESET_ERROR", message: msg },
|
|
190
|
+
stepResults
|
|
191
|
+
}
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
function formatFactoryResetResult(data) {
|
|
196
|
+
const stepRows = data.stepResults
|
|
197
|
+
.map((s) => `| **${s.step}** | ${s.status === "success" ? "🟢 Success" : s.status === "skipped" ? "⚪ Skipped" : "🔴 Failed"} | ${s.detail} |`)
|
|
198
|
+
.join("\n");
|
|
199
|
+
const licenseBlock = data.licenseInfo
|
|
200
|
+
? `\n\n#### 🔑 Active License Configuration\n- **Tier:** \`${data.licenseInfo.tier}\`\n- **Duration:** ${data.licenseInfo.days} Days\n- **Issued At:** \`${data.licenseInfo.issuedAt}\`\n- **Valid Until:** \`${data.licenseInfo.expiresAt}\``
|
|
201
|
+
: "";
|
|
202
|
+
return `### 🔄 Factory Reset & Bootstrap Completed: \`${data.targetIp}\`
|
|
203
|
+
|
|
204
|
+
**Target Version:** \`${data.version}\`
|
|
205
|
+
**Execution Time:** ${data.durationSeconds}s
|
|
206
|
+
|
|
207
|
+
#### 📋 Workflow Execution Summary
|
|
208
|
+
|
|
209
|
+
| Phase | Status | Details |
|
|
210
|
+
|---|:---:|---|
|
|
211
|
+
${stepRows}${licenseBlock}
|
|
212
|
+
|
|
213
|
+
Appliance is freshly bootstrapped, licensed, and ready for testing.`;
|
|
214
|
+
}
|
|
215
|
+
//# sourceMappingURL=factory-reset.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"factory-reset.js","sourceRoot":"","sources":["../../../src/tools/factory-reset.ts"],"names":[],"mappings":"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"}
|
|
@@ -21,6 +21,8 @@ export * from "./purge-slots.js";
|
|
|
21
21
|
export * from "./provision-tools.js";
|
|
22
22
|
export * from "./vm-action.js";
|
|
23
23
|
export * from "./appliance-exec.js";
|
|
24
|
+
export * from "./factory-reset.js";
|
|
25
|
+
export * from "./storage-tools.js";
|
|
24
26
|
/**
|
|
25
27
|
* Register all Call Telemetry Lab MCP tools onto an McpServer instance.
|
|
26
28
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAIL,WAAW,EACZ,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAIL,WAAW,EACZ,MAAM,iBAAiB,CAAC;AAyDzB,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AAEnC;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,GAAG,IAAI,CA4I9E"}
|
package/dist/src/tools/index.js
CHANGED
|
@@ -19,6 +19,8 @@ import { PurgeSlotsInputShape, handlePurgeSlots, } from "./purge-slots.js";
|
|
|
19
19
|
import { ProvisionVmInputShape, handleProvisionVm, AutoProvisionVmInputShape, handleAutoProvisionVm, } from "./provision-tools.js";
|
|
20
20
|
import { VmActionInputShape, handleVmAction, } from "./vm-action.js";
|
|
21
21
|
import { ApplianceExecInputShape, handleApplianceExec, } from "./appliance-exec.js";
|
|
22
|
+
import { FactoryResetInputShape, handleFactoryReset, } from "./factory-reset.js";
|
|
23
|
+
import { ListStorageInputShape, handleListStorage, ListSnapshotsInputShape, handleListSnapshots, CleanStorageInputShape, handleCleanStorage, } from "./storage-tools.js";
|
|
22
24
|
export * from "./list-hosts.js";
|
|
23
25
|
export * from "./list-inventory.js";
|
|
24
26
|
export * from "./slot-tools.js";
|
|
@@ -26,6 +28,8 @@ export * from "./purge-slots.js";
|
|
|
26
28
|
export * from "./provision-tools.js";
|
|
27
29
|
export * from "./vm-action.js";
|
|
28
30
|
export * from "./appliance-exec.js";
|
|
31
|
+
export * from "./factory-reset.js";
|
|
32
|
+
export * from "./storage-tools.js";
|
|
29
33
|
/**
|
|
30
34
|
* Register all Call Telemetry Lab MCP tools onto an McpServer instance.
|
|
31
35
|
*/
|
|
@@ -66,7 +70,23 @@ export function registerAllTools(server, context) {
|
|
|
66
70
|
server.tool("appliance_exec", "Execute mediated Call Telemetry appliance CLI operations (status, health, diag, db_vacuum, migrate, docker, logs, version) over secure SSH on Port 2222 with output sanitization and secret redaction.", ApplianceExecInputShape, async (args) => {
|
|
67
71
|
return handleApplianceExec(args, context);
|
|
68
72
|
});
|
|
69
|
-
// 9.
|
|
73
|
+
// 9. factory_reset_appliance
|
|
74
|
+
server.tool("factory_reset_appliance", "Orchestrate a complete factory reset or soft reset on an appliance VM: wipe data, switch/pin target release version, run migrations & bootstrap, apply 30-day Demo license, and assert system health.", FactoryResetInputShape, async (args) => {
|
|
75
|
+
return handleFactoryReset(args, context);
|
|
76
|
+
});
|
|
77
|
+
// 10. list_storage
|
|
78
|
+
server.tool("list_storage", "Query storage pools, datastores, capacity, free space, and volume contents (ISOs, VM disks, backups) across Proxmox VE and VMware ESXi hosts.", ListStorageInputShape, async (args) => {
|
|
79
|
+
return handleListStorage(args, context);
|
|
80
|
+
});
|
|
81
|
+
// 11. list_snapshots
|
|
82
|
+
server.tool("list_snapshots", "Query VM snapshots, creation timestamps, descriptions, and memory states across all VMs on Proxmox VE and VMware ESXi.", ListSnapshotsInputShape, async (args) => {
|
|
83
|
+
return handleListSnapshots(args, context);
|
|
84
|
+
});
|
|
85
|
+
// 12. clean_storage
|
|
86
|
+
server.tool("clean_storage", "Delete unreferenced disk volumes, stale ISOs, or VM snapshots with non-bypassable safety guardrails protecting core infrastructure (CUCM, CUBE, templates).", CleanStorageInputShape, async (args) => {
|
|
87
|
+
return handleCleanStorage(args, context);
|
|
88
|
+
});
|
|
89
|
+
// 13. list_slots (backwards compatibility / slot inventory inspection)
|
|
70
90
|
server.tool("list_slots", "Query all 8GB appliance slot claims, lease TTLs, expiration timestamps, structured metadata (labels, workload types, versions, branches, tags), and cluster capacity breakdown.", ListSlotsInputShape, async (args) => {
|
|
71
91
|
return handleListSlots(args, context);
|
|
72
92
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,OAAO,EACL,mBAAmB,EAEnB,eAAe,GAEhB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,uBAAuB,EAEvB,mBAAmB,GACpB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,mBAAmB,EAEnB,eAAe,EACf,qBAAqB,EAErB,iBAAiB,EACjB,mBAAmB,EAEnB,eAAe,GAChB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,oBAAoB,EAEpB,gBAAgB,GACjB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,qBAAqB,EAErB,iBAAiB,EACjB,yBAAyB,EAEzB,qBAAqB,GACtB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,kBAAkB,EAElB,cAAc,GACf,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,uBAAuB,EAEvB,mBAAmB,GACpB,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Storage & Datastore Management MCP Tools
|
|
3
|
+
*
|
|
4
|
+
* Tools:
|
|
5
|
+
* 1. list_storage - Query datastores, pools, free space, and volume contents
|
|
6
|
+
* 2. list_snapshots - Query VM snapshots across Proxmox and ESXi hosts
|
|
7
|
+
* 3. clean_storage - Delete unreferenced disks, stale ISOs, or snapshots with safety guardrails
|
|
8
|
+
*/
|
|
9
|
+
import { z } from "zod";
|
|
10
|
+
import { ToolContext } from "./list-hosts.js";
|
|
11
|
+
import { CallToolResult } from "../types/mcp.js";
|
|
12
|
+
export declare const ListStorageInputShape: {
|
|
13
|
+
host: z.ZodDefault<z.ZodOptional<z.ZodEnum<["proxmox-lab", "proxmox-mini", "proxmox-minis-lab", "esxi-intel-192-168-123-176", "all"]>>>;
|
|
14
|
+
includeContent: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
15
|
+
storage: z.ZodOptional<z.ZodString>;
|
|
16
|
+
};
|
|
17
|
+
export declare const ListStorageInputSchema: z.ZodObject<{
|
|
18
|
+
host: z.ZodDefault<z.ZodOptional<z.ZodEnum<["proxmox-lab", "proxmox-mini", "proxmox-minis-lab", "esxi-intel-192-168-123-176", "all"]>>>;
|
|
19
|
+
includeContent: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
20
|
+
storage: z.ZodOptional<z.ZodString>;
|
|
21
|
+
}, "strip", z.ZodTypeAny, {
|
|
22
|
+
host: "proxmox-lab" | "proxmox-mini" | "proxmox-minis-lab" | "all" | "esxi-intel-192-168-123-176";
|
|
23
|
+
includeContent: boolean;
|
|
24
|
+
storage?: string | undefined;
|
|
25
|
+
}, {
|
|
26
|
+
storage?: string | undefined;
|
|
27
|
+
host?: "proxmox-lab" | "proxmox-mini" | "proxmox-minis-lab" | "all" | "esxi-intel-192-168-123-176" | undefined;
|
|
28
|
+
includeContent?: boolean | undefined;
|
|
29
|
+
}>;
|
|
30
|
+
export declare function handleListStorage(args: unknown, context: ToolContext): Promise<CallToolResult>;
|
|
31
|
+
export declare const ListSnapshotsInputShape: {
|
|
32
|
+
host: z.ZodDefault<z.ZodOptional<z.ZodEnum<["proxmox-lab", "proxmox-mini", "proxmox-minis-lab", "esxi-intel-192-168-123-176", "all"]>>>;
|
|
33
|
+
vmId: z.ZodOptional<z.ZodString>;
|
|
34
|
+
};
|
|
35
|
+
export declare const ListSnapshotsInputSchema: z.ZodObject<{
|
|
36
|
+
host: z.ZodDefault<z.ZodOptional<z.ZodEnum<["proxmox-lab", "proxmox-mini", "proxmox-minis-lab", "esxi-intel-192-168-123-176", "all"]>>>;
|
|
37
|
+
vmId: z.ZodOptional<z.ZodString>;
|
|
38
|
+
}, "strip", z.ZodTypeAny, {
|
|
39
|
+
host: "proxmox-lab" | "proxmox-mini" | "proxmox-minis-lab" | "all" | "esxi-intel-192-168-123-176";
|
|
40
|
+
vmId?: string | undefined;
|
|
41
|
+
}, {
|
|
42
|
+
host?: "proxmox-lab" | "proxmox-mini" | "proxmox-minis-lab" | "all" | "esxi-intel-192-168-123-176" | undefined;
|
|
43
|
+
vmId?: string | undefined;
|
|
44
|
+
}>;
|
|
45
|
+
export declare function handleListSnapshots(args: unknown, context: ToolContext): Promise<CallToolResult>;
|
|
46
|
+
export declare const CleanStorageInputShape: {
|
|
47
|
+
host: z.ZodEnum<["proxmox-lab", "proxmox-mini", "proxmox-minis-lab", "esxi-intel-192-168-123-176"]>;
|
|
48
|
+
action: z.ZodEnum<["delete_volume", "delete_snapshot"]>;
|
|
49
|
+
volumeId: z.ZodOptional<z.ZodString>;
|
|
50
|
+
vmId: z.ZodOptional<z.ZodString>;
|
|
51
|
+
snapshotName: z.ZodOptional<z.ZodString>;
|
|
52
|
+
};
|
|
53
|
+
export declare const CleanStorageInputSchema: z.ZodObject<{
|
|
54
|
+
host: z.ZodEnum<["proxmox-lab", "proxmox-mini", "proxmox-minis-lab", "esxi-intel-192-168-123-176"]>;
|
|
55
|
+
action: z.ZodEnum<["delete_volume", "delete_snapshot"]>;
|
|
56
|
+
volumeId: z.ZodOptional<z.ZodString>;
|
|
57
|
+
vmId: z.ZodOptional<z.ZodString>;
|
|
58
|
+
snapshotName: z.ZodOptional<z.ZodString>;
|
|
59
|
+
}, "strip", z.ZodTypeAny, {
|
|
60
|
+
host: "proxmox-lab" | "proxmox-mini" | "proxmox-minis-lab" | "esxi-intel-192-168-123-176";
|
|
61
|
+
action: "delete_volume" | "delete_snapshot";
|
|
62
|
+
vmId?: string | undefined;
|
|
63
|
+
volumeId?: string | undefined;
|
|
64
|
+
snapshotName?: string | undefined;
|
|
65
|
+
}, {
|
|
66
|
+
host: "proxmox-lab" | "proxmox-mini" | "proxmox-minis-lab" | "esxi-intel-192-168-123-176";
|
|
67
|
+
action: "delete_volume" | "delete_snapshot";
|
|
68
|
+
vmId?: string | undefined;
|
|
69
|
+
volumeId?: string | undefined;
|
|
70
|
+
snapshotName?: string | undefined;
|
|
71
|
+
}>;
|
|
72
|
+
export declare function handleCleanStorage(args: unknown, context: ToolContext): Promise<CallToolResult>;
|
|
73
|
+
//# sourceMappingURL=storage-tools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage-tools.d.ts","sourceRoot":"","sources":["../../../src/tools/storage-tools.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,cAAc,EAA2C,MAAM,iBAAiB,CAAC;AAS1F,eAAO,MAAM,qBAAqB;;;;CAejC,CAAC;AAEF,eAAO,MAAM,sBAAsB;;;;;;;;;;;;EAAkC,CAAC;AAEtE,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,OAAO,EACb,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,cAAc,CAAC,CAuDzB;AAuCD,eAAO,MAAM,uBAAuB;;;CAUnC,CAAC;AAEF,eAAO,MAAM,wBAAwB;;;;;;;;;EAAoC,CAAC;AAE1E,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,OAAO,EACb,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,cAAc,CAAC,CAqDzB;AAMD,eAAO,MAAM,sBAAsB;;;;;;CAmBlC,CAAC;AAEF,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;EAAmC,CAAC;AAExE,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,OAAO,EACb,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,cAAc,CAAC,CAyEzB"}
|