@calltelemetry/ct-lab-mcp 0.8.49 → 0.8.51
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/README.md +11 -0
- package/dist/src/appliance/commands.d.ts.map +1 -1
- package/dist/src/appliance/commands.js +39 -0
- package/dist/src/appliance/commands.js.map +1 -1
- package/dist/src/appliance/types.d.ts +4 -1
- package/dist/src/appliance/types.d.ts.map +1 -1
- package/dist/src/appliance/types.js.map +1 -1
- package/dist/src/hypervisors/esxi/client.d.ts.map +1 -1
- package/dist/src/hypervisors/esxi/client.js +29 -15
- package/dist/src/hypervisors/esxi/client.js.map +1 -1
- package/dist/src/tools/appliance-claim-tools.d.ts +188 -0
- package/dist/src/tools/appliance-claim-tools.d.ts.map +1 -0
- package/dist/src/tools/appliance-claim-tools.js +365 -0
- package/dist/src/tools/appliance-claim-tools.js.map +1 -0
- package/dist/src/tools/appliance-id.d.ts +33 -0
- package/dist/src/tools/appliance-id.d.ts.map +1 -0
- package/dist/src/tools/appliance-id.js +88 -0
- package/dist/src/tools/appliance-id.js.map +1 -0
- package/dist/src/tools/index.d.ts +4 -0
- package/dist/src/tools/index.d.ts.map +1 -1
- package/dist/src/tools/index.js +41 -1
- package/dist/src/tools/index.js.map +1 -1
- package/dist/src/tools/license-tools.d.ts +88 -0
- package/dist/src/tools/license-tools.d.ts.map +1 -1
- package/dist/src/tools/license-tools.js +253 -0
- package/dist/src/tools/license-tools.js.map +1 -1
- package/dist/src/tools/sideload-runner.d.ts +56 -0
- package/dist/src/tools/sideload-runner.d.ts.map +1 -0
- package/dist/src/tools/sideload-runner.js +175 -0
- package/dist/src/tools/sideload-runner.js.map +1 -0
- package/dist/src/tools/verify-demo.d.ts +125 -0
- package/dist/src/tools/verify-demo.d.ts.map +1 -0
- package/dist/src/tools/verify-demo.js +435 -0
- package/dist/src/tools/verify-demo.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sideloaded Appliance Management Runner MCP Tool
|
|
3
|
+
*
|
|
4
|
+
* Implements the sideloaded runner pattern over SSH (port 2222) to manage
|
|
5
|
+
* CallTelemetry appliances across versions without mutating /home/calltelemetry/cli.sh.
|
|
6
|
+
*/
|
|
7
|
+
import { z } from "zod";
|
|
8
|
+
import { ProxmoxErrorCode, createToolErrorResult } from "../types/mcp.js";
|
|
9
|
+
import { applianceSshExecutor } from "../appliance/executor.js";
|
|
10
|
+
import { logger } from "../utils/logger.js";
|
|
11
|
+
import { telemetry } from "../telemetry/registry.js";
|
|
12
|
+
export const SideloadApplianceRunnerInputShape = {
|
|
13
|
+
targetIp: z
|
|
14
|
+
.string()
|
|
15
|
+
.min(1)
|
|
16
|
+
.describe("Target IP address or hostname of the Call Telemetry appliance (e.g. '192.168.124.221')."),
|
|
17
|
+
port: z
|
|
18
|
+
.number()
|
|
19
|
+
.int()
|
|
20
|
+
.min(1)
|
|
21
|
+
.max(65535)
|
|
22
|
+
.optional()
|
|
23
|
+
.default(2222)
|
|
24
|
+
.describe("SSH port (default: 2222)."),
|
|
25
|
+
action: z
|
|
26
|
+
.enum(["execute", "container_override", "systemd_reset", "diagnostic_bundle"])
|
|
27
|
+
.describe("Management action to execute: 'execute' (runs custom isolated script), " +
|
|
28
|
+
"'container_override' (injects git hash/image overrides into .env and restarts Compose), " +
|
|
29
|
+
"'systemd_reset' (clears restart backoffs), or 'diagnostic_bundle' (gathers non-invasive diagnostics)."),
|
|
30
|
+
scriptContent: z
|
|
31
|
+
.string()
|
|
32
|
+
.optional()
|
|
33
|
+
.describe("Shell script payload to execute when action is 'execute'."),
|
|
34
|
+
containerOverrides: z
|
|
35
|
+
.record(z.string())
|
|
36
|
+
.optional()
|
|
37
|
+
.describe("Container service image or git hash overrides (e.g. { web: '3f0962a4', vue: 'a67c9610' })."),
|
|
38
|
+
timeoutMs: z
|
|
39
|
+
.number()
|
|
40
|
+
.int()
|
|
41
|
+
.min(2000)
|
|
42
|
+
.max(120000)
|
|
43
|
+
.optional()
|
|
44
|
+
.default(30000)
|
|
45
|
+
.describe("Execution timeout in milliseconds (default: 30000).")
|
|
46
|
+
};
|
|
47
|
+
export const SideloadApplianceRunnerInputSchema = z
|
|
48
|
+
.object(SideloadApplianceRunnerInputShape)
|
|
49
|
+
.refine((data) => {
|
|
50
|
+
if (data.action === "execute" && (!data.scriptContent || !data.scriptContent.trim())) {
|
|
51
|
+
return false;
|
|
52
|
+
}
|
|
53
|
+
if (data.action === "container_override" && (!data.containerOverrides || Object.keys(data.containerOverrides).length === 0)) {
|
|
54
|
+
return false;
|
|
55
|
+
}
|
|
56
|
+
return true;
|
|
57
|
+
}, {
|
|
58
|
+
message: "Action 'execute' requires non-empty 'scriptContent'. Action 'container_override' requires 'containerOverrides' map."
|
|
59
|
+
});
|
|
60
|
+
export async function handleSideloadApplianceRunner(args, context) {
|
|
61
|
+
const parsed = SideloadApplianceRunnerInputSchema.safeParse(args);
|
|
62
|
+
if (!parsed.success) {
|
|
63
|
+
const issues = parsed.error.issues.map((i) => `${i.path.join(".")}: ${i.message}`).join("; ");
|
|
64
|
+
return createToolErrorResult(ProxmoxErrorCode.VALIDATION_ERROR, issues);
|
|
65
|
+
}
|
|
66
|
+
const { targetIp, port, action, scriptContent, containerOverrides, timeoutMs } = parsed.data;
|
|
67
|
+
const executor = context.applianceExecutor || applianceSshExecutor;
|
|
68
|
+
logger.info(`Running sideload appliance action '${action}' on ${targetIp}:${port}...`);
|
|
69
|
+
try {
|
|
70
|
+
let scriptToRun;
|
|
71
|
+
switch (action) {
|
|
72
|
+
case "execute":
|
|
73
|
+
scriptToRun = scriptContent;
|
|
74
|
+
break;
|
|
75
|
+
case "systemd_reset":
|
|
76
|
+
scriptToRun = [
|
|
77
|
+
"#!/usr/bin/env bash",
|
|
78
|
+
"set -euo pipefail",
|
|
79
|
+
"sudo systemctl reset-failed docker-compose-app.service 2>/dev/null || true",
|
|
80
|
+
"echo '{\"status\":\"reset_complete\",\"active\":'$(sudo systemctl is-active docker-compose-app.service || echo 'inactive')'}'"
|
|
81
|
+
].join("\n");
|
|
82
|
+
break;
|
|
83
|
+
case "diagnostic_bundle":
|
|
84
|
+
scriptToRun = [
|
|
85
|
+
"#!/usr/bin/env bash",
|
|
86
|
+
"set -euo pipefail",
|
|
87
|
+
"echo '=== OS ==='",
|
|
88
|
+
"cat /etc/os-release | grep -E '^(NAME|VERSION)=' || true",
|
|
89
|
+
"echo '=== DOCKER CONTAINERS ==='",
|
|
90
|
+
"docker ps --format 'table {{.Names}}\t{{.Status}}\t{{.Image}}' || true",
|
|
91
|
+
"echo '=== ENVIRONMENT CONFIG ==='",
|
|
92
|
+
"grep -E '^(CT_RELEASE_VERSION|WEB_VERSION|VUE_VERSION|JTAPI_VERSION)=' /home/calltelemetry/.env 2>/dev/null || true",
|
|
93
|
+
"echo '=== SYSTEM RESOURCES ==='",
|
|
94
|
+
"free -m",
|
|
95
|
+
"df -h /",
|
|
96
|
+
"uptime"
|
|
97
|
+
].join("\n");
|
|
98
|
+
break;
|
|
99
|
+
case "container_override": {
|
|
100
|
+
const envLines = [];
|
|
101
|
+
for (const [k, val] of Object.entries(containerOverrides)) {
|
|
102
|
+
const service = k.toLowerCase().trim();
|
|
103
|
+
let envVar = "";
|
|
104
|
+
if (service === "web")
|
|
105
|
+
envVar = "WEB_VERSION";
|
|
106
|
+
else if (service === "vue")
|
|
107
|
+
envVar = "VUE_VERSION";
|
|
108
|
+
else if (service === "jtapi")
|
|
109
|
+
envVar = "JTAPI_VERSION";
|
|
110
|
+
else if (service === "media" || service === "ct-media")
|
|
111
|
+
envVar = "CT_MEDIA_VERSION";
|
|
112
|
+
else if (service === "syslog")
|
|
113
|
+
envVar = "CT_SYSLOG_INGEST_VERSION";
|
|
114
|
+
else
|
|
115
|
+
envVar = `${service.toUpperCase().replace(/[^A-Z0-9_]/g, "_")}_VERSION`;
|
|
116
|
+
// If 7-40 hex chars, format as tag with release line if possible
|
|
117
|
+
const isHex = /^[0-9a-f]{7,40}$/i.test(val);
|
|
118
|
+
const tag = isHex ? `0.8.7-stable-${val.substring(0, 12)}` : val;
|
|
119
|
+
envLines.push(`sed -i 's|^${envVar}=.*|${envVar}=${tag}|' /home/calltelemetry/.env || echo "${envVar}=${tag}" >> /home/calltelemetry/.env`);
|
|
120
|
+
}
|
|
121
|
+
scriptToRun = [
|
|
122
|
+
"#!/usr/bin/env bash",
|
|
123
|
+
"set -euo pipefail",
|
|
124
|
+
...envLines,
|
|
125
|
+
"cd /home/calltelemetry",
|
|
126
|
+
"sudo docker compose up -d",
|
|
127
|
+
"echo '{\"status\":\"overrides_applied\",\"services\":'$(docker ps --format '{{.Names}}' | tr '\n' ',' | sed 's/,$//')'}'"
|
|
128
|
+
].join("\n");
|
|
129
|
+
break;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
const execRes = await executor.execute({
|
|
133
|
+
targetIp,
|
|
134
|
+
port,
|
|
135
|
+
action: "sideload_runner",
|
|
136
|
+
args: {
|
|
137
|
+
scriptContent: scriptToRun
|
|
138
|
+
},
|
|
139
|
+
timeoutMs
|
|
140
|
+
});
|
|
141
|
+
telemetry.emit({
|
|
142
|
+
event: "appliance.sideload.executed",
|
|
143
|
+
actor: "ct-lab-mcp",
|
|
144
|
+
status: "success",
|
|
145
|
+
metadata: {
|
|
146
|
+
target: targetIp,
|
|
147
|
+
action,
|
|
148
|
+
exitCode: execRes.exitCode,
|
|
149
|
+
durationMs: execRes.durationMs
|
|
150
|
+
}
|
|
151
|
+
});
|
|
152
|
+
return {
|
|
153
|
+
content: [
|
|
154
|
+
{
|
|
155
|
+
type: "text",
|
|
156
|
+
text: JSON.stringify({
|
|
157
|
+
success: execRes.exitCode === 0,
|
|
158
|
+
targetIp,
|
|
159
|
+
port,
|
|
160
|
+
action,
|
|
161
|
+
exitCode: execRes.exitCode,
|
|
162
|
+
stdout: execRes.stdout.trim(),
|
|
163
|
+
stderr: execRes.stderr.trim(),
|
|
164
|
+
durationMs: execRes.durationMs
|
|
165
|
+
}, null, 2)
|
|
166
|
+
}
|
|
167
|
+
]
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
catch (err) {
|
|
171
|
+
logger.error(`Sideload runner failed on ${targetIp}: ${err.message}`);
|
|
172
|
+
return createToolErrorResult(ProxmoxErrorCode.APPLIANCE_EXECUTION_FAILED, `Sideload runner execution failed on ${targetIp}: ${err.message}`);
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
//# sourceMappingURL=sideload-runner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sideload-runner.js","sourceRoot":"","sources":["../../../src/tools/sideload-runner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Automated 5-Point Demo Verification Gate MCP Tool
|
|
3
|
+
*
|
|
4
|
+
* Runs an automated 5-point verification check against a target CallTelemetry appliance
|
|
5
|
+
* to certify demo readiness before handing off to customers or UAT:
|
|
6
|
+
* 1. API & Session Authentication (POST /api/session)
|
|
7
|
+
* 2. Active License & Tier Gate (GET /api/org/:id/settings)
|
|
8
|
+
* 3. CUBE Trunks & Voice Gateways (GET /api/cubes or /api/org/:id/cubes)
|
|
9
|
+
* 4. Phone Registrations & RTP Endpoints (GET /api/phones or /api/org/:id/phones)
|
|
10
|
+
* 5. Call Records, CDR Processing & Analytics (GET /api/calls or /api/org/:id/calls)
|
|
11
|
+
*/
|
|
12
|
+
import { z } from "zod";
|
|
13
|
+
import { ToolContext } from "./list-hosts.js";
|
|
14
|
+
import { CallToolResult } from "../types/mcp.js";
|
|
15
|
+
export declare const ExpectedMetricsSchema: z.ZodObject<{
|
|
16
|
+
minCubes: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
17
|
+
minPhones: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
18
|
+
minCalls: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
19
|
+
requireActiveLicense: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
20
|
+
}, "strip", z.ZodTypeAny, {
|
|
21
|
+
minCubes: number;
|
|
22
|
+
minPhones: number;
|
|
23
|
+
minCalls: number;
|
|
24
|
+
requireActiveLicense: boolean;
|
|
25
|
+
}, {
|
|
26
|
+
minCubes?: number | undefined;
|
|
27
|
+
minPhones?: number | undefined;
|
|
28
|
+
minCalls?: number | undefined;
|
|
29
|
+
requireActiveLicense?: boolean | undefined;
|
|
30
|
+
}>;
|
|
31
|
+
export declare const VerifyApplianceDemoInputShape: {
|
|
32
|
+
targetIp: z.ZodString;
|
|
33
|
+
port: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
34
|
+
email: z.ZodDefault<z.ZodOptional<z.ZodString>>;
|
|
35
|
+
password: z.ZodDefault<z.ZodOptional<z.ZodString>>;
|
|
36
|
+
orgId: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
37
|
+
expectedMetrics: z.ZodDefault<z.ZodOptional<z.ZodObject<{
|
|
38
|
+
minCubes: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
39
|
+
minPhones: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
40
|
+
minCalls: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
41
|
+
requireActiveLicense: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
42
|
+
}, "strip", z.ZodTypeAny, {
|
|
43
|
+
minCubes: number;
|
|
44
|
+
minPhones: number;
|
|
45
|
+
minCalls: number;
|
|
46
|
+
requireActiveLicense: boolean;
|
|
47
|
+
}, {
|
|
48
|
+
minCubes?: number | undefined;
|
|
49
|
+
minPhones?: number | undefined;
|
|
50
|
+
minCalls?: number | undefined;
|
|
51
|
+
requireActiveLicense?: boolean | undefined;
|
|
52
|
+
}>>>;
|
|
53
|
+
timeoutMs: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
54
|
+
};
|
|
55
|
+
export declare const VerifyApplianceDemoInputSchema: z.ZodObject<{
|
|
56
|
+
targetIp: z.ZodString;
|
|
57
|
+
port: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
58
|
+
email: z.ZodDefault<z.ZodOptional<z.ZodString>>;
|
|
59
|
+
password: z.ZodDefault<z.ZodOptional<z.ZodString>>;
|
|
60
|
+
orgId: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
61
|
+
expectedMetrics: z.ZodDefault<z.ZodOptional<z.ZodObject<{
|
|
62
|
+
minCubes: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
63
|
+
minPhones: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
64
|
+
minCalls: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
65
|
+
requireActiveLicense: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
66
|
+
}, "strip", z.ZodTypeAny, {
|
|
67
|
+
minCubes: number;
|
|
68
|
+
minPhones: number;
|
|
69
|
+
minCalls: number;
|
|
70
|
+
requireActiveLicense: boolean;
|
|
71
|
+
}, {
|
|
72
|
+
minCubes?: number | undefined;
|
|
73
|
+
minPhones?: number | undefined;
|
|
74
|
+
minCalls?: number | undefined;
|
|
75
|
+
requireActiveLicense?: boolean | undefined;
|
|
76
|
+
}>>>;
|
|
77
|
+
timeoutMs: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
78
|
+
}, "strip", z.ZodTypeAny, {
|
|
79
|
+
email: string;
|
|
80
|
+
targetIp: string;
|
|
81
|
+
password: string;
|
|
82
|
+
port: number;
|
|
83
|
+
timeoutMs: number;
|
|
84
|
+
orgId: number;
|
|
85
|
+
expectedMetrics: {
|
|
86
|
+
minCubes: number;
|
|
87
|
+
minPhones: number;
|
|
88
|
+
minCalls: number;
|
|
89
|
+
requireActiveLicense: boolean;
|
|
90
|
+
};
|
|
91
|
+
}, {
|
|
92
|
+
targetIp: string;
|
|
93
|
+
email?: string | undefined;
|
|
94
|
+
password?: string | undefined;
|
|
95
|
+
port?: number | undefined;
|
|
96
|
+
timeoutMs?: number | undefined;
|
|
97
|
+
orgId?: number | undefined;
|
|
98
|
+
expectedMetrics?: {
|
|
99
|
+
minCubes?: number | undefined;
|
|
100
|
+
minPhones?: number | undefined;
|
|
101
|
+
minCalls?: number | undefined;
|
|
102
|
+
requireActiveLicense?: boolean | undefined;
|
|
103
|
+
} | undefined;
|
|
104
|
+
}>;
|
|
105
|
+
export type VerifyApplianceDemoInput = z.infer<typeof VerifyApplianceDemoInputSchema>;
|
|
106
|
+
export interface CheckResult {
|
|
107
|
+
passed: boolean;
|
|
108
|
+
message: string;
|
|
109
|
+
[key: string]: unknown;
|
|
110
|
+
}
|
|
111
|
+
export interface VerificationReport {
|
|
112
|
+
readyForDemo: boolean;
|
|
113
|
+
targetIp: string;
|
|
114
|
+
score: string;
|
|
115
|
+
checks: {
|
|
116
|
+
apiAuth: CheckResult;
|
|
117
|
+
license: CheckResult;
|
|
118
|
+
cubes: CheckResult;
|
|
119
|
+
phones: CheckResult;
|
|
120
|
+
callRecords: CheckResult;
|
|
121
|
+
};
|
|
122
|
+
issues: string[];
|
|
123
|
+
}
|
|
124
|
+
export declare function handleVerifyApplianceDemo(args: unknown, _context?: ToolContext): Promise<CallToolResult>;
|
|
125
|
+
//# sourceMappingURL=verify-demo.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verify-demo.d.ts","sourceRoot":"","sources":["../../../src/tools/verify-demo.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,cAAc,EAA2C,MAAM,iBAAiB,CAAC;AAW1F,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;EAKhC,CAAC;AAEH,eAAO,MAAM,6BAA6B;;;;;;;;;;;;;;;;;;;;;;;CAuCzC,CAAC;AAEF,eAAO,MAAM,8BAA8B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAA0C,CAAC;AACtF,MAAM,MAAM,wBAAwB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,8BAA8B,CAAC,CAAC;AAEtF,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,kBAAkB;IACjC,YAAY,EAAE,OAAO,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE;QACN,OAAO,EAAE,WAAW,CAAC;QACrB,OAAO,EAAE,WAAW,CAAC;QACrB,KAAK,EAAE,WAAW,CAAC;QACnB,MAAM,EAAE,WAAW,CAAC;QACpB,WAAW,EAAE,WAAW,CAAC;KAC1B,CAAC;IACF,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,wBAAsB,yBAAyB,CAC7C,IAAI,EAAE,OAAO,EACb,QAAQ,CAAC,EAAE,WAAW,GACrB,OAAO,CAAC,cAAc,CAAC,CA2XzB"}
|