docker_mcp_server

docker_mcp_server

0

The Docker MCP Server is a specialized server implementation that uses the Model Context Protocol to expose a comprehensive list of Docker commands as MCP tools. It allows automatic tool generation even for non-annotated methods, enhancing flexibility and usability in managing Docker environments.

Docker MCP Server

This module provides an implementation of a Model Context Protocol MCP server for Docker commands, powered by the mcp_mediator core framework. The Docker MCP Server utilizes the automatic server generation feature of MCP Mediator to expose existing Docker commands as MCP Tools. Each command is optionally annotated with @McpTool along with a minimal description to enhance tool discoverability and usability.

👉 See the full list of supported commands here.

Docker MCP Server

[!IMPORTANT]
This is part of mcp_mediator project: https://github.com/makbn/docker_mcp_server To build or modify, clone the parent repository: git clone --recurse-submodules https://github.com/makbn/docker_mcp_server.git

Usage Examples

java -jar docker-mcp-server.jar \
  --docker-host=tcp://localhost:2376 \
  --tls-verify \
  --cert-path=/etc/docker/certs \
  --server-name=my-server \
  --server-version=1.0.0 \
  --max-connections=150 \
  --docker-config=/custom/docker/config

To run Docker MCP Server with Claude Desktop with java -jar:

{
  "mcpServers": {
    "my_java_mcp_server": {
      "command": "java",
      "args": [
        "-jar",
        "docker-mcp-server.jar"
        "--docker-host=tcp://localhost:2376",
        "--tls-verify", # not required
        "--cert-path=/etc/docker/certs", # required only if --tls-verify is available
        "--server-name=my-docker-mcp-server",
        "--server-version=1.0.0",
        "--max-connections=150",
        "--docker-config=/custom/docker/config"
      ]
    }
  }
}

Or create the native image (see the steps below) and use the standalone application:

{
  "mcpServers": {
    "my_java_mcp_server": {
      "command": "docker-mcp-server-executable",
      "args": [
        "--docker-host=tcp://localhost:2376" // rest of args
      ]
    }
  }
}

How to Build

To build the executable:

mvn clean compile package

This command creates a jar file under target folder mcp-mediator-implementation-docker-[version].jar. You can stop here and use the jar file and execute it using java -jar command. Or, you can create a standalone executable application using GraalVM native image:

 native-image -jar mcp-mediator-implementation-docker-[version].jar     

and this command creates an executable file: 'mcp-mediator-implementation-docker-[version] that can be executed.

Automatically Generate MCP Tools

This project integrates with MCP Mediator to automatically generate MCP Tools from existing Docker services.

Each method in the Docker service class can optionally be annotated with @McpTool to explicitly define the tool’s * name*, description, and other metadata.

However, annotation is not required—MCP Mediator supports automatic generation for non-annotated methods by inferring details from the method, class, and package names. To enable this behavior, set createForNonAnnotatedMethods to true:

DefaultMcpMediator mediator = new DefaultMcpMediator(McpMediatorConfigurationBuilder.builder()
        .createDefault()
        .serverName(serverName)
        .serverVersion(serverVersion)
        .build());

mediator.

registerHandler(McpServiceFactory.create(dockerClientService)
        .

createForNonAnnotatedMethods(true)); // Enables support for non-annotated methods

Check io.github.makbn.mcp.mediator.docker.server.DockerMcpServer for the full Mcp Mediator configuration.

Supported CLI Options

OptionDescriptionDefault
--docker-hostDocker daemon host URIunix:///var/run/docker.sock
--tls-verifyEnable TLS verification (used with --cert-path)false
--cert-pathPath to Docker TLS client certificates (required if TLS is enabled)none
--docker-configCustom Docker config directory~/.docker
--server-nameServer name for the MCP serverdocker_mcp_server
--server-versionServer version label1.0.0.0
--max-connectionsMaximum number of connections to Docker daemon100
--helpShow usage and available optionsn/a

Environment variables:

OptionDescriptionDefault
DOCKER_MCP_LOG_LEVELLogging level (TRACE, DEBUG, INFO, etc.)DEBUG
DOCKER_MCP_LOG_FILEPath to log output filelogs/docker_mcp_server.log

Supported Docker Commands as MCP Server Tools

MCP Tool NameDescription
docker_start_containerStart a Docker container by ID.
docker_stop_containerStop a Docker container by ID.
docker_leave_swarmRemove a node from Docker Swarm.
docker_container_diffShow changes made to a container’s filesystem.
docker_build_image_fileBuild an image from Dockerfile or directory.
docker_inspect_volumeGet details of a Docker volume.
docker_remove_serviceRemove a Docker service by ID.
docker_list_containersList containers with optional filters.
docker_inspect_swarmInspect Docker Swarm details.
docker_push_imagePush image to registry, supports auth.
docker_copy_archive_to_containerCopy a tar archive into a running container.
docker_stats_containerFetch container stats (CPU, memory, etc.).
docker_disconnect_container_from_networkDisconnect container from Docker network.
docker_remove_containerRemove a container, with optional force.
docker_inspect_serviceInspect a Docker service.
docker_remove_secretRemove a Docker secret by ID.
docker_pull_imagePull image from registry, supports auth.
docker_inspect_containerInspect container config and state.
docker_unpause_containerUnpause a paused container.
docker_list_imagesList Docker images with optional filters.
docker_list_servicesList all Docker services in the swarm.
docker_remove_imageRemove an image, with force and prune options.
docker_create_networkCreate a Docker network.
docker_tag_imageTag an image with a new repo and tag.
docker_authenticateAuthenticate to Docker registry.
docker_exec_commandExecute a command inside a container.
docker_remove_swarm_nodeRemove a swarm node, optionally forcibly.
docker_search_imagesSearch Docker Hub for images.
docker_list_networksList all Docker networks.
docker_remove_volumeRemove a Docker volume.
docker_create_containerCreate a container with custom settings.
docker_remove_networkRemove a Docker network.
docker_copy_archive_from_containerCopy files from a container to the host.
docker_rename_containerRename a Docker container.
docker_pause_containerPause a running container.
docker_versionGet Docker version information.
docker_list_swarm_nodesList all nodes in the Docker swarm.
docker_log_containerRetrieve logs from a container.
docker_prunePrune unused Docker resources.
docker_inspect_networkGet detailed info about a network.
docker_kill_containerSend a kill signal to a container.
docker_top_containerGet running processes in a container.
docker_list_volumesList Docker volumes with optional filters.
docker_update_swarm_nodeUpdate the config of a swarm node.
docker_infoShow Docker system-wide info.
docker_log_serviceGet logs from a Docker service.
docker_load_imageLoad an image from a tar archive.
docker_list_tasksLists the tasks in a Docker Swarm environment.
docker_save_imageSaves a Docker image to a local tar file.
docker_join_swarmJoins the node to an existing Swarm cluster.
docker_create_volumeCreates a new Docker volume.
docker_initialize_swarmInitializes a new Docker Swarm cluster.

Work in progress, more to be added.

DockerClientService Function Coverage

Check the class for the full list of available and planned tools (to be implemented)

[!IMPORTANT]
Almost all the MCP Tools' descriptions and names are generated automatically using AI agent!

🧩 Repository Structure and Git Subtree Setup

This project is a Git subtree module of the parent repository makbn/mcp_mediator. It is kept in its own repository to support independent versioning, CI, and release processes, while remaining integrated into the main mcp_mediator mono-repo.

🔀 Cloning Structure

If you're working in the context of the full mcp_mediator system:

`git clone --recurse-submodules https://github.com/makbn/docker_mcp_server.git`

Contributing

Contributions are welcome! Please feel free to submit a Pull Request. Read this first!

License

This project is licensed under the GPL3 License—see the LICENSE file for details.