Add official read-only GitHub MCP
This commit is contained in:
@@ -0,0 +1,12 @@
|
||||
FROM ghcr.io/github/github-mcp-server@sha256:1817b57d43916532dc002bdc5f344d639bd9fb54a9148d42168458f7c3280567 AS github
|
||||
|
||||
FROM ghcr.io/supercorp-ai/supergateway@sha256:095acf4471e142553c1a5514aa5e480abbc5885d00549d4a3481cc70eac53889
|
||||
|
||||
# GitHub publishes a minimal image containing only the official Go binary.
|
||||
# Supergateway 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"]
|
||||
CMD ["--stdio", "/usr/local/bin/github-mcp-server stdio", "--outputTransport", "streamableHttp", "--stateful", "--sessionTimeout", "600000", "--streamableHttpPath", "/mcp", "--port", "8000", "--logLevel", "info"]
|
||||
+36
-4
@@ -14,6 +14,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-unraid-official` | `http://mike-ai-mcp-unraid-official:8000/mcp` | offizieller, read-only begrenzter Unraid-Zugang | Profil `unraid` |
|
||||
| `mcp-unraid-ssh` | `http://mike-ai-mcp-unraid-ssh:8000/mcp` | erweiterte Diagnose über einen erzwungenen SSH-Befehl | optional (`extended`) |
|
||||
|
||||
@@ -53,7 +54,8 @@ passenden Server wählen:
|
||||
|
||||
| Aufgabe | Werkzeugserver | Nicht zusätzlich verwenden |
|
||||
|---|---|---|
|
||||
| Aktuelle öffentliche Informationen, Quellen, GitHub/Hugging Face, Produkte | Web | HA, ARR, Unraid |
|
||||
| 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 |
|
||||
| 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 |
|
||||
@@ -98,6 +100,7 @@ Die lokale Installation benötigt die vorhandenen Secret-Dateien:
|
||||
/etc/mike-ai/homeassistant-admin-mcp.env
|
||||
/etc/mike-ai/arr-mcp.env
|
||||
/etc/mike-ai/navidrome-mcp.env
|
||||
/etc/mike-ai/github-mcp.env
|
||||
/etc/mike-ai/runraid/.env
|
||||
```
|
||||
|
||||
@@ -142,11 +145,40 @@ Metadaten. Das Last.fm Shared Secret ist dafür nicht erforderlich und wird
|
||||
nicht gespeichert. Die Integration greift damit weder auf das persönliche
|
||||
Last.fm-Profil noch auf dessen Hörverlauf zu.
|
||||
|
||||
## GitHub
|
||||
|
||||
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.
|
||||
|
||||
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.
|
||||
|
||||
Einrichtung:
|
||||
|
||||
```bash
|
||||
sudo install -m 0600 config/github-mcp.env.example /etc/mike-ai/github-mcp.env
|
||||
sudoedit /etc/mike-ai/github-mcp.env
|
||||
sudo platform/mcp/install-tools.sh
|
||||
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
|
||||
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.
|
||||
|
||||
## Client-Auswahl
|
||||
|
||||
Werkzeuge werden nicht pauschal an jedes Modell gehängt. Für Home-Assistant-
|
||||
Fragen wird HA ausgewählt, für Medien ARR, für Recherche Web und für die NAS
|
||||
Unraid. Mehrere Werkzeuge werden nur aktiviert, wenn die Aufgabe tatsächlich
|
||||
Große Fachwerkzeuge werden nicht pauschal an jedes Modell gehängt. Nur die
|
||||
kompakte Websuche und die vier 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.
|
||||
|
||||
Schreibende Aktionen bleiben hinter der jeweiligen serverseitigen Policy und
|
||||
|
||||
@@ -137,6 +137,29 @@ services:
|
||||
- /config:rw,noexec,nosuid,nodev,size=4m,mode=0700
|
||||
networks: [tools, egress]
|
||||
|
||||
mcp-github:
|
||||
<<: *tool-common
|
||||
build:
|
||||
context: .
|
||||
dockerfile: Dockerfile.github
|
||||
image: mike-ai/mcp-github:github-v1.10.1-supergateway-v3.4.3
|
||||
container_name: mike-ai-mcp-github
|
||||
profiles: [github]
|
||||
env_file:
|
||||
- ${GITHUB_MCP_ENV_FILE:-/etc/mike-ai/github-mcp.env}
|
||||
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_READ_ONLY: "1"
|
||||
networks: [tools, egress]
|
||||
healthcheck:
|
||||
test: ["CMD", "node", "-e", "const s=require('net').connect(8000,'127.0.0.1');s.setTimeout(2000);s.on('connect',()=>{s.end();process.exit(0)});s.on('error',()=>process.exit(1));s.on('timeout',()=>process.exit(1))"]
|
||||
interval: 30s
|
||||
timeout: 5s
|
||||
retries: 5
|
||||
start_period: 15s
|
||||
|
||||
mcp-unraid-official:
|
||||
<<: *tool-common
|
||||
image: debian:13-slim
|
||||
|
||||
@@ -33,6 +33,12 @@ if [[ -s /etc/mike-ai/navidrome-mcp.env ]]; then
|
||||
else
|
||||
echo "Navidrome bleibt aus: Secret-Datei fehlt."
|
||||
fi
|
||||
if [[ -s /etc/mike-ai/github-mcp.env ]] && \
|
||||
grep -Eq '^GITHUB_PERSONAL_ACCESS_TOKEN=.+$' /etc/mike-ai/github-mcp.env; then
|
||||
profiles+=(--profile github)
|
||||
else
|
||||
echo "GitHub bleibt aus: dedizierter Read-only-Token fehlt."
|
||||
fi
|
||||
if [[ -s /etc/mike-ai/runraid/.env && -x /usr/local/bin/runraid ]]; then
|
||||
profiles+=(--profile unraid)
|
||||
else
|
||||
|
||||
Reference in New Issue
Block a user