using System.Collections.Generic; using System.Linq; using Sozsoft.Platform; namespace Sozsoft.Mcp; /// /// /mcp ucunda yayinlanan arac adlari. Ayni degerler MCP Servers ekranindaki /// AllowedTools alaninin secenek listesini besler; buraya bir arac eklenirse ekranin /// statik lookup listesi de guncellenir. /// public static class McpToolNames { public const string ServerInfo = "server_info"; public const string ListLists = "list_lists"; public const string DescribeList = "describe_list"; public const string SearchSchema = "search_schema"; public const string QueryList = "query_list"; public const string RunSelect = "run_select"; public const string ListQueries = "list_queries"; public const string RunQuery = "run_query"; public const string InsertRow = "insert_row"; public const string UpdateRow = "update_row"; public const string DeleteRow = "delete_row"; public const string GetDevGuide = "get_dev_guide"; public const string CreateTable = "create_table"; public const string SaveSqlObject = "save_sql_object"; public const string GenerateCrudEndpoints = "generate_crud_endpoints"; public const string ListWizards = "list_wizards"; public const string GetWizard = "get_wizard"; public const string DeployWizard = "deploy_wizard"; public const string DeleteWizard = "delete_wizard"; public const string VerifyWizard = "verify_wizard"; public const string StartDevRequest = "start_dev_request"; public const string GetDevRequest = "get_dev_request"; public const string SaveDevRequestAnalysis = "save_dev_request_analysis"; public const string AppendDevRequestNote = "append_dev_request_note"; public const string AddDevRequestSubTasks = "add_dev_request_subtasks"; public const string ListComponents = "list_components"; public const string GetComponent = "get_component"; public const string SaveComponent = "save_component"; public const string DeleteComponent = "delete_component"; public const string ListReportTemplates = "list_report_templates"; public const string GetReportTemplate = "get_report_template"; public const string SaveReportCategory = "save_report_category"; public const string SaveReportTemplate = "save_report_template"; public const string DeleteReportTemplate = "delete_report_template"; public const string GetModuleDoc = "get_module_doc"; public const string SaveModuleDoc = "save_module_doc"; /// /// Ekran, bilesen ve rapor sablonu gelistirme araclari; kiraci baglaminda hicbiri acilmaz. Okuyanlar /// McpServers.Invoke ile, degistirenler McpServers.Write ile acilir /// (). /// public static readonly string[] DevelopTools = [ GetDevGuide, CreateTable, SaveSqlObject, GenerateCrudEndpoints, ListWizards, GetWizard, DeployWizard, DeleteWizard, VerifyWizard, StartDevRequest, GetDevRequest, SaveDevRequestAnalysis, AppendDevRequestNote, AddDevRequestSubTasks, ListComponents, GetComponent, SaveComponent, DeleteComponent, ListReportTemplates, GetReportTemplate, SaveReportCategory, SaveReportTemplate, DeleteReportTemplate, GetModuleDoc, SaveModuleDoc ]; /// /// Sunucu kaydi olmasa da acik kalan araclar. Istemcinin baglantisinin neden bos /// gorundugunu anlayabilmesi icin gereklidir. /// public static readonly string[] AlwaysAvailableTools = [ServerInfo]; /// /// Kiraci kullanicisinin gorebildigi araclarin tamami: veri okuma ve ekranin /// insert/update/delete sozlesmesinden gecen satir yazma. Yazilim gelistirme araclari /// () kiraciya acilmaz. AllowedTools bu kumeyi yalnizca /// daraltabilir, genisletemez. ve disarida /// kalir: procedure ve Custom Endpoint ekran yetkisinden gecmeden veri yazabilir. /// ise tek SELECT disindaki her ifadeyi reddettigi icin okumadir. /// public static readonly string[] TenantTools = [ ServerInfo, ListLists, DescribeList, SearchSchema, QueryList, RunSelect, InsertRow, UpdateRow, DeleteRow ]; /// /// McpServers.Invoke (/mcp ucunun kendisinde aranir) disinda istenen yetki. Iki /// turdur: MCP uzerinden her degisiklik McpServers.Write ister; ham SQL liste /// yetkilerini astigi icin uygulamadaki SQL Query Manager yetkisini ister. Listede olmayan /// araclar okumadir ve arkadaki servisin kendi yetkisiyle suzulur. MCP yetki vermez: /// Wizard, Custom Components ve ekran C/U/D yetkileri ayrica aranir. /// public static readonly IReadOnlyDictionary RequiredPermissions = new Dictionary { [RunSelect] = PlatformConsts.AppCodes.SqlQueryManagers.Default, [InsertRow] = PlatformConsts.AppCodes.DeveloperKits.McpServers.Write, [UpdateRow] = PlatformConsts.AppCodes.DeveloperKits.McpServers.Write, [DeleteRow] = PlatformConsts.AppCodes.DeveloperKits.McpServers.Write, [CreateTable] = PlatformConsts.AppCodes.DeveloperKits.McpServers.Write, [SaveSqlObject] = PlatformConsts.AppCodes.DeveloperKits.McpServers.Write, [GenerateCrudEndpoints] = PlatformConsts.AppCodes.DeveloperKits.McpServers.Write, [DeployWizard] = PlatformConsts.AppCodes.DeveloperKits.McpServers.Write, [DeleteWizard] = PlatformConsts.AppCodes.DeveloperKits.McpServers.Write, [StartDevRequest] = PlatformConsts.AppCodes.DeveloperKits.McpServers.Write, [SaveDevRequestAnalysis] = PlatformConsts.AppCodes.DeveloperKits.McpServers.Write, [AppendDevRequestNote] = PlatformConsts.AppCodes.DeveloperKits.McpServers.Write, [AddDevRequestSubTasks] = PlatformConsts.AppCodes.DeveloperKits.McpServers.Write, [SaveComponent] = PlatformConsts.AppCodes.DeveloperKits.McpServers.Write, [DeleteComponent] = PlatformConsts.AppCodes.DeveloperKits.McpServers.Write, [SaveReportCategory] = PlatformConsts.AppCodes.DeveloperKits.McpServers.Write, [SaveReportTemplate] = PlatformConsts.AppCodes.DeveloperKits.McpServers.Write, [DeleteReportTemplate] = PlatformConsts.AppCodes.DeveloperKits.McpServers.Write, [SaveModuleDoc] = PlatformConsts.AppCodes.DeveloperKits.McpServers.Write, }; /// /// Arkadaki servisin [Authorize] attribute'u ile istedigi yetkiler. Attribute ile /// reddedilen cagri eksik yetkinin adini tasimaz; kullaniciya hangi yetkinin eksik oldugunu /// soyleyebilmek icin burada tutulur. Kodda adiyla istenen yetkiler (ekran C/R/U/D, /// Wizards.Create/Update, Custom Components, App.DevRequests.Update) reddi zaten /// adiyla bildirdigi icin buraya yazilmaz. /// public static readonly IReadOnlyDictionary ServicePermissions = new Dictionary { [ListWizards] = [PlatformConsts.AppCodes.Listforms.Wizard], [GetWizard] = [PlatformConsts.AppCodes.Listforms.Wizard], [VerifyWizard] = [PlatformConsts.AppCodes.Listforms.Wizard], [DeployWizard] = [PlatformConsts.AppCodes.Listforms.Wizard], [DeleteWizard] = [PlatformConsts.AppCodes.Listforms.Wizard, PlatformConsts.AppCodes.Listforms.Wizards.Delete, PlatformConsts.AppCodes.SqlQueryManagers.Default], [GetModuleDoc] = [PlatformConsts.AppCodes.Listforms.Wizard], [SaveModuleDoc] = [PlatformConsts.AppCodes.Listforms.Wizard, PlatformConsts.AppCodes.Listforms.Wizards.Update], }; /// /// Bir aracin cagrisinda aranabilecek, adi bilinen yetkiler: uc kapisi (Invoke), MCP kapisi /// () ve arkadaki servis (). /// public static IEnumerable KnownPermissionsOf(string? toolName) { yield return PlatformConsts.AppCodes.DeveloperKits.McpServers.Invoke; if (toolName is null) { yield break; } if (RequiredPermissions.TryGetValue(toolName, out var required)) { yield return required; } if (ServicePermissions.TryGetValue(toolName, out var service)) { foreach (var permission in service) { yield return permission; } } } /// Yayinlanan tum araclar, arac listesindeki siralarina gore. public static readonly string[] All = [ ServerInfo, ListLists, DescribeList, SearchSchema, QueryList, RunSelect, ListQueries, RunQuery, InsertRow, UpdateRow, DeleteRow, .. DevelopTools ]; /// /// AllowedTools alaninda secilebilen araclar. Her zaman acik olanlar secenek /// olarak sunulmaz; onlari kapatmak mumkun degildir. /// public static IEnumerable SelectableTools => All.Where(name => !AlwaysAvailableTools.Contains(name)); }