using System; using System.Collections.Generic; using System.Linq; namespace Sozsoft.Mcp; /// /// Bir aracin bir sunucu kaydina gore acik olup olmadigina karar veren kural. Karar iki yerde /// kullanilir: arac listesi suzulurken ve arac cagrilirken. Listeyi suzmek tek basina bir /// yetki siniri degildir — istemci listede olmayan bir araci da cagirabilir. /// public static class McpToolPolicy { /// Istegin kiracisina dusen aktif bir sunucu kaydi var mi. /// Sunucu kaydinda veri yazma acik mi. /// Acik arac adlari; bos liste "yazma disindaki tumu acik" demektir. public static bool IsAllowed( bool hasServerRecord, bool allowWrite, IReadOnlyCollection allowedTools, string toolName) { if (McpToolNames.AlwaysAvailableTools.Contains(toolName, StringComparer.Ordinal)) { return true; } if (!hasServerRecord) { return false; } if (!allowWrite && McpToolNames.WriteTools.Contains(toolName, StringComparer.Ordinal)) { return false; } if (allowedTools.Count == 0) { return true; } return allowedTools.Contains(toolName, StringComparer.OrdinalIgnoreCase); } public static IReadOnlyList VisibleTools( bool hasServerRecord, bool allowWrite, IReadOnlyCollection allowedTools) => [.. McpToolNames.All.Where(name => IsAllowed(hasServerRecord, allowWrite, allowedTools, name))]; }