4.2 KiB
CasaDeRoll MCPHub
MCPHub ist die zentrale Laufzeit und Verwaltungsoberfläche für portable
MCP-Server. Die einzelnen Server bleiben unter /mcp/{server} sichtbar, obwohl
sie sich einen Docker-Container und ein Appdata-Backup teilen.
Was hier hinein gehört
- ARR, Deemix, Navidrome und GitHub laufen als lokale stdio-Unterprozesse.
- Home Assistant und MUA/Unraid sind vorhandene HTTP-MCP-Endpunkte und werden vom Hub direkt weitergereicht.
- Allgemeine Webrecherche bleibt ein eingebautes Hermes-Werkzeug. Hermes nutzt den schlüssellosen Keenable-Provider für Suche und Seitenabruf. Der alte Athena-Webadapter sowie SearXNG/TinySearch gehören nicht zum MCPHub-Image.
- Athenas administrativer Operator ist hostgebunden und bleibt auf Athena.
MCPHub reicht den vorhandenen, nur über WireGuard erreichbaren HTTP-Endpunkt
http://192.168.1.212:8202/mcpals/mcp/athena-operatorweiter. Dadurch bleibt genau eine Operator-Instanz bestehen; im Hub liegt weder ein zweiter Operator noch ein SSH-Schlüssel für Athena.
Dauerhafte Daten
/mnt/nvme-storage/appdata/MCPHub on Unraid contains:
mcp_settings.json(users, server registrations and tool toggles)config/mcp-registry.json(produktive deklarative Serverliste)extensions/<id>/(geprüfte portable MCP-Laufzeiten)work/<id>/(Manifest, Build- und Resume-Zwischenstand)jwt-secret(stable login sessions)secrets/*.env(local credentials, mode0600)
Das Verzeichnis wird vom normalen Unraid-Appdata-Backup erfasst. Das Image enthält nur versionierten Code und keine Zugangsdaten.
Unraid-Verwaltung
Der Produktionscontainer muss aus
config/unraid-templates/my-MCPHub.xml über Unraids Docker-Oberfläche erzeugt
oder mit DockerMans update_container neu aufgebaut werden. Ein direktes
docker run startet zwar denselben Dienst, setzt aber nicht die Labels
net.unraid.docker.managed, net.unraid.docker.webui und
net.unraid.docker.icon; Unraid zeigt ihn dann fälschlich als „3rd Party“ und
kann Bearbeiten sowie Updates einschränken.
Nach einem lokalen Image-Rebuild deshalb in der Unraid-Oberfläche beim MCPHub-Template Apply wählen. Alternativ auf Unraid:
/usr/bin/php -q /usr/local/emhttp/plugins/dynamix.docker.manager/scripts/update_container MCPHub
Appdata und Secrets bleiben bei dieser Neuerstellung erhalten.
Das Dashboard bleibt passwortgeschützt. MCP-Clients teilen sich einen
generierten Bearer-Schlüssel in client-token. Dadurch ist kein OAuth-Ablauf
pro Client nötig, ohne die MCP-Routen anonym zu öffnen. Port 8787 darf nicht ins
öffentliche Internet weitergeleitet werden.
configure-settings.py erhält bestehende MCPHub-Benutzer und rendert die
externe Produktionsliste. Das Image liefert nur den Seed für einen leeren
Neuaufbau. verify-hub.py führt
Handshakes und Tool-Listen ohne Schreibzugriff aus. probe-hub.py führt genau
eine ausdrücklich benannte, begrenzte Funktionsprobe aus.
Portable MCPs installieren
Neue portable MCPs erfordern keinen Image-Neubau und keine Änderung am
Unraid-Template. Laufzeitdateien werden zunächst unter work/<id> gebaut und
per Manifest mit dem geprüften Helfer übernommen:
docker exec MCPHub python3 /opt/casaderoll/deploy-extension.py stage \
--manifest /app/data/work/<id>/manifest.json
Der Helfer prüft Checksummen, kopiert atomar nach extensions/<id> und setzt
den Server immer zuerst auf deaktiviert. Fehlt die dedizierte Secret-Datei oder
ein Pflichtfeld, verweigert er die Aktivierung technisch und veröffentlicht
den Server an keinen Client. Erst nach Handshake und begrenzter read-only Probe
wird aktiviert und die Client-Konfiguration aus derselben Registry erzeugt.
Migrationsregel
Jeweils nur einen Server verschieben, seinen Handshake und einen begrenzten
read-only-Aufruf prüfen und erst danach Clients auf
http://UNRAID-IP:8787/mcp/{server} umstellen. Der alte Athena-Container wird
erst gestoppt, wenn Hermes und OpenWebUI nachweislich über MCPHub funktionieren.
Aktueller Stand: Athena Operator, ARR, Deemix, Navidrome, GitHub, Home Assistant, MUA/Unraid und FRITZ!Box sind auf MCPHub registriert. Alte portable Athena-MCP-Container bleiben ausgeschaltet als kurzfristiges Rückfallnetz bestehen. Der frühere Webadapter ist nicht mehr Bestandteil des Images.