fix(tools): harden OpenWebUI tool workflows
This commit is contained in:
@@ -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
@@ -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.
|
||||
|
||||
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user