Problem bei der Verbindung von ha-mcp mit lokaler KI über Open WebUI

Hallo zusammen,
falls es ein ähnliches Thema bereits gibt, wäre ich für einen Hinweis sehr dankbar, konnte aber bei der Suche nichts dergleichen finden.

Worum geht’s? Ich habe ha-mcp als App in HAOS (bare metal) auf dem RPi5 mit 8 GB laufen. Alles andere läuft auf einen Ubuntu Server 24.04 LTS in Docker Containern, also Ollama, Open WebUI, Wyoming-Piper, Wyoming-Whisper und ein paar andere (Music Assistant, ComfyUI usw). Hardwareseitig ist es ein minisforum UM890 pro mit Ryzen 9 8945HS, 64 GB DDR5 RAM, 1TB PCIe 4.0 SSD. Via OCulink ist eine Radeon RX 7900 XT mit 20 GB VRAM angedockt.

ha-mcp läuft, secret path besteht und ist auch erreichbar. Open WebUI findet auch die Verbindung (in den Admin-Einstellungen ist unter “Externe Werkzeug-Server” ha-mcp als “MCP Streambares HPPT” eingebunden, die URL mit dem Secret Path http://192.168.178.54:9583/private_Bq5Yaj7ZToAdCaXXXXXXXX funktioniert auch).

In Open WebUI ist das Werkzeug “ha-mcp” in dem jeweiligen Chat auch eingeschaltet, das Log aus Open-WebUI zeigt auch, dass der Zugriff - zumindest technisch - funktioniert. Hier mal der Ausschnitt aus einen aktuellen Log:

[open-webui] 2026-07-14T05:53:33.663384588Z 2026-07-14 05:53:33.663 | INFO     | uvicorn.protocols.http.httptools_impl:send:483 - 192.168.178.3:52376 - "GET /api/models HTTP/1.1" 200
[open-webui] 2026-07-14T05:53:33.779684866Z 2026-07-14 05:53:33.779 | INFO     | uvicorn.protocols.http.httptools_impl:send:483 - 192.168.178.3:52376 - "GET /ollama/api/version HTTP/1.1" 200
[open-webui] 2026-07-14T05:54:14.989265641Z 2026-07-14 05:54:14.989 | INFO     | uvicorn.protocols.http.httptools_impl:send:483 - 192.168.178.3:60576 - "POST /api/chat/completions HTTP/1.1" 200
[open-webui] 2026-07-14T05:54:15.001581992Z 2026-07-14 05:54:15.001 | INFO     | uvicorn.protocols.http.httptools_impl:send:483 - 192.168.178.3:60576 - "GET /api/v1/chats/?page=1 HTTP/1.1" 200
[open-webui] 2026-07-14T05:54:15.022876867Z 2026-07-14 05:54:15.022 | INFO     | httpx._client:_send_single_request:1740 - HTTP Request: POST http://192.168.178.54:9583/private_Bq5Yaj7ZToAdCaXXXXXXXX "HTTP/1.1 200 OK"
[open-webui] 2026-07-14T05:54:15.023604449Z 2026-07-14 05:54:15.023 | INFO     | mcp.client.streamable_http:_maybe_extract_protocol_version_from_message:193 - Negotiated protocol version: 2025-11-25
[open-webui] 2026-07-14T05:54:15.026262002Z 2026-07-14 05:54:15.026 | INFO     | httpx._client:_send_single_request:1740 - HTTP Request: POST http://192.168.178.54:9583/private_Bq5Yaj7ZToAdCaXXXXXXXX "HTTP/1.1 202 Accepted"
[open-webui] 2026-07-14T05:54:15.028696533Z 2026-07-14 05:54:15.028 | INFO     | httpx._client:_send_single_request:1740 - HTTP Request: POST http://192.168.178.54:9583/private_Bq5Yaj7ZToAdCaXXXXXXXX "HTTP/1.1 200 OK"
[open-webui] 2026-07-14T05:54:20.157721006Z 2026-07-14 05:54:20.157 | INFO     | uvicorn.protocols.http.httptools_impl:send:483 - 192.168.178.3:34484 - "GET /_app/version.json HTTP/1.1" 200
[open-webui] 2026-07-14T05:54:25.467154025Z 2026-07-14 05:54:25.467 | INFO     | open_webui.routers.openai:get_all_models:550 - get_all_models()
[open-webui] 2026-07-14T05:54:25.467236046Z 2026-07-14 05:54:25.467 | INFO     | open_webui.routers.ollama:get_all_models:366 - get_all_models()
[open-webui] 2026-07-14T05:54:25.696798255Z 2026-07-14 05:54:25.696 | INFO     | uvicorn.protocols.http.httptools_impl:send:483 - 192.168.178.3:34488 - "GET /api/models HTTP/1.1" 200
[open-webui] 2026-07-14T05:54:26.811140797Z 2026-07-14 05:54:26.810 | INFO     | open_webui.routers.openai:get_all_models:550 - get_all_models()
[open-webui] 2026-07-14T05:54:26.811280164Z 2026-07-14 05:54:26.811 | INFO     | open_webui.routers.ollama:get_all_models:366 - get_all_models()
[open-webui] 2026-07-14T05:54:26.998183190Z 2026-07-14 05:54:26.998 | INFO     | uvicorn.protocols.http.httptools_impl:send:483 - 192.168.178.3:34488 - "GET /api/models HTTP/1.1" 200
[open-webui] 2026-07-14T05:54:44.878612568Z 2026-07-14 05:54:44.878 | INFO     | uvicorn.protocols.http.httptools_impl:send:483 - 192.168.178.3:42368 - "GET /api/v1/chats/?page=1 HTTP/1.1" 200
[open-webui] 2026-07-14T05:54:44.882729496Z 2026-07-14 05:54:44.882 | INFO     | uvicorn.protocols.http.httptools_impl:send:483 - 192.168.178.3:42368 - "GET /api/v1/chats/?page=1 HTTP/1.1" 200
[open-webui] 2026-07-14T05:54:48.381855873Z 2026-07-14 05:54:48.381 | INFO     | uvicorn.protocols.http.httptools_impl:send:483 - 192.168.178.3:42368 - "GET /api/v1/chats/?page=1 HTTP/1.1" 200

Trotzdem lautet die Antwort auf die Frage: “Zeige mir alle Räume, die du in home assistant kennst.” folgendermaßen:
”Es tut mir leid, aber ich habe keine direkte Funktion zum Abrufen der verfügbaren Räume in Home Assistant. Bitte geben Sie mehr Kontext oder Details zu Ihren spezifischen Anforderungen an, damit ich besser helfen kann. Wenn Sie Zugriff auf die API von Home Assistant haben, können wir Daten abrufen und analysieren, um eine Liste der Räume zu generieren.”

Im Moment bin ich ein wenig ratlos, aber vielleicht hat ja jemand von euch noch eine Idee.

Edit: Die Lösung war - leider - banal. Ich hatte das Kontextfenster nicht groß genug aufgemacht ;-). Im Ernst: in Open-WebUI kannst/musst du beim einzelnen Modell die Kontextfenster-Größe anpassen. Sie ist im Standard auf 2048 eingestellt, und damit kommt man nicht weit. Ich habe sie bei den in Frage kommenden Modellen mal auf 32768 hochgeschraubt, jetzt klappt’s.

Nach ein paar Tests habe ich festgestellt, dass irgendetwas in dieser Konstellation nicht korrekt funktioniert. Innerhalb eines Chats verliert das Modell immer wieder den Kontext, so dass es quasi vergisst, was es in der vorigen Antwort selbst geschrieben hat.

Konkretes Beispiel: das Modell (qwen3.6:27b q4) hat eins meiner Dashboards analysiert. Darauf hat es fünf Vorschläge zur Optimierung gemacht, von denen die meisten ok waren. Darauf habe ich geschrieben: setze Punkt 2 um. Das hat bis zu dem Punkt funktioniert, wo das Modell einen neuen Template Sensor als Helfer angelegt hat (der zwar einen kleinen Bug hatte, den ich aber selbst schnell korrigieren konnte). Der Einbau in das Dashboard wurde aber nicht vorgenommen. Darauf schrieb ich: bau bitte diesen neuen Sensor in das Dashboard ein. Die Reaktion war: Welcher Sensor in welches Dashboard…

Ich habe es mit diversen Modellen auch kleineren - getestet: es passiert immer wieder. So ist kein vernünftiges Arbeiten möglich. Hat jemand von euch eine Idee, wo ich noch schauen könnte?

Ich antworte mir mal selbst: In der Tat war das Kontext-Fenster immer noch nicht groß genug, um bei komplexeren Aufgabenstellungen den Zusammenhang “im Gedächtnis” zu behalten. Nach einer erneuten Erweiterung (jetzt auf 90.000) und einer kleinen Anpassung der num_keep läuft es jetzt überraschend zufriedenstellend. Zwar nicht wirklich schnell, aber ich kann in der Zeit ja etwas anderes machen :sweat_smile: