DirectAdmin MCP Server
Servidor MCP de DirectAdmin
Un plano de control de Protocolo de Contexto de Modelos de producción para DirectAdmin. Un agente de IA (mesa de ayuda, propietario o administrador de emergencias) habla con este proceso; el proceso habla con el panel. Cada llamada se autentica con un token hash con nombre, se autoriza mediante un perfil (solo lectura / mesa de ayuda / operador / acceso total), opcionalmente se confirma, se registra como líneas JSON estructuradas, se limita por tasa y se rechaza fuera de una ventana de mantenimiento. La reemisión de SSL y el desbloqueo de CSF/BFM son acciones de primera clase de la mesa de ayuda; no son todo el producto.
El diseño previsto es un host de saltos junto al agente (no una instalación en cada servidor de DA): un listener de solo lectura para el agente conversador y un listener de escritura para las mutaciones permitidas. Los datos de la flota (CloudLinux, perfil) viven en inventory.json en ese host de saltos.
Cubre la API JSON nueva de DirectAdmin (320 operaciones del swagger oficial) y las llamadas CMD_API_* heredadas que la API nueva aún no reemplaza (crear usuario, copias de seguridad, BFM).
Lee docs/agent.md y docs/tokens.md antes de apuntar un modelo a producción.
┌──────────────┐ MCP (stdio / SSE) ┌──────────────────┐ HTTPS ┌─────────────┐
│ Claude / │ ─────────────────────────► │ directadmin-mcp │ ─────────────► │ DirectAdmin │
│ Cursor / │ │ confirm=true │ Basic+key │ :2222/api │
│ any MCP │ ◄───────────────────────── │ audit.jsonl │ │ + CSF plug │
└──────────────┘ └──────────────────┘ └─────────────┘Qué puedes pedir
Tú dices | Herramienta |
«Reemite el certificado de shop.example.com» |
|
«El certificado del hostname ha caducado, renuévalo» |
|
«El cliente 203.0.113.44 está bloqueado en CSF» |
|
«¿Está bloqueada esa IP? ¿Por qué? Dilo al cliente.» |
|
«Lista los usuarios por encima de la cuota» |
|
«Reinicia php-fpm74» |
|
Cualquier otra cosa en |
|
Las llamadas destructivas (delete, deny, restart, reissue, unblock, …) requieren confirm=true. El modelo debe obtener una aprobación explícita.
Related MCP server: cPanel MCP Server
Requisitos
Python 3.10+ (se recomienda 3.12) o Docker
DirectAdmin con acceso a la API y una clave de acceso (no la contraseña principal)
Para las herramientas de CSF: el plugin ConfigServer Security & Firewall de DirectAdmin
Ruta de red desde el host MCP hasta
https://tu-panel:2222
Inicio rápido (stdio — Claude Desktop / Cursor)
git clone https://github.com/OpenIaaS/directadmin-mcp-server.git
cd directadmin-mcp-server
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
cp .env.sample .env
# edit .env — DA_URL, DA_USERNAME, DA_LOGIN_KEYGenera una clave de acceso en Nivel de administrador → Administrador de claves de acceso. Restringe esa clave a la IP de esta máquina. Pon la clave en .env:
DA_URL=https://panel.example.com:2222
DA_USERNAME=admin
DA_LOGIN_KEY=...
DA_SSL_VERIFY=trueClaude Desktop (claude_desktop_config.json):
{
"mcpServers": {
"directadmin": {
"command": "/absolute/path/to/directadmin-mcp/.venv/bin/python",
"args": ["/absolute/path/to/directadmin-mcp/server.py"],
"env": {
"DA_URL": "https://panel.example.com:2222",
"DA_USERNAME": "admin",
"DA_LOGIN_KEY": "your-login-key"
}
}
}
}Cursor y otros clientes MCP usan la misma forma de command + args + env.
Modo HTTP / SSE (asistente remoto)
python -c "import secrets; print(secrets.token_urlsafe(48))" # MCP_AUTH_TOKEN
# put the token in .env, keep MCP_HOST=127.0.0.1
python main.pyPon Caddy o nginx delante con TLS. Los clientes envían Authorization: Bearer <MCP_AUTH_TOKEN> a /sse. No pongas el token en la cadena de consulta.
Docker (solo loopback):
cp .env.sample .env # fill DA_* and MCP_AUTH_TOKEN
docker compose up -d --build
curl -sS http://127.0.0.1:8888/healthLa imagen se ejecuta con UID 10001, sin capacidades y con el sistema de archivos raíz de solo lectura. Consulta SECURITY.md.
Reemisión de SSL
Icono de SSL de administrador (todos los dominios de clientes, Pro Pack, no está en la API nueva):
ssl_admin_list
ssl_admin_reissue domains=["shop.example.com","blog.example.com"] confirm=trueEsto es CMD_ADMIN_SSL action=multiple — la misma acción que en Nivel de administrador → SSL de administrador. A la clave de acceso se le debe permitir ejecutar ese comando.
Un dominio (API nueva, DirectAdmin 1.660+ / Evolution actual):
ssl_get_domain_acme_config domain=shop.example.com impersonate=alice
ssl_reissue_domain domain=shop.example.com impersonate=alice confirm=true
ssl_reissue_domain domain=shop.example.com dry_run=true
ssl_reissue_server confirm=truessl_reissue_domain es POST /api/domain-tls/{domain}/provision-certs. ssl_reissue_server es POST /api/server-tls/obtain.
En paneles antiguos, la misma intención es ssl_reissue_domain_legacy (CMD_API_SSL con solicitud Let's Encrypt). Al iniciar sesión como administrador, haz siempre la suplantación del usuario propietario — el TLS de un dominio es un recurso de nivel de usuario.
Relacionadas: ssl_list_domain_certs, ssl_set_domain_acme_config, ssl_upload_cert_files, ssl_create_csr, ssl_install_self_signed, ssl_acme_dns_providers.
Desbloqueo de CSF / cortafuegos
CSF no está en la API JSON nueva. Estas herramientas hacen POST al plugin oficial /CMD_PLUGINS_ADMIN/csf/. El plugin debe estar instalado.
Una IP suele estar bloqueada en dos sitios (LFD y BFM de DirectAdmin). Usa la herramienta combinada cuando un cliente esté bloqueado:
csf_search_ip ip=203.0.113.44
bfm_ip_reason ip=203.0.113.44
ip_block_reason ip=203.0.113.44
firewall_unblock_everywhere ip=203.0.113.44 confirm=true
csf_unblock_ip ip=203.0.113.44 also_allow=true confirm=true
bfm_unblock_ip ip=203.0.113.44 confirm=truecsf_unblock_ip ejecuta el plugin Quick Unblock (action=kill → csf -dr + csf -tr + estados de caída). also_allow=true añade una permisión temporal de 1 hora para que el siguiente apretón de manos no se vuelva a bloquear inmediatamente.
Otras herramientas de CSF: csf_allow_ip, csf_deny_ip, csf_ignore_ip, csf_flush_temp, csf_restart, csf_enable, csf_disable, csf_status.
csf_disable está denegada por defecto (TOOL_DENYLIST + ENABLE_CSF_DISABLE=false). Desbloquea a los clientes con firewall_unblock_everywhere en su lugar.
Mapa de herramientas
Las herramientas seleccionadas están agrupadas por módulo. Todo lo demás se alcanza con da_api / da_legacy. Guías: docs/agent.md, docs/operations.md, docs/ssl.md, docs/csf.md, docs/propack.md, docs/cloudlinux.md, docs/hardening.md, docs/audit.md, docs/tokens.md. Inventario: docs/tools.json (273 herramientas seleccionadas + 320 operaciones swagger).
Módulo | Herramientas (prefijo) | Notas |
SSL |
| Dominio + hostname ACME, reemisión, subida |
CSF |
| Plugin; necesita ENABLE_CSF=true |
BFM |
| Bloqueos nativos del panel |
Cuentas |
| API nueva + CMD_API_ACCOUNT_* |
Paquetes |
| Paquetes de usuario / revendedor |
Sistema |
| Versión, actualizaciones del SO, uso |
Servicios |
| iniciar/detener/reiniciar/recargar/logs |
Ajustes |
| directadmin.conf |
Autenticación |
| Prefiere claves con ámbito |
Seguridad |
| WAF / AV |
Datos |
| Día 2 de administración |
Compilación |
| CustomBuild / aplicaciones |
Pro Pack |
| Unit + plantillas; sin terminal web |
CloudLinux |
| Opcional ( |
Política |
| Banderas |
Auditoría |
| ¿Quién hizo qué, cuándo, dentro de la ventana? |
Vías de escape |
| Swagger completo |
da_api solo acepta rutas que existan en el tools/api_spec.json incluido (exportado desde https://demo.directadmin.com:2222/static/swagger.json). /api/execute está bloqueado a menos que ENABLE_EXECUTE=true.
Configuración
Consulta .env.sample. Valores importantes:
Variable | Valor por defecto | Propósito |
| obligatorio |
|
| obligatorio | Clave de acceso, no la contraseña |
| vacío | Suplantación por defecto; prefiere |
|
| Verifica el certificado del panel |
|
| Enlace HTTP |
| vacío | Obligatorio para HTTP en producción |
| vacío | Lista de permitidos de clientes opcional |
| vacío / | Reduce el radio de impacto |
|
| Las herramientas destructivas necesitan |
|
| Llamadas al plugin de CSF |
|
| Paso directo de |
|
| Por identidad de cliente |
|
| Líneas JSON con datos sensibles omitidos |
Seguridad
Lee SECURITY.md. Versión corta:
Clave de acceso + restricción de IP en el lado de DirectAdmin
Token Bearer + enlace a loopback + proxy TLS en el lado de MCP
Puerta de confirmación, listas de herramientas de permitidos/denegados, sin CORS comodín
Los secretos nunca se escriben en los registros
Docker: sin root,
cap_drop: ALL, raíz de solo lectura
Si un token o una clave se filtra, rota ambos inmediatamente. Una clave de acceso que se haya pegado en un chat está quemada.
Desarrollo
pip install -r requirements-dev.txt
pytest -q
ruff check .Para añadir una herramienta seleccionada: crea una función en tools/, decórala con @mcp.tool() + @log_tool_call, valida las entradas (validate_ip, validate_domain, validate_username) y llama a guard_confirm si la llamada muta el estado.
El catálogo genérico recoge las nuevas rutas swagger cuando reemplazas tools/api_spec.json con una exportación nueva de tu propio panel (/static/swagger.json).
Compatibilidad
Transporte | Archivo | Cuándo |
stdio |
| Claude Desktop, Cursor, agentes locales |
SSE |
| Clientes MCP remotos más antiguos |
HTTP salud / lista de herramientas |
|
|
Probado contra el swagger oficial de la New API (info.version = 1.0, 269 rutas /
320 operaciones). Las llamadas heredadas siguen
docs.directadmin.com/developer/api/legacy-api.html.
Licencia
MIT. Úsalo, modifícalo y distribúyelo con tus herramientas de panel.
Este repositorio es una implementación independiente, publicada por primera vez por OpenIaaS en agosto de 2026. Una versión MIT de 2025 (omriyatia/directadmin-mcp) proporcionó el diseño original — puntos de entrada y nombres de módulos. Ese punto de partida se conserva como aviso de trabajo derivado en LICENSE. Al 20 de agosto de 2026 es una pequeña fracción del árbol: aproximadamente una de cada veinte líneas de código únicas originales siguen apareciendo textualmente; las fuentes de Python son aproximadamente tres veces y media más grandes, y las herramientas de dominio (SSL, CSF, policy, audit) son nuevas.
Con agradecimiento a la comunidad de DirectAdmin — la documentación, el foro y los operadores que han estado ejecutando estos servidores durante más de 23 años.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseBqualityDmaintenanceA local MCP server for managing WHM and cPanel servers through AI clients, supporting server health, account, DNS, email, database, SSL, bandwidth, disk, cron, and service-management tools across multiple WHM accounts.31MIT
- AlicenseAqualityDmaintenanceA complete MCP server enabling AI assistants to manage cPanel hosting through natural language, including file, database, email, subdomain, and system operations.161MIT
- FlicenseBqualityCmaintenanceA comprehensive MCP server for managing cPanel hosting accounts through AI assistants. It supports DNS, email (DKIM/SPF), databases, domains, SSL, PHP, cron jobs, security, Git deployment, and more.10015
- AlicenseNot gradedqualityDmaintenanceMCP server for EasyPanel that enables AI agents to manage servers, projects, services, databases, and domains via 40 curated tools or raw tRPC access to all 347 API procedures.474MIT
Related MCP Connectors
MCP server for AI agents to plan, verify, and deploy Cloudflare-native apps.
MCP server for secureFlows: token-free URL builders and integration-linting tools for AI agents.
Provision and manage a VPS for AI agents over MCP: register, order, get root, control the server.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/OpenIaaS/directadmin-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server