# omada-mcp — TP-Link Omada Controller MCP Server (jmtvms/tplink-omada-mcp v0.15) # Host: pve-LXC (10.40.41.126, Portainer endpointId=2) — Docker-LXC auf Proxmox # IP: 10.40.41.176 (ipvlan default_external) — .173=pve-mcp, .175=omada-controller (beide auf DS923) # # Transport: StreamableHTTP (NICHT SSE) → Endpoint http://10.40.41.176:3000/mcp, Health /health # Auth: Omada OPEN API (Client Credentials) — KEIN username/password! # Creds: Controller-UI → Settings → Platform Integration → Open API (Grant: Client Credentials). # # 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/Update (via Portainer API, endpointId=2): # POST /api/stacks/create/standalone/string?endpointId=2 (erstmalig) # PUT /api/stacks/200?endpointId=2 (update, Stack-Id=200) # ⚠️ Portainer-String-Deploy findet env_file NICHT → Env beim Deploy INLINE senden (Werte aus .env). # Claude Code: ~/.claude/settings.json → "omada-mcp": {"url": "http://10.40.41.176:3000/mcp"} services: omada-mcp: image: jmtvms/tplink-omada-mcp:latest container_name: omada-mcp restart: unless-stopped networks: default_external: ipv4_address: 10.40.41.176 env_file: .env # Env-Vars (siehe .env.template) — Transport + Omada Open API: # MCP_SERVER_USE_HTTP=true · MCP_HTTP_BIND_ADDR=0.0.0.0 · MCP_HTTP_PORT=3000 · MCP_HTTP_PATH=/mcp # MCP_HTTP_ENABLE_HEALTHCHECK=true · MCP_HTTP_HEALTHCHECK_PATH=/health # OMADA_BASE_URL · OMADA_OMADAC_ID · OMADA_SITE_ID · OMADA_CLIENT_ID · OMADA_CLIENT_SECRET · OMADA_STRICT_SSL=false networks: default_external: external: true