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"; } }