@tmhs/docker-mcp 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (159) hide show
  1. package/LICENSE +31 -0
  2. package/README.md +111 -0
  3. package/dist/index.d.ts +3 -0
  4. package/dist/index.d.ts.map +1 -0
  5. package/dist/index.js +88 -0
  6. package/dist/index.js.map +1 -0
  7. package/dist/tools/build.d.ts +3 -0
  8. package/dist/tools/build.d.ts.map +1 -0
  9. package/dist/tools/build.js +90 -0
  10. package/dist/tools/build.js.map +1 -0
  11. package/dist/tools/commit.d.ts +3 -0
  12. package/dist/tools/commit.d.ts.map +1 -0
  13. package/dist/tools/commit.js +66 -0
  14. package/dist/tools/commit.js.map +1 -0
  15. package/dist/tools/composeBuild.d.ts +3 -0
  16. package/dist/tools/composeBuild.d.ts.map +1 -0
  17. package/dist/tools/composeBuild.js +59 -0
  18. package/dist/tools/composeBuild.js.map +1 -0
  19. package/dist/tools/composeDown.d.ts +3 -0
  20. package/dist/tools/composeDown.d.ts.map +1 -0
  21. package/dist/tools/composeDown.js +58 -0
  22. package/dist/tools/composeDown.js.map +1 -0
  23. package/dist/tools/composeExec.d.ts +3 -0
  24. package/dist/tools/composeExec.d.ts.map +1 -0
  25. package/dist/tools/composeExec.js +68 -0
  26. package/dist/tools/composeExec.js.map +1 -0
  27. package/dist/tools/composeLogs.d.ts +3 -0
  28. package/dist/tools/composeLogs.d.ts.map +1 -0
  29. package/dist/tools/composeLogs.js +65 -0
  30. package/dist/tools/composeLogs.js.map +1 -0
  31. package/dist/tools/composePs.d.ts +3 -0
  32. package/dist/tools/composePs.d.ts.map +1 -0
  33. package/dist/tools/composePs.js +51 -0
  34. package/dist/tools/composePs.js.map +1 -0
  35. package/dist/tools/composePull.d.ts +3 -0
  36. package/dist/tools/composePull.d.ts.map +1 -0
  37. package/dist/tools/composePull.js +43 -0
  38. package/dist/tools/composePull.js.map +1 -0
  39. package/dist/tools/composeRestart.d.ts +3 -0
  40. package/dist/tools/composeRestart.d.ts.map +1 -0
  41. package/dist/tools/composeRestart.js +50 -0
  42. package/dist/tools/composeRestart.js.map +1 -0
  43. package/dist/tools/composeUp.d.ts +3 -0
  44. package/dist/tools/composeUp.d.ts.map +1 -0
  45. package/dist/tools/composeUp.js +83 -0
  46. package/dist/tools/composeUp.js.map +1 -0
  47. package/dist/tools/containerLogs.d.ts +3 -0
  48. package/dist/tools/containerLogs.d.ts.map +1 -0
  49. package/dist/tools/containerLogs.js +56 -0
  50. package/dist/tools/containerLogs.js.map +1 -0
  51. package/dist/tools/create.d.ts +3 -0
  52. package/dist/tools/create.d.ts.map +1 -0
  53. package/dist/tools/create.js +91 -0
  54. package/dist/tools/create.js.map +1 -0
  55. package/dist/tools/diskUsage.d.ts +3 -0
  56. package/dist/tools/diskUsage.d.ts.map +1 -0
  57. package/dist/tools/diskUsage.js +19 -0
  58. package/dist/tools/diskUsage.js.map +1 -0
  59. package/dist/tools/exec.d.ts +3 -0
  60. package/dist/tools/exec.d.ts.map +1 -0
  61. package/dist/tools/exec.js +56 -0
  62. package/dist/tools/exec.js.map +1 -0
  63. package/dist/tools/inspectContainer.d.ts +3 -0
  64. package/dist/tools/inspectContainer.d.ts.map +1 -0
  65. package/dist/tools/inspectContainer.js +30 -0
  66. package/dist/tools/inspectContainer.js.map +1 -0
  67. package/dist/tools/inspectImage.d.ts +3 -0
  68. package/dist/tools/inspectImage.d.ts.map +1 -0
  69. package/dist/tools/inspectImage.js +30 -0
  70. package/dist/tools/inspectImage.js.map +1 -0
  71. package/dist/tools/kill.d.ts +3 -0
  72. package/dist/tools/kill.d.ts.map +1 -0
  73. package/dist/tools/kill.js +36 -0
  74. package/dist/tools/kill.js.map +1 -0
  75. package/dist/tools/listContainers.d.ts +3 -0
  76. package/dist/tools/listContainers.d.ts.map +1 -0
  77. package/dist/tools/listContainers.js +63 -0
  78. package/dist/tools/listContainers.js.map +1 -0
  79. package/dist/tools/listImages.d.ts +3 -0
  80. package/dist/tools/listImages.d.ts.map +1 -0
  81. package/dist/tools/listImages.js +44 -0
  82. package/dist/tools/listImages.js.map +1 -0
  83. package/dist/tools/listNetworks.d.ts +3 -0
  84. package/dist/tools/listNetworks.d.ts.map +1 -0
  85. package/dist/tools/listNetworks.js +37 -0
  86. package/dist/tools/listNetworks.js.map +1 -0
  87. package/dist/tools/listVolumes.d.ts +3 -0
  88. package/dist/tools/listVolumes.d.ts.map +1 -0
  89. package/dist/tools/listVolumes.js +37 -0
  90. package/dist/tools/listVolumes.js.map +1 -0
  91. package/dist/tools/load.d.ts +3 -0
  92. package/dist/tools/load.d.ts.map +1 -0
  93. package/dist/tools/load.js +25 -0
  94. package/dist/tools/load.js.map +1 -0
  95. package/dist/tools/pause.d.ts +3 -0
  96. package/dist/tools/pause.d.ts.map +1 -0
  97. package/dist/tools/pause.js +27 -0
  98. package/dist/tools/pause.js.map +1 -0
  99. package/dist/tools/pull.d.ts +3 -0
  100. package/dist/tools/pull.d.ts.map +1 -0
  101. package/dist/tools/pull.js +41 -0
  102. package/dist/tools/pull.js.map +1 -0
  103. package/dist/tools/push.d.ts +3 -0
  104. package/dist/tools/push.d.ts.map +1 -0
  105. package/dist/tools/push.js +34 -0
  106. package/dist/tools/push.js.map +1 -0
  107. package/dist/tools/restart.d.ts +3 -0
  108. package/dist/tools/restart.d.ts.map +1 -0
  109. package/dist/tools/restart.js +38 -0
  110. package/dist/tools/restart.js.map +1 -0
  111. package/dist/tools/rm.d.ts +3 -0
  112. package/dist/tools/rm.d.ts.map +1 -0
  113. package/dist/tools/rm.js +45 -0
  114. package/dist/tools/rm.js.map +1 -0
  115. package/dist/tools/rmi.d.ts +3 -0
  116. package/dist/tools/rmi.d.ts.map +1 -0
  117. package/dist/tools/rmi.js +42 -0
  118. package/dist/tools/rmi.js.map +1 -0
  119. package/dist/tools/run.d.ts +3 -0
  120. package/dist/tools/run.d.ts.map +1 -0
  121. package/dist/tools/run.js +99 -0
  122. package/dist/tools/run.js.map +1 -0
  123. package/dist/tools/save.d.ts +3 -0
  124. package/dist/tools/save.d.ts.map +1 -0
  125. package/dist/tools/save.js +32 -0
  126. package/dist/tools/save.js.map +1 -0
  127. package/dist/tools/searchHub.d.ts +3 -0
  128. package/dist/tools/searchHub.d.ts.map +1 -0
  129. package/dist/tools/searchHub.js +59 -0
  130. package/dist/tools/searchHub.js.map +1 -0
  131. package/dist/tools/start.d.ts +3 -0
  132. package/dist/tools/start.d.ts.map +1 -0
  133. package/dist/tools/start.js +27 -0
  134. package/dist/tools/start.js.map +1 -0
  135. package/dist/tools/stop.d.ts +3 -0
  136. package/dist/tools/stop.d.ts.map +1 -0
  137. package/dist/tools/stop.js +38 -0
  138. package/dist/tools/stop.js.map +1 -0
  139. package/dist/tools/systemInfo.d.ts +3 -0
  140. package/dist/tools/systemInfo.d.ts.map +1 -0
  141. package/dist/tools/systemInfo.js +18 -0
  142. package/dist/tools/systemInfo.js.map +1 -0
  143. package/dist/tools/tag.d.ts +3 -0
  144. package/dist/tools/tag.d.ts.map +1 -0
  145. package/dist/tools/tag.js +31 -0
  146. package/dist/tools/tag.js.map +1 -0
  147. package/dist/tools/unpause.d.ts +3 -0
  148. package/dist/tools/unpause.d.ts.map +1 -0
  149. package/dist/tools/unpause.js +27 -0
  150. package/dist/tools/unpause.js.map +1 -0
  151. package/dist/utils/docker-api.d.ts +15 -0
  152. package/dist/utils/docker-api.d.ts.map +1 -0
  153. package/dist/utils/docker-api.js +82 -0
  154. package/dist/utils/docker-api.js.map +1 -0
  155. package/dist/utils/errors.d.ts +23 -0
  156. package/dist/utils/errors.d.ts.map +1 -0
  157. package/dist/utils/errors.js +45 -0
  158. package/dist/utils/errors.js.map +1 -0
  159. package/package.json +47 -0
package/LICENSE ADDED
@@ -0,0 +1,31 @@
1
+ Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International
2
+
3
+ Copyright (c) 2026 TM Hospitality Strategies
4
+
5
+ SPDX-License-Identifier: CC-BY-NC-ND-4.0
6
+
7
+ You are free to:
8
+
9
+ Share - copy and redistribute the material in any medium or format.
10
+
11
+ The licensor cannot revoke these freedoms as long as you follow the
12
+ license terms.
13
+
14
+ Under the following terms:
15
+
16
+ Attribution - You must give appropriate credit, provide a link to
17
+ the license, and indicate if changes were made. You may do so in
18
+ any reasonable manner, but not in any way that suggests the licensor
19
+ endorses you or your use.
20
+
21
+ NonCommercial - You may not use the material for commercial purposes.
22
+
23
+ NoDerivatives - If you remix, transform, or build upon the material,
24
+ you may not distribute the modified material.
25
+
26
+ No additional restrictions - You may not apply legal terms or
27
+ technological measures that legally restrict others from doing
28
+ anything the license permits.
29
+
30
+ Full license text:
31
+ https://creativecommons.org/licenses/by-nc-nd/4.0/legalcode
package/README.md ADDED
@@ -0,0 +1,111 @@
1
+ # @tmhs/docker-mcp
2
+
3
+ MCP server for Docker CLI integration - 36 tools for containers, images, Compose, volumes, networks, and system info.
4
+
5
+ Part of the [Docker Developer Tools](https://github.com/TMHSDigital/Docker-Developer-Tools) Cursor plugin.
6
+
7
+ ## Requirements
8
+
9
+ - Node.js >= 20
10
+ - Docker CLI (`docker`) available on PATH
11
+
12
+ ## Installation
13
+
14
+ ```bash
15
+ npm install -g @tmhs/docker-mcp
16
+ ```
17
+
18
+ Or run directly with npx:
19
+
20
+ ```bash
21
+ npx @tmhs/docker-mcp
22
+ ```
23
+
24
+ ## Cursor MCP Configuration
25
+
26
+ Add to `.cursor/mcp.json`:
27
+
28
+ ```json
29
+ {
30
+ "mcpServers": {
31
+ "docker": {
32
+ "command": "npx",
33
+ "args": ["-y", "@tmhs/docker-mcp"]
34
+ }
35
+ }
36
+ }
37
+ ```
38
+
39
+ Or if installed globally:
40
+
41
+ ```json
42
+ {
43
+ "mcpServers": {
44
+ "docker": {
45
+ "command": "docker-mcp"
46
+ }
47
+ }
48
+ }
49
+ ```
50
+
51
+ ## Tools (36)
52
+
53
+ ### Read / Inspect (10)
54
+
55
+ | Tool | Description |
56
+ |------|-------------|
57
+ | `docker_listContainers` | List running/all containers |
58
+ | `docker_inspectContainer` | Detailed container info |
59
+ | `docker_containerLogs` | Fetch container logs |
60
+ | `docker_listImages` | List local images |
61
+ | `docker_inspectImage` | Detailed image metadata |
62
+ | `docker_listVolumes` | List volumes |
63
+ | `docker_listNetworks` | List networks |
64
+ | `docker_systemInfo` | Docker system info |
65
+ | `docker_diskUsage` | Disk usage breakdown |
66
+ | `docker_searchHub` | Search Docker Hub |
67
+
68
+ ### Container Lifecycle (10)
69
+
70
+ | Tool | Description |
71
+ |------|-------------|
72
+ | `docker_run` | Create and start a container |
73
+ | `docker_create` | Create a container without starting |
74
+ | `docker_start` | Start a stopped container |
75
+ | `docker_stop` | Stop a running container |
76
+ | `docker_restart` | Restart a container |
77
+ | `docker_kill` | Send a signal to a container |
78
+ | `docker_rm` | Remove a container |
79
+ | `docker_pause` | Pause container processes |
80
+ | `docker_unpause` | Unpause a container |
81
+ | `docker_exec` | Execute a command in a container |
82
+
83
+ ### Image and Build (8)
84
+
85
+ | Tool | Description |
86
+ |------|-------------|
87
+ | `docker_pull` | Pull an image from a registry |
88
+ | `docker_push` | Push an image to a registry |
89
+ | `docker_build` | Build an image from a Dockerfile |
90
+ | `docker_tag` | Tag an image |
91
+ | `docker_rmi` | Remove images |
92
+ | `docker_commit` | Create image from container changes |
93
+ | `docker_save` | Save images to tar archive |
94
+ | `docker_load` | Load images from tar archive |
95
+
96
+ ### Compose (8)
97
+
98
+ | Tool | Description |
99
+ |------|-------------|
100
+ | `docker_composeUp` | Create and start Compose services |
101
+ | `docker_composeDown` | Stop and remove Compose services |
102
+ | `docker_composePs` | List Compose project containers |
103
+ | `docker_composeLogs` | View Compose service logs |
104
+ | `docker_composeBuild` | Build Compose service images |
105
+ | `docker_composeRestart` | Restart Compose services |
106
+ | `docker_composePull` | Pull Compose service images |
107
+ | `docker_composeExec` | Execute command in a Compose service |
108
+
109
+ ## License
110
+
111
+ CC-BY-NC-ND-4.0 - Copyright 2026 TM Hospitality Strategies
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
package/dist/index.js ADDED
@@ -0,0 +1,88 @@
1
+ #!/usr/bin/env node
2
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
3
+ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
4
+ import { register as registerListContainers } from "./tools/listContainers.js";
5
+ import { register as registerInspectContainer } from "./tools/inspectContainer.js";
6
+ import { register as registerContainerLogs } from "./tools/containerLogs.js";
7
+ import { register as registerListImages } from "./tools/listImages.js";
8
+ import { register as registerInspectImage } from "./tools/inspectImage.js";
9
+ import { register as registerListVolumes } from "./tools/listVolumes.js";
10
+ import { register as registerListNetworks } from "./tools/listNetworks.js";
11
+ import { register as registerSystemInfo } from "./tools/systemInfo.js";
12
+ import { register as registerDiskUsage } from "./tools/diskUsage.js";
13
+ import { register as registerSearchHub } from "./tools/searchHub.js";
14
+ import { register as registerRun } from "./tools/run.js";
15
+ import { register as registerCreate } from "./tools/create.js";
16
+ import { register as registerStart } from "./tools/start.js";
17
+ import { register as registerStop } from "./tools/stop.js";
18
+ import { register as registerRestart } from "./tools/restart.js";
19
+ import { register as registerKill } from "./tools/kill.js";
20
+ import { register as registerRm } from "./tools/rm.js";
21
+ import { register as registerPause } from "./tools/pause.js";
22
+ import { register as registerUnpause } from "./tools/unpause.js";
23
+ import { register as registerExec } from "./tools/exec.js";
24
+ import { register as registerPull } from "./tools/pull.js";
25
+ import { register as registerPush } from "./tools/push.js";
26
+ import { register as registerBuild } from "./tools/build.js";
27
+ import { register as registerTag } from "./tools/tag.js";
28
+ import { register as registerRmi } from "./tools/rmi.js";
29
+ import { register as registerCommit } from "./tools/commit.js";
30
+ import { register as registerSave } from "./tools/save.js";
31
+ import { register as registerLoad } from "./tools/load.js";
32
+ import { register as registerComposeUp } from "./tools/composeUp.js";
33
+ import { register as registerComposeDown } from "./tools/composeDown.js";
34
+ import { register as registerComposePs } from "./tools/composePs.js";
35
+ import { register as registerComposeLogs } from "./tools/composeLogs.js";
36
+ import { register as registerComposeBuild } from "./tools/composeBuild.js";
37
+ import { register as registerComposeRestart } from "./tools/composeRestart.js";
38
+ import { register as registerComposePull } from "./tools/composePull.js";
39
+ import { register as registerComposeExec } from "./tools/composeExec.js";
40
+ const server = new McpServer({
41
+ name: "docker-mcp",
42
+ version: "0.4.0",
43
+ });
44
+ registerListContainers(server);
45
+ registerInspectContainer(server);
46
+ registerContainerLogs(server);
47
+ registerListImages(server);
48
+ registerInspectImage(server);
49
+ registerListVolumes(server);
50
+ registerListNetworks(server);
51
+ registerSystemInfo(server);
52
+ registerDiskUsage(server);
53
+ registerSearchHub(server);
54
+ registerRun(server);
55
+ registerCreate(server);
56
+ registerStart(server);
57
+ registerStop(server);
58
+ registerRestart(server);
59
+ registerKill(server);
60
+ registerRm(server);
61
+ registerPause(server);
62
+ registerUnpause(server);
63
+ registerExec(server);
64
+ registerPull(server);
65
+ registerPush(server);
66
+ registerBuild(server);
67
+ registerTag(server);
68
+ registerRmi(server);
69
+ registerCommit(server);
70
+ registerSave(server);
71
+ registerLoad(server);
72
+ registerComposeUp(server);
73
+ registerComposeDown(server);
74
+ registerComposePs(server);
75
+ registerComposeLogs(server);
76
+ registerComposeBuild(server);
77
+ registerComposeRestart(server);
78
+ registerComposePull(server);
79
+ registerComposeExec(server);
80
+ async function main() {
81
+ const transport = new StdioServerTransport();
82
+ await server.connect(transport);
83
+ }
84
+ main().catch((error) => {
85
+ console.error("Fatal error:", error);
86
+ process.exit(1);
87
+ });
88
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.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=build.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../src/tools/build.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AA4CzE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA6DhD"}
@@ -0,0 +1,90 @@
1
+ import { z } from "zod";
2
+ import { execDocker, errorResponse } from "../utils/docker-api.js";
3
+ const inputSchema = {
4
+ context: z
5
+ .string()
6
+ .min(1)
7
+ .describe("Build context path (e.g. '.', './app', absolute path)"),
8
+ tag: z
9
+ .array(z.string())
10
+ .optional()
11
+ .describe("Name and optionally tag the image (e.g. ['myapp:latest', 'myapp:v1.0'])"),
12
+ file: z
13
+ .string()
14
+ .optional()
15
+ .describe("Path to Dockerfile (default: 'context/Dockerfile')"),
16
+ buildArgs: z
17
+ .array(z.string())
18
+ .optional()
19
+ .describe("Build-time variables as 'KEY=VALUE' (e.g. ['NODE_ENV=production'])"),
20
+ target: z
21
+ .string()
22
+ .optional()
23
+ .describe("Set the target build stage for multi-stage builds"),
24
+ noCache: z
25
+ .boolean()
26
+ .optional()
27
+ .default(false)
28
+ .describe("Do not use cache when building the image"),
29
+ pull: z
30
+ .boolean()
31
+ .optional()
32
+ .default(false)
33
+ .describe("Always pull a newer version of the base image"),
34
+ labels: z
35
+ .array(z.string())
36
+ .optional()
37
+ .describe("Image labels as 'key=value'"),
38
+ platform: z
39
+ .string()
40
+ .optional()
41
+ .describe("Target platform (e.g. 'linux/amd64')"),
42
+ };
43
+ export function register(server) {
44
+ server.tool("docker_build", "Build a Docker image from a Dockerfile and context directory", inputSchema, async (args) => {
45
+ try {
46
+ const cmdArgs = ["build"];
47
+ if (args.tag) {
48
+ for (const t of args.tag) {
49
+ cmdArgs.push("-t", t);
50
+ }
51
+ }
52
+ if (args.file) {
53
+ cmdArgs.push("-f", args.file);
54
+ }
55
+ if (args.buildArgs) {
56
+ for (const ba of args.buildArgs) {
57
+ cmdArgs.push("--build-arg", ba);
58
+ }
59
+ }
60
+ if (args.target) {
61
+ cmdArgs.push("--target", args.target);
62
+ }
63
+ if (args.noCache) {
64
+ cmdArgs.push("--no-cache");
65
+ }
66
+ if (args.pull) {
67
+ cmdArgs.push("--pull");
68
+ }
69
+ if (args.labels) {
70
+ for (const l of args.labels) {
71
+ cmdArgs.push("--label", l);
72
+ }
73
+ }
74
+ if (args.platform) {
75
+ cmdArgs.push("--platform", args.platform);
76
+ }
77
+ cmdArgs.push(args.context);
78
+ const output = await execDocker(cmdArgs, { timeout: 600_000 });
79
+ return {
80
+ content: [
81
+ { type: "text", text: output.trim() },
82
+ ],
83
+ };
84
+ }
85
+ catch (error) {
86
+ return errorResponse(error);
87
+ }
88
+ });
89
+ }
90
+ //# sourceMappingURL=build.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build.js","sourceRoot":"","sources":["../../src/tools/build.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=commit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commit.d.ts","sourceRoot":"","sources":["../../src/tools/commit.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AA+BzE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA8ChD"}
@@ -0,0 +1,66 @@
1
+ import { z } from "zod";
2
+ import { execDocker, errorResponse } from "../utils/docker-api.js";
3
+ const inputSchema = {
4
+ containerId: z
5
+ .string()
6
+ .min(1)
7
+ .describe("Container name or ID to commit"),
8
+ repository: z
9
+ .string()
10
+ .optional()
11
+ .describe("Repository name for the new image (e.g. 'myapp')"),
12
+ tag: z
13
+ .string()
14
+ .optional()
15
+ .describe("Tag for the new image (e.g. 'v1.0')"),
16
+ message: z
17
+ .string()
18
+ .optional()
19
+ .describe("Commit message"),
20
+ author: z
21
+ .string()
22
+ .optional()
23
+ .describe("Author (e.g. 'Name <email>')"),
24
+ pause: z
25
+ .boolean()
26
+ .optional()
27
+ .default(true)
28
+ .describe("Pause container during commit (default: true)"),
29
+ };
30
+ export function register(server) {
31
+ server.tool("docker_commit", "Create a new image from a container's changes", inputSchema, async (args) => {
32
+ try {
33
+ const cmdArgs = ["commit"];
34
+ if (args.message) {
35
+ cmdArgs.push("-m", args.message);
36
+ }
37
+ if (args.author) {
38
+ cmdArgs.push("-a", args.author);
39
+ }
40
+ if (!args.pause) {
41
+ cmdArgs.push("--pause=false");
42
+ }
43
+ cmdArgs.push(args.containerId);
44
+ if (args.repository) {
45
+ const target = args.tag
46
+ ? `${args.repository}:${args.tag}`
47
+ : args.repository;
48
+ cmdArgs.push(target);
49
+ }
50
+ const output = await execDocker(cmdArgs);
51
+ const imageId = output.trim();
52
+ return {
53
+ content: [
54
+ {
55
+ type: "text",
56
+ text: `Image created: ${imageId}`,
57
+ },
58
+ ],
59
+ };
60
+ }
61
+ catch (error) {
62
+ return errorResponse(error);
63
+ }
64
+ });
65
+ }
66
+ //# sourceMappingURL=commit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commit.js","sourceRoot":"","sources":["../../src/tools/commit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAEnE,MAAM,WAAW,GAAG;IAClB,WAAW,EAAE,CAAC;SACX,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,CAAC,gCAAgC,CAAC;IAC7C,UAAU,EAAE,CAAC;SACV,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,kDAAkD,CAAC;IAC/D,GAAG,EAAE,CAAC;SACH,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,qCAAqC,CAAC;IAClD,OAAO,EAAE,CAAC;SACP,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,gBAAgB,CAAC;IAC7B,MAAM,EAAE,CAAC;SACN,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,8BAA8B,CAAC;IAC3C,KAAK,EAAE,CAAC;SACL,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,OAAO,CAAC,IAAI,CAAC;SACb,QAAQ,CAAC,+CAA+C,CAAC;CAC7D,CAAC;AAEF,MAAM,UAAU,QAAQ,CAAC,MAAiB;IACxC,MAAM,CAAC,IAAI,CACT,eAAe,EACf,+CAA+C,EAC/C,WAAW,EACX,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,CAAC,QAAQ,CAAC,CAAC;YAE3B,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;gBACjB,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;YACnC,CAAC;YAED,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;gBAChB,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YAClC,CAAC;YAED,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;gBAChB,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;YAChC,CAAC;YAED,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAE/B,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;gBACpB,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG;oBACrB,CAAC,CAAC,GAAG,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,GAAG,EAAE;oBAClC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC;gBACpB,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACvB,CAAC;YAED,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,CAAC;YACzC,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;YAE9B,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,kBAAkB,OAAO,EAAE;qBAClC;iBACF;aACF,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function register(server: McpServer): void;
3
+ //# sourceMappingURL=composeBuild.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"composeBuild.d.ts","sourceRoot":"","sources":["../../src/tools/composeBuild.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AA4BzE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA2ChD"}
@@ -0,0 +1,59 @@
1
+ import { z } from "zod";
2
+ import { execDocker, errorResponse } from "../utils/docker-api.js";
3
+ const inputSchema = {
4
+ file: z
5
+ .string()
6
+ .optional()
7
+ .describe("Path to compose file"),
8
+ projectDir: z
9
+ .string()
10
+ .optional()
11
+ .describe("Working directory for the compose project"),
12
+ services: z
13
+ .array(z.string())
14
+ .optional()
15
+ .describe("Specific services to build (default: all with build config)"),
16
+ noCache: z
17
+ .boolean()
18
+ .optional()
19
+ .default(false)
20
+ .describe("Do not use cache when building images"),
21
+ pull: z
22
+ .boolean()
23
+ .optional()
24
+ .default(false)
25
+ .describe("Always pull a newer version of base images"),
26
+ };
27
+ export function register(server) {
28
+ server.tool("docker_composeBuild", "Build or rebuild Docker Compose service images", inputSchema, async (args) => {
29
+ try {
30
+ const cmdArgs = ["compose"];
31
+ if (args.file) {
32
+ cmdArgs.push("-f", args.file);
33
+ }
34
+ if (args.projectDir) {
35
+ cmdArgs.push("--project-directory", args.projectDir);
36
+ }
37
+ cmdArgs.push("build");
38
+ if (args.noCache) {
39
+ cmdArgs.push("--no-cache");
40
+ }
41
+ if (args.pull) {
42
+ cmdArgs.push("--pull");
43
+ }
44
+ if (args.services) {
45
+ cmdArgs.push(...args.services);
46
+ }
47
+ const output = await execDocker(cmdArgs, { timeout: 300_000 });
48
+ return {
49
+ content: [
50
+ { type: "text", text: output.trim() || "Compose images built" },
51
+ ],
52
+ };
53
+ }
54
+ catch (error) {
55
+ return errorResponse(error);
56
+ }
57
+ });
58
+ }
59
+ //# sourceMappingURL=composeBuild.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"composeBuild.js","sourceRoot":"","sources":["../../src/tools/composeBuild.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAEnE,MAAM,WAAW,GAAG;IAClB,IAAI,EAAE,CAAC;SACJ,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,sBAAsB,CAAC;IACnC,UAAU,EAAE,CAAC;SACV,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,2CAA2C,CAAC;IACxD,QAAQ,EAAE,CAAC;SACR,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;SACjB,QAAQ,EAAE;SACV,QAAQ,CAAC,6DAA6D,CAAC;IAC1E,OAAO,EAAE,CAAC;SACP,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,OAAO,CAAC,KAAK,CAAC;SACd,QAAQ,CAAC,uCAAuC,CAAC;IACpD,IAAI,EAAE,CAAC;SACJ,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,OAAO,CAAC,KAAK,CAAC;SACd,QAAQ,CAAC,4CAA4C,CAAC;CAC1D,CAAC;AAEF,MAAM,UAAU,QAAQ,CAAC,MAAiB;IACxC,MAAM,CAAC,IAAI,CACT,qBAAqB,EACrB,gDAAgD,EAChD,WAAW,EACX,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,CAAC,SAAS,CAAC,CAAC;YAE5B,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;gBACd,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;YAChC,CAAC;YAED,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;gBACpB,OAAO,CAAC,IAAI,CAAC,qBAAqB,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;YACvD,CAAC;YAED,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAEtB,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;gBACjB,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAC7B,CAAC;YAED,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;gBACd,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACzB,CAAC;YAED,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAClB,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;YACjC,CAAC;YAED,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;YAE/D,OAAO;gBACL,OAAO,EAAE;oBACP,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,IAAI,sBAAsB,EAAE;iBACzE;aACF,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function register(server: McpServer): void;
3
+ //# sourceMappingURL=composeDown.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"composeDown.d.ts","sourceRoot":"","sources":["../../src/tools/composeDown.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AA2BzE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA2ChD"}
@@ -0,0 +1,58 @@
1
+ import { z } from "zod";
2
+ import { execDocker, errorResponse } from "../utils/docker-api.js";
3
+ const inputSchema = {
4
+ file: z
5
+ .string()
6
+ .optional()
7
+ .describe("Path to compose file"),
8
+ projectDir: z
9
+ .string()
10
+ .optional()
11
+ .describe("Working directory for the compose project"),
12
+ removeVolumes: z
13
+ .boolean()
14
+ .optional()
15
+ .default(false)
16
+ .describe("Remove named volumes declared in the volumes section"),
17
+ removeImages: z
18
+ .string()
19
+ .optional()
20
+ .describe("Remove images: 'all' or 'local' (built without a custom tag)"),
21
+ timeout: z
22
+ .number()
23
+ .optional()
24
+ .describe("Shutdown timeout in seconds (default: 10)"),
25
+ };
26
+ export function register(server) {
27
+ server.tool("docker_composeDown", "Stop and remove Compose containers, networks, and optionally volumes/images", inputSchema, async (args) => {
28
+ try {
29
+ const cmdArgs = ["compose"];
30
+ if (args.file) {
31
+ cmdArgs.push("-f", args.file);
32
+ }
33
+ if (args.projectDir) {
34
+ cmdArgs.push("--project-directory", args.projectDir);
35
+ }
36
+ cmdArgs.push("down");
37
+ if (args.removeVolumes) {
38
+ cmdArgs.push("--volumes");
39
+ }
40
+ if (args.removeImages) {
41
+ cmdArgs.push("--rmi", args.removeImages);
42
+ }
43
+ if (args.timeout !== undefined) {
44
+ cmdArgs.push("--timeout", String(args.timeout));
45
+ }
46
+ const output = await execDocker(cmdArgs, { timeout: 120_000 });
47
+ return {
48
+ content: [
49
+ { type: "text", text: output.trim() || "Compose services stopped and removed" },
50
+ ],
51
+ };
52
+ }
53
+ catch (error) {
54
+ return errorResponse(error);
55
+ }
56
+ });
57
+ }
58
+ //# sourceMappingURL=composeDown.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"composeDown.js","sourceRoot":"","sources":["../../src/tools/composeDown.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAEnE,MAAM,WAAW,GAAG;IAClB,IAAI,EAAE,CAAC;SACJ,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,sBAAsB,CAAC;IACnC,UAAU,EAAE,CAAC;SACV,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,2CAA2C,CAAC;IACxD,aAAa,EAAE,CAAC;SACb,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,OAAO,CAAC,KAAK,CAAC;SACd,QAAQ,CAAC,sDAAsD,CAAC;IACnE,YAAY,EAAE,CAAC;SACZ,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,8DAA8D,CAAC;IAC3E,OAAO,EAAE,CAAC;SACP,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,2CAA2C,CAAC;CACzD,CAAC;AAEF,MAAM,UAAU,QAAQ,CAAC,MAAiB;IACxC,MAAM,CAAC,IAAI,CACT,oBAAoB,EACpB,6EAA6E,EAC7E,WAAW,EACX,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,CAAC,SAAS,CAAC,CAAC;YAE5B,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;gBACd,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;YAChC,CAAC;YAED,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;gBACpB,OAAO,CAAC,IAAI,CAAC,qBAAqB,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;YACvD,CAAC;YAED,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAErB,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;gBACvB,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAC5B,CAAC;YAED,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;gBACtB,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;YAC3C,CAAC;YAED,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;gBAC/B,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;YAClD,CAAC;YAED,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;YAE/D,OAAO;gBACL,OAAO,EAAE;oBACP,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,IAAI,sCAAsC,EAAE;iBACzF;aACF,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function register(server: McpServer): void;
3
+ //# sourceMappingURL=composeExec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"composeExec.d.ts","sourceRoot":"","sources":["../../src/tools/composeExec.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAkCzE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA+ChD"}
@@ -0,0 +1,68 @@
1
+ import { z } from "zod";
2
+ import { execDocker, errorResponse } from "../utils/docker-api.js";
3
+ const inputSchema = {
4
+ file: z
5
+ .string()
6
+ .optional()
7
+ .describe("Path to compose file"),
8
+ projectDir: z
9
+ .string()
10
+ .optional()
11
+ .describe("Working directory for the compose project"),
12
+ service: z
13
+ .string()
14
+ .min(1)
15
+ .describe("Service name to execute the command in"),
16
+ command: z
17
+ .array(z.string())
18
+ .min(1)
19
+ .describe("Command and arguments to execute (e.g. ['sh', '-c', 'echo hello'])"),
20
+ user: z
21
+ .string()
22
+ .optional()
23
+ .describe("Run as this user (e.g. 'root', '1000')"),
24
+ workdir: z
25
+ .string()
26
+ .optional()
27
+ .describe("Working directory inside the container"),
28
+ env: z
29
+ .array(z.string())
30
+ .optional()
31
+ .describe("Environment variables as 'KEY=VALUE'"),
32
+ };
33
+ export function register(server) {
34
+ server.tool("docker_composeExec", "Execute a command in a running Docker Compose service container", inputSchema, async (args) => {
35
+ try {
36
+ const cmdArgs = ["compose"];
37
+ if (args.file) {
38
+ cmdArgs.push("-f", args.file);
39
+ }
40
+ if (args.projectDir) {
41
+ cmdArgs.push("--project-directory", args.projectDir);
42
+ }
43
+ cmdArgs.push("exec", "-T");
44
+ if (args.user) {
45
+ cmdArgs.push("--user", args.user);
46
+ }
47
+ if (args.workdir) {
48
+ cmdArgs.push("--workdir", args.workdir);
49
+ }
50
+ if (args.env) {
51
+ for (const e of args.env) {
52
+ cmdArgs.push("-e", e);
53
+ }
54
+ }
55
+ cmdArgs.push(args.service, ...args.command);
56
+ const output = await execDocker(cmdArgs);
57
+ return {
58
+ content: [
59
+ { type: "text", text: output.trim() },
60
+ ],
61
+ };
62
+ }
63
+ catch (error) {
64
+ return errorResponse(error);
65
+ }
66
+ });
67
+ }
68
+ //# sourceMappingURL=composeExec.js.map