sozsoft-platform/api/modules/Sozsoft.Mcp/Sozsoft.Mcp.HttpApi/Tools/McpSchemaTools.cs

69 lines
3.8 KiB
C#
Raw Permalink Normal View History

2026-09-17 09:01:14 +00:00
using System.Collections.Generic;
using System.ComponentModel;
using System.Threading.Tasks;
2026-10-10 22:03:36 +00:00
using ModelContextProtocol.Protocol;
2026-09-17 09:01:14 +00:00
using ModelContextProtocol.Server;
using Sozsoft.Mcp.Dtos;
using Volo.Abp.MultiTenancy;
2026-09-17 09:01:14 +00:00
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, ICurrentTenant currentTenant)
2026-09-17 09:01:14 +00:00
{
[McpServerTool(Name = McpToolNames.ServerInfo, ReadOnly = true)]
[Description("Bu baglantinin baglamini (scope: host ya da tenant; kiraci adi server.tenantName), acik araclari ve veri sozlugunun tazelik bilgisini dondurur. Baska bir arac beklendigi gibi calismiyorsa once bunu cagir.")]
2026-09-17 09:01:14 +00:00
public async Task<McpServerInfoResult> ServerInfoAsync()
{
var config = await schemaAppService.GetServerConfigAsync();
var schema = await schemaAppService.GetSchemaInfoAsync();
var availableTools = await schemaAppService.GetAvailableToolsAsync();
return new McpServerInfoResult(
currentTenant.IsAvailable ? McpConsts.Scopes.Tenant : McpConsts.Scopes.Host,
config,
schema,
availableTools);
2026-09-17 09:01:14 +00:00
}
[McpServerTool(Name = McpToolNames.ListLists, ReadOnly = true)]
2026-10-07 18:46:45 +00:00
[Description("Kiracinin listelerini (ekranlarini) ad, baslik, aciklama ve arkasindaki tablo ile dondurur. Arama metni verilmezse tumu doner. Gelistiriciye (host, Wizard yetkisi) DB Migrate bekleyen wizard ekranlari (sourceKind pending) ve yalnizca seed scripti olan tablolar (pendingTable) da doner; lookup, widget, view ve Query SQL'ini yazarken kolon adlarini describe_list ile buradan al, tahmin etme.")]
2026-10-10 22:03:36 +00:00
public async Task<CallToolResult> ListListsAsync(
2026-09-17 09:01:14 +00:00
[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)
2026-10-10 22:03:36 +00:00
=> McpToolResult.From(await schemaAppService.GetListsAsync(search, maxResults));
2026-09-17 09:01:14 +00:00
[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.")]
2026-10-10 22:03:36 +00:00
public async Task<CallToolResult> DescribeListAsync(
2026-09-17 09:01:14 +00:00
[Description("Listenin kodu; list_lists cikisindaki listFormCode degeri.")]
string listFormCode)
2026-10-10 22:03:36 +00:00
=> McpToolResult.From(await schemaAppService.GetListAsync(listFormCode));
2026-09-17 09:01:14 +00:00
[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.")]
2026-10-10 22:03:36 +00:00
public async Task<CallToolResult> SearchSchemaAsync(
2026-09-17 09:01:14 +00:00
[Description("Aranacak metin. Turkce karakterler ve aksanlar onemsizdir.")]
string term,
[Description("Donecek en fazla eslesme sayisi. Varsayilan 50.")]
int maxResults = 50)
2026-10-10 22:03:36 +00:00
=> McpToolResult.From(await schemaAppService.SearchAsync(term, maxResults));
2026-09-17 09:01:14 +00:00
}
/// <param name="Scope">Istegin baglami: <c>host</c> ya da <c>tenant</c>. Gelistirme araclari yalnizca host'ta aciktir.</param>
2026-09-17 09:01:14 +00:00
/// <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(
string Scope,
2026-09-17 09:01:14 +00:00
McpServerConfigDto? Server,
McpSchemaInfoDto Schema,
IReadOnlyList<string> AvailableTools);