MCP-Server — Neuinstallation und Wiederaufbau¶
Diese Seite beschreibt den aktuellen produktiven Aufbau mit Stand 08.09.2026. Sie dient für eine Neuinstallation von CT 108 beziehungsweise einen kontrollierten Wiederaufbau.
Architektur und laufendes System: MCP-Server
Home-Assistant-Anbindung: Home Assistant Bridge
Arbeitsregeln: MCP-Arbeitsregeln
Keine alten MCP-Stände wiederherstellen
Frühere Fassungen dieser Seite beschrieben einen monolithischen MCP, ein direkt vom Benutzer mcp beschreibbares Audit-Log und eine lockere SSH-Host-Key-Prüfung. Diese Varianten gehören nicht mehr zum produktiven Sicherheitsmodell.
Zielzustand¶
flowchart TD
KI["Claude / ChatGPT / anderer MCP-Client"]
CF["Cloudflare Access + Tunnel<br/>mcp.diebrocks.com"]
MCP["/mcp → CT 108:3000<br/>mcp-shell · User mcp"]
ADMIN["/admin → CT 108:3001<br/>mcp-admin · root"]
NORMAL["Infrastruktur-, Wiki- und MikroTik-Tools"]
HAB["5 Home-Assistant-Bridge-Tools"]
HAMCP["Home Assistant MCP Server<br/>10.10.10.20:9583"]
HA["Home Assistant"]
SOCKET["Audit-v2 → Unix-Socket"]
WRITER["mcp-audit-writer · root"]
LOGS["/var/log/mcp-audit/"]
KI -->|HTTPS + Cloudflare Access| CF
CF --> MCP
CF --> ADMIN
MCP --> NORMAL
MCP --> HAB
HAB -->|internes LAN| HAMCP
HAMCP --> HA
MCP --> SOCKET
SOCKET --> WRITER
WRITER --> LOGS
Der einzige externe MCP-Endpunkt ist https://mcp.diebrocks.com/mcp. Home Assistant wird intern über den separat gepflegten HA-MCP-Server angebunden.
1. Voraussetzungen¶
- Proxmox und das Management-Netz sind verfügbar.
- Cloudflare Tunnel auf CT 102 funktioniert.
- Home Assistant ist unter
10.10.10.20erreichbar. - Das Smart-Home-Wiki-Repository ist verfügbar.
- Das geprüfte MCP-Recovery-Paket oder ein aktuelles vollständiges Backup von CT 108 ist verfügbar.
Wiki ist kein Quellcode-Backup
Die Dokumentation beschreibt Aufbau, Rechte und Wiederherstellung. Für einen Totalausfall von CT 108 muss der aktuelle Inhalt von /opt/mcp-shell/ und /opt/mcp-admin/ beziehungsweise ein vollständiges Deployment-Paket außerhalb des verlorenen Containers verfügbar sein. Die Rollback-Verzeichnisse unter /root/ helfen nur, solange CT 108 selbst noch vorhanden ist.
2. CT 108 anlegen¶
Beispiel auf Proxmox:
pct create 108 local:vztmpl/debian-13-standard_13.x_amd64.tar.zst \
--hostname mcp-server \
--unprivileged 1 \
--features nesting=1 \
--memory 512 \
--swap 512 \
--cores 1 \
--rootfs local-lvm:8 \
--net0 name=eth0,bridge=vmbr0,ip=10.10.10.33/24,gw=10.10.10.1 \
--nameserver 10.10.10.1 \
--start 1
Der Container verwendet 10.10.10.1 als DNS und diebrocks.home als Searchdomain. Autostart aktivieren.
3. Grundsystem¶
pct enter 108
apt-get update
apt-get upgrade -y
apt-get install -y curl git openssh-server ca-certificates
systemctl enable --now ssh
Node.js und npm installieren. Vor einem Wechsel auf einen neuen Node-Major-Release die MCP-Testpakete ausführen.
4. Benutzer¶
Der MCP läuft als unprivilegierter Benutzer mcp mit UID 999, primärer Gruppe mcp mit GID 991 und ohne sudo:
groupadd -g 991 mcp
useradd -m -u 999 -g mcp -s /bin/bash mcp
passwd -l mcp
mkdir -p /home/mcp/.ssh
chown mcp:mcp /home/mcp/.ssh
chmod 700 /home/mcp/.ssh
Zusätzlich existiert mcp-agent für die bekannten Linux-SSH-Ziele. Auf CT 108 erhält mcp-agent kein sudo.
5. SSH-Schlüssel und Host-Vertrauen¶
Als mcp getrennte Ed25519-Schlüssel für Infrastruktur und Wiki erzeugen:
su - mcp
ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519 -C "mcp-remote" -N ""
ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519_wiki -C "mcp-wiki" -N ""
exit
| Schlüssel | Verwendung |
|---|---|
/home/mcp/.ssh/id_ed25519 |
Proxmox, Linux-Container, Home Assistant, MikroTik |
/home/mcp/.ssh/id_ed25519_wiki |
GitHub Deploy Key für das Wiki |
Für GitHub wird ein Alias github-wiki mit StrictHostKeyChecking yes verwendet. Die benötigten Host-Schlüssel werden gezielt in /home/mcp/.ssh/known_hosts hinterlegt.
Warning
StrictHostKeyChecking no nicht verwenden. Ein geänderter Host-Key muss bewusst geprüft und anschließend gezielt ersetzt werden.
6. Zielsysteme vorbereiten¶
Proxmox¶
mcp-agent erhält nur sudo für die eingeschränkten Wrapper:
Kein allgemeines root/sudo auf dem Hypervisor.
Arbeits-Container 102 / 106 / 107¶
Der öffentliche Schlüssel wird für mcp-agent mit
in authorized_keys eingetragen. Diese Arbeits-Container dürfen bei aktivierter Shell-Wartungsfreigabe sudo bereitstellen.
CT 108 selbst¶
mcp-agent erhält keinen sudoers-Eintrag. Dadurch kann der MCP sein eigenes Gate und den root-eigenen Produktivcode nicht über SSH umgehen.
Home Assistant¶
Der Infrastruktur-Schlüssel wird im Add-on Advanced SSH & Web Terminal für den Benutzer ssh hinterlegt.
MikroTik¶
Der RouterOS-Benutzer mcp bleibt eingeschränkt; keine Full-/Admin-Gruppe nur für den MCP vergeben.
7. Wrapper installieren¶
Auf Proxmox werden die geprüften produktiven Fassungen von mcp-pct und mcp-maintenance installiert. mcp-pct darf ausschließlich die vorgesehenen LXC-, systemd- und Journal-Aktionen ausführen.
Auf den Debian-Arbeitszielen wird mcp-maintenance für Paketprüfung, Upgrade und Cleanup verwendet.
Für einen Wiederaufbau die aktuellen Wrapper aus dem gesicherten Produktivstand übernehmen, nicht aus veralteten Chat-Snippets rekonstruieren.
8. MCP-v4-Code installieren¶
Der MCP ist modular aufgebaut. Der produktive Bestand umfasst mindestens:
/opt/mcp-shell/
├── index.js
├── tool-registry.js
├── tools/
├── lib/
│ ├── core.js
│ ├── command-runner.js
│ ├── audit-safe.js
│ ├── wiki-safe.js
│ ├── tool-policy.js
│ ├── ha-upstream.js
│ └── ha-preload.js
├── rules/
├── tool-config.json
├── package.json
└── node_modules/
/opt/mcp-admin/
├── server.js
├── policy-routes.js
├── policy-client.js
├── admin.html
├── admin.css
└── node_modules -> /opt/mcp-shell/node_modules
Aktuellen geprüften Produktivcode einspielen, Abhängigkeiten installieren und anschließend root-eigen machen:
Vor dem Start JavaScript-Syntax prüfen. Eine Neuinstallation nur mit einem alten index.js ist unvollständig.
9. Tool-Policy und Shell-Gate¶
Die Policy liegt unter:
Sie wird durch lib/tool-policy.js strikt geprüft. Fehlende, unlesbare oder ungültige Konfiguration muss fail closed behandeln und darf keine stillschweigenden Standardfreigaben erzeugen.
Aktuelle Grundstruktur:
{
"disabled_tools": [],
"write_allow": {
"ebusd-heizung": ["/etc/ebusd/", "/tmp/"],
"ebusd-lueftung": ["/etc/ebusd/", "/tmp/"],
"home-assistant": ["/config/", "/tmp/"],
"mcp-server": ["/tmp/"],
"proxmox": [],
"cloudflared": []
}
}
Details: Tool-Freigaben absichern.
shell_execute wird ausschließlich über das root-geschützte Gate beziehungsweise die Admin-Oberfläche freigegeben. Der MCP darf dieses Gate nicht selbst ändern.
10. Audit-v2 und Root-Writer¶
Das alte Einzel-Log /var/log/mcp-shell-audit.jsonl wird nicht verwendet.
flowchart LR
TOOL["MCP-Tool-Aufruf"] --> SAFE["audit-safe.js<br/>Audit-v2-Projektion"]
SAFE --> SOCKET["Unix-Socket<br/>/run/mcp-audit-writer/audit.sock"]
SOCKET --> WRITER["mcp-audit-writer<br/>root"]
WRITER --> LOG["/var/log/mcp-audit/<br/>YYYY-MM-DD.jsonl"]
Rechte:
/var/log/mcp-audit/:root:mcp, Modus 0750;- Tagesdateien:
root:mcp, Modus 0640; - Unix-Socket: für
root:mcp, Modus 0660 vorgesehen; mcpdarf Audit-Dateien lesen, aber nicht direkt schreiben, kürzen oder löschen.
Der Root-Writer akzeptiert nur das streng begrenzte Audit-v2-Schema. Die Allowlist muss neben den normalen Infrastruktur-Tools auch die fünf HA-Bridge-Tools enthalten:
Details: Audit-Inhalte begrenzen und Audit-Integrität.
11. Home-Assistant-Bridge¶
Home Assistant MCP bleibt ein eigenständiges HA-Add-on und wird unabhängig aktualisiert. Der zentrale MCP verbindet sich intern über das LAN mit ihm.
Produktive Dateien:
/opt/mcp-shell/lib/ha-upstream.js
/opt/mcp-shell/lib/ha-preload.js
/etc/mcp-shell/ha-upstream.env
/etc/systemd/system/mcp-shell.service.d/30-ha-upstream.conf
Die interne HA-MCP-URL einschließlich Secret-Pfad liegt ausschließlich in /etc/mcp-shell/ha-upstream.env, root-eigen mit Modus 0600. Den Secret-Pfad niemals ins Wiki übernehmen.
Der systemd-Drop-in lädt die Umgebungsdatei und den Node-Preload. R5 sorgt zusätzlich dafür, dass HA-Bridge-Aufrufe im äußeren Audit mit derselben Caller-Kategorisierung wie normale MCP-Aufrufe erscheinen. HA-Argumente und HA-Antworten werden dort nicht gespeichert.
Details und Rollback: Home Assistant Bridge.
12. Admin-Oberfläche¶
mcp-admin läuft als root auf Port 3001 und bleibt über Cloudflare Access geschützt. Die Oberfläche verwaltet insbesondere:
- Shell-Freigabe;
- Tool-Freigaben;
- Policy-Konfiguration;
- Audit-Anzeige;
- MCP-Neustart für Recovery.
Produktive Dateien aus dem gesicherten Stand übernehmen. Die Admin-Oberfläche darf die fail-closed Policy-Prüfung und die Audit-Härtung nicht umgehen.
13. systemd¶
Mindestens diese Dienste müssen vorhanden und aktiviert sein:
Zusätzlich gehört der Drop-in
zum produktiven Aufbau.
Nach dem Einspielen:
systemctl daemon-reload
systemctl enable --now mcp-audit-writer mcp-shell mcp-admin
systemctl --no-pager --full status mcp-audit-writer mcp-shell mcp-admin
14. Wiki einrichten¶
Der Wiki-Key wird als GitHub Deploy Key mit Schreibrecht hinterlegt. Anschließend als mcp:
Das Wiki-Verzeichnis gehört mcp. Die produktiven Wiki-Tools verwenden lib/wiki-safe.js; Git-Aufrufe werden ohne Shell-String-Verkettung ausgeführt. Private Sicherungen vor Inhaltsersetzung/Löschung liegen unter /home/mcp/wiki-backups/.
15. Cloudflare¶
Tunnel-Ingress auf CT 102:
- hostname: mcp.diebrocks.com
path: ^/admin
service: http://10.10.10.33:3001
- hostname: mcp.diebrocks.com
service: http://10.10.10.33:3000
Cloudflare Access schützt sowohl MCP als auch Admin. Der externe MCP-Client verwendet nur:
mit den vorgesehenen Cloudflare-Access-Dienstanmeldeinformationen.
16. Abschlussprüfung¶
Nach einer Neuinstallation mindestens prüfen:
mcp-audit-writer,mcp-shellundmcp-adminsind aktiv.- Unauthentifizierte Aufrufe auf MCP und Admin liefern 401.
- Tool-Policy ist gültig und die gewünschte Sperrliste aktiv.
- Normales Lese-Tool funktioniert und erzeugt einen minimierten Audit-v2-Eintrag.
shell_executebleibt ohne menschliche Freigabe gesperrt.- Wiki-Lesen und -Schreiben funktionieren.
- MikroTik- und Proxmox-Lesetools funktionieren.
ha_search_toolsfunktioniert über den zentralen MCP.- Ein harmloser
ha_call_read_tool-Aufruf funktioniert. - Read-/Write-/Delete-Proxy-Trennung weist falsche Toolklassen ab.
- HA-Bridge-Audit enthält Caller/Client und – sofern vom Request geliefert – IP und
cf_ray, aber keine HA-Argumente oder Antworten. - Clients zeigen nach einem Neuverbinden insgesamt 29 normale plus 5 HA-Bridge-Tools.
Checkliste¶
- [ ] CT 108 mit korrektem Netz und Autostart angelegt
- [ ] Benutzer
mcpundmcp-agentkorrekt eingerichtet - [ ] SSH-Schlüssel und
known_hostsvorhanden - [ ] Proxmox-/Wartungs-Wrapper installiert
- [ ] kompletter modularer MCP-v4-Code eingespielt
- [ ]
tool-config.jsonund fail-closed Policy vorhanden - [ ] Wiki-Härtung vorhanden
- [ ] Audit-v2-Projektion vorhanden
- [ ]
mcp-audit-writermit root-eigenen Tageslogs aktiv - [ ] Admin-Oberfläche installiert
- [ ] HA-Bridge inklusive Secret-Environment und Preload installiert
- [ ] systemd-Drop-in für HA-Bridge vorhanden
- [ ] Cloudflare Access/Tunnel geprüft
- [ ] Wiki-Repo und Deploy Key eingerichtet
- [ ] Abschlussprüfung einschließlich HA-Bridge und Audit bestanden