@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.
Files changed (156) hide show
  1. package/README.md +75 -2
  2. package/dist/index.js +77 -1
  3. package/dist/index.js.map +1 -1
  4. package/dist/tools/contextCreate.d.ts +3 -0
  5. package/dist/tools/contextCreate.d.ts.map +1 -0
  6. package/dist/tools/contextCreate.js +25 -0
  7. package/dist/tools/contextCreate.js.map +1 -0
  8. package/dist/tools/contextInspect.d.ts +3 -0
  9. package/dist/tools/contextInspect.d.ts.map +1 -0
  10. package/dist/tools/contextInspect.js +17 -0
  11. package/dist/tools/contextInspect.js.map +1 -0
  12. package/dist/tools/contextLs.d.ts +3 -0
  13. package/dist/tools/contextLs.d.ts.map +1 -0
  14. package/dist/tools/contextLs.js +17 -0
  15. package/dist/tools/contextLs.js.map +1 -0
  16. package/dist/tools/contextRm.d.ts +3 -0
  17. package/dist/tools/contextRm.d.ts.map +1 -0
  18. package/dist/tools/contextRm.js +22 -0
  19. package/dist/tools/contextRm.js.map +1 -0
  20. package/dist/tools/contextShow.d.ts +3 -0
  21. package/dist/tools/contextShow.d.ts.map +1 -0
  22. package/dist/tools/contextShow.js +14 -0
  23. package/dist/tools/contextShow.js.map +1 -0
  24. package/dist/tools/contextUse.d.ts +3 -0
  25. package/dist/tools/contextUse.d.ts.map +1 -0
  26. package/dist/tools/contextUse.js +17 -0
  27. package/dist/tools/contextUse.js.map +1 -0
  28. package/dist/tools/diff.d.ts +3 -0
  29. package/dist/tools/diff.d.ts.map +1 -0
  30. package/dist/tools/diff.js +17 -0
  31. package/dist/tools/diff.js.map +1 -0
  32. package/dist/tools/export.d.ts +3 -0
  33. package/dist/tools/export.d.ts.map +1 -0
  34. package/dist/tools/export.js +18 -0
  35. package/dist/tools/export.js.map +1 -0
  36. package/dist/tools/imageHistory.d.ts +3 -0
  37. package/dist/tools/imageHistory.d.ts.map +1 -0
  38. package/dist/tools/imageHistory.js +23 -0
  39. package/dist/tools/imageHistory.js.map +1 -0
  40. package/dist/tools/import.d.ts +3 -0
  41. package/dist/tools/import.d.ts.map +1 -0
  42. package/dist/tools/import.js +35 -0
  43. package/dist/tools/import.js.map +1 -0
  44. package/dist/tools/login.d.ts +3 -0
  45. package/dist/tools/login.d.ts.map +1 -0
  46. package/dist/tools/login.js +38 -0
  47. package/dist/tools/login.js.map +1 -0
  48. package/dist/tools/logout.d.ts +3 -0
  49. package/dist/tools/logout.d.ts.map +1 -0
  50. package/dist/tools/logout.js +20 -0
  51. package/dist/tools/logout.js.map +1 -0
  52. package/dist/tools/nodeDemote.d.ts +3 -0
  53. package/dist/tools/nodeDemote.d.ts.map +1 -0
  54. package/dist/tools/nodeDemote.js +17 -0
  55. package/dist/tools/nodeDemote.js.map +1 -0
  56. package/dist/tools/nodeInspect.d.ts +3 -0
  57. package/dist/tools/nodeInspect.d.ts.map +1 -0
  58. package/dist/tools/nodeInspect.js +22 -0
  59. package/dist/tools/nodeInspect.js.map +1 -0
  60. package/dist/tools/nodeLs.d.ts +3 -0
  61. package/dist/tools/nodeLs.d.ts.map +1 -0
  62. package/dist/tools/nodeLs.js +22 -0
  63. package/dist/tools/nodeLs.js.map +1 -0
  64. package/dist/tools/nodePromote.d.ts +3 -0
  65. package/dist/tools/nodePromote.d.ts.map +1 -0
  66. package/dist/tools/nodePromote.js +17 -0
  67. package/dist/tools/nodePromote.js.map +1 -0
  68. package/dist/tools/nodePs.d.ts +3 -0
  69. package/dist/tools/nodePs.d.ts.map +1 -0
  70. package/dist/tools/nodePs.js +25 -0
  71. package/dist/tools/nodePs.js.map +1 -0
  72. package/dist/tools/nodeRm.d.ts +3 -0
  73. package/dist/tools/nodeRm.d.ts.map +1 -0
  74. package/dist/tools/nodeRm.js +22 -0
  75. package/dist/tools/nodeRm.js.map +1 -0
  76. package/dist/tools/nodeUpdate.d.ts +3 -0
  77. package/dist/tools/nodeUpdate.d.ts.map +1 -0
  78. package/dist/tools/nodeUpdate.js +29 -0
  79. package/dist/tools/nodeUpdate.js.map +1 -0
  80. package/dist/tools/port.d.ts +3 -0
  81. package/dist/tools/port.d.ts.map +1 -0
  82. package/dist/tools/port.js +26 -0
  83. package/dist/tools/port.js.map +1 -0
  84. package/dist/tools/rename.d.ts +3 -0
  85. package/dist/tools/rename.d.ts.map +1 -0
  86. package/dist/tools/rename.js +18 -0
  87. package/dist/tools/rename.js.map +1 -0
  88. package/dist/tools/serviceCreate.d.ts +3 -0
  89. package/dist/tools/serviceCreate.d.ts.map +1 -0
  90. package/dist/tools/serviceCreate.js +62 -0
  91. package/dist/tools/serviceCreate.js.map +1 -0
  92. package/dist/tools/serviceInspect.d.ts +3 -0
  93. package/dist/tools/serviceInspect.d.ts.map +1 -0
  94. package/dist/tools/serviceInspect.js +22 -0
  95. package/dist/tools/serviceInspect.js.map +1 -0
  96. package/dist/tools/serviceLogs.d.ts +3 -0
  97. package/dist/tools/serviceLogs.d.ts.map +1 -0
  98. package/dist/tools/serviceLogs.js +28 -0
  99. package/dist/tools/serviceLogs.js.map +1 -0
  100. package/dist/tools/serviceLs.d.ts +3 -0
  101. package/dist/tools/serviceLs.d.ts.map +1 -0
  102. package/dist/tools/serviceLs.js +22 -0
  103. package/dist/tools/serviceLs.js.map +1 -0
  104. package/dist/tools/servicePs.d.ts +3 -0
  105. package/dist/tools/servicePs.d.ts.map +1 -0
  106. package/dist/tools/servicePs.js +24 -0
  107. package/dist/tools/servicePs.js.map +1 -0
  108. package/dist/tools/serviceRm.d.ts +3 -0
  109. package/dist/tools/serviceRm.d.ts.map +1 -0
  110. package/dist/tools/serviceRm.js +17 -0
  111. package/dist/tools/serviceRm.js.map +1 -0
  112. package/dist/tools/serviceRollback.d.ts +3 -0
  113. package/dist/tools/serviceRollback.d.ts.map +1 -0
  114. package/dist/tools/serviceRollback.js +22 -0
  115. package/dist/tools/serviceRollback.js.map +1 -0
  116. package/dist/tools/serviceScale.d.ts +3 -0
  117. package/dist/tools/serviceScale.d.ts.map +1 -0
  118. package/dist/tools/serviceScale.js +17 -0
  119. package/dist/tools/serviceScale.js.map +1 -0
  120. package/dist/tools/serviceUpdate.d.ts +3 -0
  121. package/dist/tools/serviceUpdate.d.ts.map +1 -0
  122. package/dist/tools/serviceUpdate.js +45 -0
  123. package/dist/tools/serviceUpdate.js.map +1 -0
  124. package/dist/tools/swarmCa.d.ts +3 -0
  125. package/dist/tools/swarmCa.d.ts.map +1 -0
  126. package/dist/tools/swarmCa.js +26 -0
  127. package/dist/tools/swarmCa.js.map +1 -0
  128. package/dist/tools/swarmInit.d.ts +3 -0
  129. package/dist/tools/swarmInit.d.ts.map +1 -0
  130. package/dist/tools/swarmInit.js +29 -0
  131. package/dist/tools/swarmInit.js.map +1 -0
  132. package/dist/tools/swarmJoin.d.ts +3 -0
  133. package/dist/tools/swarmJoin.d.ts.map +1 -0
  134. package/dist/tools/swarmJoin.js +26 -0
  135. package/dist/tools/swarmJoin.js.map +1 -0
  136. package/dist/tools/swarmJoinToken.d.ts +3 -0
  137. package/dist/tools/swarmJoinToken.d.ts.map +1 -0
  138. package/dist/tools/swarmJoinToken.js +22 -0
  139. package/dist/tools/swarmJoinToken.js.map +1 -0
  140. package/dist/tools/swarmLeave.d.ts +3 -0
  141. package/dist/tools/swarmLeave.d.ts.map +1 -0
  142. package/dist/tools/swarmLeave.js +20 -0
  143. package/dist/tools/swarmLeave.js.map +1 -0
  144. package/dist/tools/swarmUnlock.d.ts +3 -0
  145. package/dist/tools/swarmUnlock.d.ts.map +1 -0
  146. package/dist/tools/swarmUnlock.js +33 -0
  147. package/dist/tools/swarmUnlock.js.map +1 -0
  148. package/dist/tools/swarmUnlockKey.d.ts +3 -0
  149. package/dist/tools/swarmUnlockKey.d.ts.map +1 -0
  150. package/dist/tools/swarmUnlockKey.js +21 -0
  151. package/dist/tools/swarmUnlockKey.js.map +1 -0
  152. package/dist/tools/swarmUpdate.d.ts +3 -0
  153. package/dist/tools/swarmUpdate.d.ts.map +1 -0
  154. package/dist/tools/swarmUpdate.js +29 -0
  155. package/dist/tools/swarmUpdate.js.map +1 -0
  156. 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,3 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function register(server: McpServer): void;
3
+ //# sourceMappingURL=servicePs.d.ts.map
@@ -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,3 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function register(server: McpServer): void;
3
+ //# sourceMappingURL=serviceRm.d.ts.map
@@ -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,3 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function register(server: McpServer): void;
3
+ //# sourceMappingURL=serviceRollback.d.ts.map
@@ -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,3 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function register(server: McpServer): void;
3
+ //# sourceMappingURL=serviceScale.d.ts.map
@@ -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,3 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function register(server: McpServer): void;
3
+ //# sourceMappingURL=serviceUpdate.d.ts.map
@@ -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,3 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function register(server: McpServer): void;
3
+ //# sourceMappingURL=swarmCa.d.ts.map
@@ -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,3 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function register(server: McpServer): void;
3
+ //# sourceMappingURL=swarmInit.d.ts.map
@@ -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,3 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function register(server: McpServer): void;
3
+ //# sourceMappingURL=swarmJoin.d.ts.map
@@ -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,3 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function register(server: McpServer): void;
3
+ //# sourceMappingURL=swarmJoinToken.d.ts.map
@@ -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,3 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function register(server: McpServer): void;
3
+ //# sourceMappingURL=swarmLeave.d.ts.map
@@ -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,3 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function register(server: McpServer): void;
3
+ //# sourceMappingURL=swarmUnlock.d.ts.map
@@ -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,3 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function register(server: McpServer): void;
3
+ //# sourceMappingURL=swarmUnlockKey.d.ts.map
@@ -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,3 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function register(server: McpServer): void;
3
+ //# sourceMappingURL=swarmUpdate.d.ts.map
@@ -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.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.",
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": {