Fix MCP-Allowlist: exakte Server-Form mcp__<name>__* 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__*<name>*" parste damit zu einem
Server namens "*<name>*" und matchte NIE -> jeder ueber die MCP-Liste
eingetragene Server wurde headless still abgelehnt (Regression aus 5f7dec6).

- ClaudeCliService.cs: Allowlist-Glob mcp__*<name>* -> mcp__<name>__*
  (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__<name>__*.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
MelekiandClaude Opus 4.8 committed 2026-07-03 10:33:17 +02:00
1 parent 3ae94fb697
commit 9d21138e62
2 files changed
+9 -4

No files matched your search

+8 -3
View File
@@ -410,14 +410,19 @@ public class ClaudeCliService
tools.Add("mcp__gott-remote__memory_list");
}
// Benutzerdefinierte MCP-Server: alle Tools je Server erlauben.
// Glob mcp__*<name>* 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__<server>__<tool> geparst; ein '*' wirkt NUR im
// Tool-Teil, NICHT im Server-Teil). Ein Glob wie "mcp__*<name>*" würde zu einem
// Server namens "*<name>*" parsen und NIE matchen. Daher exakte Form
// "mcp__<name>__*" (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");