@calltelemetry/ct-lab-mcp 0.8.98 → 0.8.100
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/assets/stig/SHA256SUMS +18 -0
- package/assets/stig/files/ct-luks-firstboot.service +13 -0
- package/assets/stig/files/ct-luks-firstboot.sh +35 -0
- package/assets/stig/guest/keyhash.sh +4 -0
- package/assets/stig/guest/read-recovery.sh +2 -0
- package/assets/stig/guest/scan-disa.sh +17 -0
- package/assets/stig/guest/scan.sh +22 -0
- package/assets/stig/guest/shred-recovery.sh +2 -0
- package/assets/stig/guest/test-recovery.sh +3 -0
- package/assets/stig/guest/trim.sh +3 -0
- package/assets/stig/guest/verify-root.sh +9 -0
- package/assets/stig/guest/verify-user.sh +9 -0
- package/assets/stig/ks.cfg.pkrtpl +95 -0
- package/assets/stig/scripts/assess.sh +39 -0
- package/assets/stig/scripts/errata.sh +19 -0
- package/assets/stig/scripts/remediate.sh +127 -0
- package/assets/stig/scripts/seal.sh +46 -0
- package/assets/stig/tailoring.xml +16 -0
- package/assets/stig/template.pkr.hcl +252 -0
- package/dist/src/generated-version.d.ts +1 -1
- package/dist/src/generated-version.d.ts.map +1 -1
- package/dist/src/generated-version.js +1 -1
- package/dist/src/generated-version.js.map +1 -1
- package/dist/src/provenance.d.ts.map +1 -1
- package/dist/src/provenance.js +18 -1
- package/dist/src/provenance.js.map +1 -1
- package/dist/src/stig/live.d.ts +116 -0
- package/dist/src/stig/live.d.ts.map +1 -0
- package/dist/src/stig/live.js +339 -0
- package/dist/src/stig/live.js.map +1 -0
- package/dist/src/stig/model.d.ts +160 -0
- package/dist/src/stig/model.d.ts.map +1 -0
- package/dist/src/stig/model.js +384 -0
- package/dist/src/stig/model.js.map +1 -0
- package/dist/src/stig/ports.d.ts +149 -0
- package/dist/src/stig/ports.d.ts.map +1 -0
- package/dist/src/stig/ports.js +7 -0
- package/dist/src/stig/ports.js.map +1 -0
- package/dist/src/stig/receipt.d.ts +35 -0
- package/dist/src/stig/receipt.d.ts.map +1 -0
- package/dist/src/stig/receipt.js +112 -0
- package/dist/src/stig/receipt.js.map +1 -0
- package/dist/src/stig/runner.d.ts +109 -0
- package/dist/src/stig/runner.d.ts.map +1 -0
- package/dist/src/stig/runner.js +471 -0
- package/dist/src/stig/runner.js.map +1 -0
- package/dist/src/tools/appliance-claim-spec-schema.v1.json +1 -1
- package/dist/src/tools/appliance-claim-tools.d.ts +10 -4
- package/dist/src/tools/appliance-claim-tools.d.ts.map +1 -1
- package/dist/src/tools/appliance-claim-tools.js +10 -2
- package/dist/src/tools/appliance-claim-tools.js.map +1 -1
- package/dist/src/tools/claim-creation-projection.d.ts +1 -1
- package/dist/src/tools/claim-creation-projection.js +1 -1
- package/dist/src/tools/claim-custody.d.ts +7 -7
- package/dist/src/tools/claimed-import-qcow.d.ts +2 -2
- package/dist/src/tools/host-maintenance-shutdown.d.ts +4 -4
- package/dist/src/tools/host-migrate-vm.d.ts +4 -4
- package/dist/src/tools/index.d.ts.map +1 -1
- package/dist/src/tools/index.js +3 -0
- package/dist/src/tools/index.js.map +1 -1
- package/dist/src/tools/purge-slots.d.ts +1 -1
- package/dist/src/tools/sandbox-tools.d.ts +8 -8
- package/dist/src/tools/stig-tools.d.ts +47 -0
- package/dist/src/tools/stig-tools.d.ts.map +1 -0
- package/dist/src/tools/stig-tools.js +125 -0
- package/dist/src/tools/stig-tools.js.map +1 -0
- package/dist/src/tools/vm-action.d.ts +2 -2
- package/package.json +2 -1
|
@@ -65,8 +65,8 @@ export declare const SandboxCloneInputSchema: z.ZodEffects<z.ZodObject<{
|
|
|
65
65
|
vmid?: number | undefined;
|
|
66
66
|
diskGb?: number | undefined;
|
|
67
67
|
confirmAssetId?: string | undefined;
|
|
68
|
-
receiptFile?: string | undefined;
|
|
69
68
|
planDigest?: string | undefined;
|
|
69
|
+
receiptFile?: string | undefined;
|
|
70
70
|
sshKey?: string | undefined;
|
|
71
71
|
sshKeyFile?: string | undefined;
|
|
72
72
|
confirmName?: string | undefined;
|
|
@@ -84,8 +84,8 @@ export declare const SandboxCloneInputSchema: z.ZodEffects<z.ZodObject<{
|
|
|
84
84
|
apply?: boolean | undefined;
|
|
85
85
|
confirmAssetId?: string | undefined;
|
|
86
86
|
templateAssetId?: string | undefined;
|
|
87
|
-
receiptFile?: string | undefined;
|
|
88
87
|
planDigest?: string | undefined;
|
|
88
|
+
receiptFile?: string | undefined;
|
|
89
89
|
baselineSnapshot?: string | undefined;
|
|
90
90
|
sshKey?: string | undefined;
|
|
91
91
|
sshKeyFile?: string | undefined;
|
|
@@ -107,8 +107,8 @@ export declare const SandboxCloneInputSchema: z.ZodEffects<z.ZodObject<{
|
|
|
107
107
|
vmid?: number | undefined;
|
|
108
108
|
diskGb?: number | undefined;
|
|
109
109
|
confirmAssetId?: string | undefined;
|
|
110
|
-
receiptFile?: string | undefined;
|
|
111
110
|
planDigest?: string | undefined;
|
|
111
|
+
receiptFile?: string | undefined;
|
|
112
112
|
sshKey?: string | undefined;
|
|
113
113
|
sshKeyFile?: string | undefined;
|
|
114
114
|
confirmName?: string | undefined;
|
|
@@ -126,8 +126,8 @@ export declare const SandboxCloneInputSchema: z.ZodEffects<z.ZodObject<{
|
|
|
126
126
|
apply?: boolean | undefined;
|
|
127
127
|
confirmAssetId?: string | undefined;
|
|
128
128
|
templateAssetId?: string | undefined;
|
|
129
|
-
receiptFile?: string | undefined;
|
|
130
129
|
planDigest?: string | undefined;
|
|
130
|
+
receiptFile?: string | undefined;
|
|
131
131
|
baselineSnapshot?: string | undefined;
|
|
132
132
|
sshKey?: string | undefined;
|
|
133
133
|
sshKeyFile?: string | undefined;
|
|
@@ -170,8 +170,8 @@ export declare const SandboxResetInputSchema: z.ZodEffects<z.ZodObject<{
|
|
|
170
170
|
waitAgent: boolean;
|
|
171
171
|
vmid?: number | undefined;
|
|
172
172
|
confirmAssetId?: string | undefined;
|
|
173
|
-
receiptFile?: string | undefined;
|
|
174
173
|
planDigest?: string | undefined;
|
|
174
|
+
receiptFile?: string | undefined;
|
|
175
175
|
}, {
|
|
176
176
|
linearIssue: string;
|
|
177
177
|
assetId: string;
|
|
@@ -181,8 +181,8 @@ export declare const SandboxResetInputSchema: z.ZodEffects<z.ZodObject<{
|
|
|
181
181
|
snapshotName?: string | undefined;
|
|
182
182
|
apply?: boolean | undefined;
|
|
183
183
|
confirmAssetId?: string | undefined;
|
|
184
|
-
receiptFile?: string | undefined;
|
|
185
184
|
planDigest?: string | undefined;
|
|
185
|
+
receiptFile?: string | undefined;
|
|
186
186
|
waitAgent?: boolean | undefined;
|
|
187
187
|
}>, {
|
|
188
188
|
linearIssue: string;
|
|
@@ -194,8 +194,8 @@ export declare const SandboxResetInputSchema: z.ZodEffects<z.ZodObject<{
|
|
|
194
194
|
waitAgent: boolean;
|
|
195
195
|
vmid?: number | undefined;
|
|
196
196
|
confirmAssetId?: string | undefined;
|
|
197
|
-
receiptFile?: string | undefined;
|
|
198
197
|
planDigest?: string | undefined;
|
|
198
|
+
receiptFile?: string | undefined;
|
|
199
199
|
}, {
|
|
200
200
|
linearIssue: string;
|
|
201
201
|
assetId: string;
|
|
@@ -205,8 +205,8 @@ export declare const SandboxResetInputSchema: z.ZodEffects<z.ZodObject<{
|
|
|
205
205
|
snapshotName?: string | undefined;
|
|
206
206
|
apply?: boolean | undefined;
|
|
207
207
|
confirmAssetId?: string | undefined;
|
|
208
|
-
receiptFile?: string | undefined;
|
|
209
208
|
planDigest?: string | undefined;
|
|
209
|
+
receiptFile?: string | undefined;
|
|
210
210
|
waitAgent?: boolean | undefined;
|
|
211
211
|
}>;
|
|
212
212
|
export type SandboxResetInput = z.infer<typeof SandboxResetInputSchema>;
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { CallToolResult } from "../types/mcp.js";
|
|
3
|
+
import type { ToolContext } from "./list-hosts.js";
|
|
4
|
+
import { StigRunner } from "../stig/runner.js";
|
|
5
|
+
export declare const BuildStigTemplateInputShape: {
|
|
6
|
+
ssgDatastreamPath: z.ZodString;
|
|
7
|
+
name: z.ZodOptional<z.ZodString>;
|
|
8
|
+
dns: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
9
|
+
ntp: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
10
|
+
apply: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
11
|
+
planDigest: z.ZodOptional<z.ZodString>;
|
|
12
|
+
};
|
|
13
|
+
export declare const CreateStigClaimInputShape: {
|
|
14
|
+
cloneName: z.ZodString;
|
|
15
|
+
templateRef: z.ZodOptional<z.ZodString>;
|
|
16
|
+
ttlHours: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
17
|
+
dns: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
18
|
+
ntp: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
19
|
+
poolMaxPercent: z.ZodOptional<z.ZodNumber>;
|
|
20
|
+
apply: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
21
|
+
planDigest: z.ZodOptional<z.ZodString>;
|
|
22
|
+
};
|
|
23
|
+
export declare const ValidateStigClaimInputShape: {
|
|
24
|
+
cloneName: z.ZodString;
|
|
25
|
+
requireDisa: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
26
|
+
};
|
|
27
|
+
export declare const GetStigReceiptInputShape: {
|
|
28
|
+
claim: z.ZodString;
|
|
29
|
+
};
|
|
30
|
+
export declare const ReleaseStigTemplateInputShape: {
|
|
31
|
+
claim: z.ZodString;
|
|
32
|
+
confirmDestroy: z.ZodBoolean;
|
|
33
|
+
};
|
|
34
|
+
export interface StigToolDeps {
|
|
35
|
+
makeRunner: () => StigRunner;
|
|
36
|
+
}
|
|
37
|
+
export declare function handleBuildStigTemplate(args: unknown, deps?: StigToolDeps): Promise<CallToolResult>;
|
|
38
|
+
export declare function handleCreateStigClaim(args: unknown, deps?: StigToolDeps): Promise<CallToolResult>;
|
|
39
|
+
export declare function handleValidateStigClaim(args: unknown, deps?: StigToolDeps): Promise<CallToolResult>;
|
|
40
|
+
export declare function handleGetStigReceipt(args: unknown, deps?: StigToolDeps): Promise<CallToolResult>;
|
|
41
|
+
export declare function handleReleaseStigTemplate(args: unknown, deps?: StigToolDeps): Promise<CallToolResult>;
|
|
42
|
+
export declare const STIG_TOOL_NAMES: readonly ["build_stig_template", "create_stig_claim", "validate_stig_claim", "get_stig_receipt", "release_stig_template"];
|
|
43
|
+
/** Registers the five tools on a server whose `.tool()` is already the guarded wrapper. */
|
|
44
|
+
export declare function registerStigTools(server: {
|
|
45
|
+
tool: (...a: any[]) => unknown;
|
|
46
|
+
}, _context: ToolContext, deps?: StigToolDeps): boolean;
|
|
47
|
+
//# sourceMappingURL=stig-tools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stig-tools.d.ts","sourceRoot":"","sources":["../../../src/tools/stig-tools.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,cAAc,EAA2C,MAAM,iBAAiB,CAAC;AAC1F,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAS/C,eAAO,MAAM,2BAA2B;;;;;;;CAOvC,CAAC;AACF,eAAO,MAAM,yBAAyB;;;;;;;;;CAQrC,CAAC;AACF,eAAO,MAAM,2BAA2B;;;CAGvC,CAAC;AACF,eAAO,MAAM,wBAAwB;;CAA0G,CAAC;AAChJ,eAAO,MAAM,6BAA6B;;;CAGzC,CAAC;AAEF,MAAM,WAAW,YAAY;IAAG,UAAU,EAAE,MAAM,UAAU,CAAA;CAAE;AAY9D,wBAAsB,uBAAuB,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,GAAE,YAA4B,GAAG,OAAO,CAAC,cAAc,CAAC,CAQxH;AACD,wBAAsB,qBAAqB,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,GAAE,YAA4B,GAAG,OAAO,CAAC,cAAc,CAAC,CAItH;AACD,wBAAsB,uBAAuB,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,GAAE,YAA4B,GAAG,OAAO,CAAC,cAAc,CAAC,CAIxH;AACD,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,GAAE,YAA4B,GAAG,OAAO,CAAC,cAAc,CAAC,CAIrH;AACD,wBAAsB,yBAAyB,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,GAAE,YAA4B,GAAG,OAAO,CAAC,cAAc,CAAC,CAI1H;AAED,eAAO,MAAM,eAAe,2HAA4H,CAAC;AAEzJ,2FAA2F;AAC3F,wBAAgB,iBAAiB,CAAC,MAAM,EAAE;IAAE,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,KAAK,OAAO,CAAA;CAAE,EAAE,QAAQ,EAAE,WAAW,EAAE,IAAI,GAAE,YAA4B,GAAG,OAAO,CAOhJ"}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* RHEL 8.10 STIG tools (docs/designs/stig-tools.md). Always registered; the safety guards are not optional.
|
|
3
|
+
*
|
|
4
|
+
* build_stig_template plan | apply claim-first Packer build, scan gate, template verify, long-lived claim
|
|
5
|
+
* create_stig_claim plan | apply claim-first full clone, fresh TPM, first-boot re-key, escrow, verify, fstrim
|
|
6
|
+
* validate_stig_claim oscap scan on a clone, fail=0 gate, receipt summary on the claim
|
|
7
|
+
* get_stig_receipt the annotated receipt summary and what status.stig will carry
|
|
8
|
+
* release_stig_template explicit template destroy, then claim deletion
|
|
9
|
+
*
|
|
10
|
+
* The shell recipe in ct-meta (rhel8-stig-template) remains the documented default until live parity passes.
|
|
11
|
+
*/
|
|
12
|
+
import { createHash } from "node:crypto";
|
|
13
|
+
import { readFileSync } from "node:fs";
|
|
14
|
+
import { z } from "zod";
|
|
15
|
+
import { ProxmoxErrorCode, createToolErrorResult } from "../types/mcp.js";
|
|
16
|
+
import { StigRunner } from "../stig/runner.js";
|
|
17
|
+
import { liveDeps } from "../stig/live.js";
|
|
18
|
+
import { redact } from "../stig/model.js";
|
|
19
|
+
const hex64 = z.string().regex(/^[a-f0-9]{64}$/i);
|
|
20
|
+
const dnsList = z.array(z.string().ip({ version: "v4" })).min(1).max(4);
|
|
21
|
+
const ntpList = z.array(z.string().min(1).max(253)).max(4);
|
|
22
|
+
const cloneName = z.string().regex(/^[a-z0-9]([a-z0-9-]{0,40}[a-z0-9])?$/, "lowercase DNS label");
|
|
23
|
+
export const BuildStigTemplateInputShape = {
|
|
24
|
+
ssgDatastreamPath: z.string().min(1).describe("Path to the pinned scap-security-guide 0.1.82 ssg-rhel8-ds.xml on this host; its sha256 must equal the pin."),
|
|
25
|
+
name: z.string().regex(/^rhel810-stig-\d{8}-\d{4}$/).optional().describe("Template name (default rhel810-stig-<YYYYMMDD>-<vmid>)."),
|
|
26
|
+
dns: dnsList.optional().describe("DNS servers baked into the template's organization settings."),
|
|
27
|
+
ntp: ntpList.optional().describe("NTP servers baked into the template."),
|
|
28
|
+
apply: z.boolean().optional().default(false).describe("Omit for a plan. True runs the build (60-90 minutes) and needs planDigest."),
|
|
29
|
+
planDigest: hex64.optional().describe("planDigest from the plan; required with apply=true."),
|
|
30
|
+
};
|
|
31
|
+
export const CreateStigClaimInputShape = {
|
|
32
|
+
cloneName: cloneName.describe("Clone VM name; the claim is clone-<cloneName>, the escrow key LAB_RHEL8_RECOVERY_<CLONENAME>."),
|
|
33
|
+
templateRef: z.string().regex(/^rhel810-stig-\d{8}-\d{4}$/).optional().describe("Template to clone (default: the newest)."),
|
|
34
|
+
ttlHours: z.number().int().min(1).max(8760).optional().default(48),
|
|
35
|
+
dns: dnsList.optional(), ntp: ntpList.optional(),
|
|
36
|
+
poolMaxPercent: z.number().int().min(10).max(70).optional().describe("Refuse to start above this thin-pool use. Default and hard cap 70; it can only be tightened."),
|
|
37
|
+
apply: z.boolean().optional().default(false),
|
|
38
|
+
planDigest: hex64.optional().describe("planDigest from the plan; required with apply=true."),
|
|
39
|
+
};
|
|
40
|
+
export const ValidateStigClaimInputShape = {
|
|
41
|
+
cloneName,
|
|
42
|
+
requireDisa: z.boolean().optional().default(false).describe("Fail when the clone's template predates the DISA V2R8 dual-scan recipe (no benchmark baked in). Both scans must be fail=0 when present."),
|
|
43
|
+
};
|
|
44
|
+
export const GetStigReceiptInputShape = { claim: z.string().min(1).describe("ApplianceClaim name, e.g. clone-<cloneName> or tpl-<template>.") };
|
|
45
|
+
export const ReleaseStigTemplateInputShape = {
|
|
46
|
+
claim: z.string().min(1),
|
|
47
|
+
confirmDestroy: z.boolean().describe("Must be true: templates are never reaped by the operator, so release destroys the template first, then deletes the claim."),
|
|
48
|
+
};
|
|
49
|
+
const defaultDeps = () => ({ makeRunner: () => new StigRunner(liveDeps()) });
|
|
50
|
+
function ok(payload) {
|
|
51
|
+
return { content: [{ type: "text", text: redact(JSON.stringify({ success: true, ...payload }, null, 2)) }] };
|
|
52
|
+
}
|
|
53
|
+
function fail(operation, err) {
|
|
54
|
+
const message = redact(String(err?.message ?? err));
|
|
55
|
+
const validation = /plan digest|must|cap|exceeds|refus|not a template|already exists|not found|re-encrypting|unreadable|datastream|packer|confirm|pinned|missing/i.test(message);
|
|
56
|
+
return createToolErrorResult(validation ? ProxmoxErrorCode.VALIDATION_ERROR : ProxmoxErrorCode.UPSTREAM_API_ERROR, `${operation}: ${message}`, { operation });
|
|
57
|
+
}
|
|
58
|
+
export async function handleBuildStigTemplate(args, deps = defaultDeps()) {
|
|
59
|
+
const p = z.object(BuildStigTemplateInputShape).strict().safeParse(args);
|
|
60
|
+
if (!p.success)
|
|
61
|
+
return createToolErrorResult(ProxmoxErrorCode.VALIDATION_ERROR, p.error.issues.map((i) => `${i.path.join(".")}: ${i.message}`).join("; "));
|
|
62
|
+
try {
|
|
63
|
+
const sha = createHash("sha256").update(readFileSync(p.data.ssgDatastreamPath)).digest("hex");
|
|
64
|
+
const result = await deps.makeRunner().build({ name: p.data.name, ssgDatastream: p.data.ssgDatastreamPath, ssgDatastreamSha256: sha, apply: p.data.apply, planDigest: p.data.planDigest, dns: p.data.dns, ntp: p.data.ntp });
|
|
65
|
+
return ok(result);
|
|
66
|
+
}
|
|
67
|
+
catch (e) {
|
|
68
|
+
return fail("build_stig_template", e);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
export async function handleCreateStigClaim(args, deps = defaultDeps()) {
|
|
72
|
+
const p = z.object(CreateStigClaimInputShape).strict().safeParse(args);
|
|
73
|
+
if (!p.success)
|
|
74
|
+
return createToolErrorResult(ProxmoxErrorCode.VALIDATION_ERROR, p.error.issues.map((i) => `${i.path.join(".")}: ${i.message}`).join("; "));
|
|
75
|
+
try {
|
|
76
|
+
return ok(await deps.makeRunner().createClone(p.data));
|
|
77
|
+
}
|
|
78
|
+
catch (e) {
|
|
79
|
+
return fail("create_stig_claim", e);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
export async function handleValidateStigClaim(args, deps = defaultDeps()) {
|
|
83
|
+
const p = z.object(ValidateStigClaimInputShape).strict().safeParse(args);
|
|
84
|
+
if (!p.success)
|
|
85
|
+
return createToolErrorResult(ProxmoxErrorCode.VALIDATION_ERROR, p.error.issues.map((i) => `${i.path.join(".")}: ${i.message}`).join("; "));
|
|
86
|
+
try {
|
|
87
|
+
return ok(await deps.makeRunner().validate(p.data));
|
|
88
|
+
}
|
|
89
|
+
catch (e) {
|
|
90
|
+
return fail("validate_stig_claim", e);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
export async function handleGetStigReceipt(args, deps = defaultDeps()) {
|
|
94
|
+
const p = z.object(GetStigReceiptInputShape).strict().safeParse(args);
|
|
95
|
+
if (!p.success)
|
|
96
|
+
return createToolErrorResult(ProxmoxErrorCode.VALIDATION_ERROR, p.error.issues.map((i) => `${i.path.join(".")}: ${i.message}`).join("; "));
|
|
97
|
+
try {
|
|
98
|
+
return ok(await deps.makeRunner().getReceipt(p.data));
|
|
99
|
+
}
|
|
100
|
+
catch (e) {
|
|
101
|
+
return fail("get_stig_receipt", e);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
export async function handleReleaseStigTemplate(args, deps = defaultDeps()) {
|
|
105
|
+
const p = z.object(ReleaseStigTemplateInputShape).strict().safeParse(args);
|
|
106
|
+
if (!p.success)
|
|
107
|
+
return createToolErrorResult(ProxmoxErrorCode.VALIDATION_ERROR, p.error.issues.map((i) => `${i.path.join(".")}: ${i.message}`).join("; "));
|
|
108
|
+
try {
|
|
109
|
+
return ok(await deps.makeRunner().releaseTemplate(p.data));
|
|
110
|
+
}
|
|
111
|
+
catch (e) {
|
|
112
|
+
return fail("release_stig_template", e);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
export const STIG_TOOL_NAMES = ["build_stig_template", "create_stig_claim", "validate_stig_claim", "get_stig_receipt", "release_stig_template"];
|
|
116
|
+
/** Registers the five tools on a server whose `.tool()` is already the guarded wrapper. */
|
|
117
|
+
export function registerStigTools(server, _context, deps = defaultDeps()) {
|
|
118
|
+
server.tool("build_stig_template", "Plan or apply a RHEL 8.10 DISA STIG Proxmox template build on proxmox-minis-lab. Claim first (6h bare claim, Ready before Packer), pinned SSG 0.1.82 / STIG V2R8 / Packer 1.16.0, scan must be fail=0, template verified, then the claim renews to the TTL cap. Apply needs the plan's planDigest.", BuildStigTemplateInputShape, async (a) => handleBuildStigTemplate(a, deps));
|
|
119
|
+
server.tool("create_stig_claim", "Plan or apply a claim-backed clone of the newest STIG template: thin-pool guard (<=70%), one re-encrypting clone at a time, fresh tpmstate0, first-boot LUKS re-key bound to the clone's TPM2, recovery passphrase escrowed to Doppler by name, verify, fstrim. Apply needs the plan's planDigest.", CreateStigClaimInputShape, async (a) => handleCreateStigClaim(a, deps));
|
|
120
|
+
server.tool("validate_stig_claim", "Run the pinned, tailored oscap STIG scan on a STIG clone, gate on fail=0, record the LUKS volume-key digest, and annotate the claim with the secret-free receipt summary.", ValidateStigClaimInputShape, async (a) => handleValidateStigClaim(a, deps));
|
|
121
|
+
server.tool("get_stig_receipt", "Read a STIG claim's descriptor and receipt summary (counts, fail=0 gate, versions, artifact sha256, key digest) and what status.stig will carry when the operator projection is enabled.", GetStigReceiptInputShape, async (a) => handleGetStigReceipt(a, deps));
|
|
122
|
+
server.tool("release_stig_template", "Release a STIG template: verify it is the claimed template, destroy it explicitly (the operator never reaps templates), then delete its claim. Requires confirmDestroy=true.", ReleaseStigTemplateInputShape, async (a) => handleReleaseStigTemplate(a, deps));
|
|
123
|
+
return true;
|
|
124
|
+
}
|
|
125
|
+
//# sourceMappingURL=stig-tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stig-tools.js","sourceRoot":"","sources":["../../../src/tools/stig-tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAkB,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAE1F,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE1C,MAAM,KAAK,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;AAClD,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACxE,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAC3D,MAAM,SAAS,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,sCAAsC,EAAE,qBAAqB,CAAC,CAAC;AAElG,MAAM,CAAC,MAAM,2BAA2B,GAAG;IACzC,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,6GAA6G,CAAC;IAC5J,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yDAAyD,CAAC;IACnI,GAAG,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8DAA8D,CAAC;IAChG,GAAG,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sCAAsC,CAAC;IACxE,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,4EAA4E,CAAC;IACnI,UAAU,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qDAAqD,CAAC;CAC7F,CAAC;AACF,MAAM,CAAC,MAAM,yBAAyB,GAAG;IACvC,SAAS,EAAE,SAAS,CAAC,QAAQ,CAAC,+FAA+F,CAAC;IAC9H,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0CAA0C,CAAC;IAC3H,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;IAClE,GAAG,EAAE,OAAO,CAAC,QAAQ,EAAE,EAAE,GAAG,EAAE,OAAO,CAAC,QAAQ,EAAE;IAChD,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8FAA8F,CAAC;IACpK,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;IAC5C,UAAU,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qDAAqD,CAAC;CAC7F,CAAC;AACF,MAAM,CAAC,MAAM,2BAA2B,GAAG;IACzC,SAAS;IACT,WAAW,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,yIAAyI,CAAC;CACvM,CAAC;AACF,MAAM,CAAC,MAAM,wBAAwB,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,gEAAgE,CAAC,EAAE,CAAC;AAChJ,MAAM,CAAC,MAAM,6BAA6B,GAAG;IAC3C,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACxB,cAAc,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,2HAA2H,CAAC;CAClK,CAAC;AAGF,MAAM,WAAW,GAAG,GAAiB,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC,IAAI,UAAU,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;AAE3F,SAAS,EAAE,CAAC,OAAgB;IAC1B,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,GAAI,OAAkB,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;AAC3H,CAAC;AACD,SAAS,IAAI,CAAC,SAAiB,EAAE,GAAQ;IACvC,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,OAAO,IAAI,GAAG,CAAC,CAAC,CAAC;IACpD,MAAM,UAAU,GAAG,+IAA+I,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACjL,OAAO,qBAAqB,CAAC,UAAU,CAAC,CAAC,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,CAAC,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,GAAG,SAAS,KAAK,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;AAChK,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,IAAa,EAAE,OAAqB,WAAW,EAAE;IAC7F,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,2BAA2B,CAAC,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IACzE,IAAI,CAAC,CAAC,CAAC,OAAO;QAAE,OAAO,qBAAqB,CAAC,gBAAgB,CAAC,gBAAgB,EAAE,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAC3J,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC9F,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,aAAa,EAAE,CAAC,CAAC,IAAI,CAAC,iBAAiB,EAAE,mBAAmB,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;QAC7N,OAAO,EAAE,CAAC,MAAM,CAAC,CAAC;IACpB,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QAAC,OAAO,IAAI,CAAC,qBAAqB,EAAE,CAAC,CAAC,CAAC;IAAC,CAAC;AACxD,CAAC;AACD,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,IAAa,EAAE,OAAqB,WAAW,EAAE;IAC3F,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,yBAAyB,CAAC,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IACvE,IAAI,CAAC,CAAC,CAAC,OAAO;QAAE,OAAO,qBAAqB,CAAC,gBAAgB,CAAC,gBAAgB,EAAE,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAC3J,IAAI,CAAC;QAAC,OAAO,EAAE,CAAC,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAAC,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QAAC,OAAO,IAAI,CAAC,mBAAmB,EAAE,CAAC,CAAC,CAAC;IAAC,CAAC;AACpH,CAAC;AACD,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,IAAa,EAAE,OAAqB,WAAW,EAAE;IAC7F,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,2BAA2B,CAAC,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IACzE,IAAI,CAAC,CAAC,CAAC,OAAO;QAAE,OAAO,qBAAqB,CAAC,gBAAgB,CAAC,gBAAgB,EAAE,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAC3J,IAAI,CAAC;QAAC,OAAO,EAAE,CAAC,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAAC,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QAAC,OAAO,IAAI,CAAC,qBAAqB,EAAE,CAAC,CAAC,CAAC;IAAC,CAAC;AACnH,CAAC;AACD,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,IAAa,EAAE,OAAqB,WAAW,EAAE;IAC1F,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,wBAAwB,CAAC,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IACtE,IAAI,CAAC,CAAC,CAAC,OAAO;QAAE,OAAO,qBAAqB,CAAC,gBAAgB,CAAC,gBAAgB,EAAE,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAC3J,IAAI,CAAC;QAAC,OAAO,EAAE,CAAC,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAAC,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QAAC,OAAO,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC;IAAC,CAAC;AAClH,CAAC;AACD,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAAC,IAAa,EAAE,OAAqB,WAAW,EAAE;IAC/F,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,6BAA6B,CAAC,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAC3E,IAAI,CAAC,CAAC,CAAC,OAAO;QAAE,OAAO,qBAAqB,CAAC,gBAAgB,CAAC,gBAAgB,EAAE,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAC3J,IAAI,CAAC;QAAC,OAAO,EAAE,CAAC,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAAC,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QAAC,OAAO,IAAI,CAAC,uBAAuB,EAAE,CAAC,CAAC,CAAC;IAAC,CAAC;AAC5H,CAAC;AAED,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,qBAAqB,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,uBAAuB,CAAU,CAAC;AAEzJ,2FAA2F;AAC3F,MAAM,UAAU,iBAAiB,CAAC,MAA0C,EAAE,QAAqB,EAAE,OAAqB,WAAW,EAAE;IACrI,MAAM,CAAC,IAAI,CAAC,qBAAqB,EAAE,oSAAoS,EAAE,2BAA2B,EAAE,KAAK,EAAE,CAAU,EAAE,EAAE,CAAC,uBAAuB,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;IAC9Z,MAAM,CAAC,IAAI,CAAC,mBAAmB,EAAE,oSAAoS,EAAE,yBAAyB,EAAE,KAAK,EAAE,CAAU,EAAE,EAAE,CAAC,qBAAqB,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;IACxZ,MAAM,CAAC,IAAI,CAAC,qBAAqB,EAAE,2KAA2K,EAAE,2BAA2B,EAAE,KAAK,EAAE,CAAU,EAAE,EAAE,CAAC,uBAAuB,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;IACrS,MAAM,CAAC,IAAI,CAAC,kBAAkB,EAAE,0LAA0L,EAAE,wBAAwB,EAAE,KAAK,EAAE,CAAU,EAAE,EAAE,CAAC,oBAAoB,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;IAC3S,MAAM,CAAC,IAAI,CAAC,uBAAuB,EAAE,8KAA8K,EAAE,6BAA6B,EAAE,KAAK,EAAE,CAAU,EAAE,EAAE,CAAC,yBAAyB,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;IAC9S,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -174,9 +174,9 @@ export declare const VmActionInputSchema: z.ZodEffects<z.ZodObject<{
|
|
|
174
174
|
confirmAssetId?: string | undefined;
|
|
175
175
|
confirmSmbiosUuid?: string | undefined;
|
|
176
176
|
vmIdOrName?: string | number | undefined;
|
|
177
|
+
force?: boolean | undefined;
|
|
177
178
|
artifactReceipt?: string | undefined;
|
|
178
179
|
receiptFile?: string | undefined;
|
|
179
|
-
force?: boolean | undefined;
|
|
180
180
|
targetHost?: string | undefined;
|
|
181
181
|
confirmVmid?: string | number | undefined;
|
|
182
182
|
smbiosUuid?: string | undefined;
|
|
@@ -244,9 +244,9 @@ export declare const VmActionInputSchema: z.ZodEffects<z.ZodObject<{
|
|
|
244
244
|
confirmAssetId?: string | undefined;
|
|
245
245
|
confirmSmbiosUuid?: string | undefined;
|
|
246
246
|
vmIdOrName?: string | number | undefined;
|
|
247
|
+
force?: boolean | undefined;
|
|
247
248
|
artifactReceipt?: string | undefined;
|
|
248
249
|
receiptFile?: string | undefined;
|
|
249
|
-
force?: boolean | undefined;
|
|
250
250
|
targetHost?: string | undefined;
|
|
251
251
|
confirmVmid?: string | number | undefined;
|
|
252
252
|
smbiosUuid?: string | undefined;
|
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.100",
|
|
4
4
|
"description": "Expanded Model Context Protocol (MCP) server for Call Telemetry lab, fleet, and appliance management across Proxmox VE (ESXi is retired).",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/src/index.js",
|
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
"files": [
|
|
12
12
|
"dist/src",
|
|
13
13
|
"dist/bin/ct-lab-mcp.js",
|
|
14
|
+
"assets/stig",
|
|
14
15
|
"README.md",
|
|
15
16
|
"LICENSE"
|
|
16
17
|
],
|