io.github.alisaitteke/docker-mcp

平台与服务

by alisaitteke

用于管理Docker容器、镜像、网络、卷和镜像仓库的MCP server。

什么是 io.github.alisaitteke/docker-mcp

用于管理Docker容器、镜像、网络、卷和镜像仓库的MCP server。

README

Docker MCP Server

<div align="center"> <img src="https://raw.githubusercontent.com/alisaitteke/docker-mcp/develop/social_preview.png" alt="Docker MCP Server" width="600"/> </div> <div align="center">

Powerful Docker management for AI assistants

npm version License: MIT Node.js Version

</div>

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

<picture><source media="(prefers-color-scheme: dark)" srcset="docs/icons/star-white.svg"><img src="docs/icons/star.svg" width="24" height="24" alt="Features"></picture> 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

<picture><source media="(prefers-color-scheme: dark)" srcset="docs/icons/package-white.svg"><img src="docs/icons/package.svg" width="24" height="24" alt="Installation"></picture> Installation

Via npx (Recommended)

bash
npx @alisaitteke/docker-mcp

Local Installation

bash
npm install -g @alisaitteke/docker-mcp

Or install locally in your project:

bash
npm install @alisaitteke/docker-mcp

<picture><source media="(prefers-color-scheme: dark)" srcset="docs/icons/rocket-white.svg"><img src="docs/icons/rocket.svg" width="24" height="24" alt="Quick Start"></picture> Quick Start

With Cursor

  1. Add to your Cursor MCP configuration (usually in .cursor/mcp.json or similar):
json
{
  "mcpServers": {
    "docker": {
      "command": "npx",
      "args": ["@alisaitteke/docker-mcp"]
    }
  }
}
  1. Restart Cursor and start managing Docker with AI!

With Claude Desktop

  1. Add to your Claude Desktop configuration:
    • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
    • Windows: %APPDATA%\Claude\claude_desktop_config.json
    • Linux: ~/.config/Claude/claude_desktop_config.json
json
{
  "mcpServers": {
    "docker": {
      "command": "npx",
      "args": ["@alisaitteke/docker-mcp"]
    }
  }
}
  1. Restart Claude Desktop and start managing Docker with AI!

Local Development and Testing

Prerequisites

  • Node.js 18.0.0 or higher
  • Docker daemon running
  • npm or yarn

Setup

  1. Clone the repository:
bash
git clone <repository-url>
cd docker-mcp
  1. Install dependencies:
bash
npm install
  1. Build the project:
bash
npm run build

Running Locally

Method 1: Using npm start (after build)

bash
# Build first
npm run build

# Run the server
npm start

Method 2: Using npm run dev (development mode with tsx)

bash
npm run dev

This uses tsx to run TypeScript directly without building.

Method 3: Direct execution

bash
# Build first
npm run build

# Run directly with node
node dist/index.js

Method 4: Using the binary

bash
# Build first
npm run build

# Make sure the binary is executable
chmod +x bin/docker-mcp-server.js

# Run the binary
./bin/docker-mcp-server.js

Development Workflow

  1. Make changes to source files in src/
  2. Build the project:
bash
npm run build
  1. Test the changes:
bash
npm start
# or
npm run dev
  1. Check for TypeScript errors:
bash
npm run typecheck
  1. Lint the code:
bash
npm run lint

Troubleshooting

Docker connection issues:

  • Ensure Docker daemon is running: docker ps
  • Linux/macOS: Check Docker socket permissions: ls -la /var/run/docker.sock
  • Windows: 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.sock doesn't exist, try ~/.docker/run/docker.sock (Docker Desktop 4.0+)

Build errors:

  • Clear node_modules and reinstall: rm -rf node_modules && npm install
  • Check TypeScript version compatibility
  • Ensure all dependencies are installed: npm install

Runtime errors:

  • Check that Docker is accessible: docker version
  • Verify the build was successful: ls -la dist/
  • Check server logs (errors are written to stderr)

<picture><source media="(prefers-color-scheme: dark)" srcset="docs/icons/gear-white.svg"><img src="docs/icons/gear.svg" width="24" height="24" alt="Configuration"></picture> 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.sock or ~/.docker/run/docker.sock (Docker Desktop 4.0+)
  • Windows: //./pipe/docker_engine (Named pipe)

Connection Methods (in order of priority)

  1. Environment variables (highest priority):

    • DOCKER_HOST - Docker daemon host (e.g., tcp://localhost:2376, npipe:////./pipe/docker_engine)
    • DOCKER_PORT - Docker daemon port
    • DOCKER_PROTOCOL - Protocol (http or https)
    • DOCKER_SOCKET_PATH - Path to Docker socket (overrides platform default)
    • DOCKER_CERT_PATH - Path to Docker certificates directory
    • DOCKER_TLS_VERIFY - Enable TLS verification (1 or 0)
  2. Platform-specific defaults (automatic detection):

    • Linux: /var/run/docker.sock
    • macOS: /var/run/docker.sock (or ~/.docker/run/docker.sock if 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:

bash
# Using environment variable
set DOCKER_SOCKET_PATH=//./pipe/docker_engine

# Or using DOCKER_HOST
set DOCKER_HOST=npipe:////./pipe/docker_engine

Remote Docker Host

To connect to a remote Docker host:

bash
# Linux/macOS
export DOCKER_HOST=tcp://192.168.1.100:2376
export DOCKER_TLS_VERIFY=1
export DOCKER_CERT_PATH=/path/to/certs

# Windows
set DOCKER_HOST=tcp://192.168.1.100:2376
set DOCKER_TLS_VERIFY=1
set DOCKER_CERT_PATH=C:\path\to\certs

<picture><source media="(prefers-color-scheme: dark)" srcset="docs/icons/wrench-white.svg"><img src="docs/icons/wrench.svg" width="24" height="24" alt="Available Tools"></picture> Available Tools

Container Tools

  • docker_list_containers - List all containers
  • docker_create_container - Create a new container
  • docker_start_container - Start a container
  • docker_stop_container - Stop a container
  • docker_restart_container - Restart a container
  • docker_kill_container - Kill a container
  • docker_remove_container - Remove a container
  • docker_inspect_container - Get container details
  • docker_container_logs - Get container logs
  • docker_container_stats - Get container statistics
  • docker_pause_container - Pause a container
  • docker_unpause_container - Unpause a container

Image Tools

  • docker_list_images - List all images
  • docker_pull_image - Pull an image from registry
  • docker_push_image - Push an image to registry
  • docker_tag_image - Tag an image
  • docker_remove_image - Remove an image
  • docker_inspect_image - Get image details
  • docker_image_history - Get image history

Network Tools

  • docker_list_networks - List all networks
  • docker_create_network - Create a network
  • docker_remove_network - Remove a network
  • docker_inspect_network - Get network details
  • docker_connect_container - Connect container to network
  • docker_disconnect_container - Disconnect container from network

Volume Tools

  • docker_list_volumes - List all volumes
  • docker_create_volume - Create a volume
  • docker_remove_volume - Remove a volume
  • docker_inspect_volume - Get volume details

System Tools

  • docker_system_info - Get Docker system information
  • docker_version - Get Docker version
  • docker_prune_system - Prune all unused resources
  • docker_prune_images - Prune unused images
  • docker_prune_containers - Prune stopped containers
  • docker_prune_volumes - Prune unused volumes
  • docker_prune_networks - Prune unused networks

Exec Tools

  • docker_exec - Execute a command in a container
  • docker_inspect_exec - Get exec instance details

Compose Tools

  • docker_compose_up - Start Docker Compose services
  • docker_compose_down - Stop and remove Docker Compose services
  • docker_compose_ps - List Docker Compose services
  • docker_compose_logs - View output from Docker Compose services
  • docker_compose_config - Parse and validate docker-compose.yml file
  • docker_compose_build - Build Docker Compose services
  • docker_compose_restart - Restart Docker Compose services
  • docker_compose_stop - Stop Docker Compose services
  • docker_compose_start - Start Docker Compose services

Registry Tools

  • dockerhub_search - Search Docker Hub
  • dockerhub_get_tags - Get repository tags from Docker Hub
  • dockerhub_authenticate - Authenticate with Docker Hub
  • dockerhub_pull - Pull from Docker Hub
  • dockerhub_push - Push to Docker Hub
  • ghcr_authenticate - Authenticate with GitHub Container Registry
  • ghcr_pull - Pull from GHCR
  • ghcr_push - Push to GHCR

<picture><source media="(prefers-color-scheme: dark)" srcset="docs/icons/document-white.svg"><img src="docs/icons/document.svg" width="24" height="24" alt="Examples"></picture> Examples

List running containers

json
{
  "name": "docker_list_containers",
  "arguments": {
    "all": false
  }
}

Create and start a container

json
{
  "name": "docker_create_container",
  "arguments": {
    "image": "nginx:latest",
    "name": "my-nginx",
    "ports": {"80/tcp": {}}
  }
}

Then start it:

json
{
  "name": "docker_start_container",
  "arguments": {
    "id": "my-nginx"
  }
}

Pull an image from Docker Hub

json
{
  "name": "docker_pull_image",
  "arguments": {
    "name": "ubuntu:20.04"
  }
}

Search Docker Hub

json
{
  "name": "dockerhub_search",
  "arguments": {
    "query": "node",
    "limit": 10
  }
}

Execute a command in a container

json
{
  "name": "docker_exec",
  "arguments": {
    "containerId": "my-container",
    "cmd": ["ls", "-la"],
    "tty": false
  }
}

Start Docker Compose services

json
{
  "name": "docker_compose_up",
  "arguments": {
    "projectDir": "/path/to/compose/project",
    "detach": true,
    "build": true
  }
}

View Compose logs

json
{
  "name": "docker_compose_logs",
  "arguments": {
    "projectDir": "/path/to/compose/project",
    "follow": false,
    "tail": 100
  }
}

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)

json
{
  "name": "docker_remove_volume",
  "arguments": {
    "name": "my-volume"
  }
}

This returns volume details and a warning message.

Step 2: Confirm (with confirm=true)

json
{
  "name": "docker_remove_volume",
  "arguments": {
    "name": "my-volume",
    "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:

json
{
  "name": "docker_remove_volume",
  "arguments": {
    "name": "my-volume",
    "useElicitation": true
  }
}

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 volumes
  • docker_remove_container - Remove containers
  • docker_kill_container - Kill containers
  • docker_remove_image - Remove images
  • docker_remove_network - Remove networks
  • docker_prune_system - Prune all unused resources
  • docker_prune_images - Prune unused images
  • docker_prune_containers - Prune stopped containers
  • docker_prune_volumes - Prune unused volumes
  • docker_prune_networks - Prune unused networks

Testing the Server

Quick Test

  1. Build the project:
bash
npm run build
  1. Use the test script:
bash
./test-server.sh

Or test manually:

  1. Test Docker connection:
bash
# The server will exit with error if Docker is not accessible
node dist/index.js

If Docker is running, you should see:

code
Docker MCP Server running on stdio
  1. Test with a simple MCP request (using jq for JSON formatting):
bash
echo '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}' | node dist/index.js | jq

Note: The server communicates via stdio, so it will wait for JSON-RPC requests. Press Ctrl+C to exit.

Manual Testing Steps

  1. Start the server:
bash
npm run build
npm start
  1. In another terminal, test with curl (if using HTTP transport) or use an MCP client

  2. Verify Docker operations work:

    • List containers: Use docker_list_containers tool
    • Check system info: Use docker_system_info tool

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:

bash
# Run and capture stderr
node dist/index.js 2> debug.log

<picture><source media="(prefers-color-scheme: dark)" srcset="docs/icons/checklist-white.svg"><img src="docs/icons/checklist.svg" width="24" height="24" alt="Requirements"></picture> 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.sock
  • macOS: Works with Docker Desktop. Automatically detects socket location.
  • Windows: Works with Docker Desktop. Uses named pipe //./pipe/docker_engine

Quick Start (Local Development)

bash
# Clone and setup
git clone <repository-url>
cd docker-mcp
npm install

# Build
npm run build

# Test
./test-server.sh

# Run
npm start
# or for development
npm run dev

License

MIT

Testing with MCP Clients

Testing with Cursor (Local Development)

If you're developing locally and want to test with Cursor:

  1. Build the project:
bash
npm run build
  1. Add to Cursor MCP configuration (usually in .cursor/mcp.json or similar):
json
{
  "mcpServers": {
    "docker": {
      "command": "node",
      "args": ["/absolute/path/to/docker-mcp/dist/index.js"]
    }
  }
}

Or if using the binary:

json
{
  "mcpServers": {
    "docker": {
      "command": "/absolute/path/to/docker-mcp/bin/docker-mcp-server.js"
    }
  }
}

Testing with Claude Desktop (Local Development)

If you're developing locally and want to test with Claude Desktop:

  1. Build the project:
bash
npm run build
  1. Add to Claude Desktop configuration:
    • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
    • Windows: %APPDATA%\Claude\claude_desktop_config.json
    • Linux: ~/.config/Claude/claude_desktop_config.json
json
{
  "mcpServers": {
    "docker": {
      "command": "node",
      "args": ["/absolute/path/to/docker-mcp/dist/index.js"]
    }
  }
}

Testing with MCP Inspector (CLI)

You can test the server using MCP Inspector or any MCP client:

bash
# Build first
npm run build

# The server communicates via stdio, so you can pipe commands to it
echo '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}' | node dist/index.js

<picture><source media="(prefers-color-scheme: dark)" srcset="docs/icons/handshake-white.svg"><img src="docs/icons/handshake.svg" width="24" height="24" alt="Contributing"></picture> Contributing

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

常见问题

io.github.alisaitteke/docker-mcp 是什么?

用于管理Docker容器、镜像、网络、卷和镜像仓库的MCP server。

相关 Skills

Slack动图

by anthropics

Universal
热门

面向Slack的动图制作Skill,内置emoji/消息GIF的尺寸、帧率和色彩约束、校验与优化流程,适合把创意或上传图片快速做成可直接发送的Slack动画。

帮你快速做出适配 Slack 的动图,内置约束规则和校验工具,少踩上传与播放坑,做表情包和演示都更省心。

平台与服务
未扫描165.3k

MCP构建

by anthropics

Universal
热门

聚焦高质量 MCP Server 开发,覆盖协议研究、工具设计、错误处理与传输选型,适合用 FastMCP 或 MCP SDK 对接外部 API、封装服务能力。

想让 LLM 稳定调用外部 API,就用 MCP构建:从 Python 到 Node 都有成熟指引,帮你更快做出高质量 MCP 服务器。

平台与服务
未扫描165.3k

接口测试套件

by alirezarezvani

Universal
热门

扫描 Next.js、Express、FastAPI、Django REST 的 API 路由,自动生成覆盖鉴权、参数校验、错误码、分页、上传与限流场景的 Vitest 或 Pytest 测试套件。

帮你把API与集成测试自动化跑顺,减少回归漏测;能力全面,尤其适合复杂接口场景的QA团队。

平台与服务
未扫描23.5k

相关 MCP Server

Slack 消息

编辑精选

by Anthropic

热门

Slack 是让 AI 助手直接读写你的 Slack 频道和消息的 MCP 服务器。

这个服务器解决了团队协作中需要 AI 实时获取 Slack 信息的痛点,特别适合开发团队让 Claude 帮忙汇总频道讨论或发送通知。不过,它目前只是参考实现,文档有限,不建议在生产环境直接使用——更适合开发者学习 MCP 如何集成第三方服务。

平台与服务
89.1k

by netdata

热门

io.github.netdata/mcp-server 是让 AI 助手实时监控服务器指标和日志的 MCP 服务器。

这个工具解决了运维人员需要手动检查系统状态的痛点,最适合 DevOps 团队让 Claude 自动分析性能数据。不过,它依赖 NetData 的现有部署,如果你没用过这个监控平台,得先花时间配置。

平台与服务
79.9k

by d4vinci

热门

Scrapling MCP Server 是专为现代网页设计的智能爬虫工具,支持绕过 Cloudflare 等反爬机制。

这个工具解决了爬取动态网页和反爬网站时的头疼问题,特别适合需要批量采集电商价格或新闻数据的开发者。不过,它依赖外部浏览器引擎,资源消耗较大,不适合轻量级任务。

平台与服务
71.9k

评论