@tmhs/docker-mcp 0.4.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 (159) hide show
  1. package/LICENSE +31 -0
  2. package/README.md +111 -0
  3. package/dist/index.d.ts +3 -0
  4. package/dist/index.d.ts.map +1 -0
  5. package/dist/index.js +88 -0
  6. package/dist/index.js.map +1 -0
  7. package/dist/tools/build.d.ts +3 -0
  8. package/dist/tools/build.d.ts.map +1 -0
  9. package/dist/tools/build.js +90 -0
  10. package/dist/tools/build.js.map +1 -0
  11. package/dist/tools/commit.d.ts +3 -0
  12. package/dist/tools/commit.d.ts.map +1 -0
  13. package/dist/tools/commit.js +66 -0
  14. package/dist/tools/commit.js.map +1 -0
  15. package/dist/tools/composeBuild.d.ts +3 -0
  16. package/dist/tools/composeBuild.d.ts.map +1 -0
  17. package/dist/tools/composeBuild.js +59 -0
  18. package/dist/tools/composeBuild.js.map +1 -0
  19. package/dist/tools/composeDown.d.ts +3 -0
  20. package/dist/tools/composeDown.d.ts.map +1 -0
  21. package/dist/tools/composeDown.js +58 -0
  22. package/dist/tools/composeDown.js.map +1 -0
  23. package/dist/tools/composeExec.d.ts +3 -0
  24. package/dist/tools/composeExec.d.ts.map +1 -0
  25. package/dist/tools/composeExec.js +68 -0
  26. package/dist/tools/composeExec.js.map +1 -0
  27. package/dist/tools/composeLogs.d.ts +3 -0
  28. package/dist/tools/composeLogs.d.ts.map +1 -0
  29. package/dist/tools/composeLogs.js +65 -0
  30. package/dist/tools/composeLogs.js.map +1 -0
  31. package/dist/tools/composePs.d.ts +3 -0
  32. package/dist/tools/composePs.d.ts.map +1 -0
  33. package/dist/tools/composePs.js +51 -0
  34. package/dist/tools/composePs.js.map +1 -0
  35. package/dist/tools/composePull.d.ts +3 -0
  36. package/dist/tools/composePull.d.ts.map +1 -0
  37. package/dist/tools/composePull.js +43 -0
  38. package/dist/tools/composePull.js.map +1 -0
  39. package/dist/tools/composeRestart.d.ts +3 -0
  40. package/dist/tools/composeRestart.d.ts.map +1 -0
  41. package/dist/tools/composeRestart.js +50 -0
  42. package/dist/tools/composeRestart.js.map +1 -0
  43. package/dist/tools/composeUp.d.ts +3 -0
  44. package/dist/tools/composeUp.d.ts.map +1 -0
  45. package/dist/tools/composeUp.js +83 -0
  46. package/dist/tools/composeUp.js.map +1 -0
  47. package/dist/tools/containerLogs.d.ts +3 -0
  48. package/dist/tools/containerLogs.d.ts.map +1 -0
  49. package/dist/tools/containerLogs.js +56 -0
  50. package/dist/tools/containerLogs.js.map +1 -0
  51. package/dist/tools/create.d.ts +3 -0
  52. package/dist/tools/create.d.ts.map +1 -0
  53. package/dist/tools/create.js +91 -0
  54. package/dist/tools/create.js.map +1 -0
  55. package/dist/tools/diskUsage.d.ts +3 -0
  56. package/dist/tools/diskUsage.d.ts.map +1 -0
  57. package/dist/tools/diskUsage.js +19 -0
  58. package/dist/tools/diskUsage.js.map +1 -0
  59. package/dist/tools/exec.d.ts +3 -0
  60. package/dist/tools/exec.d.ts.map +1 -0
  61. package/dist/tools/exec.js +56 -0
  62. package/dist/tools/exec.js.map +1 -0
  63. package/dist/tools/inspectContainer.d.ts +3 -0
  64. package/dist/tools/inspectContainer.d.ts.map +1 -0
  65. package/dist/tools/inspectContainer.js +30 -0
  66. package/dist/tools/inspectContainer.js.map +1 -0
  67. package/dist/tools/inspectImage.d.ts +3 -0
  68. package/dist/tools/inspectImage.d.ts.map +1 -0
  69. package/dist/tools/inspectImage.js +30 -0
  70. package/dist/tools/inspectImage.js.map +1 -0
  71. package/dist/tools/kill.d.ts +3 -0
  72. package/dist/tools/kill.d.ts.map +1 -0
  73. package/dist/tools/kill.js +36 -0
  74. package/dist/tools/kill.js.map +1 -0
  75. package/dist/tools/listContainers.d.ts +3 -0
  76. package/dist/tools/listContainers.d.ts.map +1 -0
  77. package/dist/tools/listContainers.js +63 -0
  78. package/dist/tools/listContainers.js.map +1 -0
  79. package/dist/tools/listImages.d.ts +3 -0
  80. package/dist/tools/listImages.d.ts.map +1 -0
  81. package/dist/tools/listImages.js +44 -0
  82. package/dist/tools/listImages.js.map +1 -0
  83. package/dist/tools/listNetworks.d.ts +3 -0
  84. package/dist/tools/listNetworks.d.ts.map +1 -0
  85. package/dist/tools/listNetworks.js +37 -0
  86. package/dist/tools/listNetworks.js.map +1 -0
  87. package/dist/tools/listVolumes.d.ts +3 -0
  88. package/dist/tools/listVolumes.d.ts.map +1 -0
  89. package/dist/tools/listVolumes.js +37 -0
  90. package/dist/tools/listVolumes.js.map +1 -0
  91. package/dist/tools/load.d.ts +3 -0
  92. package/dist/tools/load.d.ts.map +1 -0
  93. package/dist/tools/load.js +25 -0
  94. package/dist/tools/load.js.map +1 -0
  95. package/dist/tools/pause.d.ts +3 -0
  96. package/dist/tools/pause.d.ts.map +1 -0
  97. package/dist/tools/pause.js +27 -0
  98. package/dist/tools/pause.js.map +1 -0
  99. package/dist/tools/pull.d.ts +3 -0
  100. package/dist/tools/pull.d.ts.map +1 -0
  101. package/dist/tools/pull.js +41 -0
  102. package/dist/tools/pull.js.map +1 -0
  103. package/dist/tools/push.d.ts +3 -0
  104. package/dist/tools/push.d.ts.map +1 -0
  105. package/dist/tools/push.js +34 -0
  106. package/dist/tools/push.js.map +1 -0
  107. package/dist/tools/restart.d.ts +3 -0
  108. package/dist/tools/restart.d.ts.map +1 -0
  109. package/dist/tools/restart.js +38 -0
  110. package/dist/tools/restart.js.map +1 -0
  111. package/dist/tools/rm.d.ts +3 -0
  112. package/dist/tools/rm.d.ts.map +1 -0
  113. package/dist/tools/rm.js +45 -0
  114. package/dist/tools/rm.js.map +1 -0
  115. package/dist/tools/rmi.d.ts +3 -0
  116. package/dist/tools/rmi.d.ts.map +1 -0
  117. package/dist/tools/rmi.js +42 -0
  118. package/dist/tools/rmi.js.map +1 -0
  119. package/dist/tools/run.d.ts +3 -0
  120. package/dist/tools/run.d.ts.map +1 -0
  121. package/dist/tools/run.js +99 -0
  122. package/dist/tools/run.js.map +1 -0
  123. package/dist/tools/save.d.ts +3 -0
  124. package/dist/tools/save.d.ts.map +1 -0
  125. package/dist/tools/save.js +32 -0
  126. package/dist/tools/save.js.map +1 -0
  127. package/dist/tools/searchHub.d.ts +3 -0
  128. package/dist/tools/searchHub.d.ts.map +1 -0
  129. package/dist/tools/searchHub.js +59 -0
  130. package/dist/tools/searchHub.js.map +1 -0
  131. package/dist/tools/start.d.ts +3 -0
  132. package/dist/tools/start.d.ts.map +1 -0
  133. package/dist/tools/start.js +27 -0
  134. package/dist/tools/start.js.map +1 -0
  135. package/dist/tools/stop.d.ts +3 -0
  136. package/dist/tools/stop.d.ts.map +1 -0
  137. package/dist/tools/stop.js +38 -0
  138. package/dist/tools/stop.js.map +1 -0
  139. package/dist/tools/systemInfo.d.ts +3 -0
  140. package/dist/tools/systemInfo.d.ts.map +1 -0
  141. package/dist/tools/systemInfo.js +18 -0
  142. package/dist/tools/systemInfo.js.map +1 -0
  143. package/dist/tools/tag.d.ts +3 -0
  144. package/dist/tools/tag.d.ts.map +1 -0
  145. package/dist/tools/tag.js +31 -0
  146. package/dist/tools/tag.js.map +1 -0
  147. package/dist/tools/unpause.d.ts +3 -0
  148. package/dist/tools/unpause.d.ts.map +1 -0
  149. package/dist/tools/unpause.js +27 -0
  150. package/dist/tools/unpause.js.map +1 -0
  151. package/dist/utils/docker-api.d.ts +15 -0
  152. package/dist/utils/docker-api.d.ts.map +1 -0
  153. package/dist/utils/docker-api.js +82 -0
  154. package/dist/utils/docker-api.js.map +1 -0
  155. package/dist/utils/errors.d.ts +23 -0
  156. package/dist/utils/errors.d.ts.map +1 -0
  157. package/dist/utils/errors.js +45 -0
  158. package/dist/utils/errors.js.map +1 -0
  159. package/package.json +47 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"restart.d.ts","sourceRoot":"","sources":["../../src/tools/restart.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAgBzE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA8BhD"}
@@ -0,0 +1,38 @@
1
+ import { z } from "zod";
2
+ import { execDocker, errorResponse } from "../utils/docker-api.js";
3
+ const inputSchema = {
4
+ containerId: z
5
+ .string()
6
+ .min(1)
7
+ .describe("Container ID or name to restart"),
8
+ time: z
9
+ .number()
10
+ .int()
11
+ .nonnegative()
12
+ .optional()
13
+ .describe("Seconds to wait before killing the container (default: 10)"),
14
+ };
15
+ export function register(server) {
16
+ server.tool("docker_restart", "Restart a container with an optional grace period", inputSchema, async (args) => {
17
+ try {
18
+ const cmdArgs = ["restart"];
19
+ if (args.time !== undefined) {
20
+ cmdArgs.push("-t", String(args.time));
21
+ }
22
+ cmdArgs.push(args.containerId);
23
+ await execDocker(cmdArgs);
24
+ return {
25
+ content: [
26
+ {
27
+ type: "text",
28
+ text: `Container restarted: ${args.containerId}`,
29
+ },
30
+ ],
31
+ };
32
+ }
33
+ catch (error) {
34
+ return errorResponse(error);
35
+ }
36
+ });
37
+ }
38
+ //# sourceMappingURL=restart.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"restart.js","sourceRoot":"","sources":["../../src/tools/restart.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;SACX,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,CAAC,iCAAiC,CAAC;IAC9C,IAAI,EAAE,CAAC;SACJ,MAAM,EAAE;SACR,GAAG,EAAE;SACL,WAAW,EAAE;SACb,QAAQ,EAAE;SACV,QAAQ,CAAC,4DAA4D,CAAC;CAC1E,CAAC;AAEF,MAAM,UAAU,QAAQ,CAAC,MAAiB;IACxC,MAAM,CAAC,IAAI,CACT,gBAAgB,EAChB,mDAAmD,EACnD,WAAW,EACX,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,CAAC,SAAS,CAAC,CAAC;YAE5B,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBAC5B,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YACxC,CAAC;YAED,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAE/B,MAAM,UAAU,CAAC,OAAO,CAAC,CAAC;YAE1B,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,wBAAwB,IAAI,CAAC,WAAW,EAAE;qBACjD;iBACF;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=rm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rm.d.ts","sourceRoot":"","sources":["../../src/tools/rm.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAoBzE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAkChD"}
@@ -0,0 +1,45 @@
1
+ import { z } from "zod";
2
+ import { execDocker, errorResponse } from "../utils/docker-api.js";
3
+ const inputSchema = {
4
+ containerId: z
5
+ .string()
6
+ .min(1)
7
+ .describe("Container ID or name to remove"),
8
+ force: z
9
+ .boolean()
10
+ .optional()
11
+ .default(false)
12
+ .describe("Force removal of a running container (uses SIGKILL)"),
13
+ volumes: z
14
+ .boolean()
15
+ .optional()
16
+ .default(false)
17
+ .describe("Remove anonymous volumes associated with the container"),
18
+ };
19
+ export function register(server) {
20
+ server.tool("docker_rm", "Remove a container (must be stopped unless force is true)", inputSchema, async (args) => {
21
+ try {
22
+ const cmdArgs = ["rm"];
23
+ if (args.force) {
24
+ cmdArgs.push("--force");
25
+ }
26
+ if (args.volumes) {
27
+ cmdArgs.push("--volumes");
28
+ }
29
+ cmdArgs.push(args.containerId);
30
+ await execDocker(cmdArgs);
31
+ return {
32
+ content: [
33
+ {
34
+ type: "text",
35
+ text: `Container removed: ${args.containerId}`,
36
+ },
37
+ ],
38
+ };
39
+ }
40
+ catch (error) {
41
+ return errorResponse(error);
42
+ }
43
+ });
44
+ }
45
+ //# sourceMappingURL=rm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rm.js","sourceRoot":"","sources":["../../src/tools/rm.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;SACX,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,CAAC,gCAAgC,CAAC;IAC7C,KAAK,EAAE,CAAC;SACL,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,OAAO,CAAC,KAAK,CAAC;SACd,QAAQ,CAAC,qDAAqD,CAAC;IAClE,OAAO,EAAE,CAAC;SACP,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,OAAO,CAAC,KAAK,CAAC;SACd,QAAQ,CAAC,wDAAwD,CAAC;CACtE,CAAC;AAEF,MAAM,UAAU,QAAQ,CAAC,MAAiB;IACxC,MAAM,CAAC,IAAI,CACT,WAAW,EACX,2DAA2D,EAC3D,WAAW,EACX,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC;YAEvB,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC1B,CAAC;YAED,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;gBACjB,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAC5B,CAAC;YAED,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAE/B,MAAM,UAAU,CAAC,OAAO,CAAC,CAAC;YAE1B,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,sBAAsB,IAAI,CAAC,WAAW,EAAE;qBAC/C;iBACF;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=rmi.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rmi.d.ts","sourceRoot":"","sources":["../../src/tools/rmi.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAoBzE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA+BhD"}
@@ -0,0 +1,42 @@
1
+ import { z } from "zod";
2
+ import { execDocker, errorResponse } from "../utils/docker-api.js";
3
+ const inputSchema = {
4
+ images: z
5
+ .array(z.string().min(1))
6
+ .min(1)
7
+ .describe("Image names or IDs to remove (e.g. ['nginx:old', 'abc123'])"),
8
+ force: z
9
+ .boolean()
10
+ .optional()
11
+ .default(false)
12
+ .describe("Force removal of the image"),
13
+ noPrune: z
14
+ .boolean()
15
+ .optional()
16
+ .default(false)
17
+ .describe("Do not delete untagged parent images"),
18
+ };
19
+ export function register(server) {
20
+ server.tool("docker_rmi", "Remove one or more images", inputSchema, async (args) => {
21
+ try {
22
+ const cmdArgs = ["rmi"];
23
+ if (args.force) {
24
+ cmdArgs.push("--force");
25
+ }
26
+ if (args.noPrune) {
27
+ cmdArgs.push("--no-prune");
28
+ }
29
+ cmdArgs.push(...args.images);
30
+ const output = await execDocker(cmdArgs);
31
+ return {
32
+ content: [
33
+ { type: "text", text: output.trim() },
34
+ ],
35
+ };
36
+ }
37
+ catch (error) {
38
+ return errorResponse(error);
39
+ }
40
+ });
41
+ }
42
+ //# sourceMappingURL=rmi.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rmi.js","sourceRoot":"","sources":["../../src/tools/rmi.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;SACN,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;SACxB,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,CAAC,6DAA6D,CAAC;IAC1E,KAAK,EAAE,CAAC;SACL,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,OAAO,CAAC,KAAK,CAAC;SACd,QAAQ,CAAC,4BAA4B,CAAC;IACzC,OAAO,EAAE,CAAC;SACP,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,OAAO,CAAC,KAAK,CAAC;SACd,QAAQ,CAAC,sCAAsC,CAAC;CACpD,CAAC;AAEF,MAAM,UAAU,QAAQ,CAAC,MAAiB;IACxC,MAAM,CAAC,IAAI,CACT,YAAY,EACZ,2BAA2B,EAC3B,WAAW,EACX,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC;YAExB,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC1B,CAAC;YAED,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;gBACjB,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAC7B,CAAC;YAED,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;YAE7B,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=run.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/tools/run.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AA4CzE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAuEhD"}
@@ -0,0 +1,99 @@
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 to run (e.g. 'nginx:alpine', 'ubuntu:22.04')"),
5
+ name: z
6
+ .string()
7
+ .optional()
8
+ .describe("Assign a name to the container"),
9
+ ports: z
10
+ .array(z.string())
11
+ .optional()
12
+ .describe("Port mappings as 'host:container' (e.g. ['8080:80', '443:443'])"),
13
+ env: z
14
+ .array(z.string())
15
+ .optional()
16
+ .describe("Environment variables as 'KEY=VALUE' (e.g. ['NODE_ENV=production'])"),
17
+ volumes: z
18
+ .array(z.string())
19
+ .optional()
20
+ .describe("Volume mounts as 'host:container' or 'name:container' (e.g. ['mydata:/data'])"),
21
+ network: z
22
+ .string()
23
+ .optional()
24
+ .describe("Connect the container to a network"),
25
+ remove: z
26
+ .boolean()
27
+ .optional()
28
+ .default(false)
29
+ .describe("Automatically remove the container when it exits"),
30
+ command: z
31
+ .array(z.string())
32
+ .optional()
33
+ .describe("Command and arguments to run in the container"),
34
+ labels: z
35
+ .array(z.string())
36
+ .optional()
37
+ .describe("Container labels as 'key=value'"),
38
+ restart: z
39
+ .string()
40
+ .optional()
41
+ .describe("Restart policy (no, always, on-failure, unless-stopped)"),
42
+ };
43
+ export function register(server) {
44
+ server.tool("docker_run", "Create and start a container from an image (always runs detached)", inputSchema, async (args) => {
45
+ try {
46
+ const cmdArgs = ["run", "-d"];
47
+ if (args.name) {
48
+ cmdArgs.push("--name", args.name);
49
+ }
50
+ if (args.ports) {
51
+ for (const p of args.ports) {
52
+ cmdArgs.push("-p", p);
53
+ }
54
+ }
55
+ if (args.env) {
56
+ for (const e of args.env) {
57
+ cmdArgs.push("-e", e);
58
+ }
59
+ }
60
+ if (args.volumes) {
61
+ for (const v of args.volumes) {
62
+ cmdArgs.push("-v", v);
63
+ }
64
+ }
65
+ if (args.network) {
66
+ cmdArgs.push("--network", args.network);
67
+ }
68
+ if (args.remove) {
69
+ cmdArgs.push("--rm");
70
+ }
71
+ if (args.labels) {
72
+ for (const l of args.labels) {
73
+ cmdArgs.push("--label", l);
74
+ }
75
+ }
76
+ if (args.restart) {
77
+ cmdArgs.push("--restart", args.restart);
78
+ }
79
+ cmdArgs.push(args.image);
80
+ if (args.command) {
81
+ cmdArgs.push(...args.command);
82
+ }
83
+ const output = await execDocker(cmdArgs);
84
+ const containerId = output.trim();
85
+ return {
86
+ content: [
87
+ {
88
+ type: "text",
89
+ text: `Container started: ${containerId}`,
90
+ },
91
+ ],
92
+ };
93
+ }
94
+ catch (error) {
95
+ return errorResponse(error);
96
+ }
97
+ });
98
+ }
99
+ //# sourceMappingURL=run.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/tools/run.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=save.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"save.d.ts","sourceRoot":"","sources":["../../src/tools/save.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAczE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAwBhD"}
@@ -0,0 +1,32 @@
1
+ import { z } from "zod";
2
+ import { execDocker, errorResponse } from "../utils/docker-api.js";
3
+ const inputSchema = {
4
+ images: z
5
+ .array(z.string().min(1))
6
+ .min(1)
7
+ .describe("Image names or IDs to save (e.g. ['myapp:v1', 'myapp:v2'])"),
8
+ output: z
9
+ .string()
10
+ .min(1)
11
+ .describe("Output file path for the tar archive (e.g. './myapp-images.tar')"),
12
+ };
13
+ export function register(server) {
14
+ server.tool("docker_save", "Save one or more images to a tar archive", inputSchema, async (args) => {
15
+ try {
16
+ const cmdArgs = ["save", "-o", args.output, ...args.images];
17
+ await execDocker(cmdArgs, { timeout: 300_000 });
18
+ return {
19
+ content: [
20
+ {
21
+ type: "text",
22
+ text: `Saved ${args.images.join(", ")} to ${args.output}`,
23
+ },
24
+ ],
25
+ };
26
+ }
27
+ catch (error) {
28
+ return errorResponse(error);
29
+ }
30
+ });
31
+ }
32
+ //# sourceMappingURL=save.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"save.js","sourceRoot":"","sources":["../../src/tools/save.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;SACN,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;SACxB,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,CAAC,4DAA4D,CAAC;IACzE,MAAM,EAAE,CAAC;SACN,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,CAAC,kEAAkE,CAAC;CAChF,CAAC;AAEF,MAAM,UAAU,QAAQ,CAAC,MAAiB;IACxC,MAAM,CAAC,IAAI,CACT,aAAa,EACb,0CAA0C,EAC1C,WAAW,EACX,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;YAE5D,MAAM,UAAU,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;YAEhD,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,SAAS,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,MAAM,EAAE;qBAC1D;iBACF;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=searchHub.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"searchHub.d.ts","sourceRoot":"","sources":["../../src/tools/searchHub.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAsBzE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA+ChD"}
@@ -0,0 +1,59 @@
1
+ import { z } from "zod";
2
+ import { execDocker, errorResponse } from "../utils/docker-api.js";
3
+ const inputSchema = {
4
+ term: z
5
+ .string()
6
+ .min(1)
7
+ .describe("Search term to look up on Docker Hub (e.g. 'nginx', 'postgres', 'node')"),
8
+ limit: z
9
+ .number()
10
+ .int()
11
+ .min(1)
12
+ .max(100)
13
+ .optional()
14
+ .default(25)
15
+ .describe("Maximum number of results to return (default: 25, max: 100)"),
16
+ filter: z
17
+ .string()
18
+ .optional()
19
+ .describe("Filter results (e.g. 'is-official=true', 'stars=10')"),
20
+ };
21
+ export function register(server) {
22
+ server.tool("docker_searchHub", "Search Docker Hub for images by name", inputSchema, async (args) => {
23
+ try {
24
+ const cmdArgs = [
25
+ "search",
26
+ "--format",
27
+ "json",
28
+ "--limit",
29
+ String(args.limit),
30
+ ];
31
+ if (args.filter) {
32
+ cmdArgs.push("--filter", args.filter);
33
+ }
34
+ cmdArgs.push(args.term);
35
+ const output = await execDocker(cmdArgs);
36
+ if (!output.trim()) {
37
+ return {
38
+ content: [
39
+ {
40
+ type: "text",
41
+ text: `No images found on Docker Hub for: ${args.term}`,
42
+ },
43
+ ],
44
+ };
45
+ }
46
+ const lines = output.trim().split("\n").filter(Boolean);
47
+ const results = lines.map((line) => JSON.parse(line));
48
+ return {
49
+ content: [
50
+ { type: "text", text: JSON.stringify(results, null, 2) },
51
+ ],
52
+ };
53
+ }
54
+ catch (error) {
55
+ return errorResponse(error);
56
+ }
57
+ });
58
+ }
59
+ //# sourceMappingURL=searchHub.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"searchHub.js","sourceRoot":"","sources":["../../src/tools/searchHub.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,yEAAyE,CAAC;IACtF,KAAK,EAAE,CAAC;SACL,MAAM,EAAE;SACR,GAAG,EAAE;SACL,GAAG,CAAC,CAAC,CAAC;SACN,GAAG,CAAC,GAAG,CAAC;SACR,QAAQ,EAAE;SACV,OAAO,CAAC,EAAE,CAAC;SACX,QAAQ,CAAC,6DAA6D,CAAC;IAC1E,MAAM,EAAE,CAAC;SACN,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,sDAAsD,CAAC;CACpE,CAAC;AAEF,MAAM,UAAU,QAAQ,CAAC,MAAiB;IACxC,MAAM,CAAC,IAAI,CACT,kBAAkB,EAClB,sCAAsC,EACtC,WAAW,EACX,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,IAAI,CAAC;YACH,MAAM,OAAO,GAAG;gBACd,QAAQ;gBACR,UAAU;gBACV,MAAM;gBACN,SAAS;gBACT,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;aACnB,CAAC;YAEF,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;gBAChB,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YACxC,CAAC;YAED,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAExB,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,CAAC;YAEzC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;gBACnB,OAAO;oBACL,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAe;4BACrB,IAAI,EAAE,sCAAsC,IAAI,CAAC,IAAI,EAAE;yBACxD;qBACF;iBACF,CAAC;YACJ,CAAC;YAED,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YACxD,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;YAEtD,OAAO;gBACL,OAAO,EAAE;oBACP,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE;iBAClE;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=start.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"start.d.ts","sourceRoot":"","sources":["../../src/tools/start.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAUzE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAsBhD"}
@@ -0,0 +1,27 @@
1
+ import { z } from "zod";
2
+ import { execDocker, errorResponse } from "../utils/docker-api.js";
3
+ const inputSchema = {
4
+ containerId: z
5
+ .string()
6
+ .min(1)
7
+ .describe("Container ID or name to start"),
8
+ };
9
+ export function register(server) {
10
+ server.tool("docker_start", "Start a stopped container", inputSchema, async (args) => {
11
+ try {
12
+ await execDocker(["start", args.containerId]);
13
+ return {
14
+ content: [
15
+ {
16
+ type: "text",
17
+ text: `Container started: ${args.containerId}`,
18
+ },
19
+ ],
20
+ };
21
+ }
22
+ catch (error) {
23
+ return errorResponse(error);
24
+ }
25
+ });
26
+ }
27
+ //# sourceMappingURL=start.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"start.js","sourceRoot":"","sources":["../../src/tools/start.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;SACX,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,CAAC,+BAA+B,CAAC;CAC7C,CAAC;AAEF,MAAM,UAAU,QAAQ,CAAC,MAAiB;IACxC,MAAM,CAAC,IAAI,CACT,cAAc,EACd,2BAA2B,EAC3B,WAAW,EACX,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,IAAI,CAAC;YACH,MAAM,UAAU,CAAC,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;YAE9C,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,sBAAsB,IAAI,CAAC,WAAW,EAAE;qBAC/C;iBACF;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=stop.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stop.d.ts","sourceRoot":"","sources":["../../src/tools/stop.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAgBzE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA8BhD"}
@@ -0,0 +1,38 @@
1
+ import { z } from "zod";
2
+ import { execDocker, errorResponse } from "../utils/docker-api.js";
3
+ const inputSchema = {
4
+ containerId: z
5
+ .string()
6
+ .min(1)
7
+ .describe("Container ID or name to stop"),
8
+ time: z
9
+ .number()
10
+ .int()
11
+ .nonnegative()
12
+ .optional()
13
+ .describe("Seconds to wait before killing the container (default: 10)"),
14
+ };
15
+ export function register(server) {
16
+ server.tool("docker_stop", "Stop a running container with an optional grace period", inputSchema, async (args) => {
17
+ try {
18
+ const cmdArgs = ["stop"];
19
+ if (args.time !== undefined) {
20
+ cmdArgs.push("-t", String(args.time));
21
+ }
22
+ cmdArgs.push(args.containerId);
23
+ await execDocker(cmdArgs);
24
+ return {
25
+ content: [
26
+ {
27
+ type: "text",
28
+ text: `Container stopped: ${args.containerId}`,
29
+ },
30
+ ],
31
+ };
32
+ }
33
+ catch (error) {
34
+ return errorResponse(error);
35
+ }
36
+ });
37
+ }
38
+ //# sourceMappingURL=stop.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stop.js","sourceRoot":"","sources":["../../src/tools/stop.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;SACX,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,CAAC,8BAA8B,CAAC;IAC3C,IAAI,EAAE,CAAC;SACJ,MAAM,EAAE;SACR,GAAG,EAAE;SACL,WAAW,EAAE;SACb,QAAQ,EAAE;SACV,QAAQ,CAAC,4DAA4D,CAAC;CAC1E,CAAC;AAEF,MAAM,UAAU,QAAQ,CAAC,MAAiB;IACxC,MAAM,CAAC,IAAI,CACT,aAAa,EACb,wDAAwD,EACxD,WAAW,EACX,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC;YAEzB,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBAC5B,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YACxC,CAAC;YAED,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAE/B,MAAM,UAAU,CAAC,OAAO,CAAC,CAAC;YAE1B,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,sBAAsB,IAAI,CAAC,WAAW,EAAE;qBAC/C;iBACF;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=systemInfo.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"systemInfo.d.ts","sourceRoot":"","sources":["../../src/tools/systemInfo.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAGzE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAoBhD"}
@@ -0,0 +1,18 @@
1
+ import { execDocker, errorResponse } from "../utils/docker-api.js";
2
+ export function register(server) {
3
+ server.tool("docker_systemInfo", "Get Docker system information including version, OS, storage driver, and resource limits", {}, async () => {
4
+ try {
5
+ const output = await execDocker(["info", "--format", "json"]);
6
+ const data = JSON.parse(output);
7
+ return {
8
+ content: [
9
+ { type: "text", text: JSON.stringify(data, null, 2) },
10
+ ],
11
+ };
12
+ }
13
+ catch (error) {
14
+ return errorResponse(error);
15
+ }
16
+ });
17
+ }
18
+ //# sourceMappingURL=systemInfo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"systemInfo.js","sourceRoot":"","sources":["../../src/tools/systemInfo.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAEnE,MAAM,UAAU,QAAQ,CAAC,MAAiB;IACxC,MAAM,CAAC,IAAI,CACT,mBAAmB,EACnB,0FAA0F,EAC1F,EAAE,EACF,KAAK,IAAI,EAAE;QACT,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;YAC9D,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAEhC,OAAO;gBACL,OAAO,EAAE;oBACP,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE;iBAC/D;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=tag.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tag.d.ts","sourceRoot":"","sources":["../../src/tools/tag.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAczE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAsBhD"}
@@ -0,0 +1,31 @@
1
+ import { z } from "zod";
2
+ import { execDocker, errorResponse } from "../utils/docker-api.js";
3
+ const inputSchema = {
4
+ sourceImage: z
5
+ .string()
6
+ .min(1)
7
+ .describe("Source image name or ID (e.g. 'myapp:latest', 'abc123')"),
8
+ targetImage: z
9
+ .string()
10
+ .min(1)
11
+ .describe("Target image name and tag (e.g. 'registry.example.com/myapp:v2.0')"),
12
+ };
13
+ export function register(server) {
14
+ server.tool("docker_tag", "Create a tag that refers to a source image", inputSchema, async (args) => {
15
+ try {
16
+ await execDocker(["tag", args.sourceImage, args.targetImage]);
17
+ return {
18
+ content: [
19
+ {
20
+ type: "text",
21
+ text: `Tagged ${args.sourceImage} as ${args.targetImage}`,
22
+ },
23
+ ],
24
+ };
25
+ }
26
+ catch (error) {
27
+ return errorResponse(error);
28
+ }
29
+ });
30
+ }
31
+ //# sourceMappingURL=tag.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tag.js","sourceRoot":"","sources":["../../src/tools/tag.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;SACX,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,CAAC,yDAAyD,CAAC;IACtE,WAAW,EAAE,CAAC;SACX,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,CAAC,oEAAoE,CAAC;CAClF,CAAC;AAEF,MAAM,UAAU,QAAQ,CAAC,MAAiB;IACxC,MAAM,CAAC,IAAI,CACT,YAAY,EACZ,4CAA4C,EAC5C,WAAW,EACX,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,IAAI,CAAC;YACH,MAAM,UAAU,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;YAE9D,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,UAAU,IAAI,CAAC,WAAW,OAAO,IAAI,CAAC,WAAW,EAAE;qBAC1D;iBACF;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=unpause.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unpause.d.ts","sourceRoot":"","sources":["../../src/tools/unpause.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAUzE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAsBhD"}
@@ -0,0 +1,27 @@
1
+ import { z } from "zod";
2
+ import { execDocker, errorResponse } from "../utils/docker-api.js";
3
+ const inputSchema = {
4
+ containerId: z
5
+ .string()
6
+ .min(1)
7
+ .describe("Container ID or name to unpause"),
8
+ };
9
+ export function register(server) {
10
+ server.tool("docker_unpause", "Unpause a paused container", inputSchema, async (args) => {
11
+ try {
12
+ await execDocker(["unpause", args.containerId]);
13
+ return {
14
+ content: [
15
+ {
16
+ type: "text",
17
+ text: `Container unpaused: ${args.containerId}`,
18
+ },
19
+ ],
20
+ };
21
+ }
22
+ catch (error) {
23
+ return errorResponse(error);
24
+ }
25
+ });
26
+ }
27
+ //# sourceMappingURL=unpause.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unpause.js","sourceRoot":"","sources":["../../src/tools/unpause.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;SACX,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,CAAC,iCAAiC,CAAC;CAC/C,CAAC;AAEF,MAAM,UAAU,QAAQ,CAAC,MAAiB;IACxC,MAAM,CAAC,IAAI,CACT,gBAAgB,EAChB,4BAA4B,EAC5B,WAAW,EACX,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,IAAI,CAAC;YACH,MAAM,UAAU,CAAC,CAAC,SAAS,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;YAEhD,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,uBAAuB,IAAI,CAAC,WAAW,EAAE;qBAChD;iBACF;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,15 @@
1
+ export declare function checkDockerAvailable(): Promise<void>;
2
+ export interface ExecDockerOptions {
3
+ timeout?: number;
4
+ parseJson?: boolean;
5
+ }
6
+ export declare function execDocker(args: string[], options?: ExecDockerOptions): Promise<string>;
7
+ export declare function parseJsonLines(output: string): unknown[];
8
+ export declare function errorResponse(error: unknown): {
9
+ content: {
10
+ type: "text";
11
+ text: string;
12
+ }[];
13
+ isError: true;
14
+ };
15
+ //# sourceMappingURL=docker-api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docker-api.d.ts","sourceRoot":"","sources":["../../src/utils/docker-api.ts"],"names":[],"mappings":"AAeA,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC,CAwB1D;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,wBAAsB,UAAU,CAC9B,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,MAAM,CAAC,CAoDjB;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,EAAE,CAGxD;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG;IAC7C,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC1C,OAAO,EAAE,IAAI,CAAC;CACf,CAWA"}