MCP Dockhand
Exposes over 130 Dockhand API endpoints as tools to manage Docker infrastructure through AI assistants. It enables comprehensive control over containers, stacks, networks, and volumes across multiple environments and hosts.
README
MCP Dockhand
An MCP (Model Context Protocol) server that exposes 130+ Dockhand API endpoints as MCP tools. Manage your entire Docker infrastructure through AI assistants.
Dockhand is a Docker management server that connects to multiple Docker hosts via Hawser agents. This MCP server provides full programmatic access to all Dockhand features.
Features
- 130+ MCP Tools covering all Dockhand API endpoints
- Streamable HTTP Transport (MCP Spec 2025-03-26) for Docker container hosting
- Session-based Auth with auto-relogin on 401
- SSE Support for deploy operations (start, stop, down, restart)
- Environment Filter enforced on all container/stack/image/network/volume endpoints
- Docker Ready with multi-stage build, non-root user, and health checks
Quick Start
Docker (recommended)
docker run -d \
--name mcp-dockhand \
-p 8080:8080 \
-e DOCKHAND_URL=https://your-dockhand-server.com \
-e DOCKHAND_USERNAME=your-username \
-e DOCKHAND_PASSWORD=your-password \
ghcr.io/strausmann/mcp-dockhand:latest
Docker Compose
services:
mcp-dockhand:
image: ghcr.io/strausmann/mcp-dockhand:latest
container_name: mcp-dockhand
restart: unless-stopped
ports:
- "8080:8080"
environment:
- DOCKHAND_URL=https://your-dockhand-server.com
- DOCKHAND_USERNAME=your-username
- DOCKHAND_PASSWORD=your-password
From Source
git clone https://github.com/strausmann/mcp-dockhand.git
cd mcp-dockhand
npm install
npm run build
DOCKHAND_URL=https://your-server.com DOCKHAND_USERNAME=admin DOCKHAND_PASSWORD=secret npm start
Configuration
| Variable | Required | Default | Description |
|---|---|---|---|
DOCKHAND_URL |
Yes | - | Dockhand server URL |
DOCKHAND_USERNAME |
Yes | - | Dockhand username |
DOCKHAND_PASSWORD |
Yes | - | Dockhand password |
MCP_PORT |
No | 8080 |
Port for the MCP server |
LOG_LEVEL |
No | info |
Log level |
MCP Client Configuration
Claude Desktop / Claude Code
Add to your MCP settings:
{
"mcpServers": {
"dockhand": {
"url": "http://localhost:8080/mcp"
}
}
}
Tool Reference
Containers (27 tools)
| Tool | Description |
|---|---|
list_containers |
List all containers in an environment |
get_container |
Get container details |
inspect_container |
Docker inspect (full details) |
get_container_logs |
Get container logs |
get_container_stats |
Get resource usage stats |
get_container_top |
Get running processes |
start_container |
Start a container |
stop_container |
Stop a container |
restart_container |
Restart a container |
pause_container |
Pause a container |
unpause_container |
Unpause a container |
rename_container |
Rename a container |
update_container |
Update container settings |
create_container |
Create a new container |
get_container_shells |
List available shells |
list_container_files |
Browse files inside container |
get_container_file_content |
Read file from container |
create_container_file |
Create file in container |
delete_container_file |
Delete file in container |
rename_container_file |
Rename file in container |
chmod_container_file |
Change file permissions |
check_container_updates |
Check for image updates |
get_pending_updates |
Get pending updates |
batch_update_containers |
Batch update containers |
get_container_sizes |
Get container disk sizes |
get_containers_stats |
Get aggregated stats |
Stacks (21 tools)
| Tool | Description |
|---|---|
list_stacks |
List all stacks |
get_stack |
Get stack details |
create_stack |
Create and optionally deploy a stack |
start_stack |
Start a stack (compose up) |
stop_stack |
Stop a stack (compose stop) |
restart_stack |
Restart a stack |
down_stack |
Take down a stack (compose down) |
delete_stack |
Delete a stack |
get_stack_compose |
Read compose file |
update_stack_compose |
Update compose file |
get_stack_env |
Read environment variables |
update_stack_env |
Update environment variables |
get_stack_env_raw |
Read raw .env file |
validate_stack_env |
Validate env variables |
scan_stacks |
Scan filesystem for stacks |
adopt_stack |
Adopt an untracked stack |
relocate_stack |
Move stack to new path |
get_stack_sources |
Get stack sources |
get_stack_base_path |
Get base path |
get_stack_path_hints |
Get path suggestions |
validate_stack_path |
Validate a stack path |
Images (9 tools)
| Tool | Description |
|---|---|
list_images |
List all images |
get_image |
Get image details |
get_image_history |
Get image layer history |
tag_image |
Tag an image |
remove_image |
Remove an image |
pull_image |
Pull an image |
push_image |
Push an image |
scan_image |
Vulnerability scan (Trivy/Grype) |
export_image |
Export image as tarball |
Environments (18 tools)
| Tool | Description |
|---|---|
list_environments |
List all environments |
get_environment |
Get environment details |
create_environment |
Create an environment |
update_environment |
Update an environment |
delete_environment |
Delete an environment |
test_environment |
Test connection |
test_environment_connection |
Test without saving |
detect_docker_socket |
Auto-detect socket |
get_environment_timezone |
Get timezone |
set_environment_timezone |
Set timezone |
get_environment_update_check |
Get update-check settings |
set_environment_update_check |
Set update-check settings |
get_environment_image_prune |
Get image prune settings |
set_environment_image_prune |
Set image prune settings |
list_environment_notifications |
List notifications |
create_environment_notification |
Create notification |
get_environment_notification |
Get notification |
delete_environment_notification |
Delete notification |
Networks (7 tools)
| Tool | Description |
|---|---|
list_networks |
List all networks |
get_network |
Get network details |
inspect_network |
Inspect network |
create_network |
Create a network |
remove_network |
Remove a network |
connect_container_to_network |
Connect container |
disconnect_container_from_network |
Disconnect container |
Volumes (9 tools)
| Tool | Description |
|---|---|
list_volumes |
List all volumes |
get_volume |
Get volume details |
inspect_volume |
Inspect volume |
browse_volume |
Browse files in volume |
get_volume_file_content |
Read file from volume |
release_volume_browse |
Release browse session |
clone_volume |
Clone a volume |
export_volume |
Export volume |
remove_volume |
Remove volume (destructive) |
Git Stacks (15 tools)
| Tool | Description |
|---|---|
list_git_stacks |
List Git-based stacks |
get_git_stack |
Get Git stack details |
deploy_git_stack |
Deploy a Git stack (SSE) |
sync_git_stack |
Sync with remote repo |
test_git_stack |
Test Git connection |
get_git_stack_env_files |
Get env files |
trigger_git_webhook |
Trigger webhook |
get_git_webhook |
Get webhook details |
list_git_credentials |
List Git credentials |
create_git_credential |
Create Git credential |
get_git_credential |
Get credential details |
update_git_credential |
Update credential |
delete_git_credential |
Delete credential |
list_git_repositories |
List Git repositories |
create_git_repository |
Create repository config |
Dashboard & Activity (8 tools)
| Tool | Description |
|---|---|
get_dashboard_stats |
Get dashboard statistics |
get_dashboard_preferences |
Get display preferences |
set_dashboard_preferences |
Set display preferences |
get_activity_feed |
Get activity feed |
get_container_activity |
Container activity |
get_activity_events |
Activity events |
get_activity_stats |
Activity statistics |
get_merged_logs |
Merged logs from containers |
Auth & Hawser (12 tools)
| Tool | Description |
|---|---|
get_auth_session |
Check session status |
get_auth_providers |
List auth providers |
get_auth_settings |
Get auth settings |
create_oidc_provider |
Create OIDC provider |
get_oidc_provider |
Get OIDC provider |
test_oidc_provider |
Test OIDC provider |
create_ldap_provider |
Create LDAP provider |
get_ldap_provider |
Get LDAP provider |
test_ldap_provider |
Test LDAP provider |
list_hawser_tokens |
List Hawser tokens |
create_hawser_token |
Create Hawser token |
revoke_hawser_token |
Revoke Hawser token |
Audit (4 tools)
| Tool | Description |
|---|---|
get_audit_log |
Get audit log |
get_audit_events |
Get audit event types |
get_audit_users |
Audit data by user |
export_audit_log |
Export audit log |
Notifications (8 tools)
| Tool | Description |
|---|---|
list_notifications |
List notifications |
create_notification |
Create notification |
get_notification |
Get notification |
update_notification |
Update notification |
delete_notification |
Delete notification |
test_notification |
Test notification |
test_notification_config |
Test without saving |
trigger_test_notification |
Trigger test event |
Registries (10 tools)
| Tool | Description |
|---|---|
list_registries |
List registries |
create_registry |
Add registry |
get_registry |
Get registry details |
update_registry |
Update registry |
delete_registry |
Delete registry |
set_default_registry |
Set as default |
search_registry |
Search registry |
get_registry_catalog |
Get catalog |
get_registry_image |
Get image from registry |
get_registry_tags |
Get image tags |
System & Settings (19 tools)
| Tool | Description |
|---|---|
health_check |
Server health |
health_check_database |
Database health |
get_host_info |
Host information |
get_system_info |
System information |
get_system_disk |
Disk usage |
list_system_files |
List system files |
get_system_file_content |
Read system file |
get_changelog |
Changelog |
get_dependencies |
Dependencies |
get_general_settings |
General settings |
update_general_settings |
Update settings |
get_theme_settings |
Theme settings |
update_theme_settings |
Update theme |
get_scanner_settings |
Scanner settings |
update_scanner_settings |
Update scanner |
get_license |
License info |
activate_license |
Activate license |
get_prometheus_metrics |
Prometheus metrics |
prune_all |
Prune all resources |
Users, Roles & Preferences (20 tools)
| Tool | Description |
|---|---|
list_users |
List users |
create_user |
Create user |
get_user |
Get user details |
update_user |
Update user |
delete_user |
Delete user |
get_user_mfa_status |
MFA status |
enable_user_mfa |
Enable MFA |
disable_user_mfa |
Disable MFA |
get_user_roles |
Get user roles |
set_user_roles |
Set user roles |
list_roles |
List roles |
create_role |
Create role |
get_role |
Get role |
update_role |
Update role |
delete_role |
Delete role |
get_profile |
Get own profile |
update_profile |
Update own profile |
get_favorites |
Get favorites |
set_favorites |
Set favorites |
list_config_sets |
List config sets |
Schedules (9 tools)
| Tool | Description |
|---|---|
list_schedules |
List schedules |
get_schedule_settings |
Get settings |
update_schedule_settings |
Update settings |
get_schedule_executions |
Execution history |
get_schedule_execution |
Execution details |
get_schedule |
Get schedule |
run_schedule_now |
Run immediately |
toggle_schedule |
Enable/disable |
toggle_system_schedule |
Toggle system schedule |
Auto-Update (3 tools)
| Tool | Description |
|---|---|
get_auto_update_settings |
Get all auto-update settings |
get_container_auto_update |
Get container auto-update |
set_container_auto_update |
Set auto-update policy |
Important Notes
Environment ID is Required
Most Docker resource endpoints (containers, stacks, images, networks, volumes) require an environmentId parameter. This maps to the ?env=<id> query parameter in the Dockhand API. Without it, endpoints return empty arrays.
SSE Responses
Deploy operations (start, stop, down, restart, compose update with restart) return Server-Sent Events. The MCP server automatically parses these and returns the final result.
Authentication
The server uses session-based cookie authentication. It automatically:
- Logs in on first request
- Stores the session cookie in memory
- Re-authenticates on 401 responses
- Handles session timeout (24h)
Development
# Install dependencies
npm install
# Type check
npm run typecheck
# Build
npm run build
# Run in development mode
DOCKHAND_URL=https://your-server.com \
DOCKHAND_USERNAME=admin \
DOCKHAND_PASSWORD=secret \
npm run dev
License
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。