@tmhs/docker-mcp 0.8.0 → 0.10.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 +75 -2
- package/dist/index.js +77 -1
- package/dist/index.js.map +1 -1
- package/dist/tools/contextCreate.d.ts +3 -0
- package/dist/tools/contextCreate.d.ts.map +1 -0
- package/dist/tools/contextCreate.js +25 -0
- package/dist/tools/contextCreate.js.map +1 -0
- package/dist/tools/contextInspect.d.ts +3 -0
- package/dist/tools/contextInspect.d.ts.map +1 -0
- package/dist/tools/contextInspect.js +17 -0
- package/dist/tools/contextInspect.js.map +1 -0
- package/dist/tools/contextLs.d.ts +3 -0
- package/dist/tools/contextLs.d.ts.map +1 -0
- package/dist/tools/contextLs.js +17 -0
- package/dist/tools/contextLs.js.map +1 -0
- package/dist/tools/contextRm.d.ts +3 -0
- package/dist/tools/contextRm.d.ts.map +1 -0
- package/dist/tools/contextRm.js +22 -0
- package/dist/tools/contextRm.js.map +1 -0
- package/dist/tools/contextShow.d.ts +3 -0
- package/dist/tools/contextShow.d.ts.map +1 -0
- package/dist/tools/contextShow.js +14 -0
- package/dist/tools/contextShow.js.map +1 -0
- package/dist/tools/contextUse.d.ts +3 -0
- package/dist/tools/contextUse.d.ts.map +1 -0
- package/dist/tools/contextUse.js +17 -0
- package/dist/tools/contextUse.js.map +1 -0
- package/dist/tools/diff.d.ts +3 -0
- package/dist/tools/diff.d.ts.map +1 -0
- package/dist/tools/diff.js +17 -0
- package/dist/tools/diff.js.map +1 -0
- package/dist/tools/export.d.ts +3 -0
- package/dist/tools/export.d.ts.map +1 -0
- package/dist/tools/export.js +18 -0
- package/dist/tools/export.js.map +1 -0
- package/dist/tools/imageHistory.d.ts +3 -0
- package/dist/tools/imageHistory.d.ts.map +1 -0
- package/dist/tools/imageHistory.js +23 -0
- package/dist/tools/imageHistory.js.map +1 -0
- package/dist/tools/import.d.ts +3 -0
- package/dist/tools/import.d.ts.map +1 -0
- package/dist/tools/import.js +35 -0
- package/dist/tools/import.js.map +1 -0
- package/dist/tools/login.d.ts +3 -0
- package/dist/tools/login.d.ts.map +1 -0
- package/dist/tools/login.js +38 -0
- package/dist/tools/login.js.map +1 -0
- package/dist/tools/logout.d.ts +3 -0
- package/dist/tools/logout.d.ts.map +1 -0
- package/dist/tools/logout.js +20 -0
- package/dist/tools/logout.js.map +1 -0
- package/dist/tools/nodeDemote.d.ts +3 -0
- package/dist/tools/nodeDemote.d.ts.map +1 -0
- package/dist/tools/nodeDemote.js +17 -0
- package/dist/tools/nodeDemote.js.map +1 -0
- package/dist/tools/nodeInspect.d.ts +3 -0
- package/dist/tools/nodeInspect.d.ts.map +1 -0
- package/dist/tools/nodeInspect.js +22 -0
- package/dist/tools/nodeInspect.js.map +1 -0
- package/dist/tools/nodeLs.d.ts +3 -0
- package/dist/tools/nodeLs.d.ts.map +1 -0
- package/dist/tools/nodeLs.js +22 -0
- package/dist/tools/nodeLs.js.map +1 -0
- package/dist/tools/nodePromote.d.ts +3 -0
- package/dist/tools/nodePromote.d.ts.map +1 -0
- package/dist/tools/nodePromote.js +17 -0
- package/dist/tools/nodePromote.js.map +1 -0
- package/dist/tools/nodePs.d.ts +3 -0
- package/dist/tools/nodePs.d.ts.map +1 -0
- package/dist/tools/nodePs.js +25 -0
- package/dist/tools/nodePs.js.map +1 -0
- package/dist/tools/nodeRm.d.ts +3 -0
- package/dist/tools/nodeRm.d.ts.map +1 -0
- package/dist/tools/nodeRm.js +22 -0
- package/dist/tools/nodeRm.js.map +1 -0
- package/dist/tools/nodeUpdate.d.ts +3 -0
- package/dist/tools/nodeUpdate.d.ts.map +1 -0
- package/dist/tools/nodeUpdate.js +29 -0
- package/dist/tools/nodeUpdate.js.map +1 -0
- package/dist/tools/port.d.ts +3 -0
- package/dist/tools/port.d.ts.map +1 -0
- package/dist/tools/port.js +26 -0
- package/dist/tools/port.js.map +1 -0
- package/dist/tools/rename.d.ts +3 -0
- package/dist/tools/rename.d.ts.map +1 -0
- package/dist/tools/rename.js +18 -0
- package/dist/tools/rename.js.map +1 -0
- package/dist/tools/serviceCreate.d.ts +3 -0
- package/dist/tools/serviceCreate.d.ts.map +1 -0
- package/dist/tools/serviceCreate.js +62 -0
- package/dist/tools/serviceCreate.js.map +1 -0
- package/dist/tools/serviceInspect.d.ts +3 -0
- package/dist/tools/serviceInspect.d.ts.map +1 -0
- package/dist/tools/serviceInspect.js +22 -0
- package/dist/tools/serviceInspect.js.map +1 -0
- package/dist/tools/serviceLogs.d.ts +3 -0
- package/dist/tools/serviceLogs.d.ts.map +1 -0
- package/dist/tools/serviceLogs.js +28 -0
- package/dist/tools/serviceLogs.js.map +1 -0
- package/dist/tools/serviceLs.d.ts +3 -0
- package/dist/tools/serviceLs.d.ts.map +1 -0
- package/dist/tools/serviceLs.js +22 -0
- package/dist/tools/serviceLs.js.map +1 -0
- package/dist/tools/servicePs.d.ts +3 -0
- package/dist/tools/servicePs.d.ts.map +1 -0
- package/dist/tools/servicePs.js +24 -0
- package/dist/tools/servicePs.js.map +1 -0
- package/dist/tools/serviceRm.d.ts +3 -0
- package/dist/tools/serviceRm.d.ts.map +1 -0
- package/dist/tools/serviceRm.js +17 -0
- package/dist/tools/serviceRm.js.map +1 -0
- package/dist/tools/serviceRollback.d.ts +3 -0
- package/dist/tools/serviceRollback.d.ts.map +1 -0
- package/dist/tools/serviceRollback.js +22 -0
- package/dist/tools/serviceRollback.js.map +1 -0
- package/dist/tools/serviceScale.d.ts +3 -0
- package/dist/tools/serviceScale.d.ts.map +1 -0
- package/dist/tools/serviceScale.js +17 -0
- package/dist/tools/serviceScale.js.map +1 -0
- package/dist/tools/serviceUpdate.d.ts +3 -0
- package/dist/tools/serviceUpdate.d.ts.map +1 -0
- package/dist/tools/serviceUpdate.js +45 -0
- package/dist/tools/serviceUpdate.js.map +1 -0
- package/dist/tools/swarmCa.d.ts +3 -0
- package/dist/tools/swarmCa.d.ts.map +1 -0
- package/dist/tools/swarmCa.js +26 -0
- package/dist/tools/swarmCa.js.map +1 -0
- package/dist/tools/swarmInit.d.ts +3 -0
- package/dist/tools/swarmInit.d.ts.map +1 -0
- package/dist/tools/swarmInit.js +29 -0
- package/dist/tools/swarmInit.js.map +1 -0
- package/dist/tools/swarmJoin.d.ts +3 -0
- package/dist/tools/swarmJoin.d.ts.map +1 -0
- package/dist/tools/swarmJoin.js +26 -0
- package/dist/tools/swarmJoin.js.map +1 -0
- package/dist/tools/swarmJoinToken.d.ts +3 -0
- package/dist/tools/swarmJoinToken.d.ts.map +1 -0
- package/dist/tools/swarmJoinToken.js +22 -0
- package/dist/tools/swarmJoinToken.js.map +1 -0
- package/dist/tools/swarmLeave.d.ts +3 -0
- package/dist/tools/swarmLeave.d.ts.map +1 -0
- package/dist/tools/swarmLeave.js +20 -0
- package/dist/tools/swarmLeave.js.map +1 -0
- package/dist/tools/swarmUnlock.d.ts +3 -0
- package/dist/tools/swarmUnlock.d.ts.map +1 -0
- package/dist/tools/swarmUnlock.js +33 -0
- package/dist/tools/swarmUnlock.js.map +1 -0
- package/dist/tools/swarmUnlockKey.d.ts +3 -0
- package/dist/tools/swarmUnlockKey.d.ts.map +1 -0
- package/dist/tools/swarmUnlockKey.js +21 -0
- package/dist/tools/swarmUnlockKey.js.map +1 -0
- package/dist/tools/swarmUpdate.d.ts +3 -0
- package/dist/tools/swarmUpdate.d.ts.map +1 -0
- package/dist/tools/swarmUpdate.js +29 -0
- package/dist/tools/swarmUpdate.js.map +1 -0
- package/package.json +2 -2
|
@@ -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=web', 'mode=replicated'])"),
|
|
5
|
+
format: z.string().optional().default("json").describe("Output format (default: json)"),
|
|
6
|
+
};
|
|
7
|
+
export function register(server) {
|
|
8
|
+
server.tool("docker_serviceLs", "List Docker Swarm services", inputSchema, async (args) => {
|
|
9
|
+
try {
|
|
10
|
+
const cmdArgs = ["service", "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 services found" }] };
|
|
16
|
+
}
|
|
17
|
+
catch (error) {
|
|
18
|
+
return errorResponse(error);
|
|
19
|
+
}
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=serviceLs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serviceLs.js","sourceRoot":"","sources":["../../src/tools/serviceLs.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,gDAAgD,CAAC;IACjG,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,kBAAkB,EAClB,4BAA4B,EAC5B,WAAW,EACX,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,CAAC,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,CAAC;YACrE,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,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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"servicePs.d.ts","sourceRoot":"","sources":["../../src/tools/servicePs.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
|
+
service: z.string().min(1).describe("Service name or ID"),
|
|
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_servicePs", "List tasks (containers) of a Docker Swarm service", inputSchema, async (args) => {
|
|
10
|
+
try {
|
|
11
|
+
const cmdArgs = ["service", "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.service);
|
|
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=servicePs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"servicePs.js","sourceRoot":"","sources":["../../src/tools/servicePs.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,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,oBAAoB,CAAC;IACzD,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,kBAAkB,EAClB,mDAAmD,EACnD,WAAW,EACX,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,CAAC,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,CAAC;YACrE,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,OAAO,CAAC,CAAC;YAC3B,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":"serviceRm.d.ts","sourceRoot":"","sources":["../../src/tools/serviceRm.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
|
+
services: z.array(z.string()).min(1).describe("Service names or IDs to remove"),
|
|
5
|
+
};
|
|
6
|
+
export function register(server) {
|
|
7
|
+
server.tool("docker_serviceRm", "Remove one or more Docker Swarm services", inputSchema, async (args) => {
|
|
8
|
+
try {
|
|
9
|
+
const output = await execDocker(["service", "rm", ...args.services]);
|
|
10
|
+
return { content: [{ type: "text", text: output.trim() || `Removed services: ${args.services.join(", ")}` }] };
|
|
11
|
+
}
|
|
12
|
+
catch (error) {
|
|
13
|
+
return errorResponse(error);
|
|
14
|
+
}
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=serviceRm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serviceRm.js","sourceRoot":"","sources":["../../src/tools/serviceRm.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,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,gCAAgC,CAAC;CAChF,CAAC;AAEF,MAAM,UAAU,QAAQ,CAAC,MAAiB;IACxC,MAAM,CAAC,IAAI,CACT,kBAAkB,EAClB,0CAA0C,EAC1C,WAAW,EACX,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,CAAC,SAAS,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;YACrE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,IAAI,qBAAqB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;QAC1H,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":"serviceRollback.d.ts","sourceRoot":"","sources":["../../src/tools/serviceRollback.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
|
+
service: z.string().min(1).describe("Service name or ID"),
|
|
5
|
+
detach: z.boolean().optional().default(false).describe("Return immediately instead of waiting"),
|
|
6
|
+
};
|
|
7
|
+
export function register(server) {
|
|
8
|
+
server.tool("docker_serviceRollback", "Revert a Docker Swarm service to its previous configuration", inputSchema, async (args) => {
|
|
9
|
+
try {
|
|
10
|
+
const cmdArgs = ["service", "rollback"];
|
|
11
|
+
if (args.detach)
|
|
12
|
+
cmdArgs.push("--detach");
|
|
13
|
+
cmdArgs.push(args.service);
|
|
14
|
+
const output = await execDocker(cmdArgs, { timeout: 120_000 });
|
|
15
|
+
return { content: [{ type: "text", text: output.trim() || `Service '${args.service}' rolled back` }] };
|
|
16
|
+
}
|
|
17
|
+
catch (error) {
|
|
18
|
+
return errorResponse(error);
|
|
19
|
+
}
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=serviceRollback.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serviceRollback.js","sourceRoot":"","sources":["../../src/tools/serviceRollback.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,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,oBAAoB,CAAC;IACzD,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,uCAAuC,CAAC;CAChG,CAAC;AAEF,MAAM,UAAU,QAAQ,CAAC,MAAiB;IACxC,MAAM,CAAC,IAAI,CACT,wBAAwB,EACxB,6DAA6D,EAC7D,WAAW,EACX,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;YACxC,IAAI,IAAI,CAAC,MAAM;gBAAE,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAC1C,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC3B,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,YAAY,IAAI,CAAC,OAAO,eAAe,EAAE,CAAC,EAAE,CAAC;QAClH,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":"serviceScale.d.ts","sourceRoot":"","sources":["../../src/tools/serviceScale.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
|
+
scales: z.array(z.string()).min(1).describe("Scale specifications (e.g. ['web=5', 'api=3'])"),
|
|
5
|
+
};
|
|
6
|
+
export function register(server) {
|
|
7
|
+
server.tool("docker_serviceScale", "Scale one or more Docker Swarm services to a target replica count", inputSchema, async (args) => {
|
|
8
|
+
try {
|
|
9
|
+
const output = await execDocker(["service", "scale", ...args.scales], { timeout: 120_000 });
|
|
10
|
+
return { content: [{ type: "text", text: output.trim() }] };
|
|
11
|
+
}
|
|
12
|
+
catch (error) {
|
|
13
|
+
return errorResponse(error);
|
|
14
|
+
}
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=serviceScale.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serviceScale.js","sourceRoot":"","sources":["../../src/tools/serviceScale.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,gDAAgD,CAAC;CAC9F,CAAC;AAEF,MAAM,UAAU,QAAQ,CAAC,MAAiB;IACxC,MAAM,CAAC,IAAI,CACT,qBAAqB,EACrB,mEAAmE,EACnE,WAAW,EACX,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,CAAC,SAAS,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;YAC5F,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":"serviceUpdate.d.ts","sourceRoot":"","sources":["../../src/tools/serviceUpdate.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAezE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAwBhD"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { execDocker, errorResponse } from "../utils/docker-api.js";
|
|
3
|
+
const inputSchema = {
|
|
4
|
+
service: z.string().min(1).describe("Service name or ID"),
|
|
5
|
+
image: z.string().optional().describe("Update the service image"),
|
|
6
|
+
replicas: z.number().optional().describe("Update replica count"),
|
|
7
|
+
env: z.array(z.string()).optional().describe("Add or update environment variables"),
|
|
8
|
+
labels: z.array(z.string()).optional().describe("Add or update labels"),
|
|
9
|
+
force: z.boolean().optional().default(false).describe("Force update even if no changes"),
|
|
10
|
+
limitCpu: z.number().optional().describe("CPU limit"),
|
|
11
|
+
limitMemory: z.string().optional().describe("Memory limit"),
|
|
12
|
+
args: z.array(z.string()).optional().describe("Additional raw CLI flags for full flexibility"),
|
|
13
|
+
};
|
|
14
|
+
export function register(server) {
|
|
15
|
+
server.tool("docker_serviceUpdate", "Update a Docker Swarm service (image, replicas, resources, env)", inputSchema, async (args) => {
|
|
16
|
+
try {
|
|
17
|
+
const cmdArgs = ["service", "update"];
|
|
18
|
+
if (args.image)
|
|
19
|
+
cmdArgs.push("--image", args.image);
|
|
20
|
+
if (args.replicas !== undefined)
|
|
21
|
+
cmdArgs.push("--replicas", String(args.replicas));
|
|
22
|
+
if (args.env)
|
|
23
|
+
for (const e of args.env)
|
|
24
|
+
cmdArgs.push("--env-add", e);
|
|
25
|
+
if (args.labels)
|
|
26
|
+
for (const l of args.labels)
|
|
27
|
+
cmdArgs.push("--label-add", l);
|
|
28
|
+
if (args.force)
|
|
29
|
+
cmdArgs.push("--force");
|
|
30
|
+
if (args.limitCpu !== undefined)
|
|
31
|
+
cmdArgs.push("--limit-cpu", String(args.limitCpu));
|
|
32
|
+
if (args.limitMemory)
|
|
33
|
+
cmdArgs.push("--limit-memory", args.limitMemory);
|
|
34
|
+
if (args.args)
|
|
35
|
+
cmdArgs.push(...args.args);
|
|
36
|
+
cmdArgs.push(args.service);
|
|
37
|
+
const output = await execDocker(cmdArgs, { timeout: 120_000 });
|
|
38
|
+
return { content: [{ type: "text", text: output.trim() || `Service '${args.service}' updated` }] };
|
|
39
|
+
}
|
|
40
|
+
catch (error) {
|
|
41
|
+
return errorResponse(error);
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=serviceUpdate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serviceUpdate.js","sourceRoot":"","sources":["../../src/tools/serviceUpdate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"swarmCa.d.ts","sourceRoot":"","sources":["../../src/tools/swarmCa.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AASzE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAkBhD"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { execDocker, errorResponse } from "../utils/docker-api.js";
|
|
3
|
+
const inputSchema = {
|
|
4
|
+
rotate: z.boolean().optional().default(false).describe("Rotate the cluster root CA"),
|
|
5
|
+
certExpiry: z.string().optional().describe("Validity period for node certificates (e.g. '720h')"),
|
|
6
|
+
detach: z.boolean().optional().default(false).describe("Return immediately instead of waiting for convergence"),
|
|
7
|
+
};
|
|
8
|
+
export function register(server) {
|
|
9
|
+
server.tool("docker_swarmCa", "Display and optionally rotate the Swarm root CA certificate", inputSchema, async (args) => {
|
|
10
|
+
try {
|
|
11
|
+
const cmdArgs = ["swarm", "ca"];
|
|
12
|
+
if (args.rotate)
|
|
13
|
+
cmdArgs.push("--rotate");
|
|
14
|
+
if (args.certExpiry)
|
|
15
|
+
cmdArgs.push("--cert-expiry", args.certExpiry);
|
|
16
|
+
if (args.detach)
|
|
17
|
+
cmdArgs.push("--detach");
|
|
18
|
+
const output = await execDocker(cmdArgs, { timeout: 120_000 });
|
|
19
|
+
return { content: [{ type: "text", text: output.trim() }] };
|
|
20
|
+
}
|
|
21
|
+
catch (error) {
|
|
22
|
+
return errorResponse(error);
|
|
23
|
+
}
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=swarmCa.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"swarmCa.js","sourceRoot":"","sources":["../../src/tools/swarmCa.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,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,4BAA4B,CAAC;IACpF,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qDAAqD,CAAC;IACjG,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,uDAAuD,CAAC;CAChH,CAAC;AAEF,MAAM,UAAU,QAAQ,CAAC,MAAiB;IACxC,MAAM,CAAC,IAAI,CACT,gBAAgB,EAChB,6DAA6D,EAC7D,WAAW,EACX,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YAChC,IAAI,IAAI,CAAC,MAAM;gBAAE,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAC1C,IAAI,IAAI,CAAC,UAAU;gBAAE,OAAO,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;YACpE,IAAI,IAAI,CAAC,MAAM;gBAAE,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAC1C,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,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":"swarmInit.d.ts","sourceRoot":"","sources":["../../src/tools/swarmInit.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAUzE,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
|
+
advertiseAddr: z.string().optional().describe("Advertised address (e.g. 'eth0:2377' or '192.168.1.1:2377')"),
|
|
5
|
+
listenAddr: z.string().optional().describe("Listen address (default: 0.0.0.0:2377)"),
|
|
6
|
+
forceNewCluster: z.boolean().optional().default(false).describe("Force create a new cluster from current state"),
|
|
7
|
+
autolock: z.boolean().optional().default(false).describe("Enable manager autolocking (requires unlock key on restart)"),
|
|
8
|
+
};
|
|
9
|
+
export function register(server) {
|
|
10
|
+
server.tool("docker_swarmInit", "Initialize a new Docker Swarm cluster on this node", inputSchema, async (args) => {
|
|
11
|
+
try {
|
|
12
|
+
const cmdArgs = ["swarm", "init"];
|
|
13
|
+
if (args.advertiseAddr)
|
|
14
|
+
cmdArgs.push("--advertise-addr", args.advertiseAddr);
|
|
15
|
+
if (args.listenAddr)
|
|
16
|
+
cmdArgs.push("--listen-addr", args.listenAddr);
|
|
17
|
+
if (args.forceNewCluster)
|
|
18
|
+
cmdArgs.push("--force-new-cluster");
|
|
19
|
+
if (args.autolock)
|
|
20
|
+
cmdArgs.push("--autolock");
|
|
21
|
+
const output = await execDocker(cmdArgs, { timeout: 60_000 });
|
|
22
|
+
return { content: [{ type: "text", text: output.trim() }] };
|
|
23
|
+
}
|
|
24
|
+
catch (error) {
|
|
25
|
+
return errorResponse(error);
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=swarmInit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"swarmInit.js","sourceRoot":"","sources":["../../src/tools/swarmInit.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,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6DAA6D,CAAC;IAC5G,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wCAAwC,CAAC;IACpF,eAAe,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,+CAA+C,CAAC;IAChH,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,6DAA6D,CAAC;CACxH,CAAC;AAEF,MAAM,UAAU,QAAQ,CAAC,MAAiB;IACxC,MAAM,CAAC,IAAI,CACT,kBAAkB,EAClB,oDAAoD,EACpD,WAAW,EACX,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YAClC,IAAI,IAAI,CAAC,aAAa;gBAAE,OAAO,CAAC,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;YAC7E,IAAI,IAAI,CAAC,UAAU;gBAAE,OAAO,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;YACpE,IAAI,IAAI,CAAC,eAAe;gBAAE,OAAO,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;YAC9D,IAAI,IAAI,CAAC,QAAQ;gBAAE,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAC9C,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;YAC9D,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":"swarmJoin.d.ts","sourceRoot":"","sources":["../../src/tools/swarmJoin.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAUzE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAkBhD"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { execDocker, errorResponse } from "../utils/docker-api.js";
|
|
3
|
+
const inputSchema = {
|
|
4
|
+
token: z.string().min(1).describe("Join token (worker or manager)"),
|
|
5
|
+
remoteAddrs: z.string().min(1).describe("Address of an existing manager node (e.g. '192.168.1.1:2377')"),
|
|
6
|
+
advertiseAddr: z.string().optional().describe("Advertised address for this node"),
|
|
7
|
+
listenAddr: z.string().optional().describe("Listen address for this node"),
|
|
8
|
+
};
|
|
9
|
+
export function register(server) {
|
|
10
|
+
server.tool("docker_swarmJoin", "Join an existing Docker Swarm as a worker or manager node", inputSchema, async (args) => {
|
|
11
|
+
try {
|
|
12
|
+
const cmdArgs = ["swarm", "join", "--token", args.token];
|
|
13
|
+
if (args.advertiseAddr)
|
|
14
|
+
cmdArgs.push("--advertise-addr", args.advertiseAddr);
|
|
15
|
+
if (args.listenAddr)
|
|
16
|
+
cmdArgs.push("--listen-addr", args.listenAddr);
|
|
17
|
+
cmdArgs.push(args.remoteAddrs);
|
|
18
|
+
const output = await execDocker(cmdArgs, { timeout: 60_000 });
|
|
19
|
+
return { content: [{ type: "text", text: output.trim() || "Successfully joined the swarm" }] };
|
|
20
|
+
}
|
|
21
|
+
catch (error) {
|
|
22
|
+
return errorResponse(error);
|
|
23
|
+
}
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=swarmJoin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"swarmJoin.js","sourceRoot":"","sources":["../../src/tools/swarmJoin.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,gCAAgC,CAAC;IACnE,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,+DAA+D,CAAC;IACxG,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kCAAkC,CAAC;IACjF,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;CAC3E,CAAC;AAEF,MAAM,UAAU,QAAQ,CAAC,MAAiB;IACxC,MAAM,CAAC,IAAI,CACT,kBAAkB,EAClB,2DAA2D,EAC3D,WAAW,EACX,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;YACzD,IAAI,IAAI,CAAC,aAAa;gBAAE,OAAO,CAAC,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;YAC7E,IAAI,IAAI,CAAC,UAAU;gBAAE,OAAO,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;YACpE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAC/B,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;YAC9D,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,IAAI,+BAA+B,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":"swarmJoinToken.d.ts","sourceRoot":"","sources":["../../src/tools/swarmJoinToken.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
|
+
role: z.enum(["worker", "manager"]).describe("Token role: worker or manager"),
|
|
5
|
+
rotate: z.boolean().optional().default(false).describe("Rotate the join token"),
|
|
6
|
+
};
|
|
7
|
+
export function register(server) {
|
|
8
|
+
server.tool("docker_swarmJoinToken", "Display or rotate the join token for worker or manager nodes", inputSchema, async (args) => {
|
|
9
|
+
try {
|
|
10
|
+
const cmdArgs = ["swarm", "join-token"];
|
|
11
|
+
if (args.rotate)
|
|
12
|
+
cmdArgs.push("--rotate");
|
|
13
|
+
cmdArgs.push(args.role);
|
|
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=swarmJoinToken.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"swarmJoinToken.js","sourceRoot":"","sources":["../../src/tools/swarmJoinToken.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,IAAI,CAAC,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,+BAA+B,CAAC;IAC7E,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,uBAAuB,CAAC;CAChF,CAAC;AAEF,MAAM,UAAU,QAAQ,CAAC,MAAiB;IACxC,MAAM,CAAC,IAAI,CACT,uBAAuB,EACvB,8DAA8D,EAC9D,WAAW,EACX,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;YACxC,IAAI,IAAI,CAAC,MAAM;gBAAE,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAC1C,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACxB,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":"swarmLeave.d.ts","sourceRoot":"","sources":["../../src/tools/swarmLeave.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAOzE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAgBhD"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { execDocker, errorResponse } from "../utils/docker-api.js";
|
|
3
|
+
const inputSchema = {
|
|
4
|
+
force: z.boolean().optional().default(false).describe("Force leave even if this is the last manager"),
|
|
5
|
+
};
|
|
6
|
+
export function register(server) {
|
|
7
|
+
server.tool("docker_swarmLeave", "Leave the Docker Swarm", inputSchema, async (args) => {
|
|
8
|
+
try {
|
|
9
|
+
const cmdArgs = ["swarm", "leave"];
|
|
10
|
+
if (args.force)
|
|
11
|
+
cmdArgs.push("--force");
|
|
12
|
+
const output = await execDocker(cmdArgs);
|
|
13
|
+
return { content: [{ type: "text", text: output.trim() || "Node left the swarm" }] };
|
|
14
|
+
}
|
|
15
|
+
catch (error) {
|
|
16
|
+
return errorResponse(error);
|
|
17
|
+
}
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=swarmLeave.js.map
|
|
@@ -0,0 +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;YACzC,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":"swarmUnlock.d.ts","sourceRoot":"","sources":["../../src/tools/swarmUnlock.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAQzE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA2BhD"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { errorResponse } from "../utils/docker-api.js";
|
|
3
|
+
import { spawn } from "node:child_process";
|
|
4
|
+
const inputSchema = {
|
|
5
|
+
key: z.string().min(1).describe("Unlock key for the swarm manager"),
|
|
6
|
+
};
|
|
7
|
+
export function register(server) {
|
|
8
|
+
server.tool("docker_swarmUnlock", "Unlock a locked Docker Swarm manager node", inputSchema, async (args) => {
|
|
9
|
+
try {
|
|
10
|
+
const output = await new Promise((resolve, reject) => {
|
|
11
|
+
const proc = spawn("docker", ["swarm", "unlock"], { stdio: ["pipe", "pipe", "pipe"] });
|
|
12
|
+
let stdout = "";
|
|
13
|
+
let stderr = "";
|
|
14
|
+
proc.stdout.on("data", (d) => { stdout += d.toString(); });
|
|
15
|
+
proc.stderr.on("data", (d) => { stderr += d.toString(); });
|
|
16
|
+
proc.on("error", reject);
|
|
17
|
+
proc.on("close", (code) => {
|
|
18
|
+
if (code === 0)
|
|
19
|
+
resolve(stdout);
|
|
20
|
+
else
|
|
21
|
+
reject(new Error(stderr || `docker swarm unlock exited with code ${code}`));
|
|
22
|
+
});
|
|
23
|
+
proc.stdin.write(args.key + "\n");
|
|
24
|
+
proc.stdin.end();
|
|
25
|
+
});
|
|
26
|
+
return { content: [{ type: "text", text: output.trim() || "Swarm unlocked" }] };
|
|
27
|
+
}
|
|
28
|
+
catch (error) {
|
|
29
|
+
return errorResponse(error);
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=swarmUnlock.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"swarmUnlock.js","sourceRoot":"","sources":["../../src/tools/swarmUnlock.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,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,kCAAkC,CAAC;CACpE,CAAC;AAEF,MAAM,UAAU,QAAQ,CAAC,MAAiB;IACxC,MAAM,CAAC,IAAI,CACT,oBAAoB,EACpB,2CAA2C,EAC3C,WAAW,EACX,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBAC3D,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;gBACvF,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,wCAAwC,IAAI,EAAE,CAAC,CAAC,CAAC;gBACnF,CAAC,CAAC,CAAC;gBACH,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC;gBAClC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;YACnB,CAAC,CAAC,CAAC;YACH,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":"swarmUnlockKey.d.ts","sourceRoot":"","sources":["../../src/tools/swarmUnlockKey.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAOzE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAiBhD"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { execDocker, errorResponse } from "../utils/docker-api.js";
|
|
3
|
+
const inputSchema = {
|
|
4
|
+
rotate: z.boolean().optional().default(false).describe("Rotate the unlock key"),
|
|
5
|
+
};
|
|
6
|
+
export function register(server) {
|
|
7
|
+
server.tool("docker_swarmUnlockKey", "Display or rotate the Swarm unlock key", inputSchema, async (args) => {
|
|
8
|
+
try {
|
|
9
|
+
const cmdArgs = ["swarm", "unlock-key"];
|
|
10
|
+
if (args.rotate)
|
|
11
|
+
cmdArgs.push("--rotate");
|
|
12
|
+
cmdArgs.push("-q");
|
|
13
|
+
const output = await execDocker(cmdArgs);
|
|
14
|
+
return { content: [{ type: "text", text: output.trim() }] };
|
|
15
|
+
}
|
|
16
|
+
catch (error) {
|
|
17
|
+
return errorResponse(error);
|
|
18
|
+
}
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=swarmUnlockKey.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"swarmUnlockKey.js","sourceRoot":"","sources":["../../src/tools/swarmUnlockKey.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,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,uBAAuB,CAAC;CAChF,CAAC;AAEF,MAAM,UAAU,QAAQ,CAAC,MAAiB;IACxC,MAAM,CAAC,IAAI,CACT,uBAAuB,EACvB,wCAAwC,EACxC,WAAW,EACX,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;YACxC,IAAI,IAAI,CAAC,MAAM;gBAAE,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAC1C,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACnB,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":"swarmUpdate.d.ts","sourceRoot":"","sources":["../../src/tools/swarmUpdate.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAUzE,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
|
+
taskHistoryLimit: z.number().optional().describe("Task history retention limit"),
|
|
5
|
+
snapshotInterval: z.number().optional().describe("Number of log entries between Raft snapshots"),
|
|
6
|
+
autolock: z.boolean().optional().describe("Enable or disable manager autolocking"),
|
|
7
|
+
certExpiry: z.string().optional().describe("Validity period for node certificates (e.g. '720h')"),
|
|
8
|
+
};
|
|
9
|
+
export function register(server) {
|
|
10
|
+
server.tool("docker_swarmUpdate", "Update the Docker Swarm configuration", inputSchema, async (args) => {
|
|
11
|
+
try {
|
|
12
|
+
const cmdArgs = ["swarm", "update"];
|
|
13
|
+
if (args.taskHistoryLimit !== undefined)
|
|
14
|
+
cmdArgs.push("--task-history-limit", String(args.taskHistoryLimit));
|
|
15
|
+
if (args.snapshotInterval !== undefined)
|
|
16
|
+
cmdArgs.push("--snapshot-interval", String(args.snapshotInterval));
|
|
17
|
+
if (args.autolock !== undefined)
|
|
18
|
+
cmdArgs.push("--autolock=" + String(args.autolock));
|
|
19
|
+
if (args.certExpiry)
|
|
20
|
+
cmdArgs.push("--cert-expiry", args.certExpiry);
|
|
21
|
+
const output = await execDocker(cmdArgs);
|
|
22
|
+
return { content: [{ type: "text", text: output.trim() || "Swarm updated" }] };
|
|
23
|
+
}
|
|
24
|
+
catch (error) {
|
|
25
|
+
return errorResponse(error);
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=swarmUpdate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"swarmUpdate.js","sourceRoot":"","sources":["../../src/tools/swarmUpdate.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,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;IAChF,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8CAA8C,CAAC;IAChG,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC;IAClF,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qDAAqD,CAAC;CAClG,CAAC;AAEF,MAAM,UAAU,QAAQ,CAAC,MAAiB;IACxC,MAAM,CAAC,IAAI,CACT,oBAAoB,EACpB,uCAAuC,EACvC,WAAW,EACX,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;YACpC,IAAI,IAAI,CAAC,gBAAgB,KAAK,SAAS;gBAAE,OAAO,CAAC,IAAI,CAAC,sBAAsB,EAAE,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC;YAC7G,IAAI,IAAI,CAAC,gBAAgB,KAAK,SAAS;gBAAE,OAAO,CAAC,IAAI,CAAC,qBAAqB,EAAE,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC;YAC5G,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS;gBAAE,OAAO,CAAC,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;YACrF,IAAI,IAAI,CAAC,UAAU;gBAAE,OAAO,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;YACpE,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,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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tmhs/docker-mcp",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "MCP server for Docker CLI integration -
|
|
3
|
+
"version": "0.10.0",
|
|
4
|
+
"description": "MCP server for Docker CLI integration - 122 tools for containers, images, compose, volumes, networks, cleanup, observability, buildx, manifests, contexts, registry auth, Swarm orchestration, and system info. Full lifecycle, image pipeline, complete Compose V2, volume/network CRUD, resource pruning, live monitoring, multi-platform builds, manifest management, remote host contexts, registry login, and Swarm cluster/service/node management.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
7
7
|
"bin": {
|