From e5dffbc2ba0a86ec07562ede71e55e384447b0a0 Mon Sep 17 00:00:00 2001 From: Mikei386 <44135113+Mikei386@users.noreply.github.com> Date: Sun, 23 Aug 2026 15:29:46 +0200 Subject: [PATCH] Fix Navidrome schemas for llama.cpp --- platform/mcp/Dockerfile.navidrome | 8 ++++++++ platform/mcp/README.md | 4 +++- platform/mcp/compose.yaml | 5 ++++- 3 files changed, 15 insertions(+), 2 deletions(-) create mode 100644 platform/mcp/Dockerfile.navidrome diff --git a/platform/mcp/Dockerfile.navidrome b/platform/mcp/Dockerfile.navidrome new file mode 100644 index 0000000..9eebe45 --- /dev/null +++ b/platform/mcp/Dockerfile.navidrome @@ -0,0 +1,8 @@ +FROM ghcr.io/blakeem/navidrome-mcp:2.2.0@sha256:047f911a5a8f7cc8f185bb4d6e7ca6c435542edefff4694a00c2f718ab0ee7f5 + +# llama.cpp's tool-schema converter requires every JSON-Schema regex to be +# fully anchored. Upstream 2.2.0 omits the trailing `$` on exactly two radio +# URL fields. Fail the build if upstream changes instead of patching blindly. +USER root +RUN node -e 'const fs=require("node:fs"); const p="/app/dist/tools/handlers/radio-handlers.js"; let s=fs.readFileSync(p,"utf8"); const a="pattern: '\''^https?://.+'\''"; const b="pattern: '\''^https?://.+$'\''"; const n=s.split(a).length-1; if(n!==2) throw new Error(`expected 2 schema patterns, found ${n}`); fs.writeFileSync(p,s.split(a).join(b));' +USER node diff --git a/platform/mcp/README.md b/platform/mcp/README.md index 14ab1d9..13c3ad3 100644 --- a/platform/mcp/README.md +++ b/platform/mcp/README.md @@ -112,7 +112,9 @@ Nach einer Erstinstallation wird das Modell einmalig im Container mit ## 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 +ist per OCI-Digest festgeschrieben. Ein kleiner Build-Patch ergänzt bei zwei +Internetradio-URL-Schemas das von llama.cpp verlangte abschließende `$`; +Verhalten und API-Aufrufe bleiben unverändert. 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. diff --git a/platform/mcp/compose.yaml b/platform/mcp/compose.yaml index ca9ebc9..653e314 100644 --- a/platform/mcp/compose.yaml +++ b/platform/mcp/compose.yaml @@ -116,7 +116,10 @@ services: # 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 + build: + context: . + dockerfile: Dockerfile.navidrome + image: mike-ai/mcp-navidrome:2.2.0-schemafix1 container_name: mike-ai-mcp-navidrome profiles: [navidrome] env_file: