namespace Sozsoft.Mcp;
/// MCP modulunun sabit sozlesme degerleri.
public static class McpConsts
{
///
/// Veri sozlugu satirlarinin turu. Sas_H_DbTableColumn tablosunda ayni deger
/// DictionaryType kolonunda durur.
///
public const string DictionaryType = "ListFormJson";
///
/// Sozluk ureten prosedurun varsayilan @TenantName degeri. Host baglaminda sozluk
/// bu adla yazilir.
///
public const string DefaultDictionaryTenantName = "Sozsoft";
/// Sunucu kaydinda satir tavani verilmediginde (ya da sifir oldugunda) uygulanan deger.
public const int DefaultMaxRows = 200;
///
/// CustomEndpoint.DataSourceCode bu degeri tasidiginda istegi yapan kullanicinin
/// kiraci veritabani kullanilir.
///
public const string TenantDataSourceMarker = "!Tenant";
///
/// Sozluk ureten prosedurun adi. Sozluk bulunamadiginda istemciye ne yapacagi bu adla
/// bildirilir.
///
public const string DictionaryProcedureName = "dbo.Sas_H_ListFormFieldsDictionaryJson_SaveDbTableColumns";
///
/// Uzak MCP istemcilerinin (Claude, ChatGPT connector'lari) OAuth istemci kimligi. OpenIddict
/// uygulamasi DbMigrator'da OpenIddict:Applications:Platform_Mcp ayarindan seed edilir;
/// dinamik istemci kaydi yeni uygulama uretmez, bu kimligi dondurur.
///
public const string OAuthClientId = "Platform_Mcp";
///
/// Dinamik kayitla (RFC 7591) uretilen istemcilerin kimlik oneki. Bilinen saglayicilarin
/// (Claude, ChatGPT) disindaki MCP istemcileri bu onekle kendi OpenIddict uygulamasini alir.
///
public const string DynamicClientIdPrefix = "mcp_";
///
/// Dinamik istemci sayisinin tavani. Kayit ucu kimlik dogrulamasizdir; tavan, ucun
/// veritabaninda sinirsiz uygulama biriktirmesini onler.
///
public const int MaxDynamicClients = 500;
///
/// MCP istemcilerinin yenileme token omru. Web istemcisinin kisa omru (dakikalar) connector
/// icin uygun degil: kullanici birkac saat soru sormadiginda baglanti kopardi. Yenileme
/// token'i her kullanimda yenilenir; omur, son kullanimdan itibaren sayilir.
///
public static readonly System.TimeSpan RefreshTokenLifetime = System.TimeSpan.FromDays(30);
/// Istemci kimligi bir MCP istemcisine (bilinen ya da dinamik) mi ait.
public static bool IsMcpClient(string? clientId)
=> clientId is not null
&& (string.Equals(clientId, OAuthClientId, System.StringComparison.Ordinal)
|| clientId.StartsWith(DynamicClientIdPrefix, System.StringComparison.Ordinal));
/// MCP ucunun sunucu adresine gore yolu.
public const string EndpointPath = "/mcp";
/// Dinamik istemci kaydi (RFC 7591) ucunun yolu.
public const string RegistrationEndpointPath = "/connect/register";
/// Korumali kaynak meta verisi (RFC 9728) ucunun yolu.
public const string ProtectedResourceMetadataPath = "/.well-known/oauth-protected-resource";
///
/// Istemcinin istemesi gereken kapsamlar. offline_access yenileme token'i icindir;
/// olmadan baglanti her saat yeniden giris ister.
///
public static readonly string[] OAuthScopes = [Sozsoft.Platform.PlatformConsts.AppName, "offline_access"];
///
/// run_query araciyla cagrilabilen nesne turleri. Degerler istemciye oldugu gibi
/// gosterilir; degistirilirse arac sozlesmesi kirilir.
///
public static class SavedQueryKinds
{
public const string View = "view";
public const string Procedure = "procedure";
public const string TableFunction = "tableFunction";
public const string ScalarFunction = "scalarFunction";
public const string CustomEndpoint = "customEndpoint";
}
///
/// Veritabanı katalog sorgusunun dondurdugu nesne turu etiketleri.
/// degerlerine eslenir.
///
public static class CatalogKinds
{
public const string View = "VIEW";
public const string Procedure = "PROCEDURE";
public const string TableFunction = "TABLE_FUNCTION";
public const string ScalarFunction = "SCALAR_FUNCTION";
}
}