60 lines
3.1 KiB
C#
60 lines
3.1 KiB
C#
using System.Collections.Generic;
|
|
using System.ComponentModel;
|
|
using System.Threading.Tasks;
|
|
using ModelContextProtocol.Server;
|
|
using Sozsoft.Mcp.Dtos;
|
|
|
|
namespace Sozsoft.Mcp.Tools;
|
|
|
|
/// <summary>
|
|
/// Sema kesfi araclari. Tablo ve sutun bilgisi canli katalogdan degil, platformun ekran
|
|
/// tanimlarindan uretilen veri sozlugunden gelir; boylece modelin gordugu adlar kullanicinin
|
|
/// ekranda gordugu adlarla ayni olur.
|
|
/// </summary>
|
|
[McpServerToolType]
|
|
public sealed class McpSchemaTools(IMcpSchemaAppService schemaAppService)
|
|
{
|
|
[McpServerTool(Name = McpToolNames.ServerInfo, ReadOnly = true)]
|
|
[Description("Bu baglantinin kiracisini, acik araclari ve veri sozlugunun tazelik bilgisini dondurur. Baska bir arac beklendigi gibi calismiyorsa once bunu cagir.")]
|
|
public async Task<McpServerInfoResult> ServerInfoAsync()
|
|
{
|
|
var config = await schemaAppService.GetServerConfigAsync();
|
|
var schema = await schemaAppService.GetSchemaInfoAsync();
|
|
var availableTools = await schemaAppService.GetAvailableToolsAsync();
|
|
|
|
return new McpServerInfoResult(config, schema, availableTools);
|
|
}
|
|
|
|
[McpServerTool(Name = McpToolNames.ListLists, ReadOnly = true)]
|
|
[Description("Kiracinin listelerini (ekranlarini) ad, baslik, aciklama ve arkasindaki tablo ile dondurur. Arama metni verilmezse tumu doner.")]
|
|
public async Task<List<McpListSummaryDto>> ListListsAsync(
|
|
[Description("Liste adi, basligi, aciklamasi ya da tablo adi icinde aranacak metin. Bos birakilabilir.")]
|
|
string? search = null,
|
|
[Description("Donecek en fazla liste sayisi. Varsayilan 200.")]
|
|
int maxResults = 200)
|
|
=> await schemaAppService.GetListsAsync(search, maxResults);
|
|
|
|
[McpServerTool(Name = McpToolNames.DescribeList, ReadOnly = true)]
|
|
[Description("Tek bir listenin sutunlarini dondurur: alan adi, kullaniciya gorunen basligi, SQL tipi, lookup iliskisi ve sutunun hassas olup olmadigi.")]
|
|
public async Task<McpListDetailDto?> DescribeListAsync(
|
|
[Description("Listenin kodu; list_lists cikisindaki listFormCode degeri.")]
|
|
string listFormCode)
|
|
=> await schemaAppService.GetListAsync(listFormCode);
|
|
|
|
[McpServerTool(Name = McpToolNames.SearchSchema, ReadOnly = true)]
|
|
[Description("Liste ve sutun adlari ile basliklari uzerinde aksan ve buyuk/kucuk harf duyarsiz arama yapar; hangi listenin hangi sutununun arandigini bulmak icin kullanilir.")]
|
|
public async Task<List<McpSchemaMatchDto>> SearchSchemaAsync(
|
|
[Description("Aranacak metin. Turkce karakterler ve aksanlar onemsizdir.")]
|
|
string term,
|
|
[Description("Donecek en fazla eslesme sayisi. Varsayilan 50.")]
|
|
int maxResults = 50)
|
|
=> await schemaAppService.SearchAsync(term, maxResults);
|
|
}
|
|
|
|
/// <param name="Server">Istegin kiracisina dusen sunucu kaydi; yoksa null.</param>
|
|
/// <param name="Schema">Veri sozlugunun tazelik bilgisi.</param>
|
|
/// <param name="AvailableTools">Bu baglantida cagrilabilen araclar.</param>
|
|
public sealed record McpServerInfoResult(
|
|
McpServerConfigDto? Server,
|
|
McpSchemaInfoDto Schema,
|
|
IReadOnlyList<string> AvailableTools);
|