Uwierzytelnianie MCP dla Delphi

· Funkcje

Wydanie 2025.10.0 sgcWebSockets podnosi połączność Model Context Protocol (MCP) na wyższy poziom dzięki wzmocnionej warstwie uwierzytelniania dla komponentów klienta i serwera. Artykuł pokazuje, jak nowe możliwości łączą kontrolę dostępu klasy enterprise z szybkim procesem deweloperskim, jakiego oczekują zespoły Delphi od sgcWebSockets.

Co nowego

Klient MCP

Klient MCP udostępnia wszystkie ustawienia bezpieczeństwa przez właściwość MCPOptions.AuthenticationOptions. Możesz niezależnie włączyć przepływy API key lub niestandardowego nagłówka, aby spełnić polityki zero-trust lub oparte na tenantach, a komponent wstrzykuje wymagane nagłówki podczas każdego HTTP POST i aktualizacji SSE.


Razem z heartbeatami, metadanymi klienta i dostosowaniem HTTP/TLS możesz dostosować konwersacje MCP do listy wymagań zgodności organizacji bez uszczerbku dla szybkości dewelopera.

Serwer MCP

Serwer odzwierciedla mechanizmy klienta za pomocą dedykowanych obiektów konfiguracji endpointu, transportu i MCP. Gdy nadchodzą żądania, komponent waliduje każdy przychodzący nagłówek i zgłasza opisowy błąd, gdy poświadczenie jest brakujące lub nieprawidłowe. Ponieważ walidacja odbywa się przed wejściem żądania w logikę biznesową, misuse jest blokowane wcześnie, a kod pozostaje skupiony na wartości domenowej.

Korzyści biznesowe i techniczne

Przykład Delphi

Poniższy fragment kodu pokazuje, jak jedna procedura konfiguracyjna może włączyć MCP Authentication zarówno dla klienta, jak i serwera w Delphi. Dostosuj wartości poświadczeń do swojego środowiska. 

procedure SetupMCPInfrastructure;
var
  MCPClient: TsgcWSAPIClient_MCP;
  MCPServer: TsgcWSServer_API_MCP;
begin
  MCPClient := TsgcWSAPIClient_MCP.Create(nil);
  MCPServer := TsgcWSServer_API_MCP.Create(nil);
  try
    // Client configuration
    MCPClient.MCPOptions.HttpOptions.URL := 'https://mcp.example.com/api';
    MCPClient.MCPOptions.AuthenticationOptions.ApiKey.Enabled := True;
    MCPClient.MCPOptions.AuthenticationOptions.ApiKey.Value := 'YOUR_API_KEY';
    MCPClient.MCPOptions.AuthenticationOptions.CustomHeader.Enabled := True;
    MCPClient.MCPOptions.AuthenticationOptions.CustomHeader.Header := 'X-Tenant';
    MCPClient.MCPOptions.AuthenticationOptions.CustomHeader.Value := 'Retail';
    MCPClient.MCPOptions.ClientInfo.Name := 'RetailAgent';
    MCPClient.MCPOptions.ClientInfo.Version := '2025.10.0';
    MCPClient.MCPOptions.HeartBeat.Enabled := True;
    MCPClient.MCPOptions.HeartBeat.Interval := 30;
    MCPClient.OnMCPInitialize := HandleMCPInitialize;
    MCPClient.OnMCPListTools := HandleMCPTools;
    MCPClient.Initialize;
    MCPClient.ListTools;
    // Server configuration
    MCPServer.EndpointOptions.Endpoint := '/mcp';
    MCPServer.MCPOptions.AuthenticationOptions.ApiKey.Enabled := True;
    MCPServer.MCPOptions.AuthenticationOptions.ApiKey.Value := 'YOUR_API_KEY';
    MCPServer.MCPOptions.AuthenticationOptions.CustomHeader.Enabled := True;
    MCPServer.MCPOptions.AuthenticationOptions.CustomHeader.Header := 'X-Tenant';
    MCPServer.MCPOptions.AuthenticationOptions.CustomHeader.Value := 'Retail';
    MCPServer.OnMCPInitialize := HandleServerInitialize;
    MCPServer.OnMCPRequestTool := HandleToolRequest;
    MCPServer.Active := True;
  finally
    MCPClient.Free;
    MCPServer.Free;
  end;
end;