From 7e81ce6a36446fa8540a903beb2275b121168f37 Mon Sep 17 00:00:00 2001 From: Christoph Emsenhuber Date: Fri, 28 Aug 2026 14:40:08 +0200 Subject: [PATCH] =?UTF-8?q?handoff:=202026-08-28=20=E2=80=94=20MCP-Cleanup?= =?UTF-8?q?,=20shelly-mcp-Tote,=20n=C3=A4chste=20Schritte?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Neue Handoff-Datei für den konkreten nächsten Schritt (im Gegensatz zur Inventur-Handoff, die den Master-Plan zeigt). - Dokumentiert: cannaleo/terpene-pg entfernt, n8n-mcp repariert, shelly-mcp-Tote entdeckt, CLAUDE.md-Erweiterung. - Liste der offenen Aktionen für die nächste Session: bf-network-r6 archivieren, terpene-Caddyfile-Block, STATUS.md Z.47 korrigieren, n8n-mcp auch in ~/.claude.json, gitea-mcp-Init-Problem. --- ...ff-20260828-mcp-cleanup-und-shelly-tote.md | 115 ++++++++++++++++++ 1 file changed, 115 insertions(+) create mode 100644 docs/handoff-20260828-mcp-cleanup-und-shelly-tote.md diff --git a/docs/handoff-20260828-mcp-cleanup-und-shelly-tote.md b/docs/handoff-20260828-mcp-cleanup-und-shelly-tote.md new file mode 100644 index 0000000..a129d8d --- /dev/null +++ b/docs/handoff-20260828-mcp-cleanup-und-shelly-tote.md @@ -0,0 +1,115 @@ +# Handoff 2026-08-28 — MCP-Cleanup + shelly-mcp-Tote + nächste Schritte + +> **Bezug:** [docs/handoff-20260827-inventur-und-architektur.md](handoff-20260827-inventur-und-architektur.md) (Master-Plan, Asymmetrie, TP34) + Inventur-Handoff bleibt der Einstieg für Master-Fragen. Diese Datei ist der **konkrete nächste Schritt** aus der Session 2026-08-28. + +## TL;DR + +- **MCP-Cleanup durchgeführt:** `cannaleo` + `terpene-pg` aus `~/.claude.json` UND `~/.config/opencode/opencode.jsonc` entfernt (Backup `~/.claude.json.bak-pre-mcp-cleanup`, `~/.opencode/opencode.jsonc.bak-pre-n8n-mcp`). +- **`n8n-mcp` repariert:** URL war `https://n8n-mcp.emsenhuber.net/` (kein `/mcp` am Ende) → jetzt `https://n8n-mcp.emsenhuber.net/mcp`. Bearer über `headers.Authorization` aus `{env:N8N_MCP_BEARER}`. ✅ live verifiziert. +- **`shelly-mcp` ist tot** (war in Inventur-Handoff nicht aufgefallen): läuft auf keinem Host, kein lokaler Prozess, kein Container auf NAS/pve. Config jetzt `http://127.0.0.1:3030/mcp` mit `enabled=false`. +- **CLAUDE.md erweitert:** 3 neue Lessons-for-Sessions-Regeln (MCP-Lifecycle: aktiv melden, Host vor Edit verifizieren, tote MCPs ins Projekt-Repo). +- **Commit:** `046f103` (lokal + remote synchron in `admin/bf-infra`). + +## Drift-Befunde der MCP-Cleanup-Session + +| # | Befund | Einschätzung „richtig" | +|---|---|---| +| **M1** | `cannaleo` + `terpene-pg` waren in `~/.claude.json` UND `~/.config/opencode/opencode.jsonc` doppelt | Beide aus globalen Configs entfernt, in terpene-Repo dokumentiert | +| **M2** | `n8n-mcp` URL war ohne `/mcp` | Korrigiert auf `https://n8n-mcp.emsenhuber.net/mcp` | +| **M3** | `shelly-mcp` zeigt auf `127.0.0.1:3030`, aber kein Prozess dort | `enabled=false`, Deploy-Folgepunkt angemerkt | +| **M4** | `ollama mcp list` zeigte Hänger nach Zeile 1 (war Race-Condition beim Initial-Connect) | Nicht in Config, sondern Cold-Start; mit etwas Wartezeit vollständig (10 Server alle ✅ oder disabled) | + +## Was ich konkret geändert habe + +### 1. `~/.claude.json` +- **Entfernt:** `cannaleo`, `terpene-pg` +- **Backup:** `~/.claude.json.bak-pre-mcp-cleanup` + +### 2. `~/.config/opencode/opencode.jsonc` +- **Entfernt:** `cannaleo`, `terpene-pg` +- **Korrigiert:** `n8n-mcp.url` → `https://n8n-mcp.emsenhuber.net/mcp` (mit `/mcp`) +- **Markiert:** `shelly-mcp.enabled` → `false` (kein Host) +- **Kommentar:** shelly-mcp-Deploy als TODO angemerkt +- **Backup:** `~/.opencode/opencode.jsonc.bak-pre-n8n-mcp` (vor n8n-mcp-Edit) + +### 3. `~/dev/bf-infra/CLAUDE.md` +- Ist-Stand-Block: shelly-mcp-Tote hinzugefügt +- Lessons-for-Sessions: 3 neue Regeln + - **MCP-Änderung = aktiv melden** (Christoph-Direktive 2026-08-27) + - **Host vor Edit verifizieren** (Live-Read: nc/ps/curl) + - **Tote MCPs → ins Projekt-Repo**, nicht global +- Checkliste um Punkt 5 erweitert: „MCP-Änderung? Vorher Live-Check" + +### 5. Neue Datei in terpene-Repo +- `~/dev/blaueblueten-n8n/docs/mcp-rueckantwort-2026-08-27.md` — dokumentiert für terpene-Phase, was war und welche Optionen (A = Repo-Pattern, B = weglassen) bestehen + +## Live-Verifizierung (2026-08-28) + +``` +n8n-mcp: ✅ connected, Bearer akzeptiert, serverInfo: n8n-documentation-mcp 2.57.1 +10 MCP-Server total: 9 connected + 1 disabled (shelly-mcp) +URL-Test: curl POST /mcp mit Bearer → 200, initialize-Response +``` + +## Was du noch zu tun hast + +### Reihenfolge (du wolltest „erst bf-network-r6 archiv, dann 1") + +**1. bf-network-r6 im Gitea auf read-only + Archiv-Header** (deine Aktion): +- `https://gitea.emsenhuber.net/admin/bf-network-r6/settings` +- Archived anhaken ✓ +- Read-only anhaken ✓ +- Description: „Archiv — siehe admin/bf-infra für aktive Entwicklung" + +**2. terpene-Caddyfile-Block** (`~/dev/bf-infra/caddy/Caddyfile`): +``` +terpene.teilzeitladen.xyz { + reverse_proxy http://10.40.20.167:8890 +} +``` +- Mac mini (`.167`) lebt (live ping 527 µs avg, Port 8890 offen) +- Commit-Kommentar: „Quick-Win für terpene-Backfill — nicht das Pattern, TP34 ist die saubere Lösung" + +**3. `STATUS.md` Z.47** in `~/dev/blaueblueten-n8n/STATUS.md` korrigieren: +- Realität: kein Tunnel hat `terpene.teilzeitladen.xyz` als Ingress, Worker läuft nur über CF-Workers-Custom-Domain `420.teilzeitladen.xyz` +- Streichen oder umformulieren + +**4. `~/.claude.json` `n8n-mcp`-Eintrag nachziehen** (du wolltest „n8n-mcp auch korrekt in beide Configs"): +- Aktuell nur in `~/.config/opencode/opencode.jsonc`, nicht in `~/.claude.json` +- Block dort identisch: + ```json + "n8n-mcp": { + "type": "http", + "url": "https://n8n-mcp.emsenhuber.net/mcp", + "headers": { + "Authorization": "Bearer 47a34f5589388d37d8b7503abac07b930df264c469ef0674aaeeea9b71dde847" + } + } + ``` + +**5. gitea-mcp „Server not initialized"** untersuchen: +- Diese Session: MCP-Aufruf gab `Streamable HTTP error: ... "Bad Request: Server not initialized"` +- Mögliche Ursache: Container-Restart noch nicht durch, oder Backend-Init fehlt +- Erste Adress-Tests: `https://gitea-mcp.emsenhuber.net/mcp` antwortet mit 405 (Method not Allowed, nicht Init-Fehler) → MCP-Backend läuft, aber die SSE-Initialisierung klemmt +- Aktion: Portainer/Komodo-Container-Logs prüfen, ggf. manueller Restart + +**6. shelly-mcp deployen** (eigener Punkt, nicht zeitkritisch): +- Skript: `~/dev/bf-infra/mcp/shelly/server.py` +- Wo deployen? Optionen: + - Container auf Mac mini (10.40.20.167) — passt zum Caddyfile-Pattern + - Container auf NAS (10.40.20.10) — wo auch Portainer läuft + - pve-LXC (10.40.20.126 oder neu) — zentral +- Sobald deployed, Config auf neue IP + `enabled=true` + +## Lessons Learned (an nächste Session) + +- **`~/.claude.json` ≠ `~/.config/opencode/opencode.jsonc`**: zwei separate Werkzeugkästen, müssen **manuell synchron** gehalten werden +- **MCP-Geistereinträge sind häufiger als gedacht** — regelmäßiger Audit (alle 2-4 Wochen) auf tote Hosts sinnvoll +- **`opencode mcp list` zeigt Initialisierungs-Status, nicht dauerhaften Connect** — bei Hänger: kurz warten, dann erneut prüfen + +## Stand + +- 2026-08-28, gegen Ende der MCP-Cleanup-Session +- Christoph + Hubert/minimax-m3 +- Commits lokal + remote: `046f103` (HEAD) +- 256 Commits in `admin/bf-infra` \ No newline at end of file