using System.Collections.Generic; using System.ComponentModel; using System.Threading.Tasks; using ModelContextProtocol.Server; using Sozsoft.Mcp.Dtos; namespace Sozsoft.Mcp.Tools; /// /// Veri yazma araclari. Yazma bir ListForm ekraninin sozlesmesinden gecer; ekran yetkisi ve /// tenant filtresi aynen uygulanir. Sunucu kaydinda AllowWrite kapaliysa bu araclar /// arac listesinde hic gorunmez. /// [McpServerToolType] public sealed class McpDataTools(IMcpDataAppService dataAppService) { [McpServerTool(Name = McpToolNames.InsertRow, Destructive = false, Idempotent = false)] [Description("Bir listeye yeni kayit ekler. Alan adlari describe_list cikisindaki field degerleridir.")] public async Task InsertRowAsync( [Description("Kaydin eklenecegi listenin kodu.")] string listFormCode, [Description("Alan adi -> deger eslemesi.")] Dictionary values) => await dataAppService.InsertRowAsync(new McpRowRequestDto { ListFormCode = listFormCode, Values = values ?? [] }); [McpServerTool(Name = McpToolNames.UpdateRow, Destructive = true, Idempotent = true)] [Description("Bir listedeki kaydi anahtar degerine gore gunceller. Yalnizca verilen alanlar yazilir.")] public async Task UpdateRowAsync( [Description("Kaydin bulundugu listenin kodu.")] string listFormCode, [Description("Guncellenecek kaydin anahtar alan degeri; describe_list cikisindaki keyFieldName alanina karsilik gelir.")] List keys, [Description("Alan adi -> yeni deger eslemesi.")] Dictionary values) => await dataAppService.UpdateRowAsync(new McpRowRequestDto { ListFormCode = listFormCode, Keys = keys ?? [], Values = values ?? [] }); [McpServerTool(Name = McpToolNames.DeleteRow, Destructive = true, Idempotent = true)] [Description("Bir listedeki kaydi anahtar degerine gore siler. Ekranin kendi silme komutu kullanilir; soft delete tasiyan tablolarda kayit pasife cekilir.")] public async Task DeleteRowAsync( [Description("Kaydin bulundugu listenin kodu.")] string listFormCode, [Description("Silinecek kaydin anahtar alan degeri.")] List keys) => await dataAppService.DeleteRowAsync(new McpRowRequestDto { ListFormCode = listFormCode, Keys = keys ?? [] }); }