From 2347073f3fd156076eed736ee27187452fdc895b Mon Sep 17 00:00:00 2001 From: Mikei386 <44135113+Mikei386@users.noreply.github.com> Date: Sun, 23 Aug 2026 18:11:12 +0200 Subject: [PATCH] Use OpenWebUI-compatible GitHub MCP transport --- docs/CURRENT_REFERENCE.md | 5 +++-- docs/RECOVERY_REQUIREMENTS.md | 6 +++--- platform/mcp/Dockerfile.github | 22 ++++++++++++++-------- platform/mcp/README.md | 29 ++++++++++++++++------------- platform/mcp/compose.yaml | 2 +- 5 files changed, 37 insertions(+), 27 deletions(-) diff --git a/docs/CURRENT_REFERENCE.md b/docs/CURRENT_REFERENCE.md index 1db2e60..68c62d0 100644 --- a/docs/CURRENT_REFERENCE.md +++ b/docs/CURRENT_REFERENCE.md @@ -169,8 +169,9 @@ Aktuell existieren funktionale Adapter für: Der GitHub-Container läuft produktiv. Token-Datei, interner Streamable-HTTP-Handshake, fehlende Host-Portfreigabe und exakt vier read-only Werkzeuge wurden am 23. August 2026 verifiziert. -Die Transportbrücke läuft stateless mit MCP `2025-11-25`, damit Open WebUI -keine bereits abgelaufenen serverseitigen Sitzungen wiederverwendet. +Die Transportbrücke verwendet den OpenWebUI-kompatiblen `mcp-proxy` 0.12.0 im +stateless Betrieb. Supergateway wurde nach reproduzierbaren HTTP-400-Fehlern +bei `notifications/initialized` aus diesem Pfad entfernt. Der Platform Context MCP läuft ohne Docker-Socket, Shell, Egress oder Secrets. Ein root-eigener Minutentimer erzeugt nur einen begrenzten Laufzeitsnapshot. diff --git a/docs/RECOVERY_REQUIREMENTS.md b/docs/RECOVERY_REQUIREMENTS.md index 2e0a92c..b6de7cf 100644 --- a/docs/RECOVERY_REQUIREMENTS.md +++ b/docs/RECOVERY_REQUIREMENTS.md @@ -47,9 +47,9 @@ Im Repository gesichert sind inzwischen: - getrennte MCP-Container und internes Netz - Web-MCP-Fassade sowie gepinnte TinySearch-/SearXNG-Images - ARR-MCP 1.0.1 und der aktuell eingesetzte kompakte Sonarr-Patch -- offizieller GitHub-MCP 1.10.1 mit Supergateway 3.4.3, beide per Digest gepinnt -- GitHub-Supergateway stateless mit MCP-Protokoll `2025-11-25`; keine - serverseitig ablaufenden Sitzungen für Open WebUI +- offizieller GitHub-MCP 1.10.1 hinter `mcp-proxy` 0.12.0; GitHub- und + Python-Basisimage per Digest gepinnt +- GitHub-Transport stateless und mit OpenWebUIs Python-MCP-Client geprüft - Home-Assistant-Relay ohne eingebettetes Token - Startlogik und Health-Checks diff --git a/platform/mcp/Dockerfile.github b/platform/mcp/Dockerfile.github index a043728..5c77879 100644 --- a/platform/mcp/Dockerfile.github +++ b/platform/mcp/Dockerfile.github @@ -1,15 +1,21 @@ FROM ghcr.io/github/github-mcp-server@sha256:1817b57d43916532dc002bdc5f344d639bd9fb54a9148d42168458f7c3280567 AS github -FROM ghcr.io/supercorp-ai/supergateway@sha256:095acf4471e142553c1a5514aa5e480abbc5885d00549d4a3481cc70eac53889 +FROM python:3.13-slim@sha256:ffb752e139c0a19692a43af8d8523b274222dd68eebad5d583b45c2201c6e30a + +ARG MCP_PROXY_VERSION=0.12.0 +RUN pip install --no-cache-dir "mcp-proxy==${MCP_PROXY_VERSION}" "mcp==1.29.0" # GitHub publishes a minimal image containing only the official Go binary. -# Supergateway contributes transport conversion only; GitHub API behavior and +# mcp-proxy contributes transport conversion only; GitHub API behavior and # every exposed tool remain implemented by GitHub's official MCP server. COPY --from=github /server/github-mcp-server /usr/local/bin/github-mcp-server -USER 65532:65532 -ENTRYPOINT ["supergateway"] -# Open WebUI can retain an MCP session longer than a stateful gateway keeps it -# alive. A later call then fails although both the token and server are healthy. -# Stateless mode provides a fresh auto-initialized stdio server per request. -CMD ["--stdio", "/usr/local/bin/github-mcp-server stdio", "--outputTransport", "streamableHttp", "--protocolVersion", "2025-11-25", "--streamableHttpPath", "/mcp", "--port", "8000", "--logLevel", "info"] +RUN useradd --system --uid 10001 --create-home --home-dir /app mcp +USER 10001:10001 +WORKDIR /app +EXPOSE 8000 +# This is the same OpenWebUI-compatible stateless transport used by Athena's +# other Python/stdio MCP adapters. The official GitHub binary remains the only +# component implementing GitHub operations. +ENTRYPOINT ["mcp-proxy", "--host", "0.0.0.0", "--port", "8000", "--stateless", "--"] +CMD ["/usr/local/bin/github-mcp-server", "stdio", "--read-only", "--tools", "search_repositories,get_repository_tree,get_file_contents,search_code"] diff --git a/platform/mcp/README.md b/platform/mcp/README.md index f120369..e649e76 100644 --- a/platform/mcp/README.md +++ b/platform/mcp/README.md @@ -156,22 +156,25 @@ Last.fm-Profil noch auf dessen Hörverlauf zu. Der GitHub-Container verwendet unverändert den offiziellen `github/github-mcp-server` 1.10.1. Da dessen lokaler Container stdio spricht, -wandelt Supergateway 3.4.3 ausschließlich den Transport in Streamable HTTP für -Open WebUI und weitere interne Clients um. Beide Images sind per OCI-Digest -festgeschrieben; die Brücke implementiert keine GitHub-Operationen. +wandelt `mcp-proxy` 0.12.0 ausschließlich den Transport in Streamable HTTP für +Open WebUI und weitere interne Clients um. Basisimage und GitHub-Image sind per +OCI-Digest festgeschrieben; die Brücke implementiert keine GitHub-Operationen. -Supergateway läuft hier bewusst **stateless** mit MCP-Protokoll -`2025-11-25`. Eine frühere stateful Konfiguration konnte nach dem Ablauf einer -serverseitigen Sitzung noch von Open WebUI referenziert werden; der nächste -Aufruf endete dann trotz gesundem Container mit -`Failed to connect to MCP server 'github-local'`. Stateless erzeugt je Anfrage -eine frische, automatisch initialisierte stdio-Sitzung und vermeidet diesen -Lebenszyklusfehler. +`mcp-proxy` läuft bewusst **stateless**. Die zuerst getestete Supergateway- +Brücke war mit Open WebUIs Python-MCP-Client nicht zuverlässig kompatibel: Im +stateful Betrieb konnten Sitzungen ablaufen; im stateless Betrieb beantwortete +sie die reguläre `notifications/initialized`-Nachricht mit HTTP 400. Beides +führte trotz gesundem GitHub-Server und gültigem Token zu +`Failed to connect to MCP server 'github-local'`. Der jetzt verwendete Proxy +ist derselbe Transport, der sich bereits beim Athena Platform Context MCP +bewährt hat. Dem Modell werden ausschließlich `search_repositories`, `get_repository_tree`, -`get_file_contents` und `search_code` angeboten. `GITHUB_READ_ONLY=1` erzwingt -zusätzlich serverseitig den Nur-Lesen-Modus. Der Container veröffentlicht keinen -Host-Port und speichert den Token nicht in Open WebUI. +`get_file_contents` und `search_code` angeboten. 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 +veröffentlicht keinen Host-Port und speichert den Token nicht in Open WebUI. Einrichtung: diff --git a/platform/mcp/compose.yaml b/platform/mcp/compose.yaml index 1adbfd1..c18c382 100644 --- a/platform/mcp/compose.yaml +++ b/platform/mcp/compose.yaml @@ -171,7 +171,7 @@ services: build: context: . dockerfile: Dockerfile.github - image: mike-ai/mcp-github:github-v1.10.1-supergateway-v3.4.3 + image: mike-ai/mcp-github:github-v1.10.1-mcp-proxy-v0.12.0 container_name: mike-ai-mcp-github profiles: [github] env_file: