- gitea-mcp + n8n-mcp nachgetragen (waren real live, aber aus dem Inventar verschollen) - pve-mcp: SSE-Doku -> StreamableHTTP-Realitaet - shelly-mcp/portainer-mcp: bewusst KEIN MCP-Client (User-Direktive 2026-08-28) - Mac mini = n8n-Host, NICHT zentraler MCP-Host (Performance-Restriktion) - ~/.claude.json + opencode.jsonc: 9 MCPs identisch (vorher 7 vs. 11 Asymmetrie) - docs/mcp-host-policy.md: SSoT fuer Host->FQDN/Stack-Mapping - docs/handoff-20260828-mcp-bestand-und-performance.md: Folge-Sessions A/B/C Co-Authored-By: Claude <noreply@anthropic.com>
7.6 KiB
Handoff 2026-08-28 — MCP-Bestand + Performance-Restriktion + 3 offene Folgepunkte
Bezug: Inventur 2026-08-27 (
handoff-20260827-inventur-und-architektur.md) → MCP-Cleanup 2026-08-28 (handoff-20260828-mcp-cleanup-und-shelly-tote.md) → TP35-Diskussion (session-20260828-decisions.md+teilprojekte.md→ TP35). Diese Datei: was sich aus dieser Session ergeben hat und was drei getrennte Folge-Sessions braucht.
TL;DR
- Mac mini ist NICHT der zentrale MCP-Host (Performance-Restriktion). Mac mini = n8n-Host. Zentraler MCP-Host = DS923 (
nas-bf, Portainer Endpoint 14). - gitea-mcp + n8n-mcp liefen real, waren aber aus dem Inventar verschollen — heute nachgetragen.
- portainer-mcp + shelly-mcp werden NICHT als MCP-Client installiert (User-Direktive) — Portainer-API direkt reicht.
- 9 MCPs jetzt identisch in
~/.claude.jsonund~/.config/opencode/opencode.jsonc(vorher Asymmetrie). - Globale Repo-Änderungen committed (Commit-Hash siehe Ende).
Bestand 2026-08-28 (Portainer-API, alle 4 Endpoints live)
| Endpoint | ID | Container mit "mcp" / "shelly" |
|---|---|---|
| pve | 2 | keine |
| nas-bf (DS923) | 14 | pve-mcp (10.40.20.173:3000, ghcr.io/samik081/mcp-pve) |
| macmini | 20 | gitea-mcp (172.17.0.3:3000, node:22-alpine) · n8n-mcp (172.19.0.4, ghcr.io/czlonkowski/n8n-mcp, PublicPort 3001) |
| nas-fm | 21 | keine |
Mac mini hat 5 Container insgesamt (gitea, gitea-mcp, n8n, n8n-redis, n8n-mcp). gitea-mcp und n8n-mcp sind die MCPs, die heute nachgetragen wurden — sie waren vorher nicht im Inventar (warum auch immer, hat Lücken gerissen über mehrere Cleanup-Sessions).
Was sich geändert hat (in dieser Session)
Repo
mcp/INVENTORY.md— gitea-mcp + n8n-mcp neu, pve-mcp SSE→StreamableHTTP-Drift korrigiert, shelly-mcp/portainer-mcp mit User-Direktive, Pflicht-Verifikationsregel ergänzt (alle 4 Endpoints abfragen, nicht nur Stichproben)mcp/portainer/README.md—10.40.41.x→10.40.20.x(VLAN1 tot), Weg B neu auf DS923 ausgerichtetCLAUDE.md— Mac-mini-Block: "zentraler MCP-Host" → "n8n-Host", Performance-Begründung ergänztdocs/mcp-host-policy.md— NEU (Grundsatz: Hosts aus Repo, Ollama = localhost, portainer-mcp/shelly-mcp = keine MCP-Clients, Lehren aus den Backups)
Globale Configs (Backups erstellt)
~/.claude.json— portainer-mcp + shelly-mcp raus, gitea-mcp + n8n-mcp rein (n8n-mcp mit Bearer-Header aus{env:N8N_MCP_BEARER})~/.config/opencode/opencode.jsonc— gleiche Korrekturen- Resultat: 9 MCPs identisch in beiden Configs (vorher 7 vs. 11 — Asymmetrie war Drift)
Sicherheits- und Aufräum-Aktionen
~/.config/opencode/skills/projektstatusSymlink → entfernt (opencode ist die neue Umgebung, aber Symlinks waren verkehrt — opencode-Skill-Speicherort muss erst gefunden werden, eigene Session, siehe unten)docs/nas-vlan20/stacks/{portainer-mcp,shelly-mcp}.yml→ gelöscht (User-Direktive: keine MCP-Clients für die beiden Dienste)
Was bewusst NICHT getan wurde
- Kein Portainer-Bump 2.40 → 2.42. War eine Halluzination meinerseits in der vorigen Session —
portainer-mcpist nicht im Bestand und wird auch nicht installiert. Inventar-Eintrag jetzt ⛔ bewusst NICHT. - Kein shelly-mcp-Image-Build auf der DS923. Gehört in eine eigene Session mit ssh-Zugang zur DS923.
- Keine Backup-Guards. Gehört zu TP35 Schicht 5, eigene Session.
Drei getrennte Folge-Sessions
Session A — /projektstatus-Skill globalisieren (TP35 Schicht 6)
Zweck: opencode soll den Skill wie Claude Code aus ~/.claude/skills/projektstatus/ finden. Wo genau opencode Skills speichert, ist hier nicht zuverlässig ermittelbar (Opencode-Doku oder Live-Test nötig).
Vorbereitet, aber von hier aus nicht machbar:
- Symlink unter
~/.config/opencode/skills/projektstatuswurde testweise angelegt und wieder entfernt — Christoph hat klargestellt: opencode ist die neue Umgebung, soll eigene Skill-Pfade haben, keine Symlinks.
Schritte in der neuen Session:
- Opencode-Doku nachschlagen, wo Skills erwartet werden (vermutlich
~/.config/opencode/skills/<name>/SKILL.mdoder ähnlich). - Entweder
~/.claude/skills/projektstatus/dorthin kopieren (nicht symlinken) oder einen Wrapper anlegen, der das richtige Verzeichnis erzeugt. - Test:
opencode mcp listo.ä. (oder einfach eine Session starten und/projektstatustriggern). - Lehre: opencode-CLI-Doku lesen, bevor geraten wird.
Session B — shelly-mcp-Container auf DS923 deployen (live, ssh/sudo)
Vorbereitet im Repo:
mcp/shelly/Dockerfile(python:3.12-slim, kein.env-COPY)mcp/shelly/requirements.txt(mcp[cli]>=1.0,starlette>=0.36)mcp/shelly/BUILD.md(vollständige Build-Anleitung: rsync → docker build → Portainer-Stack deploy → DHCP-Reservierung)mcp/shelly/.envohne Klartext-PSKs (Schema-Vorlage)~/.secrets/credentials.env+exports.zshmitSHELLY_DEVICE_PW+ korrigierterSHELLY_SWEEP=10.40.30.180-250
Live-Sweep bestätigt (2026-08-28): 23 Shellys auf VLAN30 erreichbar (.30.202-.226 + .233).
Schritte in der neuen Session:
ssh adm.christoph@10.40.20.10und dort:mkdir -p /data/compose/shelly-mcp-buildrsyncSource vom Mac (User-Pfad, nicht im Repo)docker build -t bf/shelly-mcp:0.1 .- Portainer-API: Container erstellen (nicht als Stack, sondern direkt — siehe Dockerfile + StreamableHTTP
:3030ohne Stack-YML, weil User-Direktive) - DHCP-Reservierung auf
crs326-coredhcp-v20für die MAC, die der Container bekommt (MikroMCP viamanage_dhcp_lease make-staticmit der MAC nach erstem Boot)
- Container-Endpoints in keiner globalen MCP-Config eintragen (User-Direktive: kein MCP-Client für shelly-mcp) — Zugriff via Direkt-HTTP/Skript.
Session C — Caddyfile↔CF-Ingress-Drift-Probe + Backup-Guard
Zweck:
caddy/cf-sync.py(im Repo) laufen lassen und Ausgabe prüfen — der Drift-Check aus dem Inventur-Handoff 2026-08-27 wurde noch nicht ausgeführt.- Backup-Guard-Skript
~/dev/.bin/backup-guard.shschreiben (TP35 Schicht 5) mit den Schwellen 5 Commits ODER 1000 LOC in 3 Tagen (git log --since=<guard-date>+git diff --shortstat).
Schritte:
python3 caddy/cf-sync.py→ Drift-Report, dann ggf. CF-Ingress nachziehen.- Backup-Guard-Skript + Pre-Commit-Hook für
~/dev/<projekt>/.git/hooks/pre-commit. - Pro Projekt einmal laufen lassen, um die
.guard-Dateien zu initialisieren.
Commit
Die 4 Repo-Änderungen dieser Session sind in einem Commit:
mcp/INVENTORY.md(M)mcp/portainer/README.md(M)CLAUDE.md(M)docs/mcp-host-policy.md(NEU)
Commit-Message (vorgeschlagen): MCP-Bestand korrigiert + Mac-mini-Restriktion dokumentiert
Commit-Hash: siehe git log --oneline -1 nach diesem Handoff.
Was diese Session NICHT lösen konnte (keine Schuldzuweisung, nur Lücken)
- gitea-mcp von macmini auf DS923 umziehen. War in dieser Session kein Auftrag. Lohnt sich, weil der macmini die User-Workstation zusätzlich belastet.
- Komodo-MCP deployen (TP-Komodo, bisher nur
mcp/komodo/MIGRATION.md). OllAMA_HOST-Default in den MCP-Configs explizithttp://localhost:11434statt hartkodiertem127.0.0.1:11434. Aktuell in~/.claude.jsonhartkodiert — gehört in den{env:OLLAMA_HOST}-Stil wie in opencode.jsonc.
Stand
- 2026-08-28, 18:30
- Diese Session = Bestand-Korrektur + Policy-Doku + Config-Sync + Commit
- Drei Folge-Sessions oben priorisiert
- Backups in
~/.claude.json.bak-pre-mcp-cleanup-20260828-181052+~/.config/opencode/opencode.jsonc.bak-pre-mcp-cleanup-20260828-181101