Docker MCP server
Gerencie contêineres, volumes e serviços Docker usando comandos em linguagem natural.
Documentação
🐋 Docker MCP server
Um servidor MCP para gerenciar Docker com linguagem natural!
🪩 O que ele pode fazer?
- 🚀 Compor contêineres com linguagem natural
- 🔍 Inspecionar e depurar contêineres em execução
- 📀 Gerenciar dados persistentes com volumes Docker
❓ Para quem é isso?
- Administradores de servidores: conecte-se a mecanismos Docker remotos, por exemplo, para gerenciar um site voltado ao público.
- Entusiastas: execute contêineres localmente e experimente aplicativos de código aberto que suportam Docker.
- Entusiastas de IA: ultrapasse os limites do que um LLM é capaz de fazer!
Demonstração
Uma demonstração rápida mostrando uma implantação do WordPress usando linguagem natural:
https://github.com/user-attachments/assets/65e35e67-bce0-4449-af7e-9f4dd773b4b3
🏎️ Início rápido
Instalação
Claude Desktop
No MacOS: ~/Library/Application\ Support/Claude/claude_desktop_config.json
No Windows: %APPDATA%/Claude/claude_desktop_config.json
Instale do PyPi com uv
Se você não tiver o uv instalado, siga as instruções de instalação para o seu sistema:
link
Em seguida, adicione o seguinte ao seu arquivo de servidores MCP:
"mcpServers": {
"mcp-server-docker": {
"command": "uvx",
"args": [
"mcp-server-docker"
]
}
}
Instale com Docker
Puramente por conveniência, o servidor pode ser executado em um contêiner Docker.
Após clonar este repositório, crie a imagem Docker:
docker build -t mcp-server-docker .
E então adicione o seguinte ao seu arquivo de servidores MCP:
"mcpServers": {
"mcp-server-docker": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-v",
"/var/run/docker.sock:/var/run/docker.sock",
"mcp-server-docker:latest"
]
}
}
Observe que montamos o socket Docker como um volume; isso garante que o servidor MCP possa se conectar e controlar o daemon Docker local.
📝 Prompts
🎻 docker_compose
Use linguagem natural para compor contêineres. Veja acima uma demonstração.
Forneça um Nome de Projeto e uma descrição dos contêineres desejados, e deixe o LLM fazer o resto.
Este prompt instrui o LLM a entrar em um loop de plan+apply. Sua interação com o LLM envolverá as seguintes etapas:
- Você dá instruções ao LLM sobre quais contêineres subir
- O LLM calcula um plano conciso em linguagem natural e o apresenta a você
- Você então:
- Aplica o plano
- Fornece feedback ao LLM, e o LLM recalcula o plano
Exemplos
- nome:
nginx, contêineres: "implantar um contêiner nginx expondo-o na porta 9000" - nome:
wordpress, contêineres: "implantar um contêiner WordPress e um contêiner MySQL de suporte, expondo o WordPress na porta 9000"
Retomando um Projeto
Ao iniciar um novo chat com este prompt, o LLM receberá o status de quaisquer contêineres, volumes e redes criados com o projeto name fornecido.
Isso é útil principalmente para limpeza, caso você perca um chat que era responsável por muitos contêineres.
📔 Recursos
O servidor expõe modelos de recursos em vez de enumerar contêineres atualmente em execução:
docker://containers/{container_id}/logs(text/plain)docker://containers/{container_id}/stats(application/json)
Leia qualquer URI com um ID ou nome de contêiner Docker.
🔨 Ferramentas
Contêineres
list_containerscreate_containerrun_containerrecreate_containerstart_containerfetch_container_logsstop_containerremove_container
Imagens
list_imagespull_imagepush_imagebuild_imageremove_image
Redes
list_networkscreate_networkremove_network
Volumes
list_volumescreate_volumeremove_volume
🚧 Avisos
Dados Sensíveis
NÃO CONFIGURE CONTÊINERES COM DADOS SENSÍVEIS. Isso inclui chaves de API, senhas de banco de dados, etc.
Qualquer dado sensível trocado com o LLM é inerentemente comprometido, a menos que o LLM esteja sendo executado na sua máquina local.
Se você tiver interesse em passar segredos com segurança para contêineres, abra uma issue neste repositório com seu caso de uso.
Revisando Contêineres Criados
Tenha cuidado ao revisar os contêineres que o LLM cria. O Docker não é um sandbox seguro e, portanto, o servidor MCP pode potencialmente impactar a máquina host através do Docker.
Por razões de segurança, este servidor MCP não suporta opções sensíveis do Docker como --privileged ou --cap-add/--cap-drop. Se esses recursos forem do seu interesse, abra uma issue neste repositório com seu caso de uso.
🛠️ Configuração
Este servidor usa o método from_env do SDK Python do Docker. Para detalhes de configuração, consulte
a documentação.
Conectar ao Docker via SSH
Este servidor MCP pode se conectar a um daemon Docker remoto via SSH.
Basta definir uma URL de host ssh:// na definição do servidor MCP:
"mcpServers": {
"mcp-server-docker": {
"command": "uvx",
"args": [
"mcp-server-docker"
],
"env": {
"DOCKER_HOST": "ssh://myusername@myhost.example.com"
}
}
}
💻 Desenvolvimento
Prefira usar o Devbox para configurar seu ambiente de desenvolvimento. O servidor usa a API de alto nível MCPServer do MCP Python SDK v2 e pode ser inspecionado diretamente:
uv sync --all-groups
uv run mcp dev src/mcp_server_docker/server.py:app
# or: npx @modelcontextprotocol/inspector uv run mcp-server-docker
Execute a suíte de testes e lint hermética sem um daemon Docker:
uv run pytest
uv run ruff format --check src tests
uv run ruff check src tests
Consulte o devbox.json para comandos úteis de desenvolvimento.
Após configurar o devbox, você pode configurar seu arquivo MCP do Claude para usá-lo:
"docker": {
"command": "/path/to/repo/.devbox/nix/profile/default/bin/uv",
"args": [
"--directory",
"/path/to/repo/",
"run",
"mcp-server-docker"
]
},