From 9d21138e623518970c549884d3e4f262e15f944c Mon Sep 17 00:00:00 2001 From: Meleki Date: Fri, 3 Jul 2026 10:33:17 +0200 Subject: [PATCH] Fix MCP-Allowlist: exakte Server-Form mcp____* statt nie-matchendem Glob Die Claude-CLI-Permission-Engine parst eine Allowlist-Regel via split("__") zu {serverName, toolName} und vergleicht den Servernamen per strenger Gleichheit (===); ein '*' wirkt ausschliesslich im Tool-Teil, nie im Server-Teil. Die generalisierte Form "mcp__**" parste damit zu einem Server namens "**" und matchte NIE -> jeder ueber die MCP-Liste eingetragene Server wurde headless still abgelehnt (Regression aus 5f7dec6). - ClaudeCliService.cs: Allowlist-Glob mcp__** -> mcp____* (exakter Server + Tool-Wildcard, dieselbe Form wie mcp__web-search-prime__*); Kommentar erklaert die strenge Server-Gleichheit. - index.html: UI-Hinweis korrigiert - Name muss exakt dem Tool-Praefix entsprechen (z.B. UnityMCP, nicht Unity); Freigabe als mcp____*. Co-Authored-By: Claude Opus 4.8 --- Services/ClaudeCliService.cs | 11 ++++++++--- wwwroot/index.html | 2 +- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/Services/ClaudeCliService.cs b/Services/ClaudeCliService.cs index c1f8b44..922e5c9 100644 --- a/Services/ClaudeCliService.cs +++ b/Services/ClaudeCliService.cs @@ -410,14 +410,19 @@ public class ClaudeCliService tools.Add("mcp__gott-remote__memory_list"); } // Benutzerdefinierte MCP-Server: alle Tools je Server erlauben. - // Glob mcp__** ist bewusst locker (fängt Casing-/Präfix-Varianten ab, - // z.B. Servername "unity" vs. tatsächlicher Tool-Präfix "UnityMCP"). + // WICHTIG: Die CLI-Permission-Engine vergleicht den SERVER-Namen per strenger + // Gleichheit (Regel wird als mcp____ geparst; ein '*' wirkt NUR im + // Tool-Teil, NICHT im Server-Teil). Ein Glob wie "mcp__**" würde zu einem + // Server namens "**" parsen und NIE matchen. Daher exakte Form + // "mcp____*" (exakter Server + alle Tools) – dieselbe Form wie web-search-prime. + // Konsequenz: Der eingetragene Name MUSS dem echten Tool-Präfix entsprechen + // (z.B. "UnityMCP", nicht "Unity"). if (mcpServerNames != null) { foreach (var mcpName in mcpServerNames) { if (!string.IsNullOrWhiteSpace(mcpName)) - tools.Add($"mcp__*{mcpName}*"); + tools.Add($"mcp__{mcpName}__*"); } } args.Add("--allowed-tools"); diff --git a/wwwroot/index.html b/wwwroot/index.html index de7e37e..c86aa30 100644 --- a/wwwroot/index.html +++ b/wwwroot/index.html @@ -175,7 +175,7 @@
- Pro Eintrag: Name, URL (http/sse) und optionaler Token. Tools werden headless als mcp__*<name>* freigegeben. + Pro Eintrag: Name, URL (http/sse) und optionaler Token. Der Name muss exakt dem Tool-Präfix entsprechen (z.B. UnityMCP, nicht Unity). Tools werden headless als mcp__<name>__* freigegeben.
Kein Bot zugewiesen