fix(tools): harden OpenWebUI tool workflows

This commit is contained in:
Mikei386
2026-08-24 00:40:32 +02:00
parent bfb990a4fd
commit e24839bfe1
24 changed files with 505 additions and 100 deletions
+1 -1
View File
@@ -22,4 +22,4 @@ EXPOSE 8000
# already injected into this container by Docker. The value is never placed on
# the command line, image, logs or Open WebUI connection record.
ENTRYPOINT ["mcp-proxy", "--host", "0.0.0.0", "--port", "8000", "--stateless", "--pass-environment", "--"]
CMD ["/usr/local/bin/github-mcp-server", "stdio", "--read-only", "--tools", "search_repositories,get_repository_tree,get_file_contents,search_code"]
CMD ["/usr/local/bin/github-mcp-server", "stdio", "--read-only", "--tools", "search_repositories,get_file_contents,search_code"]
+18 -15
View File
@@ -16,7 +16,7 @@ Prompts heraus, verhindert den früher beobachteten Kontextverbrauch von über
| `mcp-homeassistant` | `http://mike-ai-mcp-homeassistant:8000/mcp` | Relay zum nativen HA-MCP; Token bleibt serverseitig | Profil `homeassistant` |
| `mcp-arr` | `http://mike-ai-mcp-arr:8000/mcp` | Sonarr/Radarr/Prowlarr mit serverseitiger Policy | Profil `arr` |
| `mcp-navidrome` | `http://mike-ai-mcp-navidrome:3000/mcp` | Navidrome-Bibliothek, Suche, Playlists, Favoriten und Hörverlauf | Profil `navidrome` |
| `mcp-github` | `http://mike-ai-mcp-github:8000/mcp` | offizieller GitHub-MCP, auf vier reine Repository-Lesewerkzeuge begrenzt | Profil `github` |
| `mcp-github` | `http://mike-ai-mcp-github:8000/mcp` | offizieller GitHub-MCP, auf drei kleine Repository-Lesewerkzeuge begrenzt | Profil `github` |
| `mcp-unraid-ssh` | `http://mike-ai-mcp-unraid-ssh:8000/mcp` | erweiterte Diagnose über einen erzwungenen SSH-Befehl | optional (`extended`) |
Unraid wird produktiv ausschließlich über das auf dem HomeServer laufende
@@ -67,11 +67,11 @@ Container-Neustart vollständig verworfen.
TinySearch und SearXNG sind interne Abhängigkeiten des Web-MCPs und werden
nicht direkt als allgemeine Werkzeuge angeboten.
Die fünf Open-WebUI-Profile Fast, Medium, Large, Ultra und Uncensored binden den Server als
`server:mcp:web-local` standardmäßig ein. Damit steht die begrenzte lokale
Websuche in jedem neuen Chat zur Verfügung, ohne zusätzlich Open WebUIs
separate eingebaute Websuche zu aktivieren. Das Modell entscheidet weiterhin,
ob eine aktuelle Frage tatsächlich einen Werkzeugaufruf benötigt.
Die fünf Open-WebUI-Profile Fast, Medium, Large, Ultra und Uncensored verwenden
für allgemeine öffentliche Recherche Open WebUIs native Werkzeuge `search_web`
und `fetch_url`. Der Server `server:mcp:web-local` bleibt als manuell
zuschaltbarer Spezialkatalog für gezielte YouTube- und Hugging-Face-Abfragen
erhalten. Er wird nicht mehr automatisch an öffentliche Fragen gebunden.
Ein gemeinsamer Systemhinweis der fünf Profile verlangt Webprüfung bei
aktuellen, veränderlichen oder wesentlich unsicheren Tatsachen. Stabiles
@@ -89,7 +89,7 @@ passenden Server wählen:
| Aufgabe | Werkzeugserver | Nicht zusätzlich verwenden |
|---|---|---|
| Aktuelle öffentliche Informationen, Quellen, Hugging Face, Produkte | Web | HA, ARR, Unraid |
| GitHub-Repository finden, Baum/README/Quellcode/API-Routen lesen | GitHub Repository | Web, HA, ARR |
| GitHub-Repository finden, README/Quellcode/API-Routen gezielt lesen | GitHub Repository | Web, HA, ARR |
| Entitäten, Zustände, Historie, Automationen und Dashboards | Home Assistant | Web, Unraid |
| Serien, Filme, fehlende Episoden und Indexer-Releases | Sonarr und Radarr | Web |
| Persönliche Musikbibliothek, Titel, Alben, Künstler und Playlists | Navidrome | Web, ARR |
@@ -120,12 +120,13 @@ oder ein anderes Werkzeug benötigt wird.
sudo platform/mcp/install-tools.sh
```
Der Grundstart enthält nur Websuche. Bereits konfigurierte Fachbereiche werden
explizit ergänzt:
Der Grundstart enthält Plattformwissen, den kontrollierten Athena Operator und
den Web-Spezialadapter. Bereits konfigurierte Fachbereiche werden explizit
ergänzt:
Das Skript erkennt vorhandene Secret-Dateien und aktiviert dadurch automatisch
`homeassistant`, `arr` und `unraid`. Ohne Fach-Secrets startet nur der sichere
Webbereich.
`homeassistant`, `arr` und `unraid`. Ohne Fach-Secrets bleiben nur die drei
secretfreien Grunddienste aktiv.
Für den derzeit migrierten Container kann der Name `Open-WebUI` lauten. Der
Netzwerkbefehl ist idempotent zu behandeln.
@@ -210,8 +211,10 @@ Server fällt dann irreführend auf die interaktive GitHub-Geräteanmeldung
zurück. Der Token bleibt dabei eine Umgebungsvariable und erscheint weder in
Kommandozeile noch Image, Log oder Open-WebUI-Konfiguration.
Dem Modell werden ausschließlich `search_repositories`, `get_repository_tree`,
`get_file_contents` und `search_code` angeboten. Der offizielle Server wird
Dem Modell werden ausschließlich `search_repositories`, `get_file_contents`
und `search_code` angeboten. Rekursive Komplettbäume wurden entfernt, nachdem
ein einzelner Aufruf mehr als 100.000 Zeichen erzeugte und die Antwort
verdrängte. Der offizielle Server wird
zusätzlich explizit mit `--read-only` gestartet; die Umgebungsvariablen im
Compose-Stack bleiben als zweite, deklarative Sicherung erhalten. Damit sind
Schreiboperationen auch serverseitig ausgeschlossen. Der Container
@@ -227,7 +230,7 @@ sudo platform/openwebui/install-filters.sh
```
Der Token muss eigens für Athena erzeugt werden und ausschließlich lesenden
Zugriff auf die tatsächlich benötigten Repositories erhalten. Die vier
Zugriff auf die tatsächlich benötigten Repositories erhalten. Die drei
begrenzten Werkzeuge werden bei vorhandener Secret-Datei an die fünf
MikeAI-Profile geheftet. Dadurch kann das Modell Repositoryfragen selbständig
prüfen, ohne den großen GitHub-Standardwerkzeugkatalog in den Kontext zu laden.
@@ -235,7 +238,7 @@ prüfen, ohne den großen GitHub-Standardwerkzeugkatalog in den Kontext zu laden
## Client-Auswahl
Große Fachwerkzeuge werden nicht pauschal an jedes Modell gehängt. Nur die
kompakte Websuche und die vier GitHub-Lesewerkzeuge sind allgemein verfügbar.
native OpenWebUI-Websuche und die drei GitHub-Lesewerkzeuge sind allgemein verfügbar.
Für Home-Assistant-Fragen wird HA ausgewählt, für Medien ARR und für die NAS
Unraid. Weitere Werkzeuge werden nur aktiviert, wenn die Aufgabe tatsächlich
mehrere Bereiche verbindet.
+7 -1
View File
@@ -94,6 +94,12 @@ services:
image: mike-ai/mcp-homeassistant-relay:local
container_name: mike-ai-mcp-homeassistant
profiles: [homeassistant]
# Keep the public TLS hostname for SNI/certificate validation, but route it
# to the private reverse proxy through WireGuard. Public DNS may otherwise
# resolve to the Fritzbox WAN address, which is unreachable/hairpinned from
# Athena's remote-site containers.
extra_hosts:
- "ha.casaderoll.de:${HOME_LAN_PROXY_IP:-192.168.1.2}"
volumes:
- ${HA_ENV_FILE:-/etc/mike-ai/homeassistant-admin-mcp.env}:/run/secrets/homeassistant.env:ro
cap_add: [CHOWN, SETUID, SETGID]
@@ -210,7 +216,7 @@ services:
environment:
# These server-side limits remain authoritative even if a client asks
# for broader toolsets. The token itself must also remain read-only.
GITHUB_TOOLS: search_repositories,get_repository_tree,get_file_contents,search_code
GITHUB_TOOLS: search_repositories,get_file_contents,search_code
GITHUB_READ_ONLY: "1"
networks: [tools, egress]
healthcheck: