Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Docker MCP Serverlist all my running containers and their status"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Docker MCP Server
Powerful Docker management for AI assistants
A comprehensive Model Context Protocol (MCP) server that empowers AI assistants like Cursor, Claude Desktop, and other MCP-compatible clients to seamlessly manage Docker containers, images, networks, volumes, and registries through natural language interactions.
✨ Why Docker MCP Server?
🚀 Zero Configuration - Works out of the box with
npx, no installation needed🔒 Safety First - Two-step confirmation for destructive operations
🌐 Cross-Platform - Works on Windows, Linux, and macOS with automatic Docker socket detection
🎯 Comprehensive - Full Docker API coverage including Compose, registries, and system operations
🤖 AI-Native - Designed specifically for AI assistants with clear, structured responses
🎯 Features
🐳 Container Management
Full lifecycle control: Create, start, stop, restart, kill, and remove containers
Monitoring: Real-time logs, statistics, and container inspection
Advanced operations: Pause/unpause, exec commands, and resource management
🖼️ Image Management
Registry operations: Pull, push, tag, and remove images
Build support: Build images from Dockerfiles with full configuration
Inspection: Detailed image history, layers, and metadata
🌐 Network Management
Network operations: Create, remove, and inspect Docker networks
Container connectivity: Connect/disconnect containers from networks
Network discovery: List and filter networks with advanced options
💾 Volume Management
Volume operations: Create, remove, and inspect volumes
Data persistence: Manage persistent storage for containers
Volume inspection: Detailed volume information and mount points
⚙️ System Operations
System information: Docker daemon info, version, and capabilities
Resource cleanup: Prune unused images, containers, volumes, and networks
Event monitoring: Real-time Docker event stream
🔧 Container Execution
Command execution: Run commands in running containers
Interactive sessions: Create and manage exec instances
Output streaming: Real-time command output and logs
📦 Registry Integration
Docker Hub: Search repositories, list tags, authenticate, pull/push images
GitHub Container Registry (GHCR): Full authentication and image management
Multi-registry support: Seamlessly work with multiple registries
🎼 Docker Compose Support
Multi-container management: Start, stop, restart compose services
Service monitoring: View logs and status of compose services
Build operations: Build compose services with dependency management
Configuration validation: Parse and validate docker-compose.yml files
🛡️ Safety Features
Two-step confirmation for all destructive operations
Resource preview: See what will be deleted before confirmation
Dual confirmation methods:
Confirm parameter (default): Works everywhere, simple and reliable
MCP Elicitation API (advanced): Interactive form-based confirmation for better UX
Installation
Via npx (Recommended)
Local Installation
Or install locally in your project:
Local Development and Testing
Prerequisites
Node.js 18.0.0 or higher
Docker daemon running
npm or yarn
Setup
Clone the repository:
Install dependencies:
Build the project:
Running Locally
Method 1: Using npm start (after build)
Method 2: Using npm run dev (development mode with tsx)
This uses tsx to run TypeScript directly without building.
Method 3: Direct execution
Method 4: Using the binary
Testing with MCP Clients
Testing with Cursor
Build the project:
Add to Cursor MCP configuration (usually in
.cursor/mcp.jsonor similar):
Or if using the binary:
Testing with Claude Desktop
Build the project:
Add to Claude Desktop configuration (
~/Library/Application Support/Claude/claude_desktop_config.jsonon macOS):
Testing with MCP Inspector (CLI)
You can test the server using MCP Inspector or any MCP client:
Development Workflow
Make changes to source files in
src/Build the project:
Test the changes:
Check for TypeScript errors:
Lint the code:
Troubleshooting
Docker connection issues:
Ensure Docker daemon is running:
docker psLinux/macOS: Check Docker socket permissions:
ls -la /var/run/docker.sockWindows: Ensure Docker Desktop is running and named pipe is accessible
For remote Docker, set environment variables:
DOCKER_HOST,DOCKER_CERT_PATH, etc.macOS: If
/var/run/docker.sockdoesn't exist, try~/.docker/run/docker.sock(Docker Desktop 4.0+)
Build errors:
Clear node_modules and reinstall:
rm -rf node_modules && npm installCheck TypeScript version compatibility
Ensure all dependencies are installed:
npm install
Runtime errors:
Check that Docker is accessible:
docker versionVerify the build was successful:
ls -la dist/Check server logs (errors are written to stderr)
Configuration
The server automatically detects the operating system and uses the appropriate Docker socket path:
Platform-Specific Defaults
Linux:
/var/run/docker.sock(Unix socket)macOS:
/var/run/docker.sockor~/.docker/run/docker.sock(Docker Desktop 4.0+)Windows:
//./pipe/docker_engine(Named pipe)
Connection Methods (in order of priority)
Environment variables (highest priority):
DOCKER_HOST- Docker daemon host (e.g.,tcp://localhost:2376,npipe:////./pipe/docker_engine)DOCKER_PORT- Docker daemon portDOCKER_PROTOCOL- Protocol (httporhttps)DOCKER_SOCKET_PATH- Path to Docker socket (overrides platform default)DOCKER_CERT_PATH- Path to Docker certificates directoryDOCKER_TLS_VERIFY- Enable TLS verification (1or0)
Platform-specific defaults (automatic detection):
Linux:
/var/run/docker.sockmacOS:
/var/run/docker.sock(or~/.docker/run/docker.sockif available)Windows:
//./pipe/docker_engine
Windows Configuration
On Windows, Docker Desktop uses named pipes. The server automatically detects Windows and uses the correct path. You can also explicitly set:
Remote Docker Host
To connect to a remote Docker host:
Usage
With Cursor
Add to your Cursor MCP configuration:
With Claude Desktop
Add to your Claude Desktop configuration (~/Library/Application Support/Claude/claude_desktop_config.json on macOS):
Available Tools
Container Tools
docker_list_containers- List all containersdocker_create_container- Create a new containerdocker_start_container- Start a containerdocker_stop_container- Stop a containerdocker_restart_container- Restart a containerdocker_kill_container- Kill a containerdocker_remove_container- Remove a containerdocker_inspect_container- Get container detailsdocker_container_logs- Get container logsdocker_container_stats- Get container statisticsdocker_pause_container- Pause a containerdocker_unpause_container- Unpause a container
Image Tools
docker_list_images- List all imagesdocker_pull_image- Pull an image from registrydocker_push_image- Push an image to registrydocker_tag_image- Tag an imagedocker_remove_image- Remove an imagedocker_inspect_image- Get image detailsdocker_image_history- Get image history
Network Tools
docker_list_networks- List all networksdocker_create_network- Create a networkdocker_remove_network- Remove a networkdocker_inspect_network- Get network detailsdocker_connect_container- Connect container to networkdocker_disconnect_container- Disconnect container from network
Volume Tools
docker_list_volumes- List all volumesdocker_create_volume- Create a volumedocker_remove_volume- Remove a volumedocker_inspect_volume- Get volume details
System Tools
docker_system_info- Get Docker system informationdocker_version- Get Docker versiondocker_prune_system- Prune all unused resourcesdocker_prune_images- Prune unused imagesdocker_prune_containers- Prune stopped containersdocker_prune_volumes- Prune unused volumesdocker_prune_networks- Prune unused networks
Exec Tools
docker_exec- Execute a command in a containerdocker_inspect_exec- Get exec instance details
Compose Tools
docker_compose_up- Start Docker Compose servicesdocker_compose_down- Stop and remove Docker Compose servicesdocker_compose_ps- List Docker Compose servicesdocker_compose_logs- View output from Docker Compose servicesdocker_compose_config- Parse and validate docker-compose.yml filedocker_compose_build- Build Docker Compose servicesdocker_compose_restart- Restart Docker Compose servicesdocker_compose_stop- Stop Docker Compose servicesdocker_compose_start- Start Docker Compose services
Registry Tools
dockerhub_search- Search Docker Hubdockerhub_get_tags- Get repository tags from Docker Hubdockerhub_authenticate- Authenticate with Docker Hubdockerhub_pull- Pull from Docker Hubdockerhub_push- Push to Docker Hubghcr_authenticate- Authenticate with GitHub Container Registryghcr_pull- Pull from GHCRghcr_push- Push to GHCR
Examples
List running containers
Create and start a container
Then start it:
Pull an image from Docker Hub
Search Docker Hub
Execute a command in a container
Start Docker Compose services
View Compose logs
Removing Resources with Confirmation
All destructive operations (remove, kill, prune) support two confirmation methods:
Method 1: Confirm Parameter (Default - Works Everywhere)
Step 1: Preview (without confirm)
This returns volume details and a warning message.
Step 2: Confirm (with confirm=true)
This actually removes the volume.
Method 2: MCP Elicitation API (Advanced - Better UX)
If your MCP client (Cursor, Claude Desktop) supports Elicitation API, you can use interactive confirmation:
This will show an interactive confirmation dialog in the client (if supported). The client will display a form asking for confirmation, and the operation proceeds only if the user accepts.
Note: Elicitation API support depends on the MCP client. If the client doesn't support it, the server automatically falls back to the confirm parameter method.
Operations requiring confirmation:
docker_remove_volume- Remove volumesdocker_remove_container- Remove containersdocker_kill_container- Kill containersdocker_remove_image- Remove imagesdocker_remove_network- Remove networksdocker_prune_system- Prune all unused resourcesdocker_prune_images- Prune unused imagesdocker_prune_containers- Prune stopped containersdocker_prune_volumes- Prune unused volumesdocker_prune_networks- Prune unused networks
Testing the Server
Quick Test
Build the project:
Use the test script:
Or test manually:
Test Docker connection:
If Docker is running, you should see:
Test with a simple MCP request (using jq for JSON formatting):
Note: The server communicates via stdio, so it will wait for JSON-RPC requests. Press Ctrl+C to exit.
Manual Testing Steps
Start the server:
In another terminal, test with curl (if using HTTP transport) or use an MCP client
Verify Docker operations work:
List containers: Use
docker_list_containerstoolCheck system info: Use
docker_system_infotool
Integration Testing
For full integration testing, you'll need an MCP client. The server communicates via stdio (standard input/output), so it's designed to work with MCP-compatible clients like:
Cursor IDE
Claude Desktop
Custom MCP clients
Debugging
Enable verbose logging by checking stderr output. The server writes errors and status messages to stderr:
Requirements
Node.js 18.0.0 or higher
Docker daemon running and accessible
Supported Platforms:
Linux (x64, ARM64)
macOS (Intel, Apple Silicon)
Windows (x64, ARM64)
For remote Docker: Proper network access and TLS certificates (if using TLS)
Platform-Specific Notes
Linux: Requires Docker daemon with Unix socket at
/var/run/docker.sockmacOS: Works with Docker Desktop. Automatically detects socket location.
Windows: Works with Docker Desktop. Uses named pipe
//./pipe/docker_engine
Quick Start (Local Development)
License
MIT
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.