DirectAdmin MCP Server
DirectAdmin MCP Server
Eine produktionsreife Model Context Protocol-Steuerungsebene für DirectAdmin. Ein KI-Agent (Helpdesk, Eigentümer oder Notfall-Sysadmin) spricht mit diesem Prozess; der Prozess spricht mit dem Panel. Jeder Aufruf wird als benannter Hash-Token authentifiziert, durch ein Profil (readonly / helpdesk / operator / break-glass) autorisiert, optional bestätigt, als strukturiertes JSON protokolliert, ratenbegrenzt und außerhalb eines Wartungsfensters verweigert. SSL-Ausstellung und CSF/BFM-Entsperrung sind erstklassige Helpdesk-Aktionen – sie sind nicht das gesamte Produkt.
Die vorgesehene Architektur ist ein Hop-Host neben dem Agenten (keine
Installation auf jedem DA-Server): ein schreibgeschützter Listener für den
gesprächigen Agenten und ein Schreib-Listener für erlaubte Änderungen.
Fleet-Fakten (CloudLinux, Profil) liegen in inventory.json auf dieser
Hop-Maschine.
Es deckt die DirectAdmin New JSON API
(320 Operationen aus dem offiziellen Swagger) und die Legacy-CMD_API_*-Admin-Aufrufe
ab, die die New API weiterhin nicht ersetzt (Benutzer anlegen, DNS, Backups, BFM).
Lesen Sie docs/agent.md und docs/tokens.md, bevor Sie ein Modell auf die Produktion richten.
┌──────────────┐ MCP (stdio / SSE) ┌──────────────────┐ HTTPS ┌─────────────┐
│ Claude / │ ─────────────────────────► │ directadmin-mcp │ ─────────────► │ DirectAdmin │
│ Cursor / │ │ confirm=true │ Basic+key │ :2222/api │
│ any MCP │ ◄───────────────────────── │ audit.jsonl │ │ + CSF plug │
└──────────────┘ └──────────────────┘ └─────────────┘Was Sie fragen können
Sie sagen | Tool |
„Let's-Encrypt-Zertifikat für shop.example.com neu ausstellen" |
|
„Das Hostname-Zertifikat ist abgelaufen, erneuern" |
|
„Kunde 203.0.113.44 ist aus CSF ausgesperrt" |
|
„Ist diese IP blockiert? Warum? Dem Kunden mitteilen." |
|
„Benutzer über dem Quota auflisten" |
|
„php-fpm74 neu starten" |
|
Alles andere unter |
|
Destruktive Aufrufe (delete, deny, restart, reissue, unblock, …)
erfordern confirm=true. Das Modell muss eine ausdrückliche Freigabe erhalten.
Related MCP server: cPanel MCP Server
Voraussetzungen
Python 3.10+ (3.12 empfohlen) oder Docker
DirectAdmin mit API-Zugriff und einem Login-Key (nicht das Hauptpasswort)
Für CSF-Tools: das ConfigServer Security & Firewall-DirectAdmin-Plugin
Netzwerkpfad vom MCP-Host zu
https://ihr-panel:2222
Schnellstart (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_KEYErzeugen Sie einen Login-Key unter Admin Level → Account Manager → Login Keys. Beschränken
Sie ihn auf die IP dieser Maschine. Legen Sie den Key in .env ab:
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 / andere MCP-Clients verwenden dieselbe command- + args- + env-Struktur.
HTTP / SSE-Modus (Remote-Assistent)
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.pyStellen Sie Caddy oder nginx mit TLS davor. Clients senden
Authorization: Bearer <MCP_AUTH_TOKEN> an /sse.
Setzen Sie das Token nicht in die Query-String.
Docker (nur Loopback):
cp .env.sample .env # fill DA_* and MCP_AUTH_TOKEN
docker compose up -d --build
curl -sS http://127.0.0.1:8888/healthDas Image läuft als UID 10001, verwirft alle Capabilities und verwendet ein schreibgeschütztes Root-Dateisystem. Siehe SECURITY.md.
SSL-Ausstellung
Admin-SSL-Symbol (alle Kundendomains, Pro Pack, nicht in der New API):
ssl_admin_list
ssl_admin_reissue domains=["shop.example.com","blog.example.com"] confirm=trueDies ist CMD_ADMIN_SSL action=multiple – dieselbe Aktion wie Admin Level →
Admin SSL. Der Login-Key muss für diesen Befehl freigeschaltet sein.
Eine Domain (New API, DirectAdmin 1.660+ / aktuelles Evolution):
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 ist POST /api/domain-tls/{domain}/provision-certs.
ssl_reissue_server ist POST /api/server-tls/obtain.
Auf älteren Panels ist dieselbe Absicht ssl_reissue_domain_legacy (CMD_API_SSL-
Let's-Encrypt-Anfrage). Immer den besitzenden Benutzer impersonieren, wenn Sie
als Admin angemeldet sind – Domain-TLS ist eine Ressource auf Benutzerebene.
Verwandt: ssl_list_domain_certs, ssl_set_domain_acme_config,
ssl_upload_cert_files, ssl_create_csr, ssl_install_self_signed,
ssl_acme_dns_providers.
CSF / Firewall-Entsperrung
CSF ist nicht in der New JSON API. Diese Tools senden POST an das offizielle
Plugin /CMD_PLUGINS_ADMIN/csf/. Das Plugin muss installiert sein.
Eine IP ist oft an zwei Stellen blockiert (LFD und DirectAdmin BFM). Verwenden Sie das kombinierte Tool, wenn ein Kunde ausgesperrt ist:
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 führt das Plugin-Quick-Unblock aus (action=kill → csf -dr +
csf -tr + Drop-States). also_allow=true fügt eine 1-stündige temporäre Freigabe
hinzu, damit der nächste Handshake nicht sofort wieder gesperrt wird.
Weitere CSF-Tools: csf_allow_ip, csf_deny_ip, csf_ignore_ip,
csf_flush_temp, csf_restart, csf_enable, csf_disable, csf_status.
csf_disable ist standardmäßig verweigert (TOOL_DENYLIST + ENABLE_CSF_DISABLE=false). Entsperren Sie Kunden stattdessen mit firewall_unblock_everywhere.
Tool-Übersicht
Kuratierte Tools sind nach Modul gruppiert. Alles andere ist über
da_api / da_legacy erreichbar. Playbooks: 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.
Inventar: docs/tools.json (273 kuratierte Tools + 320 Swagger-Operationen).
Modul | Tools (Präfix) | Hinweise |
SSL |
| Domain + Hostname-ACME, Ausstellung, Upload |
CSF |
| Plugin; benötigt ENABLE_CSF=true |
BFM |
| Native Panel-Blockaden |
Konten |
| New API + CMD_API_ACCOUNT_* |
Pakete |
| Benutzer-/Reseller-Pakete |
System |
| Version, OS-Updates, Nutzung |
Dienste |
| start/stop/restart/reload/logs |
Einstellungen |
| directadmin.conf |
Auth |
| Bevorzugt eingeschränkte Keys |
Sicherheit |
| WAF / AV |
Daten |
| Admin-Tag-2 |
Build |
| CustomBuild / Apps |
Pro Pack |
| Unit + Templates; kein Web-Terminal |
CloudLinux |
| Opt-in ( |
Richtlinie |
| Live- |
Audit |
| Wer hat was, wann, im Fenster? |
Notausgänge |
| Vollständiges Swagger |
da_api akzeptiert nur Pfade, die in der gebündelten
tools/api_spec.json existieren (exportiert aus
https://demo.directadmin.com:2222/static/swagger.json). /api/execute ist
blockiert, außer ENABLE_EXECUTE=true.
Konfiguration
Siehe .env.sample. Wichtige Stellschrauben:
Variable | Standard | Zweck |
| erforderlich |
|
| erforderlich | Login-Key, nicht das Passwort |
| leer | Standard-Login-as; bevorzugt pro Tool |
|
| Panel-Zertifikat verifizieren |
|
| HTTP-Bind |
| leer | Erforderlich für HTTP in Produktion |
| leer | Optionale Client-Allow-Liste |
| leer / | Schlagradius reduzieren |
|
| Destruktive Tools benötigen |
|
| CSF-Plugin-Aufrufe |
|
|
|
|
| Pro Client-Identität |
|
| Geschwärzte JSON-Zeilen |
Sicherheit
Lesen Sie SECURITY.md. Kurzfassung:
Login-Key + IP-Beschränkung auf der DirectAdmin-Seite
Bearer-Token + Loopback-Bind + TLS-Proxy auf der MCP-Seite
Bestätigungs-Gate, Allow/Deny-Tool-Listen, kein Wildcard-CORS
Geheimnisse werden nie in Logs geschrieben
Docker: Nicht-Root,
cap_drop: ALL, schreibgeschütztes Root
Wenn ein Token oder Key leakt, rotieren Sie beide sofort. Ein Login-Key, der in einen Chat eingefügt wurde, ist verbrannt.
Entwicklung
pip install -r requirements-dev.txt
pytest -q
ruff check .Hinzufügen eines kuratierten Tools: Erstellen Sie eine Funktion in tools/, dekorieren Sie
sie mit @mcp.tool() + @log_tool_call, validieren Sie Eingaben (validate_ip,
validate_domain, validate_username) und rufen Sie guard_confirm auf, wenn der
Aufruf den Zustand verändert.
Der generische Katalog übernimmt neue Swagger-Pfade, wenn Sie
tools/api_spec.json durch einen frischen Export von Ihrem eigenen Panel
(/static/swagger.json) ersetzen.
Kompatibilität
Transport | Datei | Wann |
stdio |
| Claude Desktop, Cursor, lokale Agenten |
SSE |
| Ältere Remote-MCP-Clients |
HTTP Health / Tool-Liste |
|
|
Getestet gegen das offizielle New-API-Swagger (info.version = 1.0, 269 Pfade /
320 Operationen). Legacy-Aufrufe folgen
docs.directadmin.com/developer/api/legacy-api.html.
Lizenz
MIT. Verwenden Sie es, ändern Sie es und liefern Sie es mit Ihrem Panel-Tooling aus.
Dieses Repository ist eine unabhängige Implementierung, die erstmals von OpenIaaS im August 2026 veröffentlicht wurde. Ein MIT-Release von 2025 (omryatia/directadmin-mcp) lieferte das ursprüngliche Layout — Einstiegspunkte und Modulennamen. Dieser Ausgangspunkt bleibt als Hinweis auf abgeleitete Arbeit in LICENSE erhalten. Mit Stand 20. August 2026 ist es nur ein kleiner Bruchteil des Baums: Etwa eine von zwanzig der ursprünglichen einzigartigen Codezeilen erscheint noch wörtlich; die Python-Quellen sind etwa dreieinhalb Mal größer, und die Domain-Teile (SSL, CSF, Policy, Audit) sind neu.
Mit Dank an die DirectAdmin-Community — die Dokumentation, das Forum und die Betreiber, die diese Systeme seit 23+ Jahren betreiben.
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