@tmhs/docker-mcp 0.9.0 → 0.11.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 (172) hide show
  1. package/README.md +79 -2
  2. package/dist/index.js +85 -1
  3. package/dist/index.js.map +1 -1
  4. package/dist/tools/configCreate.d.ts +3 -0
  5. package/dist/tools/configCreate.d.ts.map +1 -0
  6. package/dist/tools/configCreate.js +24 -0
  7. package/dist/tools/configCreate.js.map +1 -0
  8. package/dist/tools/configInspect.d.ts +3 -0
  9. package/dist/tools/configInspect.d.ts.map +1 -0
  10. package/dist/tools/configInspect.js +22 -0
  11. package/dist/tools/configInspect.js.map +1 -0
  12. package/dist/tools/configLs.d.ts +3 -0
  13. package/dist/tools/configLs.d.ts.map +1 -0
  14. package/dist/tools/configLs.js +22 -0
  15. package/dist/tools/configLs.js.map +1 -0
  16. package/dist/tools/configRm.d.ts +3 -0
  17. package/dist/tools/configRm.d.ts.map +1 -0
  18. package/dist/tools/configRm.js +17 -0
  19. package/dist/tools/configRm.js.map +1 -0
  20. package/dist/tools/nodeDemote.d.ts +3 -0
  21. package/dist/tools/nodeDemote.d.ts.map +1 -0
  22. package/dist/tools/nodeDemote.js +17 -0
  23. package/dist/tools/nodeDemote.js.map +1 -0
  24. package/dist/tools/nodeInspect.d.ts +3 -0
  25. package/dist/tools/nodeInspect.d.ts.map +1 -0
  26. package/dist/tools/nodeInspect.js +22 -0
  27. package/dist/tools/nodeInspect.js.map +1 -0
  28. package/dist/tools/nodeLs.d.ts +3 -0
  29. package/dist/tools/nodeLs.d.ts.map +1 -0
  30. package/dist/tools/nodeLs.js +22 -0
  31. package/dist/tools/nodeLs.js.map +1 -0
  32. package/dist/tools/nodePromote.d.ts +3 -0
  33. package/dist/tools/nodePromote.d.ts.map +1 -0
  34. package/dist/tools/nodePromote.js +17 -0
  35. package/dist/tools/nodePromote.js.map +1 -0
  36. package/dist/tools/nodePs.d.ts +3 -0
  37. package/dist/tools/nodePs.d.ts.map +1 -0
  38. package/dist/tools/nodePs.js +25 -0
  39. package/dist/tools/nodePs.js.map +1 -0
  40. package/dist/tools/nodeRm.d.ts +3 -0
  41. package/dist/tools/nodeRm.d.ts.map +1 -0
  42. package/dist/tools/nodeRm.js +22 -0
  43. package/dist/tools/nodeRm.js.map +1 -0
  44. package/dist/tools/nodeUpdate.d.ts +3 -0
  45. package/dist/tools/nodeUpdate.d.ts.map +1 -0
  46. package/dist/tools/nodeUpdate.js +29 -0
  47. package/dist/tools/nodeUpdate.js.map +1 -0
  48. package/dist/tools/secretCreate.d.ts +3 -0
  49. package/dist/tools/secretCreate.d.ts.map +1 -0
  50. package/dist/tools/secretCreate.js +24 -0
  51. package/dist/tools/secretCreate.js.map +1 -0
  52. package/dist/tools/secretInspect.d.ts +3 -0
  53. package/dist/tools/secretInspect.d.ts.map +1 -0
  54. package/dist/tools/secretInspect.js +22 -0
  55. package/dist/tools/secretInspect.js.map +1 -0
  56. package/dist/tools/secretLs.d.ts +3 -0
  57. package/dist/tools/secretLs.d.ts.map +1 -0
  58. package/dist/tools/secretLs.js +22 -0
  59. package/dist/tools/secretLs.js.map +1 -0
  60. package/dist/tools/secretRm.d.ts +3 -0
  61. package/dist/tools/secretRm.d.ts.map +1 -0
  62. package/dist/tools/secretRm.js +17 -0
  63. package/dist/tools/secretRm.js.map +1 -0
  64. package/dist/tools/serviceCreate.d.ts +3 -0
  65. package/dist/tools/serviceCreate.d.ts.map +1 -0
  66. package/dist/tools/serviceCreate.js +62 -0
  67. package/dist/tools/serviceCreate.js.map +1 -0
  68. package/dist/tools/serviceInspect.d.ts +3 -0
  69. package/dist/tools/serviceInspect.d.ts.map +1 -0
  70. package/dist/tools/serviceInspect.js +22 -0
  71. package/dist/tools/serviceInspect.js.map +1 -0
  72. package/dist/tools/serviceLogs.d.ts +3 -0
  73. package/dist/tools/serviceLogs.d.ts.map +1 -0
  74. package/dist/tools/serviceLogs.js +28 -0
  75. package/dist/tools/serviceLogs.js.map +1 -0
  76. package/dist/tools/serviceLs.d.ts +3 -0
  77. package/dist/tools/serviceLs.d.ts.map +1 -0
  78. package/dist/tools/serviceLs.js +22 -0
  79. package/dist/tools/serviceLs.js.map +1 -0
  80. package/dist/tools/servicePs.d.ts +3 -0
  81. package/dist/tools/servicePs.d.ts.map +1 -0
  82. package/dist/tools/servicePs.js +24 -0
  83. package/dist/tools/servicePs.js.map +1 -0
  84. package/dist/tools/serviceRm.d.ts +3 -0
  85. package/dist/tools/serviceRm.d.ts.map +1 -0
  86. package/dist/tools/serviceRm.js +17 -0
  87. package/dist/tools/serviceRm.js.map +1 -0
  88. package/dist/tools/serviceRollback.d.ts +3 -0
  89. package/dist/tools/serviceRollback.d.ts.map +1 -0
  90. package/dist/tools/serviceRollback.js +22 -0
  91. package/dist/tools/serviceRollback.js.map +1 -0
  92. package/dist/tools/serviceScale.d.ts +3 -0
  93. package/dist/tools/serviceScale.d.ts.map +1 -0
  94. package/dist/tools/serviceScale.js +17 -0
  95. package/dist/tools/serviceScale.js.map +1 -0
  96. package/dist/tools/serviceUpdate.d.ts +3 -0
  97. package/dist/tools/serviceUpdate.d.ts.map +1 -0
  98. package/dist/tools/serviceUpdate.js +45 -0
  99. package/dist/tools/serviceUpdate.js.map +1 -0
  100. package/dist/tools/stackConfig.d.ts +3 -0
  101. package/dist/tools/stackConfig.d.ts.map +1 -0
  102. package/dist/tools/stackConfig.js +17 -0
  103. package/dist/tools/stackConfig.js.map +1 -0
  104. package/dist/tools/stackDeploy.d.ts +3 -0
  105. package/dist/tools/stackDeploy.d.ts.map +1 -0
  106. package/dist/tools/stackDeploy.js +29 -0
  107. package/dist/tools/stackDeploy.js.map +1 -0
  108. package/dist/tools/stackLs.d.ts +3 -0
  109. package/dist/tools/stackLs.d.ts.map +1 -0
  110. package/dist/tools/stackLs.js +17 -0
  111. package/dist/tools/stackLs.js.map +1 -0
  112. package/dist/tools/stackPs.d.ts +3 -0
  113. package/dist/tools/stackPs.d.ts.map +1 -0
  114. package/dist/tools/stackPs.js +24 -0
  115. package/dist/tools/stackPs.js.map +1 -0
  116. package/dist/tools/stackRm.d.ts +3 -0
  117. package/dist/tools/stackRm.d.ts.map +1 -0
  118. package/dist/tools/stackRm.js +17 -0
  119. package/dist/tools/stackRm.js.map +1 -0
  120. package/dist/tools/stackServices.d.ts +3 -0
  121. package/dist/tools/stackServices.d.ts.map +1 -0
  122. package/dist/tools/stackServices.js +24 -0
  123. package/dist/tools/stackServices.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/dist/tools/trustInspect.d.ts +3 -0
  157. package/dist/tools/trustInspect.d.ts.map +1 -0
  158. package/dist/tools/trustInspect.js +22 -0
  159. package/dist/tools/trustInspect.js.map +1 -0
  160. package/dist/tools/trustKey.d.ts +3 -0
  161. package/dist/tools/trustKey.d.ts.map +1 -0
  162. package/dist/tools/trustKey.js +30 -0
  163. package/dist/tools/trustKey.js.map +1 -0
  164. package/dist/tools/trustRevoke.d.ts +3 -0
  165. package/dist/tools/trustRevoke.d.ts.map +1 -0
  166. package/dist/tools/trustRevoke.js +22 -0
  167. package/dist/tools/trustRevoke.js.map +1 -0
  168. package/dist/tools/trustSign.d.ts +3 -0
  169. package/dist/tools/trustSign.d.ts.map +1 -0
  170. package/dist/tools/trustSign.js +22 -0
  171. package/dist/tools/trustSign.js.map +1 -0
  172. package/package.json +2 -2
@@ -0,0 +1,17 @@
1
+ import { z } from "zod";
2
+ import { execDocker, errorResponse } from "../utils/docker-api.js";
3
+ const inputSchema = {
4
+ composeFile: z.string().min(1).describe("Path to the compose file"),
5
+ };
6
+ export function register(server) {
7
+ server.tool("docker_stackConfig", "Output the final merged configuration for a Docker Swarm stack", inputSchema, async (args) => {
8
+ try {
9
+ const output = await execDocker(["stack", "config", "-c", args.composeFile]);
10
+ return { content: [{ type: "text", text: output.trim() }] };
11
+ }
12
+ catch (error) {
13
+ return errorResponse(error);
14
+ }
15
+ });
16
+ }
17
+ //# sourceMappingURL=stackConfig.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stackConfig.js","sourceRoot":"","sources":["../../src/tools/stackConfig.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAEnE,MAAM,WAAW,GAAG;IAClB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,0BAA0B,CAAC;CACpE,CAAC;AAEF,MAAM,UAAU,QAAQ,CAAC,MAAiB;IACxC,MAAM,CAAC,IAAI,CACT,oBAAoB,EACpB,gEAAgE,EAChE,WAAW,EACX,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;YAC7E,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC;QACvE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function register(server: McpServer): void;
3
+ //# sourceMappingURL=stackDeploy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stackDeploy.d.ts","sourceRoot":"","sources":["../../src/tools/stackDeploy.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAWzE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAmBhD"}
@@ -0,0 +1,29 @@
1
+ import { z } from "zod";
2
+ import { execDocker, errorResponse } from "../utils/docker-api.js";
3
+ const inputSchema = {
4
+ name: z.string().min(1).describe("Stack name"),
5
+ composeFile: z.string().min(1).describe("Path to the compose file"),
6
+ prune: z.boolean().optional().default(false).describe("Prune services that are no longer referenced"),
7
+ resolveImage: z.enum(["always", "changed", "never"]).optional().describe("Query the registry to resolve image digest and supported platforms"),
8
+ withRegistryAuth: z.boolean().optional().default(false).describe("Send registry authentication details to Swarm agents"),
9
+ };
10
+ export function register(server) {
11
+ server.tool("docker_stackDeploy", "Deploy a new stack or update an existing stack from a compose file", inputSchema, async (args) => {
12
+ try {
13
+ const cmdArgs = ["stack", "deploy", "-c", args.composeFile];
14
+ if (args.prune)
15
+ cmdArgs.push("--prune");
16
+ if (args.resolveImage)
17
+ cmdArgs.push("--resolve-image", args.resolveImage);
18
+ if (args.withRegistryAuth)
19
+ cmdArgs.push("--with-registry-auth");
20
+ cmdArgs.push(args.name);
21
+ const output = await execDocker(cmdArgs, { timeout: 120_000 });
22
+ return { content: [{ type: "text", text: output.trim() || `Stack '${args.name}' deployed` }] };
23
+ }
24
+ catch (error) {
25
+ return errorResponse(error);
26
+ }
27
+ });
28
+ }
29
+ //# sourceMappingURL=stackDeploy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stackDeploy.js","sourceRoot":"","sources":["../../src/tools/stackDeploy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAEnE,MAAM,WAAW,GAAG;IAClB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC;IAC9C,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,0BAA0B,CAAC;IACnE,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,8CAA8C,CAAC;IACrG,YAAY,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oEAAoE,CAAC;IAC9I,gBAAgB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,sDAAsD,CAAC;CACzH,CAAC;AAEF,MAAM,UAAU,QAAQ,CAAC,MAAiB;IACxC,MAAM,CAAC,IAAI,CACT,oBAAoB,EACpB,oEAAoE,EACpE,WAAW,EACX,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;YAC5D,IAAI,IAAI,CAAC,KAAK;gBAAE,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACxC,IAAI,IAAI,CAAC,YAAY;gBAAE,OAAO,CAAC,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;YAC1E,IAAI,IAAI,CAAC,gBAAgB;gBAAE,OAAO,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;YAChE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACxB,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;YAC/D,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,IAAI,UAAU,IAAI,CAAC,IAAI,YAAY,EAAE,CAAC,EAAE,CAAC;QAC1G,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function register(server: McpServer): void;
3
+ //# sourceMappingURL=stackLs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stackLs.d.ts","sourceRoot":"","sources":["../../src/tools/stackLs.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAOzE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAchD"}
@@ -0,0 +1,17 @@
1
+ import { z } from "zod";
2
+ import { execDocker, errorResponse } from "../utils/docker-api.js";
3
+ const inputSchema = {
4
+ format: z.string().optional().default("json").describe("Output format (default: json)"),
5
+ };
6
+ export function register(server) {
7
+ server.tool("docker_stackLs", "List Docker Swarm stacks", inputSchema, async (args) => {
8
+ try {
9
+ const output = await execDocker(["stack", "ls", "--format", args.format ?? "json"]);
10
+ return { content: [{ type: "text", text: output.trim() || "No stacks found" }] };
11
+ }
12
+ catch (error) {
13
+ return errorResponse(error);
14
+ }
15
+ });
16
+ }
17
+ //# sourceMappingURL=stackLs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stackLs.js","sourceRoot":"","sources":["../../src/tools/stackLs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAEnE,MAAM,WAAW,GAAG;IAClB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,+BAA+B,CAAC;CACxF,CAAC;AAEF,MAAM,UAAU,QAAQ,CAAC,MAAiB;IACxC,MAAM,CAAC,IAAI,CACT,gBAAgB,EAChB,0BAA0B,EAC1B,WAAW,EACX,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,CAAC,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,CAAC,CAAC;YACpF,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,IAAI,iBAAiB,EAAE,CAAC,EAAE,CAAC;QAC5F,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function register(server: McpServer): void;
3
+ //# sourceMappingURL=stackPs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stackPs.d.ts","sourceRoot":"","sources":["../../src/tools/stackPs.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AASzE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAiBhD"}
@@ -0,0 +1,24 @@
1
+ import { z } from "zod";
2
+ import { execDocker, errorResponse } from "../utils/docker-api.js";
3
+ const inputSchema = {
4
+ stack: z.string().min(1).describe("Stack name"),
5
+ filter: z.array(z.string()).optional().describe("Filters (e.g. ['desired-state=running'])"),
6
+ format: z.string().optional().default("json").describe("Output format (default: json)"),
7
+ };
8
+ export function register(server) {
9
+ server.tool("docker_stackPs", "List tasks (containers) in a Docker Swarm stack", inputSchema, async (args) => {
10
+ try {
11
+ const cmdArgs = ["stack", "ps", "--format", args.format ?? "json"];
12
+ if (args.filter)
13
+ for (const f of args.filter)
14
+ cmdArgs.push("--filter", f);
15
+ cmdArgs.push(args.stack);
16
+ const output = await execDocker(cmdArgs);
17
+ return { content: [{ type: "text", text: output.trim() || "No tasks found" }] };
18
+ }
19
+ catch (error) {
20
+ return errorResponse(error);
21
+ }
22
+ });
23
+ }
24
+ //# sourceMappingURL=stackPs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stackPs.js","sourceRoot":"","sources":["../../src/tools/stackPs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAEnE,MAAM,WAAW,GAAG;IAClB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC;IAC/C,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0CAA0C,CAAC;IAC3F,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,+BAA+B,CAAC;CACxF,CAAC;AAEF,MAAM,UAAU,QAAQ,CAAC,MAAiB;IACxC,MAAM,CAAC,IAAI,CACT,gBAAgB,EAChB,iDAAiD,EACjD,WAAW,EACX,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,CAAC,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,CAAC;YACnE,IAAI,IAAI,CAAC,MAAM;gBAAE,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM;oBAAE,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;YAC1E,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACzB,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,CAAC;YACzC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,IAAI,gBAAgB,EAAE,CAAC,EAAE,CAAC;QAC3F,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function register(server: McpServer): void;
3
+ //# sourceMappingURL=stackRm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stackRm.d.ts","sourceRoot":"","sources":["../../src/tools/stackRm.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAOzE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAchD"}
@@ -0,0 +1,17 @@
1
+ import { z } from "zod";
2
+ import { execDocker, errorResponse } from "../utils/docker-api.js";
3
+ const inputSchema = {
4
+ stacks: z.array(z.string()).min(1).describe("Stack names to remove"),
5
+ };
6
+ export function register(server) {
7
+ server.tool("docker_stackRm", "Remove one or more Docker Swarm stacks", inputSchema, async (args) => {
8
+ try {
9
+ const output = await execDocker(["stack", "rm", ...args.stacks]);
10
+ return { content: [{ type: "text", text: output.trim() || `Removed stacks: ${args.stacks.join(", ")}` }] };
11
+ }
12
+ catch (error) {
13
+ return errorResponse(error);
14
+ }
15
+ });
16
+ }
17
+ //# sourceMappingURL=stackRm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stackRm.js","sourceRoot":"","sources":["../../src/tools/stackRm.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAEnE,MAAM,WAAW,GAAG;IAClB,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,uBAAuB,CAAC;CACrE,CAAC;AAEF,MAAM,UAAU,QAAQ,CAAC,MAAiB;IACxC,MAAM,CAAC,IAAI,CACT,gBAAgB,EAChB,wCAAwC,EACxC,WAAW,EACX,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,CAAC,OAAO,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;YACjE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,IAAI,mBAAmB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;QACtH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function register(server: McpServer): void;
3
+ //# sourceMappingURL=stackServices.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stackServices.d.ts","sourceRoot":"","sources":["../../src/tools/stackServices.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AASzE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAiBhD"}
@@ -0,0 +1,24 @@
1
+ import { z } from "zod";
2
+ import { execDocker, errorResponse } from "../utils/docker-api.js";
3
+ const inputSchema = {
4
+ stack: z.string().min(1).describe("Stack name"),
5
+ filter: z.array(z.string()).optional().describe("Filters (e.g. ['name=web'])"),
6
+ format: z.string().optional().default("json").describe("Output format (default: json)"),
7
+ };
8
+ export function register(server) {
9
+ server.tool("docker_stackServices", "List services in a Docker Swarm stack", inputSchema, async (args) => {
10
+ try {
11
+ const cmdArgs = ["stack", "services", "--format", args.format ?? "json"];
12
+ if (args.filter)
13
+ for (const f of args.filter)
14
+ cmdArgs.push("--filter", f);
15
+ cmdArgs.push(args.stack);
16
+ const output = await execDocker(cmdArgs);
17
+ return { content: [{ type: "text", text: output.trim() || "No services found" }] };
18
+ }
19
+ catch (error) {
20
+ return errorResponse(error);
21
+ }
22
+ });
23
+ }
24
+ //# sourceMappingURL=stackServices.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stackServices.js","sourceRoot":"","sources":["../../src/tools/stackServices.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAEnE,MAAM,WAAW,GAAG;IAClB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC;IAC/C,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;IAC9E,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,+BAA+B,CAAC;CACxF,CAAC;AAEF,MAAM,UAAU,QAAQ,CAAC,MAAiB;IACxC,MAAM,CAAC,IAAI,CACT,sBAAsB,EACtB,uCAAuC,EACvC,WAAW,EACX,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,CAAC,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,CAAC;YACzE,IAAI,IAAI,CAAC,MAAM;gBAAE,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM;oBAAE,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;YAC1E,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACzB,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,CAAC;YACzC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,IAAI,mBAAmB,EAAE,CAAC,EAAE,CAAC;QAC9F,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -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"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function register(server: McpServer): void;
3
+ //# sourceMappingURL=trustInspect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trustInspect.d.ts","sourceRoot":"","sources":["../../src/tools/trustInspect.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAQzE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAiBhD"}
@@ -0,0 +1,22 @@
1
+ import { z } from "zod";
2
+ import { execDocker, errorResponse } from "../utils/docker-api.js";
3
+ const inputSchema = {
4
+ image: z.string().min(1).describe("Image name (e.g. 'docker.io/library/nginx')"),
5
+ pretty: z.boolean().optional().default(false).describe("Print in human-readable format"),
6
+ };
7
+ export function register(server) {
8
+ server.tool("docker_trustInspect", "Inspect Docker Content Trust data for an image (signers, signatures, keys)", inputSchema, async (args) => {
9
+ try {
10
+ const cmdArgs = ["trust", "inspect"];
11
+ if (args.pretty)
12
+ cmdArgs.push("--pretty");
13
+ cmdArgs.push(args.image);
14
+ const output = await execDocker(cmdArgs);
15
+ return { content: [{ type: "text", text: output.trim() }] };
16
+ }
17
+ catch (error) {
18
+ return errorResponse(error);
19
+ }
20
+ });
21
+ }
22
+ //# sourceMappingURL=trustInspect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trustInspect.js","sourceRoot":"","sources":["../../src/tools/trustInspect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAEnE,MAAM,WAAW,GAAG;IAClB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,6CAA6C,CAAC;IAChF,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,gCAAgC,CAAC;CACzF,CAAC;AAEF,MAAM,UAAU,QAAQ,CAAC,MAAiB;IACxC,MAAM,CAAC,IAAI,CACT,qBAAqB,EACrB,4EAA4E,EAC5E,WAAW,EACX,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;YACrC,IAAI,IAAI,CAAC,MAAM;gBAAE,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAC1C,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACzB,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,CAAC;YACzC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC;QACvE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function register(server: McpServer): void;
3
+ //# sourceMappingURL=trustKey.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trustKey.d.ts","sourceRoot":"","sources":["../../src/tools/trustKey.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AASzE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAsBhD"}