docker-server
Universal Docker MCP server for AI assistants (Cursor, Claude Desktop)
Installation
npx @hypnosis/docker-mcp-serverAsk AI about docker-server
Powered by Claude Β· Grounded in docs
I know everything about docker-server. Ask me about installation, configuration, usage, or troubleshooting.
0/500
Reviews
Documentation
Docker MCP Server
Universal Docker MCP server for AI assistants (Cursor, Claude Desktop). Manage Docker containers, execute commands, query databases, and handle environment configurations β all through natural language.
β¨ Features
- β 20 MCP Commands β Container management, database operations, environment handling, resource monitoring, project discovery
- β Database Support β PostgreSQL, Redis, SQLite with extensible adapter pattern
- β Resource Monitoring β Container stats (CPU, Memory, Network, Block I/O), images, volumes, networks
- β
Auto-Discovery β Automatically finds and parses
docker-compose.ymlfiles (local and remote) - β Remote Docker β SSH support for managing remote Docker hosts
- β Remote Project Discovery β Automatically find all Docker projects on remote servers
- β Security β Automatic secrets masking in environment variables
- β
Follow Logs β Real-time log streaming with
followmode - β Type-Safe β Written in TypeScript with full type definitions
- β Universal β Works with any Docker project
π¦ Installation
Global Installation (Recommended)
npm install -g @hypnosis/docker-mcp-server
NPX (No Installation)
npx @hypnosis/docker-mcp-server
Local Installation
npm install @hypnosis/docker-mcp-server
π Quick Start
Configuration for Cursor
Add to ~/.cursor/mcp.json (or ~/.config/cursor/mcp.json):
Local Docker (simplest - no configuration needed!):
{
"mcpServers": {
"docker": {
"command": "npx",
"args": ["-y", "@hypnosis/docker-mcp-server"]
}
}
}
That's it! The server will automatically detect and use your local Docker installation.
Optional: Enable auto-discovery and secret masking:
{
"mcpServers": {
"docker": {
"command": "npx",
"args": ["-y", "@hypnosis/docker-mcp-server"],
"env": {
"DOCKER_MCP_AUTO_DISCOVER": "true",
"DOCKER_MCP_MASK_SECRETS": "true"
}
}
}
}
Remote Docker (with profiles file):
{
"mcpServers": {
"docker": {
"command": "npx",
"args": ["-y", "@hypnosis/docker-mcp-server"],
"env": {
"DOCKER_MCP_PROFILES_FILE": "~/.docker-mcp/profiles.json"
}
}
}
}
Create ~/.docker-mcp/profiles.json:
{
"default": "production",
"profiles": {
"production": {
"host": "prod.example.com",
"username": "deployer",
"port": 22,
"privateKeyPath": "~/.ssh/id_rsa",
"projectsPath": "/var/www"
}
}
}
Note: projectsPath specifies where to search for Docker projects on remote server (default: /var/www).
Note: If the profiles file doesn't exist or is invalid, the server will gracefully fall back to local Docker β no errors, no configuration needed!
Using Profiles in Commands
Starting from v1.3.0, you can specify a profile parameter in any command to work with remote servers:
// List containers on remote production server
docker_container_list({profile: "production"})
// Query database on remote server
docker_db_query({service: "postgres", query: "SELECT * FROM users;", profile: "production"})
// Check status on staging server
docker_container_stats({service: "web", profile: "staging"})
// Local Docker (default, no profile needed)
docker_container_list() // Uses local Docker automatically
See Remote Docker Guide for detailed information about profiles and remote management.
Configuration for Claude Desktop
Add to ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):
{
"mcpServers": {
"docker": {
"command": "npx",
"args": ["-y", "@hypnosis/docker-mcp-server"]
}
}
}
First Steps
- Restart your AI assistant (Cursor or Claude Desktop)
- Navigate to your Docker project directory (with
docker-compose.yml) - Ask your AI assistant:
- "Show me the status of all containers"
- "Restart the web service"
- "Show me the last 50 lines of logs from the database"
π Available Commands
Container Management (9 commands)
| Command | Description | Example |
|---|---|---|
docker_container_list | List all containers (grouped by project) | docker_container_list() |
docker_container_start | Start a container | docker_container_start({service: "web"}) |
docker_container_stop | Stop a container | docker_container_stop({service: "web"}) |
docker_container_restart | Restart a container | docker_container_restart({service: "web"}) |
docker_container_logs | View container logs | docker_container_logs({service: "web", follow: true, lines: 100}) |
docker_container_stats | Get container resource usage | docker_container_stats({service: "web"}) |
docker_compose_up | Start entire stack | docker_compose_up({build: true}) |
docker_compose_down | Stop entire stack | docker_compose_down({volumes: false}) |
docker_resource_list | List Docker images, volumes, or networks | docker_resource_list({type: "images"}) |
Database Operations (4 commands)
| Command | Description | Example |
|---|---|---|
docker_db_query | Execute SQL query or database command | docker_db_query({service: "postgres", query: "SELECT * FROM users LIMIT 5;"}) |
docker_db_backup | Create database backup | docker_db_backup({service: "postgres", compress: true}) |
docker_db_restore | Restore from backup | docker_db_restore({service: "postgres", backupPath: "./backup.sql"}) |
docker_db_status | Show database status | docker_db_status({service: "postgres"}) |
Environment & Config (3 commands)
| Command | Description | Example |
|---|---|---|
docker_env_list | List environment variables (with secret masking) | docker_env_list({service: "web", maskSecrets: true}) |
docker_compose_config | Show parsed compose config | docker_compose_config() |
docker_healthcheck | Check health of all services | docker_healthcheck() |
Universal Executor (1 command)
| Command | Description | Example |
|---|---|---|
docker_exec | Execute any command in container | docker_exec({service: "web", command: "npm test"}) |
Project Discovery (1 command)
| Command | Description | Example |
|---|---|---|
docker_projects | List all Docker projects with status (fast, ~2s) | docker_projects() |
Note: For detailed container info, use docker_container_list({project: "project-name"}).
Utility Tools (2 commands)
| Command | Description | Example |
|---|---|---|
docker_mcp_health | Server diagnostics and health check | docker_mcp_health() |
docker_profile_info | Show current profile and available profiles | docker_profile_info() |
π‘ Usage Examples
Example 1: Web Development (Next.js + Redis)
// Start the entire stack
docker_compose_up({build: true, detach: true})
// Check if services are healthy
docker_healthcheck()
// View logs in real-time
docker_container_logs({service: "web", follow: true, lines: 50})
// Check Redis cache
docker_db_query({service: "redis", query: "KEYS *"})
// Run tests
docker_exec({service: "web", command: "npm test"})
Example 2: Backend Development (Django + PostgreSQL)
// Restart backend after code changes
docker_container_restart({service: "web"})
// Run database migrations
docker_exec({service: "web", command: "python manage.py migrate"})
// Query database
docker_db_query({service: "postgres", query: "SELECT COUNT(*) FROM auth_user;"})
// Create backup before deployment
docker_db_backup({service: "postgres", compress: true})
// View application logs
docker_container_logs({service: "web", lines: 100, timestamps: true})
ποΈ How It Works
Project Discovery
The server automatically discovers your project structure:
- Finds
docker-compose.ymlin current directory or parent directories - Parses project configuration (services, networks, volumes)
- Detects database types (PostgreSQL, Redis, SQLite)
- Loads environment files (
.env,.env.local) - Masks secrets automatically (PASSWORD, TOKEN, KEY, etc.)
Database Adapters
Extensible adapter pattern for different databases:
- PostgreSQL β
psql,pg_dump,pg_restore - Redis β
redis-cli,SAVE,BGSAVE - SQLite β
.dump,.restore - More databases can be added via adapters
π Security
Automatic Secrets Masking
Environment variables containing sensitive data are automatically masked:
// Original .env
DATABASE_PASSWORD=super_secret_123
API_TOKEN=abc123xyz
// Output from docker_env_list()
DATABASE_PASSWORD=***MASKED***
API_TOKEN=***MASKED***
Keywords that trigger masking: PASSWORD, TOKEN, KEY, SECRET, API_KEY
π Documentation
- Quick Start Guide β Detailed setup instructions
- API Reference β Complete command documentation
- Remote Docker Guide β SSH-based remote Docker management
- Remote Discovery Guide β Automatic project discovery on remote servers
- Examples β Real-world usage scenarios
- Testing System β Complete testing guide (E2E, Unit, Manual)
- Troubleshooting β Common issues and solutions
- FAQ β Frequently asked questions
- Roadmap β Future development plans and upcoming features
For developer documentation, see docs/DEV/README.md
Roadmap Overview
The project roadmap outlines planned features and releases. Key upcoming features include:
- v1.4.0 (Q1 2026): MySQL and MongoDB adapters
- v1.5.0 (Q2 2026): Enhanced monitoring and analytics
- v2.0.0 (Q3 2026): Plugin system and major architecture update
- v2.1.0 (Q4 2026): Network, volume, and image management
See docs/ROADMAP.md for detailed information about future plans, priorities, and how to contribute to the roadmap.
π€ Contributing
We welcome contributions! This is an open-source project built for the community.
How to Contribute
- Fork the repository
- Create a feature branch
- Make your changes
- Add tests if applicable
- Submit a pull request
See docs/DEV/README.md for development setup and guidelines.
π License
MIT License - see LICENSE for details
Copyright (c) 2025 Danila Susak
π Acknowledgments
- Model Context Protocol by Anthropic
- Docker for containerization
- Community feedback and contributions
π¬ Support
- Issues: GitHub Issues
- Discussions: GitHub Discussions
Made with β€οΈ for the AI-powered development community
