docker-mcp
The Docker MCP Server is designed to facilitate interactions with Docker containers and images using the Model Context Protocol. It utilizes the Python Docker SDK and supports various operations including listing, running, and stopping Docker entities. The server offers configuration through environment variables for secure and flexible deployment.
Docker MCP Server
This is a Model Context Protocol (MCP) server that provides tools and resources for interacting with Docker containers and images. It uses the stream HTTP transport method for communication and the Python Docker SDK (docker-py) for Docker operations.
Features
- List Docker containers and images
- Run, stop, and remove containers
- View container logs
- Pull Docker images
- Inspect container details
- Access Docker information as resources
Prerequisites
- Docker
- Docker Compose (optional, for easier deployment)
- uv (for local development)
Getting Started
Running with Docker Compose
- Clone this repository
- Build and start the server:
docker-compose up -d
Running with Docker directly
- Build the Docker image:
docker build -t mcp-docker-server .
- Run the container:
# Run server with SSE transport (no authentication)
docker run -d -p 3000:3000 -v /var/run/docker.sock:/var/run/docker.sock -e MCP_PORT=3000 --name mcp-docker-server mcp-docker-server
# Run server with SSE transport and token authentication
docker run -d -p 3000:3000 -v /var/run/docker.sock:/var/run/docker.sock -e MCP_PORT=3000 -e MCP_AUTH_TOKEN=your_secret_token --name mcp-docker-server mcp-docker-server
When the MCP_PORT
environment variable is set, the server will use the SSE transport instead of stdio. Authentication is only applicable when using SSE transport. If the MCP_AUTH_TOKEN
environment variable is set, the server will enable token authentication and configure the SSE endpoint to use the format /sse/{token}
where {token}
must match the value set in MCP_AUTH_TOKEN
. If the token doesn't match or is not provided, the connection will be rejected. If no token is set, the server uses the standard /sse
endpoint without authentication.
Running locally (development)
- Install uv (if not already installed):
curl -sSf https://astral.sh/uv/install.sh | sh
- Install dependencies using uv:
uv sync
- Run the server:
# Run with stdio transport (default)
uv run server.py
# Run with SSE transport on port 8000
MCP_PORT=8000 uv run server.py
# Run with SSE transport and token authentication
MCP_PORT=8000 MCP_AUTH_TOKEN=your_secret_token uv run server.py
Configuration
The server can be configured using environment variables:
MCP_PORT
: When set, enables SSE transport mode and specifies the port to listen on (default:8000
). If not set, the server will use stdio transport.MCP_AUTH_TOKEN
: Secret token for authentication (only applicable when using SSE transport). When set, the SSE endpoint will be/sse/{token}
instead of/sse
Using with MCP clients
Should build the docker image first.
{
"mcpServers": {
"docker": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-v",
"/var/run/docker.sock:/var/run/docker.sock",
"mcp-docker-server"
]
}
}
}
Available Tools
docker_ps
: List running containersdocker_images
: List available Docker imagesdocker_inspect
: Get detailed information about a containerdocker_run
: Run a Docker containerdocker_stop
: Stop a running containerdocker_rm
: Remove a containerdocker_logs
: Fetch container logsdocker_pull
: Pull a Docker image
Available Resources
docker://containers
: Information about all containersdocker://images
: Information about all imagesdocker://container/{container_id}
: Detailed information about a specific container
TODO
- Add functionality to query documentation for a specific Docker image
License
MIT