Add isolated Navidrome MCP service

This commit is contained in:
Mikei386
2026-08-23 15:06:32 +02:00
parent fea4a83582
commit 9ccb23cc5e
9 changed files with 108 additions and 3 deletions
+28
View File
@@ -13,6 +13,7 @@ Prompts heraus, verhindert den früher beobachteten Kontextverbrauch von über
| `mcp-web` | `http://mike-ai-mcp-web:8000/mcp` | kompakte Websuche und Quellenvergleich | an |
| `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-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`) |
@@ -55,6 +56,7 @@ passenden Server wählen:
| Aktuelle öffentliche Informationen, Quellen, GitHub/Hugging Face, Produkte | Web | HA, ARR, Unraid |
| 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 |
| Lesende NAS-, Docker-, Array-, Netzwerk- und Logdiagnose | Unraid (Systemdiagnose) | MUA |
| Ausdrücklich benötigte MUA-Verwaltungsaktion | MUA | Unraid-Diagnose nicht parallel |
@@ -95,6 +97,7 @@ Die lokale Installation benötigt die vorhandenen Secret-Dateien:
```text
/etc/mike-ai/homeassistant-admin-mcp.env
/etc/mike-ai/arr-mcp.env
/etc/mike-ai/navidrome-mcp.env
/etc/mike-ai/runraid/.env
```
@@ -106,6 +109,31 @@ TinySearch speichert sein lokales Embedding-Modell in einem Docker-Volume.
Nach einer Erstinstallation wird das Modell einmalig im Container mit
`tinysearch setup` geladen. Das Volume bleibt bei Containerupdates erhalten.
## Navidrome
Der Navidrome-MCP basiert auf `Blakeem/Navidrome-MCP` 2.2.0; das amd64-Image
ist per OCI-Digest festgeschrieben. Der Container veröffentlicht keinen
Host-Port, besitzt keinen Dateizugriff auf die Musikbibliothek und enthält
bewusst kein `mpv`. Er kann daher nicht auf Athena selbst Musik wiedergeben.
Navidrome sollte einen eigenen normalen Benutzer `mcp` erhalten. Dessen
Zugangsdaten liegen ausschließlich in der root-only Datei
`/etc/mike-ai/navidrome-mcp.env`; die Vorlage steht unter
`config/navidrome-mcp.env.example`. Anschließend genügt:
```bash
sudo install -m 0600 config/navidrome-mcp.env.example /etc/mike-ai/navidrome-mcp.env
sudoedit /etc/mike-ai/navidrome-mcp.env
sudo platform/mcp/install-tools.sh
sudo platform/openwebui/install-filters.sh
```
Der Upstream-Server stellt ohne Playback noch immer über 40 Werkzeuge bereit.
Darum wird Navidrome **nicht** als Standardwerkzeug an jedes Modellprofil
gehängt. Es wird in OpenWebUI nur für konkrete Musikaufgaben ausgewählt und
danach wieder ausgeschaltet. Schreibende Funktionen wie Playlist-Änderungen,
Favoriten und Bewertungen wirken unmittelbar im Konto des MCP-Benutzers.
## Client-Auswahl
Werkzeuge werden nicht pauschal an jedes Modell gehängt. Für Home-Assistant-
+23
View File
@@ -111,6 +111,29 @@ services:
- ${ARR_RADARR_PATCH:-./patches/mcp_radarr.py}:/usr/local/lib/python3.13/site-packages/arr_mcp/mcp/mcp_radarr.py:ro
networks: [tools, egress]
mcp-navidrome:
<<: *tool-common
# Version and amd64 manifest are pinned. The image contains no mpv, so it
# cannot play audio on the headless AI host and does not expose playback
# controls. It talks to Navidrome only through its authenticated API.
image: ghcr.io/blakeem/navidrome-mcp:2.2.0@sha256:047f911a5a8f7cc8f185bb4d6e7ca6c435542edefff4694a00c2f718ab0ee7f5
container_name: mike-ai-mcp-navidrome
profiles: [navidrome]
env_file:
- ${NAVIDROME_MCP_ENV_FILE:-/etc/mike-ai/navidrome-mcp.env}
environment:
MCP_TRANSPORT: http
MCP_HTTP_EXPOSE: "true"
MCP_HTTP_PORT: "3000"
# The endpoint is not published on the host. Host filtering still makes
# accidental access from any other Docker name fail closed.
MCP_HTTP_ALLOWED_HOSTS: "mike-ai-mcp-navidrome:3000,mike-ai-mcp-navidrome"
WEBUI_ENABLED: "false"
tmpfs:
- /tmp:rw,noexec,nosuid,nodev,size=64m
- /config:rw,noexec,nosuid,nodev,size=4m,mode=0700
networks: [tools, egress]
mcp-unraid-official:
<<: *tool-common
image: debian:13-slim
+5
View File
@@ -28,6 +28,11 @@ if [[ -s /etc/mike-ai/arr-mcp.env ]]; then
else
echo "ARR bleibt aus: Secret-Datei fehlt."
fi
if [[ -s /etc/mike-ai/navidrome-mcp.env ]]; then
profiles+=(--profile navidrome)
else
echo "Navidrome bleibt aus: Secret-Datei fehlt."
fi
if [[ -s /etc/mike-ai/runraid/.env && -x /usr/local/bin/runraid ]]; then
profiles+=(--profile unraid)
else