diff --git a/docs/teilprojekte.md b/docs/teilprojekte.md index def18a7..d543241 100644 --- a/docs/teilprojekte.md +++ b/docs/teilprojekte.md @@ -39,13 +39,15 @@ Kontrolle: MikroMCP (MikroTik) live · ALLNET = Klickanleitungen (inline) · Oma ### TP2 — Omada Access-Switch + Controller ▸ 🔄 IN ARBEIT (2026-06-15) - ✅ Omada Controller 6.2.10.17 auf DS923 (macvlan `.175`): `omada/docker-compose.yml`, Stack via Portainer endpointId=14. **Wizard abgeschlossen** (configured=true), Creds in `mcp/omada/.env`. - ✅ pve-mcp (samik081) in Claude Code eingetragen (`~/.claude/settings.json`, SSE `.173:3000`). -- ✅ omada-mcp staged: `mcp/omada/` (compose + .env fertig befüllt), macvlan `.174`. +- ✅ omada-mcp Container deployed auf **pve-LXC (`.126`, endpointId=2), ipvlan-IP `.176`**, in `~/.claude/settings.json` eingetragen. **Aktuell gestoppt** (Crash-Loop). + - ⚠️ **Erkenntnis:** `jmtvms/tplink-omada-mcp` nutzt die **Omada OPEN API** (`OMADA_CLIENT_ID/SECRET/OMADAC_ID/SITE_ID`), **nicht** User/Passwort. `.env`-Schema entsprechend angepasst. + - ⚠️ Admin-API-Login (admin / Wizard-PW) gibt `-30109` → im UI verifizieren. **Noch offen (Reihenfolge):** - 1. omada-mcp Container deployen (Portainer endpointId=14, `mcp/omada/docker-compose.yml`) - 2. `~/.claude/settings.json` → `"omada-mcp": {"url": "http://10.40.41.174:3000/sse"}` eintragen - 3. Claude Code neu starten → omada-mcp Tools verfügbar - 4. VLANs 10/20/30/40/50/90/99/100 im Controller anlegen - 5. `.12` adoptieren → Port 2 (ap2) + Uplink-Port → Trunk-All, Restports → Access VLAN10 + 1. Controller-UI https://10.40.41.175:8043 → Settings → Platform Integration → **Open API** → App anlegen (Grant: Client Credentials) → Client ID + Secret notieren + 2. `OMADA_SITE_ID` holen (UI oder `GET /{omadacId}/api/v2/sites`) + 3. `mcp/omada/.env` befüllen (CLIENT_ID/SECRET/SITE_ID) → Container neu starten (Portainer Stack `omada-mcp`, Id=200) + 4. SSE-Test `http://10.40.41.176:3000/health` → Claude Code reload → omada-mcp Tools verfügbar + 5. VLANs 10/20/30/40/50/90/99/100 anlegen → `.12` adoptieren → Port 2 (ap2) + Uplink → Trunk-All, Rest → Access VLAN10 - ✅ Port-Plan: Omada-Switch Port 2 = ap2 (Trunk all), Uplink-Port (→ ALLNET GE8) = Trunk all. - ✅ Portainer-Ablösung: **Komodo** empfohlen (einzige Option mit nativem MCP `mcp-server-komodo`). Eigener Task. - Abh. erfüllt: TP1 (GE8 Trunk ✅). diff --git a/mcp/INVENTORY.md b/mcp/INVENTORY.md index d4e433b..6f3d14d 100644 --- a/mcp/INVENTORY.md +++ b/mcp/INVENTORY.md @@ -10,7 +10,7 @@ |---|---|---|---|---|---|---| | **MikroMCP** (AliKarami) | MikroTik hAP ax² ap1/ap2 (RouterOS 7) — WLAN/CAPsMAN, später Router-Cutover | **jetzt: lokal (dieser Mac)** / Ziel: Mac mini `.167` Docker | jetzt **stdio** (`npx mikromcp serve`) / Ziel HTTP `:3000` | `ghcr.io/alikarami/mikromcp:latest` (HTTP) bzw. npm `mikromcp` (stdio) | `mcp/mikromcp/` + Claude-Code user-config | 🟢 **live (stdio), doctor 12/12, in Claude Code ✓Connected** | | **pve-mcp** (samik081) | Proxmox VE API (Host `.100`) | DS923 (`.10`), macvlan-IP **`.173`** | SSE `http://10.40.41.173:3000/sse` | `ghcr.io/samik081/mcp-pve:latest` | — (Stack via Portainer) | 🟢 **live, in Claude Code eingetragen** | -| **omada-mcp** (realtydev/jmtvms) | TP-Link Omada Controller → ES208G (+ künftige Omada-Geräte) | DS923 (`.10`), macvlan-IP **`.174`** | SSE `http://10.40.41.174:3000/sse` (`MCP_TRANSPORT=sse`) | `jmtvms/tplink-omada-mcp:latest` | `mcp/omada/` ✓ (`.env` befüllt) | 🔴 **Container nicht deployed — nächster Schritt: Stack via Portainer endpointId=14** | +| **omada-mcp** (jmtvms) | TP-Link Omada Controller → ES208G (+ künftige Omada-Geräte) | **pve-LXC (`.126`, endpointId=2)**, ipvlan-IP **`.176`** | SSE `http://10.40.41.176:3000/sse` (`MCP_TRANSPORT=sse`) | `jmtvms/tplink-omada-mcp:latest` | `mcp/omada/` ✓, in settings.json ✓ | 🟠 **Container deployed (gestoppt) — braucht Open-API-Client-Creds (UI: Platform Integration → Open API). User/PW funktioniert NICHT, nur Client-Credentials.** | | **omada-controller** | Omada Software Controller (keine MCP) | DS923 (`.10`), macvlan-IP **`.175`** | HTTPS `https://10.40.41.175:8043` | `mbentley/omada-controller:6.2` | `omada/docker-compose.yml` | 🟢 **live, configured, Wizard ✅** | | **komodo-mcp** (samik081) | Docker-Management **5 Hosts** via Komodo Core (ersetzt Portainer) | DS923 (`.10`), macvlan-IP **`.176`** | SSE `http://10.40.41.176:3000/sse` | `ghcr.io/samik081/mcp-komodo:latest` | `mcp/komodo/` ✓ (`.env.example` → `.env` nach Phase 1) | 🟡 **geplant — Migration: `mcp/komodo/MIGRATION.md`** | | ~~portainer-mcp~~ (offiziell) | Docker-Überblick via Portainer CE 2.40.0 | `.126:9443` | — | `portainer/portainer-mcp` | `mcp/portainer/` (Token .env ✓) | ⏳ **retired nach Komodo-Migration — Token aufheben bis Phase 4** | diff --git a/mcp/omada/.env.template b/mcp/omada/.env.template index 2212525..41d59bb 100644 --- a/mcp/omada/.env.template +++ b/mcp/omada/.env.template @@ -1,8 +1,16 @@ # omada-mcp Secrets — .env (gitignored). Dieses File = Template, .env = echte Werte. +# +# jmtvms/tplink-omada-mcp nutzt die Omada OPEN API (nicht User/Passwort!). +# Client-Credentials erzeugen: Controller-UI → Settings → Platform Integration → Open API → +# neuen App-Eintrag (Grant Type: Client Credentials) → liefert Client ID + Client Secret. +# omadac_id: aus https://10.40.41.175:8043/api/info → result.omadacId +# site_id: Controller-UI Site-Auswahl, oder API /{omadacId}/api/v2/sites → result.data[].id + MCP_TRANSPORT=sse PORT=3000 -OMADA_URL=https://10.40.41.175:8043 -OMADA_USERNAME=admin -OMADA_PASSWORD=REPLACE_AFTER_WIZARD -OMADA_SITE=BF -OMADA_SKIP_CERT_VERIFY=true +OMADA_BASE_URL=https://10.40.41.175:8043 +OMADA_OMADAC_ID=adbef8fa3505fb16b09818eab71d824e +OMADA_CLIENT_ID=REPLACE_OPENAPI_CLIENT_ID +OMADA_CLIENT_SECRET=REPLACE_OPENAPI_CLIENT_SECRET +OMADA_SITE_ID=REPLACE_SITE_ID +OMADA_STRICT_SSL=false diff --git a/mcp/omada/docker-compose.yml b/mcp/omada/docker-compose.yml index c2c29a5..3054451 100644 --- a/mcp/omada/docker-compose.yml +++ b/mcp/omada/docker-compose.yml @@ -1,12 +1,15 @@ # omada-mcp — TP-Link Omada Controller MCP Server -# Host: nas-bf (DS923, 10.40.41.10), Portainer endpointId=14 +# Host: pve-LXC (10.40.41.126, Portainer endpointId=2) — Docker-LXC auf Proxmox # Image: jmtvms/tplink-omada-mcp (stdio by default, SSE via MCP_TRANSPORT=sse) -# IP: 10.40.41.174 (macvlan default_external) — .173=pve-mcp, .175=omada-controller +# IP: 10.40.41.176 (ipvlan default_external) — .173=pve-mcp, .175=omada-controller (beide auf DS923) # -# Deploy NACH Omada-Controller-Wizard (https://10.40.41.175:8043): -# 1. Creds in .env eintragen -# 2. Via Portainer API: POST /api/stacks/create/standalone/string?endpointId=14 -# 3. Claude Code: ~/.claude/settings.json → "omada-mcp": {"url": "http://10.40.41.174:3000/sse"} +# Hinweis: pve-LXC-Disk ist klein (1GB-Controller-Image scheiterte dort → Controller läuft auf DS923). +# omada-mcp (~node-alpine) ist klein genug für den pve-LXC. +# +# Deploy (via Portainer API, endpointId=2): +# POST /api/stacks/create/standalone/string?endpointId=2 +# Env beim Deploy inline (env_file findet Portainer nicht) — Werte aus .env. +# Claude Code: ~/.claude/settings.json → "omada-mcp": {"url": "http://10.40.41.176:3000/sse"} services: omada-mcp: @@ -15,16 +18,15 @@ services: restart: unless-stopped networks: default_external: - ipv4_address: 10.40.41.174 + ipv4_address: 10.40.41.176 env_file: .env - # Env-Vars (in .env setzen, nie hier hardcoden): - # MCP_TRANSPORT=sse - # PORT=3000 - # OMADA_URL=https://10.40.41.175:8043 - # OMADA_USERNAME=admin - # OMADA_PASSWORD= - # OMADA_SITE=BF - # OMADA_SKIP_CERT_VERIFY=true (falls key heißt anders: OMADA_TLS_VERIFY=false) + # Env-Vars (Omada OPEN API, in .env setzen — siehe .env.template): + # MCP_TRANSPORT=sse · PORT=3000 + # OMADA_BASE_URL=https://10.40.41.175:8043 + # OMADA_OMADAC_ID= · OMADA_SITE_ID= + # OMADA_CLIENT_ID / OMADA_CLIENT_SECRET= + # OMADA_STRICT_SSL=false + # ACHTUNG: Portainer-String-Deploy findet env_file NICHT → Env beim Deploy inline senden. networks: default_external: