@tmhs/docker-mcp 0.10.0 → 0.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +70 -2
- package/dist/index.js +57 -1
- package/dist/index.js.map +1 -1
- package/dist/tools/composeVersion.d.ts +3 -0
- package/dist/tools/composeVersion.d.ts.map +1 -0
- package/dist/tools/composeVersion.js +13 -0
- package/dist/tools/composeVersion.js.map +1 -0
- package/dist/tools/composeWatch.d.ts +3 -0
- package/dist/tools/composeWatch.d.ts.map +1 -0
- package/dist/tools/composeWatch.js +27 -0
- package/dist/tools/composeWatch.js.map +1 -0
- package/dist/tools/configCreate.d.ts +3 -0
- package/dist/tools/configCreate.d.ts.map +1 -0
- package/dist/tools/configCreate.js +46 -0
- package/dist/tools/configCreate.js.map +1 -0
- package/dist/tools/configInspect.d.ts +3 -0
- package/dist/tools/configInspect.d.ts.map +1 -0
- package/dist/tools/configInspect.js +22 -0
- package/dist/tools/configInspect.js.map +1 -0
- package/dist/tools/configLs.d.ts +3 -0
- package/dist/tools/configLs.d.ts.map +1 -0
- package/dist/tools/configLs.js +22 -0
- package/dist/tools/configLs.js.map +1 -0
- package/dist/tools/configRm.d.ts +3 -0
- package/dist/tools/configRm.d.ts.map +1 -0
- package/dist/tools/configRm.js +17 -0
- package/dist/tools/configRm.js.map +1 -0
- package/dist/tools/pluginEnable.d.ts +3 -0
- package/dist/tools/pluginEnable.d.ts.map +1 -0
- package/dist/tools/pluginEnable.js +17 -0
- package/dist/tools/pluginEnable.js.map +1 -0
- package/dist/tools/pluginInstall.d.ts +3 -0
- package/dist/tools/pluginInstall.d.ts.map +1 -0
- package/dist/tools/pluginInstall.js +25 -0
- package/dist/tools/pluginInstall.js.map +1 -0
- package/dist/tools/pluginLs.d.ts +3 -0
- package/dist/tools/pluginLs.d.ts.map +1 -0
- package/dist/tools/pluginLs.js +13 -0
- package/dist/tools/pluginLs.js.map +1 -0
- package/dist/tools/pluginRm.d.ts +3 -0
- package/dist/tools/pluginRm.d.ts.map +1 -0
- package/dist/tools/pluginRm.js +22 -0
- package/dist/tools/pluginRm.js.map +1 -0
- package/dist/tools/scoutCves.d.ts +3 -0
- package/dist/tools/scoutCves.d.ts.map +1 -0
- package/dist/tools/scoutCves.js +24 -0
- package/dist/tools/scoutCves.js.map +1 -0
- package/dist/tools/scoutQuickview.d.ts +3 -0
- package/dist/tools/scoutQuickview.d.ts.map +1 -0
- package/dist/tools/scoutQuickview.js +17 -0
- package/dist/tools/scoutQuickview.js.map +1 -0
- package/dist/tools/scoutRecommendations.d.ts +3 -0
- package/dist/tools/scoutRecommendations.d.ts.map +1 -0
- package/dist/tools/scoutRecommendations.js +17 -0
- package/dist/tools/scoutRecommendations.js.map +1 -0
- package/dist/tools/secretCreate.d.ts +3 -0
- package/dist/tools/secretCreate.d.ts.map +1 -0
- package/dist/tools/secretCreate.js +46 -0
- package/dist/tools/secretCreate.js.map +1 -0
- package/dist/tools/secretInspect.d.ts +3 -0
- package/dist/tools/secretInspect.d.ts.map +1 -0
- package/dist/tools/secretInspect.js +22 -0
- package/dist/tools/secretInspect.js.map +1 -0
- package/dist/tools/secretLs.d.ts +3 -0
- package/dist/tools/secretLs.d.ts.map +1 -0
- package/dist/tools/secretLs.js +22 -0
- package/dist/tools/secretLs.js.map +1 -0
- package/dist/tools/secretRm.d.ts +3 -0
- package/dist/tools/secretRm.d.ts.map +1 -0
- package/dist/tools/secretRm.js +17 -0
- package/dist/tools/secretRm.js.map +1 -0
- package/dist/tools/stackConfig.d.ts +3 -0
- package/dist/tools/stackConfig.d.ts.map +1 -0
- package/dist/tools/stackConfig.js +17 -0
- package/dist/tools/stackConfig.js.map +1 -0
- package/dist/tools/stackDeploy.d.ts +3 -0
- package/dist/tools/stackDeploy.d.ts.map +1 -0
- package/dist/tools/stackDeploy.js +29 -0
- package/dist/tools/stackDeploy.js.map +1 -0
- package/dist/tools/stackLs.d.ts +3 -0
- package/dist/tools/stackLs.d.ts.map +1 -0
- package/dist/tools/stackLs.js +17 -0
- package/dist/tools/stackLs.js.map +1 -0
- package/dist/tools/stackPs.d.ts +3 -0
- package/dist/tools/stackPs.d.ts.map +1 -0
- package/dist/tools/stackPs.js +24 -0
- package/dist/tools/stackPs.js.map +1 -0
- package/dist/tools/stackRm.d.ts +3 -0
- package/dist/tools/stackRm.d.ts.map +1 -0
- package/dist/tools/stackRm.js +17 -0
- package/dist/tools/stackRm.js.map +1 -0
- package/dist/tools/stackServices.d.ts +3 -0
- package/dist/tools/stackServices.d.ts.map +1 -0
- package/dist/tools/stackServices.js +24 -0
- package/dist/tools/stackServices.js.map +1 -0
- package/dist/tools/swarmLeave.js +1 -1
- package/dist/tools/swarmLeave.js.map +1 -1
- package/dist/tools/trustInspect.d.ts +3 -0
- package/dist/tools/trustInspect.d.ts.map +1 -0
- package/dist/tools/trustInspect.js +22 -0
- package/dist/tools/trustInspect.js.map +1 -0
- package/dist/tools/trustKey.d.ts +3 -0
- package/dist/tools/trustKey.d.ts.map +1 -0
- package/dist/tools/trustKey.js +30 -0
- package/dist/tools/trustKey.js.map +1 -0
- package/dist/tools/trustRevoke.d.ts +3 -0
- package/dist/tools/trustRevoke.d.ts.map +1 -0
- package/dist/tools/trustRevoke.js +22 -0
- package/dist/tools/trustRevoke.js.map +1 -0
- package/dist/tools/trustSign.d.ts +3 -0
- package/dist/tools/trustSign.d.ts.map +1 -0
- package/dist/tools/trustSign.js +22 -0
- package/dist/tools/trustSign.js.map +1 -0
- package/dist/tools/version.d.ts +3 -0
- package/dist/tools/version.d.ts.map +1 -0
- package/dist/tools/version.js +14 -0
- package/dist/tools/version.js.map +1 -0
- package/dist/utils/docker-api.js +1 -1
- package/dist/utils/docker-api.js.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { execDocker, errorResponse } from "../utils/docker-api.js";
|
|
3
|
+
const inputSchema = {
|
|
4
|
+
image: z.string().min(1).describe("Image reference to scan (e.g. 'nginx:latest')"),
|
|
5
|
+
onlyFixed: z.boolean().optional().default(false).describe("Only show CVEs with available fixes"),
|
|
6
|
+
severities: z.string().optional().describe("Comma-separated severities to filter (e.g. 'critical,high')"),
|
|
7
|
+
};
|
|
8
|
+
export function register(server) {
|
|
9
|
+
server.tool("docker_scoutCves", "List CVEs found in an image using Docker Scout (requires Docker Desktop)", inputSchema, async (args) => {
|
|
10
|
+
try {
|
|
11
|
+
const cmdArgs = ["scout", "cves", args.image];
|
|
12
|
+
if (args.onlyFixed)
|
|
13
|
+
cmdArgs.push("--only-fixed");
|
|
14
|
+
if (args.severities)
|
|
15
|
+
cmdArgs.push("--only-severity", args.severities);
|
|
16
|
+
const output = await execDocker(cmdArgs, { timeout: 120_000 });
|
|
17
|
+
return { content: [{ type: "text", text: output.trim() || "No CVEs found" }] };
|
|
18
|
+
}
|
|
19
|
+
catch (error) {
|
|
20
|
+
return errorResponse(error);
|
|
21
|
+
}
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=scoutCves.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scoutCves.js","sourceRoot":"","sources":["../../src/tools/scoutCves.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAEnE,MAAM,WAAW,GAAG;IAClB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,+CAA+C,CAAC;IAClF,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,qCAAqC,CAAC;IAChG,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6DAA6D,CAAC;CAC1G,CAAC;AAEF,MAAM,UAAU,QAAQ,CAAC,MAAiB;IACxC,MAAM,CAAC,IAAI,CACT,kBAAkB,EAClB,0EAA0E,EAC1E,WAAW,EACX,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;YAC9C,IAAI,IAAI,CAAC,SAAS;gBAAE,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YACjD,IAAI,IAAI,CAAC,UAAU;gBAAE,OAAO,CAAC,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;YAEtE,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;YAC/D,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,IAAI,eAAe,EAAE,CAAC,EAAE,CAAC;QAC1F,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scoutQuickview.d.ts","sourceRoot":"","sources":["../../src/tools/scoutQuickview.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAOzE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAchD"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { execDocker, errorResponse } from "../utils/docker-api.js";
|
|
3
|
+
const inputSchema = {
|
|
4
|
+
image: z.string().min(1).describe("Image reference to scan (e.g. 'nginx:latest')"),
|
|
5
|
+
};
|
|
6
|
+
export function register(server) {
|
|
7
|
+
server.tool("docker_scoutQuickview", "Quick overview of image vulnerabilities using Docker Scout (requires Docker Desktop)", inputSchema, async (args) => {
|
|
8
|
+
try {
|
|
9
|
+
const output = await execDocker(["scout", "quickview", args.image], { timeout: 120_000 });
|
|
10
|
+
return { content: [{ type: "text", text: output.trim() }] };
|
|
11
|
+
}
|
|
12
|
+
catch (error) {
|
|
13
|
+
return errorResponse(error);
|
|
14
|
+
}
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=scoutQuickview.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scoutQuickview.js","sourceRoot":"","sources":["../../src/tools/scoutQuickview.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAEnE,MAAM,WAAW,GAAG;IAClB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,+CAA+C,CAAC;CACnF,CAAC;AAEF,MAAM,UAAU,QAAQ,CAAC,MAAiB;IACxC,MAAM,CAAC,IAAI,CACT,uBAAuB,EACvB,sFAAsF,EACtF,WAAW,EACX,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,CAAC,OAAO,EAAE,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;YAC1F,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC;QACvE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scoutRecommendations.d.ts","sourceRoot":"","sources":["../../src/tools/scoutRecommendations.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAOzE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAchD"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { execDocker, errorResponse } from "../utils/docker-api.js";
|
|
3
|
+
const inputSchema = {
|
|
4
|
+
image: z.string().min(1).describe("Image reference to get recommendations for (e.g. 'nginx:latest')"),
|
|
5
|
+
};
|
|
6
|
+
export function register(server) {
|
|
7
|
+
server.tool("docker_scoutRecommendations", "Get base image update recommendations using Docker Scout (requires Docker Desktop)", inputSchema, async (args) => {
|
|
8
|
+
try {
|
|
9
|
+
const output = await execDocker(["scout", "recommendations", args.image], { timeout: 120_000 });
|
|
10
|
+
return { content: [{ type: "text", text: output.trim() || "No recommendations available" }] };
|
|
11
|
+
}
|
|
12
|
+
catch (error) {
|
|
13
|
+
return errorResponse(error);
|
|
14
|
+
}
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=scoutRecommendations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scoutRecommendations.js","sourceRoot":"","sources":["../../src/tools/scoutRecommendations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAEnE,MAAM,WAAW,GAAG;IAClB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,kEAAkE,CAAC;CACtG,CAAC;AAEF,MAAM,UAAU,QAAQ,CAAC,MAAiB;IACxC,MAAM,CAAC,IAAI,CACT,6BAA6B,EAC7B,oFAAoF,EACpF,WAAW,EACX,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,CAAC,OAAO,EAAE,iBAAiB,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;YAChG,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,IAAI,8BAA8B,EAAE,CAAC,EAAE,CAAC;QACzG,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"secretCreate.d.ts","sourceRoot":"","sources":["../../src/tools/secretCreate.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAWzE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAsChD"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { errorResponse } from "../utils/docker-api.js";
|
|
3
|
+
import { spawn } from "node:child_process";
|
|
4
|
+
const inputSchema = {
|
|
5
|
+
name: z.string().min(1).describe("Secret name"),
|
|
6
|
+
file: z.string().optional().describe("Path to the secret file (omit if providing data)"),
|
|
7
|
+
data: z.string().optional().describe("Inline secret value (piped via stdin)"),
|
|
8
|
+
labels: z.array(z.string()).optional().describe("Labels (e.g. ['env=production'])"),
|
|
9
|
+
};
|
|
10
|
+
export function register(server) {
|
|
11
|
+
server.tool("docker_secretCreate", "Create a Docker Swarm secret from a file or inline data", inputSchema, async (args) => {
|
|
12
|
+
try {
|
|
13
|
+
if (!args.file && !args.data) {
|
|
14
|
+
return errorResponse(new Error("Either 'file' or 'data' must be provided"));
|
|
15
|
+
}
|
|
16
|
+
const cmdArgs = ["secret", "create"];
|
|
17
|
+
if (args.labels)
|
|
18
|
+
for (const l of args.labels)
|
|
19
|
+
cmdArgs.push("--label", l);
|
|
20
|
+
cmdArgs.push(args.name, args.file ?? "-");
|
|
21
|
+
const output = await new Promise((resolve, reject) => {
|
|
22
|
+
const proc = spawn("docker", cmdArgs, { stdio: ["pipe", "pipe", "pipe"] });
|
|
23
|
+
let stdout = "";
|
|
24
|
+
let stderr = "";
|
|
25
|
+
proc.stdout.on("data", (d) => { stdout += d.toString(); });
|
|
26
|
+
proc.stderr.on("data", (d) => { stderr += d.toString(); });
|
|
27
|
+
proc.on("error", reject);
|
|
28
|
+
proc.on("close", (code) => {
|
|
29
|
+
if (code === 0)
|
|
30
|
+
resolve(stdout);
|
|
31
|
+
else
|
|
32
|
+
reject(new Error(stderr || `docker secret create exited with code ${code}`));
|
|
33
|
+
});
|
|
34
|
+
if (args.data) {
|
|
35
|
+
proc.stdin.write(args.data);
|
|
36
|
+
}
|
|
37
|
+
proc.stdin.end();
|
|
38
|
+
});
|
|
39
|
+
return { content: [{ type: "text", text: output.trim() || `Secret '${args.name}' created` }] };
|
|
40
|
+
}
|
|
41
|
+
catch (error) {
|
|
42
|
+
return errorResponse(error);
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=secretCreate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"secretCreate.js","sourceRoot":"","sources":["../../src/tools/secretCreate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAE3C,MAAM,WAAW,GAAG;IAClB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC;IAC/C,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kDAAkD,CAAC;IACxF,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC;IAC7E,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kCAAkC,CAAC;CACpF,CAAC;AAEF,MAAM,UAAU,QAAQ,CAAC,MAAiB;IACxC,MAAM,CAAC,IAAI,CACT,qBAAqB,EACrB,yDAAyD,EACzD,WAAW,EACX,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,IAAI,CAAC;YACH,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;gBAC7B,OAAO,aAAa,CAAC,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC,CAAC;YAC9E,CAAC;YAED,MAAM,OAAO,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;YACrC,IAAI,IAAI,CAAC,MAAM;gBAAE,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM;oBAAE,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;YACzE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,CAAC;YAE1C,MAAM,MAAM,GAAG,MAAM,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBAC3D,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;gBAC3E,IAAI,MAAM,GAAG,EAAE,CAAC;gBAChB,IAAI,MAAM,GAAG,EAAE,CAAC;gBAChB,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAS,EAAE,EAAE,GAAG,MAAM,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;gBACnE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAS,EAAE,EAAE,GAAG,MAAM,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;gBACnE,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;gBACzB,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;oBACxB,IAAI,IAAI,KAAK,CAAC;wBAAE,OAAO,CAAC,MAAM,CAAC,CAAC;;wBAC3B,MAAM,CAAC,IAAI,KAAK,CAAC,MAAM,IAAI,yCAAyC,IAAI,EAAE,CAAC,CAAC,CAAC;gBACpF,CAAC,CAAC,CAAC;gBACH,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;oBACd,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC9B,CAAC;gBACD,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;YACnB,CAAC,CAAC,CAAC;YAEH,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,IAAI,WAAW,IAAI,CAAC,IAAI,WAAW,EAAE,CAAC,EAAE,CAAC;QAC1G,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"secretInspect.d.ts","sourceRoot":"","sources":["../../src/tools/secretInspect.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAQzE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAiBhD"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { execDocker, errorResponse } from "../utils/docker-api.js";
|
|
3
|
+
const inputSchema = {
|
|
4
|
+
secret: z.string().min(1).describe("Secret name or ID"),
|
|
5
|
+
pretty: z.boolean().optional().default(false).describe("Print in human-readable format"),
|
|
6
|
+
};
|
|
7
|
+
export function register(server) {
|
|
8
|
+
server.tool("docker_secretInspect", "Display detailed information on a Docker Swarm secret (metadata only, not the value)", inputSchema, async (args) => {
|
|
9
|
+
try {
|
|
10
|
+
const cmdArgs = ["secret", "inspect"];
|
|
11
|
+
if (args.pretty)
|
|
12
|
+
cmdArgs.push("--pretty");
|
|
13
|
+
cmdArgs.push(args.secret);
|
|
14
|
+
const output = await execDocker(cmdArgs);
|
|
15
|
+
return { content: [{ type: "text", text: output.trim() }] };
|
|
16
|
+
}
|
|
17
|
+
catch (error) {
|
|
18
|
+
return errorResponse(error);
|
|
19
|
+
}
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=secretInspect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"secretInspect.js","sourceRoot":"","sources":["../../src/tools/secretInspect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAEnE,MAAM,WAAW,GAAG;IAClB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,mBAAmB,CAAC;IACvD,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,gCAAgC,CAAC;CACzF,CAAC;AAEF,MAAM,UAAU,QAAQ,CAAC,MAAiB;IACxC,MAAM,CAAC,IAAI,CACT,sBAAsB,EACtB,sFAAsF,EACtF,WAAW,EACX,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;YACtC,IAAI,IAAI,CAAC,MAAM;gBAAE,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAC1C,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC1B,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,CAAC;YACzC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC;QACvE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"secretLs.d.ts","sourceRoot":"","sources":["../../src/tools/secretLs.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAQzE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAgBhD"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { execDocker, errorResponse } from "../utils/docker-api.js";
|
|
3
|
+
const inputSchema = {
|
|
4
|
+
filter: z.array(z.string()).optional().describe("Filters (e.g. ['name=my-secret'])"),
|
|
5
|
+
format: z.string().optional().default("json").describe("Output format (default: json)"),
|
|
6
|
+
};
|
|
7
|
+
export function register(server) {
|
|
8
|
+
server.tool("docker_secretLs", "List Docker Swarm secrets", inputSchema, async (args) => {
|
|
9
|
+
try {
|
|
10
|
+
const cmdArgs = ["secret", "ls", "--format", args.format ?? "json"];
|
|
11
|
+
if (args.filter)
|
|
12
|
+
for (const f of args.filter)
|
|
13
|
+
cmdArgs.push("--filter", f);
|
|
14
|
+
const output = await execDocker(cmdArgs);
|
|
15
|
+
return { content: [{ type: "text", text: output.trim() || "No secrets found" }] };
|
|
16
|
+
}
|
|
17
|
+
catch (error) {
|
|
18
|
+
return errorResponse(error);
|
|
19
|
+
}
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=secretLs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"secretLs.js","sourceRoot":"","sources":["../../src/tools/secretLs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAEnE,MAAM,WAAW,GAAG;IAClB,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;IACpF,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,+BAA+B,CAAC;CACxF,CAAC;AAEF,MAAM,UAAU,QAAQ,CAAC,MAAiB;IACxC,MAAM,CAAC,IAAI,CACT,iBAAiB,EACjB,2BAA2B,EAC3B,WAAW,EACX,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,CAAC,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,CAAC;YACpE,IAAI,IAAI,CAAC,MAAM;gBAAE,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM;oBAAE,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;YAC1E,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,CAAC;YACzC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,IAAI,kBAAkB,EAAE,CAAC,EAAE,CAAC;QAC7F,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"secretRm.d.ts","sourceRoot":"","sources":["../../src/tools/secretRm.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAOzE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAchD"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { execDocker, errorResponse } from "../utils/docker-api.js";
|
|
3
|
+
const inputSchema = {
|
|
4
|
+
secrets: z.array(z.string()).min(1).describe("Secret names or IDs to remove"),
|
|
5
|
+
};
|
|
6
|
+
export function register(server) {
|
|
7
|
+
server.tool("docker_secretRm", "Remove one or more Docker Swarm secrets", inputSchema, async (args) => {
|
|
8
|
+
try {
|
|
9
|
+
const output = await execDocker(["secret", "rm", ...args.secrets]);
|
|
10
|
+
return { content: [{ type: "text", text: output.trim() || `Removed secrets: ${args.secrets.join(", ")}` }] };
|
|
11
|
+
}
|
|
12
|
+
catch (error) {
|
|
13
|
+
return errorResponse(error);
|
|
14
|
+
}
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=secretRm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"secretRm.js","sourceRoot":"","sources":["../../src/tools/secretRm.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAEnE,MAAM,WAAW,GAAG;IAClB,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,+BAA+B,CAAC;CAC9E,CAAC;AAEF,MAAM,UAAU,QAAQ,CAAC,MAAiB;IACxC,MAAM,CAAC,IAAI,CACT,iBAAiB,EACjB,yCAAyC,EACzC,WAAW,EACX,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;YACnE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,IAAI,oBAAoB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;QACxH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stackConfig.d.ts","sourceRoot":"","sources":["../../src/tools/stackConfig.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAOzE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAchD"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { execDocker, errorResponse } from "../utils/docker-api.js";
|
|
3
|
+
const inputSchema = {
|
|
4
|
+
composeFile: z.string().min(1).describe("Path to the compose file"),
|
|
5
|
+
};
|
|
6
|
+
export function register(server) {
|
|
7
|
+
server.tool("docker_stackConfig", "Output the final merged configuration for a Docker Swarm stack", inputSchema, async (args) => {
|
|
8
|
+
try {
|
|
9
|
+
const output = await execDocker(["stack", "config", "-c", args.composeFile]);
|
|
10
|
+
return { content: [{ type: "text", text: output.trim() }] };
|
|
11
|
+
}
|
|
12
|
+
catch (error) {
|
|
13
|
+
return errorResponse(error);
|
|
14
|
+
}
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=stackConfig.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stackConfig.js","sourceRoot":"","sources":["../../src/tools/stackConfig.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAEnE,MAAM,WAAW,GAAG;IAClB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,0BAA0B,CAAC;CACpE,CAAC;AAEF,MAAM,UAAU,QAAQ,CAAC,MAAiB;IACxC,MAAM,CAAC,IAAI,CACT,oBAAoB,EACpB,gEAAgE,EAChE,WAAW,EACX,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;YAC7E,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC;QACvE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stackDeploy.d.ts","sourceRoot":"","sources":["../../src/tools/stackDeploy.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAWzE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAmBhD"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { execDocker, errorResponse } from "../utils/docker-api.js";
|
|
3
|
+
const inputSchema = {
|
|
4
|
+
name: z.string().min(1).describe("Stack name"),
|
|
5
|
+
composeFile: z.string().min(1).describe("Path to the compose file"),
|
|
6
|
+
prune: z.boolean().optional().default(false).describe("Prune services that are no longer referenced"),
|
|
7
|
+
resolveImage: z.enum(["always", "changed", "never"]).optional().describe("Query the registry to resolve image digest and supported platforms"),
|
|
8
|
+
withRegistryAuth: z.boolean().optional().default(false).describe("Send registry authentication details to Swarm agents"),
|
|
9
|
+
};
|
|
10
|
+
export function register(server) {
|
|
11
|
+
server.tool("docker_stackDeploy", "Deploy a new stack or update an existing stack from a compose file", inputSchema, async (args) => {
|
|
12
|
+
try {
|
|
13
|
+
const cmdArgs = ["stack", "deploy", "-c", args.composeFile];
|
|
14
|
+
if (args.prune)
|
|
15
|
+
cmdArgs.push("--prune");
|
|
16
|
+
if (args.resolveImage)
|
|
17
|
+
cmdArgs.push("--resolve-image", args.resolveImage);
|
|
18
|
+
if (args.withRegistryAuth)
|
|
19
|
+
cmdArgs.push("--with-registry-auth");
|
|
20
|
+
cmdArgs.push(args.name);
|
|
21
|
+
const output = await execDocker(cmdArgs, { timeout: 120_000 });
|
|
22
|
+
return { content: [{ type: "text", text: output.trim() || `Stack '${args.name}' deployed` }] };
|
|
23
|
+
}
|
|
24
|
+
catch (error) {
|
|
25
|
+
return errorResponse(error);
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=stackDeploy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stackDeploy.js","sourceRoot":"","sources":["../../src/tools/stackDeploy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAEnE,MAAM,WAAW,GAAG;IAClB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC;IAC9C,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,0BAA0B,CAAC;IACnE,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,8CAA8C,CAAC;IACrG,YAAY,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oEAAoE,CAAC;IAC9I,gBAAgB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,sDAAsD,CAAC;CACzH,CAAC;AAEF,MAAM,UAAU,QAAQ,CAAC,MAAiB;IACxC,MAAM,CAAC,IAAI,CACT,oBAAoB,EACpB,oEAAoE,EACpE,WAAW,EACX,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;YAC5D,IAAI,IAAI,CAAC,KAAK;gBAAE,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACxC,IAAI,IAAI,CAAC,YAAY;gBAAE,OAAO,CAAC,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;YAC1E,IAAI,IAAI,CAAC,gBAAgB;gBAAE,OAAO,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;YAChE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACxB,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;YAC/D,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,IAAI,UAAU,IAAI,CAAC,IAAI,YAAY,EAAE,CAAC,EAAE,CAAC;QAC1G,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stackLs.d.ts","sourceRoot":"","sources":["../../src/tools/stackLs.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAOzE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAchD"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { execDocker, errorResponse } from "../utils/docker-api.js";
|
|
3
|
+
const inputSchema = {
|
|
4
|
+
format: z.string().optional().default("json").describe("Output format (default: json)"),
|
|
5
|
+
};
|
|
6
|
+
export function register(server) {
|
|
7
|
+
server.tool("docker_stackLs", "List Docker Swarm stacks", inputSchema, async (args) => {
|
|
8
|
+
try {
|
|
9
|
+
const output = await execDocker(["stack", "ls", "--format", args.format ?? "json"]);
|
|
10
|
+
return { content: [{ type: "text", text: output.trim() || "No stacks found" }] };
|
|
11
|
+
}
|
|
12
|
+
catch (error) {
|
|
13
|
+
return errorResponse(error);
|
|
14
|
+
}
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=stackLs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stackLs.js","sourceRoot":"","sources":["../../src/tools/stackLs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAEnE,MAAM,WAAW,GAAG;IAClB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,+BAA+B,CAAC;CACxF,CAAC;AAEF,MAAM,UAAU,QAAQ,CAAC,MAAiB;IACxC,MAAM,CAAC,IAAI,CACT,gBAAgB,EAChB,0BAA0B,EAC1B,WAAW,EACX,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,CAAC,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,CAAC,CAAC;YACpF,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,IAAI,iBAAiB,EAAE,CAAC,EAAE,CAAC;QAC5F,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stackPs.d.ts","sourceRoot":"","sources":["../../src/tools/stackPs.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AASzE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAiBhD"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { execDocker, errorResponse } from "../utils/docker-api.js";
|
|
3
|
+
const inputSchema = {
|
|
4
|
+
stack: z.string().min(1).describe("Stack name"),
|
|
5
|
+
filter: z.array(z.string()).optional().describe("Filters (e.g. ['desired-state=running'])"),
|
|
6
|
+
format: z.string().optional().default("json").describe("Output format (default: json)"),
|
|
7
|
+
};
|
|
8
|
+
export function register(server) {
|
|
9
|
+
server.tool("docker_stackPs", "List tasks (containers) in a Docker Swarm stack", inputSchema, async (args) => {
|
|
10
|
+
try {
|
|
11
|
+
const cmdArgs = ["stack", "ps", "--format", args.format ?? "json"];
|
|
12
|
+
if (args.filter)
|
|
13
|
+
for (const f of args.filter)
|
|
14
|
+
cmdArgs.push("--filter", f);
|
|
15
|
+
cmdArgs.push(args.stack);
|
|
16
|
+
const output = await execDocker(cmdArgs);
|
|
17
|
+
return { content: [{ type: "text", text: output.trim() || "No tasks found" }] };
|
|
18
|
+
}
|
|
19
|
+
catch (error) {
|
|
20
|
+
return errorResponse(error);
|
|
21
|
+
}
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=stackPs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stackPs.js","sourceRoot":"","sources":["../../src/tools/stackPs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAEnE,MAAM,WAAW,GAAG;IAClB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC;IAC/C,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0CAA0C,CAAC;IAC3F,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,+BAA+B,CAAC;CACxF,CAAC;AAEF,MAAM,UAAU,QAAQ,CAAC,MAAiB;IACxC,MAAM,CAAC,IAAI,CACT,gBAAgB,EAChB,iDAAiD,EACjD,WAAW,EACX,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,CAAC,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,CAAC;YACnE,IAAI,IAAI,CAAC,MAAM;gBAAE,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM;oBAAE,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;YAC1E,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACzB,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,CAAC;YACzC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,IAAI,gBAAgB,EAAE,CAAC,EAAE,CAAC;QAC3F,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stackRm.d.ts","sourceRoot":"","sources":["../../src/tools/stackRm.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAOzE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAchD"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { execDocker, errorResponse } from "../utils/docker-api.js";
|
|
3
|
+
const inputSchema = {
|
|
4
|
+
stacks: z.array(z.string()).min(1).describe("Stack names to remove"),
|
|
5
|
+
};
|
|
6
|
+
export function register(server) {
|
|
7
|
+
server.tool("docker_stackRm", "Remove one or more Docker Swarm stacks", inputSchema, async (args) => {
|
|
8
|
+
try {
|
|
9
|
+
const output = await execDocker(["stack", "rm", ...args.stacks]);
|
|
10
|
+
return { content: [{ type: "text", text: output.trim() || `Removed stacks: ${args.stacks.join(", ")}` }] };
|
|
11
|
+
}
|
|
12
|
+
catch (error) {
|
|
13
|
+
return errorResponse(error);
|
|
14
|
+
}
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=stackRm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stackRm.js","sourceRoot":"","sources":["../../src/tools/stackRm.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAEnE,MAAM,WAAW,GAAG;IAClB,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,uBAAuB,CAAC;CACrE,CAAC;AAEF,MAAM,UAAU,QAAQ,CAAC,MAAiB;IACxC,MAAM,CAAC,IAAI,CACT,gBAAgB,EAChB,wCAAwC,EACxC,WAAW,EACX,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,CAAC,OAAO,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;YACjE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,IAAI,mBAAmB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;QACtH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stackServices.d.ts","sourceRoot":"","sources":["../../src/tools/stackServices.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AASzE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAiBhD"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { execDocker, errorResponse } from "../utils/docker-api.js";
|
|
3
|
+
const inputSchema = {
|
|
4
|
+
stack: z.string().min(1).describe("Stack name"),
|
|
5
|
+
filter: z.array(z.string()).optional().describe("Filters (e.g. ['name=web'])"),
|
|
6
|
+
format: z.string().optional().default("json").describe("Output format (default: json)"),
|
|
7
|
+
};
|
|
8
|
+
export function register(server) {
|
|
9
|
+
server.tool("docker_stackServices", "List services in a Docker Swarm stack", inputSchema, async (args) => {
|
|
10
|
+
try {
|
|
11
|
+
const cmdArgs = ["stack", "services", "--format", args.format ?? "json"];
|
|
12
|
+
if (args.filter)
|
|
13
|
+
for (const f of args.filter)
|
|
14
|
+
cmdArgs.push("--filter", f);
|
|
15
|
+
cmdArgs.push(args.stack);
|
|
16
|
+
const output = await execDocker(cmdArgs);
|
|
17
|
+
return { content: [{ type: "text", text: output.trim() || "No services found" }] };
|
|
18
|
+
}
|
|
19
|
+
catch (error) {
|
|
20
|
+
return errorResponse(error);
|
|
21
|
+
}
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=stackServices.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stackServices.js","sourceRoot":"","sources":["../../src/tools/stackServices.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAEnE,MAAM,WAAW,GAAG;IAClB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC;IAC/C,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;IAC9E,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,+BAA+B,CAAC;CACxF,CAAC;AAEF,MAAM,UAAU,QAAQ,CAAC,MAAiB;IACxC,MAAM,CAAC,IAAI,CACT,sBAAsB,EACtB,uCAAuC,EACvC,WAAW,EACX,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,CAAC,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,CAAC;YACzE,IAAI,IAAI,CAAC,MAAM;gBAAE,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM;oBAAE,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;YAC1E,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACzB,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,CAAC;YACzC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,IAAI,mBAAmB,EAAE,CAAC,EAAE,CAAC;QAC9F,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
|
package/dist/tools/swarmLeave.js
CHANGED
|
@@ -9,7 +9,7 @@ export function register(server) {
|
|
|
9
9
|
const cmdArgs = ["swarm", "leave"];
|
|
10
10
|
if (args.force)
|
|
11
11
|
cmdArgs.push("--force");
|
|
12
|
-
const output = await execDocker(cmdArgs);
|
|
12
|
+
const output = await execDocker(cmdArgs, { timeout: 120_000 });
|
|
13
13
|
return { content: [{ type: "text", text: output.trim() || "Node left the swarm" }] };
|
|
14
14
|
}
|
|
15
15
|
catch (error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"swarmLeave.js","sourceRoot":"","sources":["../../src/tools/swarmLeave.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAEnE,MAAM,WAAW,GAAG;IAClB,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,8CAA8C,CAAC;CACtG,CAAC;AAEF,MAAM,UAAU,QAAQ,CAAC,MAAiB;IACxC,MAAM,CAAC,IAAI,CACT,mBAAmB,EACnB,wBAAwB,EACxB,WAAW,EACX,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YACnC,IAAI,IAAI,CAAC,KAAK;gBAAE,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACxC,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"swarmLeave.js","sourceRoot":"","sources":["../../src/tools/swarmLeave.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAEnE,MAAM,WAAW,GAAG;IAClB,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,8CAA8C,CAAC;CACtG,CAAC;AAEF,MAAM,UAAU,QAAQ,CAAC,MAAiB;IACxC,MAAM,CAAC,IAAI,CACT,mBAAmB,EACnB,wBAAwB,EACxB,WAAW,EACX,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YACnC,IAAI,IAAI,CAAC,KAAK;gBAAE,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACxC,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;YAC/D,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,IAAI,qBAAqB,EAAE,CAAC,EAAE,CAAC;QAChG,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trustInspect.d.ts","sourceRoot":"","sources":["../../src/tools/trustInspect.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAQzE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAiBhD"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { execDocker, errorResponse } from "../utils/docker-api.js";
|
|
3
|
+
const inputSchema = {
|
|
4
|
+
image: z.string().min(1).describe("Image name (e.g. 'docker.io/library/nginx')"),
|
|
5
|
+
pretty: z.boolean().optional().default(false).describe("Print in human-readable format"),
|
|
6
|
+
};
|
|
7
|
+
export function register(server) {
|
|
8
|
+
server.tool("docker_trustInspect", "Inspect Docker Content Trust data for an image (signers, signatures, keys)", inputSchema, async (args) => {
|
|
9
|
+
try {
|
|
10
|
+
const cmdArgs = ["trust", "inspect"];
|
|
11
|
+
if (args.pretty)
|
|
12
|
+
cmdArgs.push("--pretty");
|
|
13
|
+
cmdArgs.push(args.image);
|
|
14
|
+
const output = await execDocker(cmdArgs);
|
|
15
|
+
return { content: [{ type: "text", text: output.trim() }] };
|
|
16
|
+
}
|
|
17
|
+
catch (error) {
|
|
18
|
+
return errorResponse(error);
|
|
19
|
+
}
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=trustInspect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trustInspect.js","sourceRoot":"","sources":["../../src/tools/trustInspect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAEnE,MAAM,WAAW,GAAG;IAClB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,6CAA6C,CAAC;IAChF,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,gCAAgC,CAAC;CACzF,CAAC;AAEF,MAAM,UAAU,QAAQ,CAAC,MAAiB;IACxC,MAAM,CAAC,IAAI,CACT,qBAAqB,EACrB,4EAA4E,EAC5E,WAAW,EACX,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;YACrC,IAAI,IAAI,CAAC,MAAM;gBAAE,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAC1C,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACzB,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,CAAC;YACzC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC;QACvE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trustKey.d.ts","sourceRoot":"","sources":["../../src/tools/trustKey.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AASzE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAsBhD"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { execDocker, errorResponse } from "../utils/docker-api.js";
|
|
3
|
+
const inputSchema = {
|
|
4
|
+
action: z.enum(["generate", "load"]).describe("Key action: generate a new key pair or load an existing key"),
|
|
5
|
+
name: z.string().optional().describe("Key name (required for generate)"),
|
|
6
|
+
keyFile: z.string().optional().describe("Path to the key file (required for load)"),
|
|
7
|
+
};
|
|
8
|
+
export function register(server) {
|
|
9
|
+
server.tool("docker_trustKey", "Manage Docker Content Trust signing keys (generate or load)", inputSchema, async (args) => {
|
|
10
|
+
try {
|
|
11
|
+
const cmdArgs = ["trust", "key", args.action];
|
|
12
|
+
if (args.action === "generate") {
|
|
13
|
+
if (!args.name)
|
|
14
|
+
throw new Error("name is required for generate action");
|
|
15
|
+
cmdArgs.push(args.name);
|
|
16
|
+
}
|
|
17
|
+
else {
|
|
18
|
+
if (!args.keyFile)
|
|
19
|
+
throw new Error("keyFile is required for load action");
|
|
20
|
+
cmdArgs.push(args.keyFile);
|
|
21
|
+
}
|
|
22
|
+
const output = await execDocker(cmdArgs);
|
|
23
|
+
return { content: [{ type: "text", text: output.trim() || `Key ${args.action} completed` }] };
|
|
24
|
+
}
|
|
25
|
+
catch (error) {
|
|
26
|
+
return errorResponse(error);
|
|
27
|
+
}
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=trustKey.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trustKey.js","sourceRoot":"","sources":["../../src/tools/trustKey.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAEnE,MAAM,WAAW,GAAG;IAClB,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,6DAA6D,CAAC;IAC5G,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kCAAkC,CAAC;IACxE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0CAA0C,CAAC;CACpF,CAAC;AAEF,MAAM,UAAU,QAAQ,CAAC,MAAiB;IACxC,MAAM,CAAC,IAAI,CACT,iBAAiB,EACjB,6DAA6D,EAC7D,WAAW,EACX,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YAC9C,IAAI,IAAI,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;gBAC/B,IAAI,CAAC,IAAI,CAAC,IAAI;oBAAE,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;gBACxE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC1B,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,IAAI,CAAC,OAAO;oBAAE,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;gBAC1E,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC7B,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,CAAC;YACzC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,IAAI,OAAO,IAAI,CAAC,MAAM,YAAY,EAAE,CAAC,EAAE,CAAC;QACzG,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trustRevoke.d.ts","sourceRoot":"","sources":["../../src/tools/trustRevoke.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAQzE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAiBhD"}
|