Teilprojekte + MikroMCP + WLAN-Vorarbeit: Steuerungsdok, Research, MCP-Setup, CAPsMAN-Asbuilt, AP-Trunk-Guides + Port-Map

- docs/teilprojekte.md: kanonisches Projektsteuerungsdokument (TP1–TP13 + TP-R)
- docs/research/: RouterOS-Capabilities-Sweep (TP-R) + VPN-Vergleich (TP10)
- mcp/: MikroMCP + Portainer-MCP Docker-Compose, routers.yaml, READMEs, .gitignore
- routeros/: ap1-manager.rsc, ap2-cap.rsc, CAPsMAN-Flat-Asbuilt, WLAN-Handover
- switch/cli/03-trunk-ap-ports.cli + switch/ui-guides/01-trunk-ap-ports.md: AP-Trunk-Konfiguration
- docs/allnet-ge8-trunk-klickanleitung.md: GE8 Hybrid→Trunk Schritt-für-Schritt
- inventory/bf-core-ports: gi1/gi2 als TRUNK zu ap1/ap2 eingetragen (gesetzt 2026-06-09)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Christoph Emsenhuber
2026-06-15 08:42:03 +02:00
parent 1f6e2a000b
commit e688b37b60
20 changed files with 980 additions and 1 deletions

11
mcp/mikromcp/.env.example Normal file
View File

@@ -0,0 +1,11 @@
# MikroMCP BF — Secrets. Kopiere zu .env (gitignored), fülle Werte.
#
# Confirmation-Secret (Pflicht im HTTP-Modus): openssl rand -hex 32
MIKROMCP_CONFIRMATION_SECRET=
# Dedizierter RouterOS-User (NICHT admin) — anlegen lt. README.md §RouterOS-User.
# Policies nötig: read,write,api,rest-api,test,ssh,sniff (ftp nur für upload_file).
ROUTER_AP1_USER=mcp-api
ROUTER_AP1_PASS=
ROUTER_AP2_USER=mcp-api
ROUTER_AP2_PASS=

View File

@@ -0,0 +1,30 @@
# MikroMCP Router-Registry — BF hAP ax²
# Credentials NICHT hier, sondern via ENV (envPrefix -> ROUTER_<PREFIX>_USER/PASS in .env).
# APs sprechen REST über PLAIN HTTP auf Port 80 (verifiziert: curl ...:80/rest funktioniert).
# -> tls.enabled: false (rest-client.ts: scheme = tls.enabled ? https : http)
# Sobald www-ssl auf den APs aktiv ist, auf port 443 + tls.enabled:true + fingerprint umstellen.
routers:
ap1:
host: "10.40.41.1"
port: 80
tls:
enabled: false
rejectUnauthorized: true # Pflichtfeld lt. Schema; ohne Wirkung bei enabled:false
credentials:
source: "env"
envPrefix: "ROUTER_AP1" # -> ROUTER_AP1_USER, ROUTER_AP1_PASS
tags: ["bf", "wifi", "capsman-manager", "future-router"]
rosVersion: "7.23"
ap2:
host: "10.40.41.2"
port: 80
tls:
enabled: false
rejectUnauthorized: true # Pflichtfeld lt. Schema; ohne Wirkung bei enabled:false
credentials:
source: "env"
envPrefix: "ROUTER_AP2" # -> ROUTER_AP2_USER, ROUTER_AP2_PASS
tags: ["bf", "wifi", "cap"]
rosVersion: "7.23"

View File

@@ -0,0 +1,35 @@
# MikroMCP — BF, Docker auf Mac mini (10.40.41.167)
# Prebuilt-Image (kein Source-Build nötig). HTTP/streamable für Remote-Clients.
#
# SECURITY: Dieser Endpoint kann RouterOS administrieren. Er ist NUR durch Bearer-Token
# (identities.yaml, bcrypt) + Confirmation-Secret geschützt. Daher:
# - ports auf das Mgmt-/LAN-Interface binden, NICHT 0.0.0.0 ins Internet,
# - später hinter NPM (FQDN + Auth/TLS) hängen,
# - dedizierter RouterOS-User 'mcp-api' (NICHT admin) — siehe ../README.md.
#
# Deploy (auf dem mini):
# scp -r mcp/mikromcp 10.40.41.167:/opt/docker/mikromcp
# ssh 10.40.41.167 'cd /opt/docker/mikromcp && cp .env.example .env && $EDITOR .env'
# ssh 10.40.41.167 'cd /opt/docker/mikromcp && docker compose up -d && docker compose logs -f'
services:
mikromcp:
image: ghcr.io/alikarami/mikromcp:latest
container_name: mikromcp
restart: unless-stopped
environment:
MIKROMCP_TRANSPORT: http
MIKROMCP_PORT: "3000"
MIKROMCP_BIND_HOST: "0.0.0.0" # im Container; Exposure via ports-Mapping unten begrenzen
MIKROMCP_CONFIG_PATH: /app/config/routers.yaml
MIKROMCP_IDENTITIES_PATH: /app/config/identities.yaml
MIKROMCP_CONFIRMATION_SECRET: ${MIKROMCP_CONFIRMATION_SECRET}
MIKROMCP_AUDIT_LOG_PATH: /app/config/audit.ndjson
MIKROMCP_HTTP_RATE_LIMIT_RPM: "60"
MIKROMCP_LOG_LEVEL: info
env_file:
- .env # ROUTER_AP1_USER/PASS, ROUTER_AP2_USER/PASS, secret
volumes:
- ./config:/app/config # routers.yaml + identities.yaml + audit.ndjson
ports:
- "10.40.41.167:3000:3000" # nur auf LAN-IP des mini binden (nicht überall)