sozsoft-platform/api/modules/Sozsoft.Mcp/Sozsoft.Mcp.Domain.Shared/McpConsts.cs
2026-09-10 17:40:43 +03:00

104 lines
4.5 KiB
C#

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