@tmhs/docker-mcp 0.6.0 → 0.8.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.
Files changed (120) hide show
  1. package/README.md +42 -3
  2. package/dist/index.js +59 -1
  3. package/dist/index.js.map +1 -1
  4. package/dist/tools/builderPrune.d.ts +3 -0
  5. package/dist/tools/builderPrune.d.ts.map +1 -0
  6. package/dist/tools/builderPrune.js +43 -0
  7. package/dist/tools/builderPrune.js.map +1 -0
  8. package/dist/tools/buildxBuild.d.ts +3 -0
  9. package/dist/tools/buildxBuild.d.ts.map +1 -0
  10. package/dist/tools/buildxBuild.js +138 -0
  11. package/dist/tools/buildxBuild.js.map +1 -0
  12. package/dist/tools/buildxCreate.d.ts +3 -0
  13. package/dist/tools/buildxCreate.d.ts.map +1 -0
  14. package/dist/tools/buildxCreate.js +66 -0
  15. package/dist/tools/buildxCreate.js.map +1 -0
  16. package/dist/tools/buildxImagetools.d.ts +3 -0
  17. package/dist/tools/buildxImagetools.d.ts.map +1 -0
  18. package/dist/tools/buildxImagetools.js +48 -0
  19. package/dist/tools/buildxImagetools.js.map +1 -0
  20. package/dist/tools/buildxInspect.d.ts +3 -0
  21. package/dist/tools/buildxInspect.d.ts.map +1 -0
  22. package/dist/tools/buildxInspect.js +36 -0
  23. package/dist/tools/buildxInspect.js.map +1 -0
  24. package/dist/tools/buildxLs.d.ts +3 -0
  25. package/dist/tools/buildxLs.d.ts.map +1 -0
  26. package/dist/tools/buildxLs.js +17 -0
  27. package/dist/tools/buildxLs.js.map +1 -0
  28. package/dist/tools/buildxRm.d.ts +3 -0
  29. package/dist/tools/buildxRm.d.ts.map +1 -0
  30. package/dist/tools/buildxRm.js +42 -0
  31. package/dist/tools/buildxRm.js.map +1 -0
  32. package/dist/tools/buildxUse.d.ts +3 -0
  33. package/dist/tools/buildxUse.d.ts.map +1 -0
  34. package/dist/tools/buildxUse.js +42 -0
  35. package/dist/tools/buildxUse.js.map +1 -0
  36. package/dist/tools/composeConfig.d.ts +3 -0
  37. package/dist/tools/composeConfig.d.ts.map +1 -0
  38. package/dist/tools/composeConfig.js +30 -0
  39. package/dist/tools/composeConfig.js.map +1 -0
  40. package/dist/tools/composeCp.d.ts +3 -0
  41. package/dist/tools/composeCp.d.ts.map +1 -0
  42. package/dist/tools/composeCp.js +33 -0
  43. package/dist/tools/composeCp.js.map +1 -0
  44. package/dist/tools/composeCreate.d.ts +3 -0
  45. package/dist/tools/composeCreate.d.ts.map +1 -0
  46. package/dist/tools/composeCreate.js +36 -0
  47. package/dist/tools/composeCreate.js.map +1 -0
  48. package/dist/tools/composeEvents.d.ts +3 -0
  49. package/dist/tools/composeEvents.d.ts.map +1 -0
  50. package/dist/tools/composeEvents.js +31 -0
  51. package/dist/tools/composeEvents.js.map +1 -0
  52. package/dist/tools/composeImages.d.ts +3 -0
  53. package/dist/tools/composeImages.d.ts.map +1 -0
  54. package/dist/tools/composeImages.js +25 -0
  55. package/dist/tools/composeImages.js.map +1 -0
  56. package/dist/tools/composeKill.d.ts +3 -0
  57. package/dist/tools/composeKill.d.ts.map +1 -0
  58. package/dist/tools/composeKill.js +30 -0
  59. package/dist/tools/composeKill.js.map +1 -0
  60. package/dist/tools/composeLs.d.ts +3 -0
  61. package/dist/tools/composeLs.d.ts.map +1 -0
  62. package/dist/tools/composeLs.js +24 -0
  63. package/dist/tools/composeLs.js.map +1 -0
  64. package/dist/tools/composePause.d.ts +3 -0
  65. package/dist/tools/composePause.d.ts.map +1 -0
  66. package/dist/tools/composePause.js +27 -0
  67. package/dist/tools/composePause.js.map +1 -0
  68. package/dist/tools/composePort.d.ts +3 -0
  69. package/dist/tools/composePort.d.ts.map +1 -0
  70. package/dist/tools/composePort.js +30 -0
  71. package/dist/tools/composePort.js.map +1 -0
  72. package/dist/tools/composeRm.d.ts +3 -0
  73. package/dist/tools/composeRm.d.ts.map +1 -0
  74. package/dist/tools/composeRm.js +33 -0
  75. package/dist/tools/composeRm.js.map +1 -0
  76. package/dist/tools/composeRun.d.ts +3 -0
  77. package/dist/tools/composeRun.d.ts.map +1 -0
  78. package/dist/tools/composeRun.js +49 -0
  79. package/dist/tools/composeRun.js.map +1 -0
  80. package/dist/tools/composeScale.d.ts +3 -0
  81. package/dist/tools/composeScale.d.ts.map +1 -0
  82. package/dist/tools/composeScale.js +28 -0
  83. package/dist/tools/composeScale.js.map +1 -0
  84. package/dist/tools/composeStart.d.ts +3 -0
  85. package/dist/tools/composeStart.d.ts.map +1 -0
  86. package/dist/tools/composeStart.js +27 -0
  87. package/dist/tools/composeStart.js.map +1 -0
  88. package/dist/tools/composeStop.d.ts +3 -0
  89. package/dist/tools/composeStop.d.ts.map +1 -0
  90. package/dist/tools/composeStop.js +30 -0
  91. package/dist/tools/composeStop.js.map +1 -0
  92. package/dist/tools/composeTop.d.ts +3 -0
  93. package/dist/tools/composeTop.d.ts.map +1 -0
  94. package/dist/tools/composeTop.js +27 -0
  95. package/dist/tools/composeTop.js.map +1 -0
  96. package/dist/tools/composeUnpause.d.ts +3 -0
  97. package/dist/tools/composeUnpause.d.ts.map +1 -0
  98. package/dist/tools/composeUnpause.js +27 -0
  99. package/dist/tools/composeUnpause.js.map +1 -0
  100. package/dist/tools/manifestAnnotate.d.ts +3 -0
  101. package/dist/tools/manifestAnnotate.d.ts.map +1 -0
  102. package/dist/tools/manifestAnnotate.js +60 -0
  103. package/dist/tools/manifestAnnotate.js.map +1 -0
  104. package/dist/tools/manifestCreate.d.ts +3 -0
  105. package/dist/tools/manifestCreate.d.ts.map +1 -0
  106. package/dist/tools/manifestCreate.js +38 -0
  107. package/dist/tools/manifestCreate.js.map +1 -0
  108. package/dist/tools/manifestInspect.d.ts +3 -0
  109. package/dist/tools/manifestInspect.d.ts.map +1 -0
  110. package/dist/tools/manifestInspect.js +34 -0
  111. package/dist/tools/manifestInspect.js.map +1 -0
  112. package/dist/tools/manifestPush.d.ts +3 -0
  113. package/dist/tools/manifestPush.d.ts.map +1 -0
  114. package/dist/tools/manifestPush.js +34 -0
  115. package/dist/tools/manifestPush.js.map +1 -0
  116. package/dist/tools/manifestRm.d.ts +3 -0
  117. package/dist/tools/manifestRm.d.ts.map +1 -0
  118. package/dist/tools/manifestRm.js +25 -0
  119. package/dist/tools/manifestRm.js.map +1 -0
  120. package/package.json +2 -2
@@ -0,0 +1,49 @@
1
+ import { z } from "zod";
2
+ import { execDocker, errorResponse } from "../utils/docker-api.js";
3
+ const inputSchema = {
4
+ file: z.string().optional().describe("Path to compose file"),
5
+ projectDir: z.string().optional().describe("Working directory for the compose project"),
6
+ service: z.string().min(1).describe("Service to run the command on"),
7
+ command: z.array(z.string()).optional().describe("Command and arguments to run"),
8
+ rm: z.boolean().optional().default(true).describe("Remove container after exit (default: true)"),
9
+ detach: z.boolean().optional().default(false).describe("Run in background"),
10
+ user: z.string().optional().describe("Run as specified user (e.g. 'root', '1000:1000')"),
11
+ env: z.array(z.string()).optional().describe("Environment variables (e.g. ['KEY=value'])"),
12
+ workdir: z.string().optional().describe("Working directory inside the container"),
13
+ noDeps: z.boolean().optional().default(false).describe("Don't start linked services"),
14
+ };
15
+ export function register(server) {
16
+ server.tool("docker_composeRun", "Run a one-off command on a Docker Compose service", inputSchema, async (args) => {
17
+ try {
18
+ const cmdArgs = ["compose"];
19
+ if (args.file)
20
+ cmdArgs.push("-f", args.file);
21
+ if (args.projectDir)
22
+ cmdArgs.push("--project-directory", args.projectDir);
23
+ cmdArgs.push("run", "--no-TTY");
24
+ if (args.rm)
25
+ cmdArgs.push("--rm");
26
+ if (args.detach)
27
+ cmdArgs.push("-d");
28
+ if (args.user)
29
+ cmdArgs.push("--user", args.user);
30
+ if (args.env) {
31
+ for (const e of args.env)
32
+ cmdArgs.push("-e", e);
33
+ }
34
+ if (args.workdir)
35
+ cmdArgs.push("-w", args.workdir);
36
+ if (args.noDeps)
37
+ cmdArgs.push("--no-deps");
38
+ cmdArgs.push(args.service);
39
+ if (args.command)
40
+ cmdArgs.push(...args.command);
41
+ const output = await execDocker(cmdArgs, { timeout: 300_000 });
42
+ return { content: [{ type: "text", text: output.trim() || "Command completed" }] };
43
+ }
44
+ catch (error) {
45
+ return errorResponse(error);
46
+ }
47
+ });
48
+ }
49
+ //# sourceMappingURL=composeRun.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"composeRun.js","sourceRoot":"","sources":["../../src/tools/composeRun.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function register(server: McpServer): void;
3
+ //# sourceMappingURL=composeScale.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"composeScale.d.ts","sourceRoot":"","sources":["../../src/tools/composeScale.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,28 @@
1
+ import { z } from "zod";
2
+ import { execDocker, errorResponse } from "../utils/docker-api.js";
3
+ const inputSchema = {
4
+ file: z.string().optional().describe("Path to compose file"),
5
+ projectDir: z.string().optional().describe("Working directory for the compose project"),
6
+ scales: z.array(z.string()).min(1).describe("Scale specifications (e.g. ['web=3', 'worker=2'])"),
7
+ };
8
+ export function register(server) {
9
+ server.tool("docker_composeScale", "Scale Docker Compose services to a specified number of replicas", inputSchema, async (args) => {
10
+ try {
11
+ const cmdArgs = ["compose"];
12
+ if (args.file)
13
+ cmdArgs.push("-f", args.file);
14
+ if (args.projectDir)
15
+ cmdArgs.push("--project-directory", args.projectDir);
16
+ cmdArgs.push("up", "-d");
17
+ for (const s of args.scales) {
18
+ cmdArgs.push("--scale", s);
19
+ }
20
+ const output = await execDocker(cmdArgs, { timeout: 300_000 });
21
+ return { content: [{ type: "text", text: output.trim() || `Scaled services: ${args.scales.join(", ")}` }] };
22
+ }
23
+ catch (error) {
24
+ return errorResponse(error);
25
+ }
26
+ });
27
+ }
28
+ //# sourceMappingURL=composeScale.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"composeScale.js","sourceRoot":"","sources":["../../src/tools/composeScale.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,QAAQ,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC;IAC5D,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2CAA2C,CAAC;IACvF,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,mDAAmD,CAAC;CACjG,CAAC;AAEF,MAAM,UAAU,QAAQ,CAAC,MAAiB;IACxC,MAAM,CAAC,IAAI,CACT,qBAAqB,EACrB,iEAAiE,EACjE,WAAW,EACX,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,CAAC,SAAS,CAAC,CAAC;YAC5B,IAAI,IAAI,CAAC,IAAI;gBAAE,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;YAC7C,IAAI,IAAI,CAAC,UAAU;gBAAE,OAAO,CAAC,IAAI,CAAC,qBAAqB,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;YAC1E,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YACzB,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;gBAC5B,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;YAC7B,CAAC;YAED,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,oBAAoB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;QACvH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function register(server: McpServer): void;
3
+ //# sourceMappingURL=composeStart.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"composeStart.d.ts","sourceRoot":"","sources":["../../src/tools/composeStart.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AASzE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAoBhD"}
@@ -0,0 +1,27 @@
1
+ import { z } from "zod";
2
+ import { execDocker, errorResponse } from "../utils/docker-api.js";
3
+ const inputSchema = {
4
+ file: z.string().optional().describe("Path to compose file"),
5
+ projectDir: z.string().optional().describe("Working directory for the compose project"),
6
+ services: z.array(z.string()).optional().describe("Specific services to start (default: all)"),
7
+ };
8
+ export function register(server) {
9
+ server.tool("docker_composeStart", "Start existing Docker Compose service containers", inputSchema, async (args) => {
10
+ try {
11
+ const cmdArgs = ["compose"];
12
+ if (args.file)
13
+ cmdArgs.push("-f", args.file);
14
+ if (args.projectDir)
15
+ cmdArgs.push("--project-directory", args.projectDir);
16
+ cmdArgs.push("start");
17
+ if (args.services)
18
+ cmdArgs.push(...args.services);
19
+ const output = await execDocker(cmdArgs);
20
+ return { content: [{ type: "text", text: output.trim() || "Services started" }] };
21
+ }
22
+ catch (error) {
23
+ return errorResponse(error);
24
+ }
25
+ });
26
+ }
27
+ //# sourceMappingURL=composeStart.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"composeStart.js","sourceRoot":"","sources":["../../src/tools/composeStart.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,QAAQ,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC;IAC5D,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2CAA2C,CAAC;IACvF,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2CAA2C,CAAC;CAC/F,CAAC;AAEF,MAAM,UAAU,QAAQ,CAAC,MAAiB;IACxC,MAAM,CAAC,IAAI,CACT,qBAAqB,EACrB,kDAAkD,EAClD,WAAW,EACX,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,CAAC,SAAS,CAAC,CAAC;YAC5B,IAAI,IAAI,CAAC,IAAI;gBAAE,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;YAC7C,IAAI,IAAI,CAAC,UAAU;gBAAE,OAAO,CAAC,IAAI,CAAC,qBAAqB,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;YAC1E,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACtB,IAAI,IAAI,CAAC,QAAQ;gBAAE,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;YAElD,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,3 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function register(server: McpServer): void;
3
+ //# sourceMappingURL=composeStop.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"composeStop.d.ts","sourceRoot":"","sources":["../../src/tools/composeStop.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAUzE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAqBhD"}
@@ -0,0 +1,30 @@
1
+ import { z } from "zod";
2
+ import { execDocker, errorResponse } from "../utils/docker-api.js";
3
+ const inputSchema = {
4
+ file: z.string().optional().describe("Path to compose file"),
5
+ projectDir: z.string().optional().describe("Working directory for the compose project"),
6
+ services: z.array(z.string()).optional().describe("Specific services to stop (default: all)"),
7
+ timeout: z.number().optional().describe("Seconds to wait for graceful stop before killing"),
8
+ };
9
+ export function register(server) {
10
+ server.tool("docker_composeStop", "Stop Docker Compose services without removing containers", inputSchema, async (args) => {
11
+ try {
12
+ const cmdArgs = ["compose"];
13
+ if (args.file)
14
+ cmdArgs.push("-f", args.file);
15
+ if (args.projectDir)
16
+ cmdArgs.push("--project-directory", args.projectDir);
17
+ cmdArgs.push("stop");
18
+ if (args.timeout !== undefined)
19
+ cmdArgs.push("-t", String(args.timeout));
20
+ if (args.services)
21
+ cmdArgs.push(...args.services);
22
+ const output = await execDocker(cmdArgs);
23
+ return { content: [{ type: "text", text: output.trim() || "Services stopped" }] };
24
+ }
25
+ catch (error) {
26
+ return errorResponse(error);
27
+ }
28
+ });
29
+ }
30
+ //# sourceMappingURL=composeStop.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"composeStop.js","sourceRoot":"","sources":["../../src/tools/composeStop.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,QAAQ,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC;IAC5D,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2CAA2C,CAAC;IACvF,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0CAA0C,CAAC;IAC7F,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kDAAkD,CAAC;CAC5F,CAAC;AAEF,MAAM,UAAU,QAAQ,CAAC,MAAiB;IACxC,MAAM,CAAC,IAAI,CACT,oBAAoB,EACpB,0DAA0D,EAC1D,WAAW,EACX,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,CAAC,SAAS,CAAC,CAAC;YAC5B,IAAI,IAAI,CAAC,IAAI;gBAAE,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;YAC7C,IAAI,IAAI,CAAC,UAAU;gBAAE,OAAO,CAAC,IAAI,CAAC,qBAAqB,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;YAC1E,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACrB,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS;gBAAE,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;YACzE,IAAI,IAAI,CAAC,QAAQ;gBAAE,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;YAElD,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,3 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function register(server: McpServer): void;
3
+ //# sourceMappingURL=composeTop.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"composeTop.d.ts","sourceRoot":"","sources":["../../src/tools/composeTop.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AASzE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAoBhD"}
@@ -0,0 +1,27 @@
1
+ import { z } from "zod";
2
+ import { execDocker, errorResponse } from "../utils/docker-api.js";
3
+ const inputSchema = {
4
+ file: z.string().optional().describe("Path to compose file"),
5
+ projectDir: z.string().optional().describe("Working directory for the compose project"),
6
+ services: z.array(z.string()).optional().describe("Specific services to display processes for (default: all)"),
7
+ };
8
+ export function register(server) {
9
+ server.tool("docker_composeTop", "Display running processes in Docker Compose service containers", inputSchema, async (args) => {
10
+ try {
11
+ const cmdArgs = ["compose"];
12
+ if (args.file)
13
+ cmdArgs.push("-f", args.file);
14
+ if (args.projectDir)
15
+ cmdArgs.push("--project-directory", args.projectDir);
16
+ cmdArgs.push("top");
17
+ if (args.services)
18
+ cmdArgs.push(...args.services);
19
+ const output = await execDocker(cmdArgs);
20
+ return { content: [{ type: "text", text: output.trim() || "No running processes found" }] };
21
+ }
22
+ catch (error) {
23
+ return errorResponse(error);
24
+ }
25
+ });
26
+ }
27
+ //# sourceMappingURL=composeTop.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"composeTop.js","sourceRoot":"","sources":["../../src/tools/composeTop.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,QAAQ,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC;IAC5D,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2CAA2C,CAAC;IACvF,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2DAA2D,CAAC;CAC/G,CAAC;AAEF,MAAM,UAAU,QAAQ,CAAC,MAAiB;IACxC,MAAM,CAAC,IAAI,CACT,mBAAmB,EACnB,gEAAgE,EAChE,WAAW,EACX,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,CAAC,SAAS,CAAC,CAAC;YAC5B,IAAI,IAAI,CAAC,IAAI;gBAAE,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;YAC7C,IAAI,IAAI,CAAC,UAAU;gBAAE,OAAO,CAAC,IAAI,CAAC,qBAAqB,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;YAC1E,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACpB,IAAI,IAAI,CAAC,QAAQ;gBAAE,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;YAElD,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,4BAA4B,EAAE,CAAC,EAAE,CAAC;QACvG,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function register(server: McpServer): void;
3
+ //# sourceMappingURL=composeUnpause.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"composeUnpause.d.ts","sourceRoot":"","sources":["../../src/tools/composeUnpause.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AASzE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAoBhD"}
@@ -0,0 +1,27 @@
1
+ import { z } from "zod";
2
+ import { execDocker, errorResponse } from "../utils/docker-api.js";
3
+ const inputSchema = {
4
+ file: z.string().optional().describe("Path to compose file"),
5
+ projectDir: z.string().optional().describe("Working directory for the compose project"),
6
+ services: z.array(z.string()).optional().describe("Specific services to unpause (default: all)"),
7
+ };
8
+ export function register(server) {
9
+ server.tool("docker_composeUnpause", "Unpause Docker Compose services", inputSchema, async (args) => {
10
+ try {
11
+ const cmdArgs = ["compose"];
12
+ if (args.file)
13
+ cmdArgs.push("-f", args.file);
14
+ if (args.projectDir)
15
+ cmdArgs.push("--project-directory", args.projectDir);
16
+ cmdArgs.push("unpause");
17
+ if (args.services)
18
+ cmdArgs.push(...args.services);
19
+ const output = await execDocker(cmdArgs);
20
+ return { content: [{ type: "text", text: output.trim() || "Services unpaused" }] };
21
+ }
22
+ catch (error) {
23
+ return errorResponse(error);
24
+ }
25
+ });
26
+ }
27
+ //# sourceMappingURL=composeUnpause.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"composeUnpause.js","sourceRoot":"","sources":["../../src/tools/composeUnpause.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,QAAQ,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC;IAC5D,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2CAA2C,CAAC;IACvF,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6CAA6C,CAAC;CACjG,CAAC;AAEF,MAAM,UAAU,QAAQ,CAAC,MAAiB;IACxC,MAAM,CAAC,IAAI,CACT,uBAAuB,EACvB,iCAAiC,EACjC,WAAW,EACX,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,CAAC,SAAS,CAAC,CAAC;YAC5B,IAAI,IAAI,CAAC,IAAI;gBAAE,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;YAC7C,IAAI,IAAI,CAAC,UAAU;gBAAE,OAAO,CAAC,IAAI,CAAC,qBAAqB,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;YAC1E,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACxB,IAAI,IAAI,CAAC,QAAQ;gBAAE,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;YAElD,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,3 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function register(server: McpServer): void;
3
+ //# sourceMappingURL=manifestAnnotate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifestAnnotate.d.ts","sourceRoot":"","sources":["../../src/tools/manifestAnnotate.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AA8BzE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAyChD"}
@@ -0,0 +1,60 @@
1
+ import { z } from "zod";
2
+ import { execDocker, errorResponse } from "../utils/docker-api.js";
3
+ const inputSchema = {
4
+ name: z
5
+ .string()
6
+ .min(1)
7
+ .describe("Manifest list name"),
8
+ image: z
9
+ .string()
10
+ .min(1)
11
+ .describe("Image reference within the manifest list to annotate"),
12
+ os: z
13
+ .string()
14
+ .optional()
15
+ .describe("Override OS (e.g. 'linux', 'windows')"),
16
+ arch: z
17
+ .string()
18
+ .optional()
19
+ .describe("Override architecture (e.g. 'amd64', 'arm64', 'arm')"),
20
+ variant: z
21
+ .string()
22
+ .optional()
23
+ .describe("Override variant (e.g. 'v7', 'v8')"),
24
+ osFeatures: z
25
+ .array(z.string())
26
+ .optional()
27
+ .describe("Override OS features"),
28
+ };
29
+ export function register(server) {
30
+ server.tool("docker_manifestAnnotate", "Add platform information to a manifest list entry", inputSchema, async (args) => {
31
+ try {
32
+ const cmdArgs = ["manifest", "annotate"];
33
+ if (args.os) {
34
+ cmdArgs.push("--os", args.os);
35
+ }
36
+ if (args.arch) {
37
+ cmdArgs.push("--arch", args.arch);
38
+ }
39
+ if (args.variant) {
40
+ cmdArgs.push("--variant", args.variant);
41
+ }
42
+ if (args.osFeatures) {
43
+ for (const f of args.osFeatures) {
44
+ cmdArgs.push("--os-features", f);
45
+ }
46
+ }
47
+ cmdArgs.push(args.name, args.image);
48
+ const output = await execDocker(cmdArgs);
49
+ return {
50
+ content: [
51
+ { type: "text", text: output.trim() || `Annotated '${args.image}' in manifest '${args.name}'` },
52
+ ],
53
+ };
54
+ }
55
+ catch (error) {
56
+ return errorResponse(error);
57
+ }
58
+ });
59
+ }
60
+ //# sourceMappingURL=manifestAnnotate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifestAnnotate.js","sourceRoot":"","sources":["../../src/tools/manifestAnnotate.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;SACJ,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,CAAC,oBAAoB,CAAC;IACjC,KAAK,EAAE,CAAC;SACL,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,CAAC,sDAAsD,CAAC;IACnE,EAAE,EAAE,CAAC;SACF,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,uCAAuC,CAAC;IACpD,IAAI,EAAE,CAAC;SACJ,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,sDAAsD,CAAC;IACnE,OAAO,EAAE,CAAC;SACP,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,oCAAoC,CAAC;IACjD,UAAU,EAAE,CAAC;SACV,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;SACjB,QAAQ,EAAE;SACV,QAAQ,CAAC,sBAAsB,CAAC;CACpC,CAAC;AAEF,MAAM,UAAU,QAAQ,CAAC,MAAiB;IACxC,MAAM,CAAC,IAAI,CACT,yBAAyB,EACzB,mDAAmD,EACnD,WAAW,EACX,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;YAEzC,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;gBACZ,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;YAChC,CAAC;YAED,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;gBACd,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;YACpC,CAAC;YAED,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;gBACjB,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;YAC1C,CAAC;YAED,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;gBACpB,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;oBAChC,OAAO,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC;gBACnC,CAAC;YACH,CAAC;YAED,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;YAEpC,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,CAAC;YAEzC,OAAO;gBACL,OAAO,EAAE;oBACP,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,IAAI,cAAc,IAAI,CAAC,KAAK,kBAAkB,IAAI,CAAC,IAAI,GAAG,EAAE;iBACzG;aACF,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function register(server: McpServer): void;
3
+ //# sourceMappingURL=manifestCreate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifestCreate.d.ts","sourceRoot":"","sources":["../../src/tools/manifestCreate.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAmBzE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA2BhD"}
@@ -0,0 +1,38 @@
1
+ import { z } from "zod";
2
+ import { execDocker, errorResponse } from "../utils/docker-api.js";
3
+ const inputSchema = {
4
+ name: z
5
+ .string()
6
+ .min(1)
7
+ .describe("Manifest list name (e.g. 'myregistry/myapp:latest')"),
8
+ images: z
9
+ .array(z.string())
10
+ .min(1)
11
+ .describe("Constituent image references to include in the manifest list"),
12
+ amend: z
13
+ .boolean()
14
+ .optional()
15
+ .default(false)
16
+ .describe("Amend an existing manifest list instead of creating a new one"),
17
+ };
18
+ export function register(server) {
19
+ server.tool("docker_manifestCreate", "Create a local manifest list for multi-architecture Docker images", inputSchema, async (args) => {
20
+ try {
21
+ const cmdArgs = ["manifest", "create"];
22
+ if (args.amend) {
23
+ cmdArgs.push("--amend");
24
+ }
25
+ cmdArgs.push(args.name, ...args.images);
26
+ const output = await execDocker(cmdArgs);
27
+ return {
28
+ content: [
29
+ { type: "text", text: output.trim() || `Created manifest list '${args.name}'` },
30
+ ],
31
+ };
32
+ }
33
+ catch (error) {
34
+ return errorResponse(error);
35
+ }
36
+ });
37
+ }
38
+ //# sourceMappingURL=manifestCreate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifestCreate.js","sourceRoot":"","sources":["../../src/tools/manifestCreate.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;SACJ,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,CAAC,qDAAqD,CAAC;IAClE,MAAM,EAAE,CAAC;SACN,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;SACjB,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,CAAC,8DAA8D,CAAC;IAC3E,KAAK,EAAE,CAAC;SACL,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,OAAO,CAAC,KAAK,CAAC;SACd,QAAQ,CAAC,+DAA+D,CAAC;CAC7E,CAAC;AAEF,MAAM,UAAU,QAAQ,CAAC,MAAiB;IACxC,MAAM,CAAC,IAAI,CACT,uBAAuB,EACvB,mEAAmE,EACnE,WAAW,EACX,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;YAEvC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC1B,CAAC;YAED,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;YAExC,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,CAAC;YAEzC,OAAO;gBACL,OAAO,EAAE;oBACP,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,IAAI,0BAA0B,IAAI,CAAC,IAAI,GAAG,EAAE;iBACzF;aACF,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function register(server: McpServer): void;
3
+ //# sourceMappingURL=manifestInspect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifestInspect.d.ts","sourceRoot":"","sources":["../../src/tools/manifestInspect.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAezE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA2BhD"}
@@ -0,0 +1,34 @@
1
+ import { z } from "zod";
2
+ import { execDocker, errorResponse } from "../utils/docker-api.js";
3
+ const inputSchema = {
4
+ name: z
5
+ .string()
6
+ .min(1)
7
+ .describe("Manifest list or image name to inspect"),
8
+ verbose: z
9
+ .boolean()
10
+ .optional()
11
+ .default(false)
12
+ .describe("Output additional info including layers and platform details"),
13
+ };
14
+ export function register(server) {
15
+ server.tool("docker_manifestInspect", "Display an image manifest or manifest list", inputSchema, async (args) => {
16
+ try {
17
+ const cmdArgs = ["manifest", "inspect"];
18
+ if (args.verbose) {
19
+ cmdArgs.push("--verbose");
20
+ }
21
+ cmdArgs.push(args.name);
22
+ const output = await execDocker(cmdArgs);
23
+ return {
24
+ content: [
25
+ { type: "text", text: output.trim() },
26
+ ],
27
+ };
28
+ }
29
+ catch (error) {
30
+ return errorResponse(error);
31
+ }
32
+ });
33
+ }
34
+ //# sourceMappingURL=manifestInspect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifestInspect.js","sourceRoot":"","sources":["../../src/tools/manifestInspect.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;SACJ,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,CAAC,wCAAwC,CAAC;IACrD,OAAO,EAAE,CAAC;SACP,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,OAAO,CAAC,KAAK,CAAC;SACd,QAAQ,CAAC,8DAA8D,CAAC;CAC5E,CAAC;AAEF,MAAM,UAAU,QAAQ,CAAC,MAAiB;IACxC,MAAM,CAAC,IAAI,CACT,wBAAwB,EACxB,4CAA4C,EAC5C,WAAW,EACX,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;YAExC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;gBACjB,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAC5B,CAAC;YAED,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAExB,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,CAAC;YAEzC,OAAO;gBACL,OAAO,EAAE;oBACP,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,EAAE;iBAC/C;aACF,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function register(server: McpServer): void;
3
+ //# sourceMappingURL=manifestPush.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifestPush.d.ts","sourceRoot":"","sources":["../../src/tools/manifestPush.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAezE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA2BhD"}
@@ -0,0 +1,34 @@
1
+ import { z } from "zod";
2
+ import { execDocker, errorResponse } from "../utils/docker-api.js";
3
+ const inputSchema = {
4
+ name: z
5
+ .string()
6
+ .min(1)
7
+ .describe("Manifest list name to push"),
8
+ purge: z
9
+ .boolean()
10
+ .optional()
11
+ .default(false)
12
+ .describe("Remove the local manifest list after push"),
13
+ };
14
+ export function register(server) {
15
+ server.tool("docker_manifestPush", "Push a manifest list to a registry", inputSchema, async (args) => {
16
+ try {
17
+ const cmdArgs = ["manifest", "push"];
18
+ if (args.purge) {
19
+ cmdArgs.push("--purge");
20
+ }
21
+ cmdArgs.push(args.name);
22
+ const output = await execDocker(cmdArgs, { timeout: 120_000 });
23
+ return {
24
+ content: [
25
+ { type: "text", text: output.trim() || `Pushed manifest list '${args.name}'` },
26
+ ],
27
+ };
28
+ }
29
+ catch (error) {
30
+ return errorResponse(error);
31
+ }
32
+ });
33
+ }
34
+ //# sourceMappingURL=manifestPush.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifestPush.js","sourceRoot":"","sources":["../../src/tools/manifestPush.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;SACJ,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,CAAC,4BAA4B,CAAC;IACzC,KAAK,EAAE,CAAC;SACL,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,OAAO,CAAC,KAAK,CAAC;SACd,QAAQ,CAAC,2CAA2C,CAAC;CACzD,CAAC;AAEF,MAAM,UAAU,QAAQ,CAAC,MAAiB;IACxC,MAAM,CAAC,IAAI,CACT,qBAAqB,EACrB,oCAAoC,EACpC,WAAW,EACX,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;YAErC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC1B,CAAC;YAED,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAExB,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;YAE/D,OAAO;gBACL,OAAO,EAAE;oBACP,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,IAAI,yBAAyB,IAAI,CAAC,IAAI,GAAG,EAAE;iBACxF;aACF,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function register(server: McpServer): void;
3
+ //# sourceMappingURL=manifestRm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifestRm.d.ts","sourceRoot":"","sources":["../../src/tools/manifestRm.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAUzE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAqBhD"}
@@ -0,0 +1,25 @@
1
+ import { z } from "zod";
2
+ import { execDocker, errorResponse } from "../utils/docker-api.js";
3
+ const inputSchema = {
4
+ names: z
5
+ .array(z.string())
6
+ .min(1)
7
+ .describe("Manifest list names to remove"),
8
+ };
9
+ export function register(server) {
10
+ server.tool("docker_manifestRm", "Remove local manifest lists", inputSchema, async (args) => {
11
+ try {
12
+ const cmdArgs = ["manifest", "rm", ...args.names];
13
+ const output = await execDocker(cmdArgs);
14
+ return {
15
+ content: [
16
+ { type: "text", text: output.trim() || `Removed manifest list(s): ${args.names.join(", ")}` },
17
+ ],
18
+ };
19
+ }
20
+ catch (error) {
21
+ return errorResponse(error);
22
+ }
23
+ });
24
+ }
25
+ //# sourceMappingURL=manifestRm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifestRm.js","sourceRoot":"","sources":["../../src/tools/manifestRm.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;SACL,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;SACjB,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,CAAC,+BAA+B,CAAC;CAC7C,CAAC;AAEF,MAAM,UAAU,QAAQ,CAAC,MAAiB;IACxC,MAAM,CAAC,IAAI,CACT,mBAAmB,EACnB,6BAA6B,EAC7B,WAAW,EACX,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,CAAC,UAAU,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;YAElD,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,CAAC;YAEzC,OAAO;gBACL,OAAO,EAAE;oBACP,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,IAAI,6BAA6B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE;iBACvG;aACF,CAAC;QACJ,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.6.0",
4
- "description": "MCP server for Docker CLI integration - 55 tools for containers, images, compose, volumes, networks, cleanup, observability, and system info. Full lifecycle, image pipeline, Compose V2, volume/network CRUD, resource pruning, and live monitoring.",
3
+ "version": "0.8.0",
4
+ "description": "MCP server for Docker CLI integration - 84 tools for containers, images, compose, volumes, networks, cleanup, observability, buildx, manifests, and system info. Full lifecycle, image pipeline, complete Compose V2, volume/network CRUD, resource pruning, live monitoring, multi-platform builds, and manifest management.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
7
7
  "bin": {