Autenticazione MCP in Delphi

· Funzionalità

La release 2025.10.0 di sgcWebSockets eleva la connettività Model Context Protocol (MCP) con un livello di autenticazione robusto sia per i componenti client che server. Questo articolo evidenzia come le nuove capacità combinino un controllo degli accessi di livello enterprise con il flusso di sviluppo rapido che i team Delphi si aspettano da sgcWebSockets.

Cosa c'è di nuovo

MCP Client

Il client MCP espone tutti i controlli di sicurezza tramite la proprietà MCPOptions.AuthenticationOptions. Abilita i flussi di API key o header personalizzati in modo indipendente per soddisfare politiche zero-trust o tenant-based, e il componente inietta gli header richiesti durante ogni POST HTTP e upgrade SSE.


Insieme a heartbeat, metadati client e personalizzazione HTTP/TLS, puoi allineare le conversazioni MCP alla checklist di compliance della tua organizzazione senza sacrificare la velocità degli sviluppatori.

MCP Server

Il server riflette i controlli del client con oggetti di configurazione dedicati per endpoint, trasporto e MCP. Man mano che arrivano le richieste, il componente valida ogni header in arrivo e solleva un errore descrittivo quando una credenziale è mancante o errata. Poiché la validazione avviene prima che la richiesta entri nella tua logica di business, fermi gli abusi presto e mantieni il tuo codice focalizzato sul valore di dominio.

Vantaggi di business e tecnici

Esempio Delphi

Lo snippet seguente mostra come una singola routine di configurazione possa abilitare l'autenticazione MCP sia per un client che per un server in Delphi. Adatta i valori delle credenziali al tuo ambiente. 

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;