@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,435 @@
|
|
|
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 { Agent, fetch } from "undici";
|
|
14
|
+
import { ProxmoxErrorCode, createToolErrorResult } from "../types/mcp.js";
|
|
15
|
+
import { logger } from "../utils/logger.js";
|
|
16
|
+
import { defaultRedactor } from "../utils/redactor.js";
|
|
17
|
+
import { telemetry } from "../telemetry/registry.js";
|
|
18
|
+
const insecureAgent = new Agent({
|
|
19
|
+
connect: {
|
|
20
|
+
rejectUnauthorized: false
|
|
21
|
+
}
|
|
22
|
+
});
|
|
23
|
+
export const ExpectedMetricsSchema = z.object({
|
|
24
|
+
minCubes: z.number().int().min(0).optional().default(1).describe("Minimum expected CUBEs configured (default: 1)."),
|
|
25
|
+
minPhones: z.number().int().min(0).optional().default(1).describe("Minimum expected phone endpoints (default: 1)."),
|
|
26
|
+
minCalls: z.number().int().min(0).optional().default(1).describe("Minimum expected processed call records (default: 1)."),
|
|
27
|
+
requireActiveLicense: z.boolean().optional().default(true).describe("Whether an active non-expired license is required (default: true).")
|
|
28
|
+
});
|
|
29
|
+
export const VerifyApplianceDemoInputShape = {
|
|
30
|
+
targetIp: z
|
|
31
|
+
.string()
|
|
32
|
+
.min(1)
|
|
33
|
+
.describe("Target IP address or hostname of the Call Telemetry appliance (e.g. '192.168.124.221')."),
|
|
34
|
+
port: z
|
|
35
|
+
.number()
|
|
36
|
+
.int()
|
|
37
|
+
.min(1)
|
|
38
|
+
.max(65535)
|
|
39
|
+
.optional()
|
|
40
|
+
.default(443)
|
|
41
|
+
.describe("HTTPS port (default: 443)."),
|
|
42
|
+
email: z
|
|
43
|
+
.string()
|
|
44
|
+
.optional()
|
|
45
|
+
.default("demo@calltelemetry.com")
|
|
46
|
+
.describe("Admin email for authentication (default: 'demo@calltelemetry.com')."),
|
|
47
|
+
password: z
|
|
48
|
+
.string()
|
|
49
|
+
.optional()
|
|
50
|
+
.default("demo")
|
|
51
|
+
.describe("Admin password for authentication (default: 'demo')."),
|
|
52
|
+
orgId: z
|
|
53
|
+
.number()
|
|
54
|
+
.int()
|
|
55
|
+
.positive()
|
|
56
|
+
.optional()
|
|
57
|
+
.default(1)
|
|
58
|
+
.describe("Appliance organization ID (default: 1)."),
|
|
59
|
+
expectedMetrics: ExpectedMetricsSchema.optional().default({}),
|
|
60
|
+
timeoutMs: z
|
|
61
|
+
.number()
|
|
62
|
+
.int()
|
|
63
|
+
.min(2000)
|
|
64
|
+
.max(60000)
|
|
65
|
+
.optional()
|
|
66
|
+
.default(15000)
|
|
67
|
+
.describe("Request timeout in milliseconds (default: 15000).")
|
|
68
|
+
};
|
|
69
|
+
export const VerifyApplianceDemoInputSchema = z.object(VerifyApplianceDemoInputShape);
|
|
70
|
+
export async function handleVerifyApplianceDemo(args, _context) {
|
|
71
|
+
const parsed = VerifyApplianceDemoInputSchema.safeParse(args);
|
|
72
|
+
if (!parsed.success) {
|
|
73
|
+
const issues = parsed.error.issues.map((i) => `${i.path.join(".")}: ${i.message}`).join("; ");
|
|
74
|
+
return createToolErrorResult(ProxmoxErrorCode.VALIDATION_ERROR, issues);
|
|
75
|
+
}
|
|
76
|
+
const { targetIp, port, email, password, orgId, expectedMetrics, timeoutMs } = parsed.data;
|
|
77
|
+
let baseUrl = targetIp.trim();
|
|
78
|
+
if (!baseUrl.startsWith("http://") && !baseUrl.startsWith("https://")) {
|
|
79
|
+
baseUrl = port === 443 ? `https://${baseUrl}` : `https://${baseUrl}:${port}`;
|
|
80
|
+
}
|
|
81
|
+
baseUrl = baseUrl.replace(/\/+$/, "");
|
|
82
|
+
logger.info(`Running 5-point demo verification on ${baseUrl}...`);
|
|
83
|
+
const report = {
|
|
84
|
+
readyForDemo: false,
|
|
85
|
+
targetIp,
|
|
86
|
+
score: "0/5",
|
|
87
|
+
checks: {
|
|
88
|
+
apiAuth: { passed: false, message: "Not checked" },
|
|
89
|
+
license: { passed: false, message: "Not checked" },
|
|
90
|
+
cubes: { passed: false, message: "Not checked" },
|
|
91
|
+
phones: { passed: false, message: "Not checked" },
|
|
92
|
+
callRecords: { passed: false, message: "Not checked" }
|
|
93
|
+
},
|
|
94
|
+
issues: []
|
|
95
|
+
};
|
|
96
|
+
const authHeaders = { "Content-Type": "application/json" };
|
|
97
|
+
// Candidate credentials to attempt
|
|
98
|
+
const credentialsToTry = [
|
|
99
|
+
{ email, password },
|
|
100
|
+
{ email: process.env.CT_TEST_USER_EMAIL || "demo@calltelemetry.com", password: process.env.CT_TEST_USER_PASSWORD || "demo" },
|
|
101
|
+
{ email: "admin@calltelemetry.com", password: "Password123!" },
|
|
102
|
+
{ email: "admin@calltelemetry.com", password: "calltelemetry" },
|
|
103
|
+
{ email: "test@calltelemetry.com", password: "Password123!" }
|
|
104
|
+
];
|
|
105
|
+
try {
|
|
106
|
+
// -------------------------------------------------------------
|
|
107
|
+
// Gate 1: API & Session Authentication Check
|
|
108
|
+
// -------------------------------------------------------------
|
|
109
|
+
let authenticated = false;
|
|
110
|
+
let authError = "";
|
|
111
|
+
const sessionUrl = `${baseUrl}/api/session`;
|
|
112
|
+
for (const cred of credentialsToTry) {
|
|
113
|
+
try {
|
|
114
|
+
const sessionRes = await fetch(sessionUrl, {
|
|
115
|
+
method: "POST",
|
|
116
|
+
headers: { "Content-Type": "application/json" },
|
|
117
|
+
body: JSON.stringify({ user: { email: cred.email, password: cred.password } }),
|
|
118
|
+
dispatcher: insecureAgent,
|
|
119
|
+
signal: AbortSignal.timeout(Math.min(timeoutMs, 5000))
|
|
120
|
+
});
|
|
121
|
+
if (sessionRes.status === 200 || sessionRes.ok) {
|
|
122
|
+
const sessionData = (await sessionRes.json().catch(() => ({})));
|
|
123
|
+
const accessToken = sessionData?.access_token || sessionData?.data?.access_token || sessionData?.token;
|
|
124
|
+
const setCookie = sessionRes.headers.get("set-cookie") || "";
|
|
125
|
+
const sessionCookie = setCookie.split(";")[0];
|
|
126
|
+
if (sessionCookie)
|
|
127
|
+
authHeaders["Cookie"] = sessionCookie;
|
|
128
|
+
if (accessToken) {
|
|
129
|
+
authHeaders["Authorization"] = `Bearer ${accessToken}`;
|
|
130
|
+
defaultRedactor.registerSecret(accessToken);
|
|
131
|
+
}
|
|
132
|
+
authenticated = true;
|
|
133
|
+
report.checks.apiAuth = {
|
|
134
|
+
passed: true,
|
|
135
|
+
message: `Authenticated successfully as ${cred.email}`,
|
|
136
|
+
accessTokenFound: Boolean(accessToken),
|
|
137
|
+
cookieReceived: Boolean(sessionCookie)
|
|
138
|
+
};
|
|
139
|
+
break;
|
|
140
|
+
}
|
|
141
|
+
else {
|
|
142
|
+
authError = `HTTP ${sessionRes.status}`;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
catch (err) {
|
|
146
|
+
authError = err.message;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
if (!authenticated) {
|
|
150
|
+
report.checks.apiAuth = {
|
|
151
|
+
passed: false,
|
|
152
|
+
message: `Failed to authenticate to ${sessionUrl}: ${authError}`,
|
|
153
|
+
accessTokenFound: false
|
|
154
|
+
};
|
|
155
|
+
report.issues.push(`API Auth Failed: ${authError}`);
|
|
156
|
+
// Cannot proceed with subsequent checks without authentication
|
|
157
|
+
return {
|
|
158
|
+
content: [
|
|
159
|
+
{
|
|
160
|
+
type: "text",
|
|
161
|
+
text: JSON.stringify(report, null, 2)
|
|
162
|
+
}
|
|
163
|
+
]
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
// -------------------------------------------------------------
|
|
167
|
+
// Gate 2: License Status Check
|
|
168
|
+
// -------------------------------------------------------------
|
|
169
|
+
try {
|
|
170
|
+
const settingsRes = await fetch(`${baseUrl}/api/org/${orgId}/settings`, {
|
|
171
|
+
method: "GET",
|
|
172
|
+
headers: authHeaders,
|
|
173
|
+
dispatcher: insecureAgent,
|
|
174
|
+
signal: AbortSignal.timeout(timeoutMs)
|
|
175
|
+
});
|
|
176
|
+
if (settingsRes.ok) {
|
|
177
|
+
const settingsJson = (await settingsRes.json().catch(() => ({}))) || {};
|
|
178
|
+
const settings = settingsJson.settings || settingsJson.data || settingsJson;
|
|
179
|
+
const lic = settings.license || settings.license_map || {};
|
|
180
|
+
const tier = settings.license_level || lic.subscription || lic.level || "Unknown";
|
|
181
|
+
const active = lic.active !== undefined ? Boolean(lic.active) : tier !== "Community" && tier !== "Unknown";
|
|
182
|
+
const daysRemaining = lic.days_remaining !== undefined ? Number(lic.days_remaining) : 90;
|
|
183
|
+
const licenseOk = !expectedMetrics.requireActiveLicense || (active && daysRemaining > 0);
|
|
184
|
+
report.checks.license = {
|
|
185
|
+
passed: licenseOk,
|
|
186
|
+
message: licenseOk
|
|
187
|
+
? `Active ${tier} license verified (${daysRemaining} days remaining)`
|
|
188
|
+
: `License gate failed: tier=${tier}, active=${active}, daysRemaining=${daysRemaining}`,
|
|
189
|
+
tier,
|
|
190
|
+
active,
|
|
191
|
+
daysRemaining
|
|
192
|
+
};
|
|
193
|
+
if (!licenseOk) {
|
|
194
|
+
report.issues.push(`License gate failed: tier=${tier}, active=${active}, daysRemaining=${daysRemaining}`);
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
else {
|
|
198
|
+
report.checks.license = {
|
|
199
|
+
passed: false,
|
|
200
|
+
message: `Settings query failed with HTTP ${settingsRes.status}`
|
|
201
|
+
};
|
|
202
|
+
report.issues.push(`License Check Failed: HTTP ${settingsRes.status}`);
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
catch (licErr) {
|
|
206
|
+
report.checks.license = { passed: false, message: licErr.message };
|
|
207
|
+
report.issues.push(`License Check Exception: ${licErr.message}`);
|
|
208
|
+
}
|
|
209
|
+
// -------------------------------------------------------------
|
|
210
|
+
// Gate 3: CUBE Trunks & Voice Gateways Check
|
|
211
|
+
// -------------------------------------------------------------
|
|
212
|
+
try {
|
|
213
|
+
const cubesRes = await fetch(`${baseUrl}/api/cubes`, {
|
|
214
|
+
method: "GET",
|
|
215
|
+
headers: authHeaders,
|
|
216
|
+
dispatcher: insecureAgent,
|
|
217
|
+
signal: AbortSignal.timeout(timeoutMs)
|
|
218
|
+
});
|
|
219
|
+
if (cubesRes.ok) {
|
|
220
|
+
const cubesJson = (await cubesRes.json().catch(() => ({}))) || {};
|
|
221
|
+
const cubesList = Array.isArray(cubesJson) ? cubesJson : cubesJson.data || cubesJson.cubes || [];
|
|
222
|
+
const count = cubesList.length;
|
|
223
|
+
const cubesOk = count >= expectedMetrics.minCubes;
|
|
224
|
+
report.checks.cubes = {
|
|
225
|
+
passed: cubesOk,
|
|
226
|
+
message: cubesOk
|
|
227
|
+
? `${count} CUBE gateway(s) configured (min required: ${expectedMetrics.minCubes})`
|
|
228
|
+
: `Insufficient CUBE gateways: found ${count}, expected at least ${expectedMetrics.minCubes}`,
|
|
229
|
+
count,
|
|
230
|
+
expectedMin: expectedMetrics.minCubes
|
|
231
|
+
};
|
|
232
|
+
if (!cubesOk) {
|
|
233
|
+
report.issues.push(`CUBE Check: found ${count}, expected at least ${expectedMetrics.minCubes}`);
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
else {
|
|
237
|
+
// Fallback to checking org cubes
|
|
238
|
+
const orgCubesRes = await fetch(`${baseUrl}/api/org/${orgId}/cubes`, {
|
|
239
|
+
method: "GET",
|
|
240
|
+
headers: authHeaders,
|
|
241
|
+
dispatcher: insecureAgent,
|
|
242
|
+
signal: AbortSignal.timeout(timeoutMs)
|
|
243
|
+
});
|
|
244
|
+
if (orgCubesRes.ok) {
|
|
245
|
+
const orgCubesJson = (await orgCubesRes.json().catch(() => ({}))) || {};
|
|
246
|
+
const cubesList = Array.isArray(orgCubesJson) ? orgCubesJson : orgCubesJson.data || orgCubesJson.cubes || [];
|
|
247
|
+
const count = cubesList.length;
|
|
248
|
+
const cubesOk = count >= expectedMetrics.minCubes;
|
|
249
|
+
report.checks.cubes = {
|
|
250
|
+
passed: cubesOk,
|
|
251
|
+
message: `${count} CUBE gateway(s) configured via org cubes`,
|
|
252
|
+
count,
|
|
253
|
+
expectedMin: expectedMetrics.minCubes
|
|
254
|
+
};
|
|
255
|
+
if (!cubesOk) {
|
|
256
|
+
report.issues.push(`CUBE Check: found ${count}, expected at least ${expectedMetrics.minCubes}`);
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
else {
|
|
260
|
+
report.checks.cubes = {
|
|
261
|
+
passed: false,
|
|
262
|
+
message: `CUBEs query returned HTTP ${cubesRes.status}`
|
|
263
|
+
};
|
|
264
|
+
report.issues.push(`CUBEs Endpoint Error: HTTP ${cubesRes.status}`);
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
catch (cubeErr) {
|
|
269
|
+
report.checks.cubes = { passed: false, message: cubeErr.message };
|
|
270
|
+
report.issues.push(`CUBE Check Exception: ${cubeErr.message}`);
|
|
271
|
+
}
|
|
272
|
+
// -------------------------------------------------------------
|
|
273
|
+
// Gate 4: Phone Extensions & Endpoints Check
|
|
274
|
+
// -------------------------------------------------------------
|
|
275
|
+
try {
|
|
276
|
+
const phonesRes = await fetch(`${baseUrl}/api/phones`, {
|
|
277
|
+
method: "GET",
|
|
278
|
+
headers: authHeaders,
|
|
279
|
+
dispatcher: insecureAgent,
|
|
280
|
+
signal: AbortSignal.timeout(timeoutMs)
|
|
281
|
+
});
|
|
282
|
+
if (phonesRes.ok) {
|
|
283
|
+
const phonesJson = (await phonesRes.json().catch(() => ({}))) || {};
|
|
284
|
+
const phonesList = Array.isArray(phonesJson) ? phonesJson : phonesJson.data || phonesJson.phones || [];
|
|
285
|
+
const count = phonesList.length;
|
|
286
|
+
const phonesOk = count >= expectedMetrics.minPhones;
|
|
287
|
+
report.checks.phones = {
|
|
288
|
+
passed: phonesOk,
|
|
289
|
+
message: phonesOk
|
|
290
|
+
? `${count} phone endpoint(s) registered (min required: ${expectedMetrics.minPhones})`
|
|
291
|
+
: `Insufficient phone endpoints: found ${count}, expected at least ${expectedMetrics.minPhones}`,
|
|
292
|
+
count,
|
|
293
|
+
expectedMin: expectedMetrics.minPhones
|
|
294
|
+
};
|
|
295
|
+
if (!phonesOk) {
|
|
296
|
+
report.issues.push(`Phones Check: found ${count}, expected at least ${expectedMetrics.minPhones}`);
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
else {
|
|
300
|
+
const orgPhonesRes = await fetch(`${baseUrl}/api/org/${orgId}/phones`, {
|
|
301
|
+
method: "GET",
|
|
302
|
+
headers: authHeaders,
|
|
303
|
+
dispatcher: insecureAgent,
|
|
304
|
+
signal: AbortSignal.timeout(timeoutMs)
|
|
305
|
+
});
|
|
306
|
+
if (orgPhonesRes.ok) {
|
|
307
|
+
const orgPhonesJson = (await orgPhonesRes.json().catch(() => ({}))) || {};
|
|
308
|
+
const phonesList = Array.isArray(orgPhonesJson) ? orgPhonesJson : orgPhonesJson.data || orgPhonesJson.phones || [];
|
|
309
|
+
const count = phonesList.length;
|
|
310
|
+
const phonesOk = count >= expectedMetrics.minPhones;
|
|
311
|
+
report.checks.phones = {
|
|
312
|
+
passed: phonesOk,
|
|
313
|
+
message: `${count} phone endpoint(s) registered via org`,
|
|
314
|
+
count,
|
|
315
|
+
expectedMin: expectedMetrics.minPhones
|
|
316
|
+
};
|
|
317
|
+
if (!phonesOk) {
|
|
318
|
+
report.issues.push(`Phones Check: found ${count}, expected at least ${expectedMetrics.minPhones}`);
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
else {
|
|
322
|
+
report.checks.phones = {
|
|
323
|
+
passed: false,
|
|
324
|
+
message: `Phones query returned HTTP ${phonesRes.status}`
|
|
325
|
+
};
|
|
326
|
+
report.issues.push(`Phones Endpoint Error: HTTP ${phonesRes.status}`);
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
catch (phoneErr) {
|
|
331
|
+
report.checks.phones = { passed: false, message: phoneErr.message };
|
|
332
|
+
report.issues.push(`Phones Check Exception: ${phoneErr.message}`);
|
|
333
|
+
}
|
|
334
|
+
// -------------------------------------------------------------
|
|
335
|
+
// Gate 5: Call Analytics, CDRs & Policy Check
|
|
336
|
+
// -------------------------------------------------------------
|
|
337
|
+
try {
|
|
338
|
+
const callsRes = await fetch(`${baseUrl}/api/calls`, {
|
|
339
|
+
method: "GET",
|
|
340
|
+
headers: authHeaders,
|
|
341
|
+
dispatcher: insecureAgent,
|
|
342
|
+
signal: AbortSignal.timeout(timeoutMs)
|
|
343
|
+
});
|
|
344
|
+
if (callsRes.ok) {
|
|
345
|
+
const callsJson = (await callsRes.json().catch(() => ({}))) || {};
|
|
346
|
+
const callsList = Array.isArray(callsJson) ? callsJson : callsJson.data || callsJson.calls || [];
|
|
347
|
+
const count = callsList.length;
|
|
348
|
+
const callsOk = count >= expectedMetrics.minCalls;
|
|
349
|
+
report.checks.callRecords = {
|
|
350
|
+
passed: callsOk,
|
|
351
|
+
message: callsOk
|
|
352
|
+
? `${count} processed call record(s) verified (min required: ${expectedMetrics.minCalls})`
|
|
353
|
+
: `Insufficient call records: found ${count}, expected at least ${expectedMetrics.minCalls}`,
|
|
354
|
+
count,
|
|
355
|
+
expectedMin: expectedMetrics.minCalls
|
|
356
|
+
};
|
|
357
|
+
if (!callsOk) {
|
|
358
|
+
report.issues.push(`Call Records Check: found ${count}, expected at least ${expectedMetrics.minCalls}`);
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
else {
|
|
362
|
+
const orgCallsRes = await fetch(`${baseUrl}/api/org/${orgId}/calls`, {
|
|
363
|
+
method: "GET",
|
|
364
|
+
headers: authHeaders,
|
|
365
|
+
dispatcher: insecureAgent,
|
|
366
|
+
signal: AbortSignal.timeout(timeoutMs)
|
|
367
|
+
});
|
|
368
|
+
if (orgCallsRes.ok) {
|
|
369
|
+
const orgCallsJson = (await orgCallsRes.json().catch(() => ({}))) || {};
|
|
370
|
+
const callsList = Array.isArray(orgCallsJson) ? orgCallsJson : orgCallsJson.data || orgCallsJson.calls || [];
|
|
371
|
+
const count = callsList.length;
|
|
372
|
+
const callsOk = count >= expectedMetrics.minCalls;
|
|
373
|
+
report.checks.callRecords = {
|
|
374
|
+
passed: callsOk,
|
|
375
|
+
message: `${count} processed call record(s) verified via org`,
|
|
376
|
+
count,
|
|
377
|
+
expectedMin: expectedMetrics.minCalls
|
|
378
|
+
};
|
|
379
|
+
if (!callsOk) {
|
|
380
|
+
report.issues.push(`Call Records Check: found ${count}, expected at least ${expectedMetrics.minCalls}`);
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
else {
|
|
384
|
+
report.checks.callRecords = {
|
|
385
|
+
passed: false,
|
|
386
|
+
message: `Calls query returned HTTP ${callsRes.status}`
|
|
387
|
+
};
|
|
388
|
+
report.issues.push(`Calls Endpoint Error: HTTP ${callsRes.status}`);
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
}
|
|
392
|
+
catch (callsErr) {
|
|
393
|
+
report.checks.callRecords = { passed: false, message: callsErr.message };
|
|
394
|
+
report.issues.push(`Call Records Check Exception: ${callsErr.message}`);
|
|
395
|
+
}
|
|
396
|
+
// -------------------------------------------------------------
|
|
397
|
+
// Evaluation & Scoring
|
|
398
|
+
// -------------------------------------------------------------
|
|
399
|
+
const checkArray = [
|
|
400
|
+
report.checks.apiAuth.passed,
|
|
401
|
+
report.checks.license.passed,
|
|
402
|
+
report.checks.cubes.passed,
|
|
403
|
+
report.checks.phones.passed,
|
|
404
|
+
report.checks.callRecords.passed
|
|
405
|
+
];
|
|
406
|
+
const passedCount = checkArray.filter(Boolean).length;
|
|
407
|
+
report.score = `${passedCount}/5`;
|
|
408
|
+
report.readyForDemo = passedCount === 5;
|
|
409
|
+
telemetry.emit({
|
|
410
|
+
event: "appliance.demo.verified",
|
|
411
|
+
actor: "ct-lab-mcp",
|
|
412
|
+
status: report.readyForDemo ? "success" : "failure",
|
|
413
|
+
metadata: {
|
|
414
|
+
target: targetIp,
|
|
415
|
+
score: report.score,
|
|
416
|
+
passedCount,
|
|
417
|
+
readyForDemo: report.readyForDemo,
|
|
418
|
+
issuesCount: report.issues.length
|
|
419
|
+
}
|
|
420
|
+
});
|
|
421
|
+
return {
|
|
422
|
+
content: [
|
|
423
|
+
{
|
|
424
|
+
type: "text",
|
|
425
|
+
text: JSON.stringify(report, null, 2)
|
|
426
|
+
}
|
|
427
|
+
]
|
|
428
|
+
};
|
|
429
|
+
}
|
|
430
|
+
catch (err) {
|
|
431
|
+
logger.error(`Demo verification failed on ${targetIp}: ${err.message}`);
|
|
432
|
+
return createToolErrorResult(ProxmoxErrorCode.APPLIANCE_EXECUTION_FAILED, `Demo verification failed on ${targetIp}: ${err.message}`);
|
|
433
|
+
}
|
|
434
|
+
}
|
|
435
|
+
//# sourceMappingURL=verify-demo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verify-demo.js","sourceRoot":"","sources":["../../../src/tools/verify-demo.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@calltelemetry/ct-lab-mcp",
|
|
3
|
-
"version": "0.8.
|
|
3
|
+
"version": "0.8.51",
|
|
4
4
|
"description": "Expanded Model Context Protocol (MCP) server for Call Telemetry lab, fleet, and appliance management across Proxmox VE and VMware ESXi.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/src/index.js",
|