Dokku
Un servidor MCP para gestionar aplicaciones en Dokku, la PaaS de código abierto.
Documentación
Servidor MCP de Dokku
Servidor de Model Context Protocol (MCP) para Dokku, escrito en Go.
Versión: consulta releases (dokku-mcp --version)
Este servidor expone las capacidades de gestión de Dokku a través del protocolo estandarizado Model Context Protocol (MCP), permitiendo que los Modelos de Lenguaje de Gran Tamaño (LLMs) interactúen con y gestionen una instancia de Dokku.
⚠️ Desarrollo temprano: Este proyecto se encuentra en sus primeras etapas. Se esperan cambios disruptivos y no se recomienda su uso en producción.
Pruébalo ahora: convierte tu instancia de Dokku en una PaaS gestionable por IA
Sigue la instalación u obtén un binario precompilado para empezar en minutos con cursor, claude-code, goose y todas las herramientas de agentes que soporten mcp.
O make start si ya tienes go instalado localmente.
MCP Inspector Playground
Para una visita rápida al servidor sin configurar un cliente MCP completo, usa el objetivo de make dedicado:
make inspect
Compila el binario (si es necesario), lanza el CLI de MCP Inspector y lo conecta al servidor en modo stdio. Inspector imprime una URL local: ábrela en tu navegador para explorar recursos, prompts y herramientas, o para realizar llamadas ad-hoc. Esta es una excelente manera de validar tu configuración antes de conectar Dokku MCP a Cursor, Claude, otros IDEs o herramientas internas.
Conexión de clientes MCP
El servidor puede usarse con cualquier cliente compatible con MCP.
Añade lo siguiente a tu zed, .cursor/mcp.json, windsurf, claude_desktop_config.json o .mcp.json:
{
"mcpServers": {
"dokku": {
"command": "/home/user/dokku-mcp/build/dokku-mcp",
"args": [],
"env": {
"DOKKU_MCP_SECURITY_BLACKLIST": "destroy,uninstall,remove",
"DOKKU_MCP_SSH_HOST": "127.0.0.1",
"DOKKU_MCP_SSH_KEY_PATH": "/home/user/.ssh/id_rsa",
"DOKKU_MCP_SSH_PORT": "22",
"DOKKU_MCP_SSH_USER": "dokku"
}
}
}
}
Recuerda reemplazar la ruta command con la ruta absoluta al binario.
Herramientas
Las herramientas están agrupadas por plugin. Los plugins vinculados a un plugin de Dokku (por ejemplo, Let's Encrypt) solo aparecen cuando ese plugin está instalado. Cada herramienta lleva anotaciones MCP (título, solo lectura, destructiva, idempotente), y las herramientas más nuevas devuelven contenido estructurado con un esquema de salida.
| Área | Herramientas |
|---|---|
| Aplicaciones | create_app, deploy_app, rollback_app, scale_app, configure_app, get_app_status, restart_app, stop_app, start_app |
| Despliegues | get_deployment_status, list_deployments |
| Registros | get_runtime_logs, follow_runtime_logs (en vivo, transmitidos como notificaciones de progreso), get_failed_deploy_logs |
| Almacenes de datos | list_services, create_service, get_service_info, link_service, unlink_service, get_service_logs, destroy_service (postgres, mysql, mariadb, redis, mongo, rabbitmq, memcached, clickhouse, elasticsearch) |
| Dominios | get_app_domains, add_app_domain, remove_app_domain, list_global_domains, add_global_domain |
| HTTPS | get_letsencrypt_status, enable_letsencrypt, disable_letsencrypt, set_letsencrypt_email |
| Acceso | list_ssh_keys, add_ssh_key, remove_ssh_key, get_registry_report, registry_login, registry_logout |
| Servidor | get_server_logs (opt-in con expose_server_logs) |
Los recursos incluyen dokku://onboarding/quickstart (empieza aquí), dokku://onboarding/capabilities, dokku://onboarding/intent-map, dokku://core/server/info y dokku://app/{name}/logs. El prompt app_doctor guía el diagnóstico de una aplicación.
Los despliegues son asíncronos: deploy_app devuelve un deployment_id tan pronto como el código está sincronizado, y get_deployment_status informa el resultado de la compilación y el final del registro de compilación.
Seguridad
El servidor ejecuta comandos de Dokku a través de SSH con la clave configurada, así que trátalo como esa clave.
- Seguridad de argumentos. El comando SSH de Dokku divide los argumentos por palabras, por lo que cada argumento se verifica contra un conjunto de caracteres seguro para shell. Los valores de formato libre (variables de entorno, contraseñas de registro, claves públicas SSH) se envían codificados en base64 o a través de stdin, nunca interpolados en la línea de comandos.
- Lista de permitidos / bloqueados.
security.allowlistrestringe el servidor a comandos coincidentes ("apps:","config:*","logs", ...);security.blacklistbloquea comandos que contengan un patrón (destroy,uninstall, ...). Ambos pueden configurarse conDOKKU_MCP_SECURITY_ALLOWLIST/DOKKU_MCP_SECURITY_BLACKLISTcomo listas separadas por comas. - Secretos en la salida. Las URL de conexión y contraseñas de los almacenes de datos se enmascaran en los resultados de las herramientas.
- Barreras de protección.
destroy_servicerequiere que el nombre del servicio se repita;add_ssh_keyrechaza nombres que contenganadmin(que Dokku permite para añadir más claves) a menos queallow_adminesté configurado. - Transporte remoto. El transporte SSE aún no tiene autenticación. Solo expónlo en una red de confianza o detrás de un proxy autenticado.
Hoja de ruta
Envía un issue para proponer una re-priorización
SIGUIENTE
- Transporte HTTP transmisible y autenticación: reemplazar SSE, añadir soporte de bearer token / OAuth y ámbitos por token.
- Confirmación para herramientas destructivas: usar la elicitación de MCP para operaciones de destroy/stop/remove.
- Distribución: imagen Docker, Homebrew tap y un plugin de Dokku que ejecute el servidor en el host.
IDEAS
- Historial de versiones: mantener un registro de despliegue duradero para que los rollbacks puedan elegir entre versiones anteriores.
- Más plugins de Dokku: puertos, checks, cron, montajes de almacenamiento.
Integraciones de Dokku
- Implementadas:
apps:list,apps:info,apps:create,apps:exists,apps:report,config:show,config:set --encoded,ps:scale,ps:report,ps:rebuild,ps:restart,ps:stop,ps:start,git:sync,logs(incluyendo seguimiento de-t),logs:failed,domains:report,domains:add,domains:remove,domains:add-global,letsencrypt:*,<datastore>:create/info/list/link/unlink/links/logs/destroy,ssh-keys:list/add/remove,registry:login/logout/report,plugin:list,version,proxy:report,scheduler:report,git:report. - Faltantes/parciales:
ports:*,checks:*,storage:*,cron:*, copias de seguridad de almacenes de datos.
Contribuye: reporta problemas o propone funciones
Abre un issue o lee Contribuir.
🪿 Obtén ayuda de Goose AI en los issues
¿Necesitas ayuda con el proyecto dokku-mcp? Goose AI está disponible para ayudarte. Simplemente etiqueta tus issues o pull requests de GitHub con la etiqueta :goose, y Goose AI será notificado automáticamente para ayudar con desarrollo, depuración, implementación de funciones y otras tareas relacionadas con el proyecto.
Ejemplo de Goose AI en acción Otro ejemplo
Tabla de contenidos
- Instalación
- Configuración
- Seguridad
- Desarrollo local de Dokku
- Conexión de clientes MCP
- Desarrollo
- Arquitectura
- Estructura del proyecto
- Contribuir
- Licencia
Instalación
Binarios precompilados
Descarga la última versión para tu plataforma:
# Linux (amd64; also available: arm64, arm)
curl -L -o dokku-mcp https://github.com/dokku-mcp/dokku-mcp/releases/latest/download/dokku-mcp-linux-amd64
chmod +x dokku-mcp
sudo mv dokku-mcp /usr/local/bin/
# macOS (amd64; also available: arm64)
curl -L -o dokku-mcp https://github.com/dokku-mcp/dokku-mcp/releases/latest/download/dokku-mcp-darwin-amd64
chmod +x dokku-mcp
sudo mv dokku-mcp /usr/local/bin/
Los archivos comprimidos (dokku-mcp-<os>-<arch>.tar.gz) también se publican con cada versión.
Paquete MCP
Cada versión estable también incluye dokku-mcp.mcpb, un Paquete MCP para macOS y Linux que los clientes MCP como Claude Desktop instalan en un solo paso, solicitando el host de Dokku, usuario SSH, puerto y clave. El mismo paquete se publica en el Registro oficial de MCP como io.github.dokku-MCP/dokku-mcp.
Verificar la instalación
dokku-mcp --version
Compilar desde el código fuente
Si prefieres compilar desde el código fuente:
-
Requisitos previos:
- Go (versión 1.26 o posterior)
-
Clonar y compilar:
git clone https://github.com/dokku-mcp/dokku-mcp.git cd dokku-mcp make build
Configuración
El servidor se puede configurar de dos maneras: usando un archivo config.yaml o mediante variables de entorno.
Archivo de configuración
Crea un archivo de configuración en una de las siguientes ubicaciones:
- A nivel de sistema:
/etc/dokku-mcp/config.yaml - Específico de usuario:
~/.dokku-mcp/config.yaml - Local:
config.yamlen el mismo directorio que el binario.
Aquí tienes un ejemplo mínimo de config.yaml:
ssh:
host: "your-dokku-host.com"
user: "dokku"
# key_path: "/path/to/your/ssh/private/key" # Optional, uses ssh-agent if empty
log_level: "info"
Para una lista completa de opciones disponibles, consulta el archivo config.yaml.example.
Variables de entorno
Toda la configuración se puede sobrescribir con variables de entorno con prefijo DOKKU_MCP_. Las claves anidadas usan guiones bajos (ssh.host → DOKKU_MCP_SSH_HOST) y las listas están separadas por comas. Por ejemplo:
export DOKKU_MCP_SSH_HOST="your-dokku-host.com"
export DOKKU_MCP_SSH_USER="dokku"
export DOKKU_MCP_LOG_LEVEL="debug"
export DOKKU_MCP_SECURITY_ALLOWLIST="apps:,config:,ps:,git:sync,logs,version"
Ejecutar el servidor
Una vez configurado, puedes ejecutar el servidor:
dokku-mcp
El servidor se iniciará y estará listo para aceptar conexiones de un cliente MCP.
Desarrollo local de Dokku
Para desarrollo y pruebas sin necesidad de una instancia remota de Dokku, puedes ejecutar un servidor local de Dokku usando Docker.
Requisitos previos:
-
Configurar el contenedor local de Dokku:
Este comando descargará las imágenes Docker necesarias y configurará la instancia local de Dokku. Solo necesita ejecutarse una vez.
make setup-dokku make dokku-start -
Detener el contenedor local de Dokku:
make dokku-stop
Cuando el contenedor local de Dokku está en ejecución, el servidor MCP (con la configuración predeterminada) debería poder conectarse a él. Puedes ejecutar pruebas de integración contra esta instancia local.
Modos de transporte
El servidor admite dos modos de transporte para clientes:
stdio(predeterminado): Entrada/salida estándar para comunicación directa de procesos.sse(Server-Sent Events): Transporte basado en HTTP para clientes web.DOKKU_MCP_TRANSPORT_TYPE=sse dokku-mcp
Configuración de CORS
Para el transporte SSE, CORS se maneja de forma predeterminada con Access-Control-Allow-Origin: *. Para despliegues remotos, puedes habilitar middleware CORS personalizado:
transport:
type: sse
cors:
enabled: true
allowed_origins:
- "https://app.example.com"
- "*.example.com"
Consulta docs/CORS.md para opciones de configuración detalladas y mejores prácticas de seguridad.
Desarrollo
Esta sección es para desarrolladores que quieran contribuir al proyecto o modificar el código fuente.
Configuración de desarrollo
-
Requisitos previos:
-
Clonar el repositorio:
git clone https://github.com/dokku-mcp/dokku-mcp.git cd dokku-mcp -
Instalar herramientas de desarrollo:
Este comando instala todas las herramientas Go necesarias para desarrollo, linting y pruebas.
make install-tools -
Configurar el entorno de desarrollo:
Este comando configura los hooks de Git para garantizar la calidad del código antes de los commits.
make setup-dev -
Compilar y ejecutar desde el código fuente:
# This command builds the binary and starts the server. make start
Comandos de Makefile
El proyecto usa un Makefile para automatizar tareas comunes.
make help: Muestra todos los comandos disponibles.make check: Ejecuta todas las verificaciones de calidad de código (linting, formato, complejidad).make build: Compila el binario del servidor.make clean: Limpia los artefactos de compilación.
Pruebas
-
Ejecutar todas las pruebas:
make testEsto ejecuta todas las pruebas unitarias y de integración y genera un informe de cobertura HTML en
coverage.html. -
Ejecutar pruebas de integración contra Dokku local: Asegúrate de que tu contenedor local de Dokku esté en ejecución (
make dokku-start).make test-integration-local
Arquitectura
El servidor sigue los principios de Domain-Driven Design (DDD), con una separación clara entre:
- Capa de dominio (
internal/domain): Lógica de negocio central, entidades e interfaces de repositorio. - Capa de aplicación (
internal/application): Orquestación y coordinación de casos de uso. - Capa de infraestructura (
internal/infrastructure): Implementaciones de interfaces, como el cliente de Dokku, bases de datos y servicios externos.
Cuenta con una arquitectura basada en plugins ubicada en internal/server-plugins, donde cada plugin encapsula un conjunto específico de funciones de Dokku (por ejemplo, app, core, deployment).
Para más detalles, consulta la documentación en el directorio docs/.
Estructura del proyecto
dokku-mcp/
├── cmd/ # Entry points for the application
│ └── server/ # Server main command
├── internal/ # Private application code
│ ├── server/ # MCP server and adapter
│ ├── server-plugin/ # Plugin system infrastructure
│ ├── server-plugins/ # Actual plugin implementations (app, core, etc.)
│ ├── dokku-api/ # Dokku CLI client and API
│ └── shared/ # Shared domain types and services
├── pkg/ # Reusable packages (config, logger, etc.)
├── docs/ # Project documentation
└── scripts/ # Helper scripts
Contribuir
¡Las contribuciones son bienvenidas! Consulta Contribuir para obtener una guía detallada sobre cómo contribuir.
Licencia
Este proyecto está bajo la Licencia Apache 2.0: consulta el archivo LICENSE para más detalles. Copyright [Alex Galey]
Licenciado bajo la Licencia Apache, Versión 2.0 (la "Licencia"); no puede usar este archivo excepto en cumplimiento con la Licencia. Puede obtener una copia de la Licencia en
http://www.apache.org/licenses/LICENSE-2.0
Salvo que lo exija la ley aplicable o se acuerde por escrito, el software distribuido bajo la Licencia se distribuye "TAL CUAL", SIN GARANTÍAS NI CONDICIONES DE NINGÚN TIPO, ya sean expresas o implícitas. Consulte la Licencia para conocer los permisos y limitaciones específicos bajo la Licencia.