Use OpenWebUI-compatible GitHub MCP transport
This commit is contained in:
1 parent
933d2a6e7d
commit
2347073f3f
5 files changed
+37
-27
No files matched your search
@@ -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"]
|
||||
+16
-13
@@ -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:
|
||||
|
||||
|
||||
@@ -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:
|
||||
|
||||
Reference in new issue
Block a user