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
- Doppia applicazione: le librerie client includono automaticamente gli header che il server verifica, chiudendo le lacune tra discovery e applicazione.
- Consapevolezza del trasporto: l'autenticazione funziona indipendentemente dal fatto che le richieste usino HTTP classico o trasporti streamable come SSE, così puoi adottare lo streaming con fiducia.
- Pronto per il commerciale: proprietà già pronte, hook di validazione ed eventi di telemetria riducono il costo di audit di workload regolamentati.
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.
- L'autenticazione tramite header personalizzato ti permette di impostare una coppia header/valore proprietaria (per esempio,
X-TenantoX-Region). - Il supporto per API Key/Bearer token formatta automaticamente l'header standard
Authorization: Bearer, garantendo compatibilità con gateway e livelli di gestione API. - La propagazione della sessione mantiene l'identificatore di sessione MCP sincronizzato tra le richieste, semplificando l'osservabilità.
- Pronto per lo streaming: non appena il trasporto passa a
aimcptrHttpStreamable, il client avvia un thread SSE che preserva gli stessi header autenticati.
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.
- La validazione centralizzata degli header rifiuta immediatamente le richieste quando la coppia header/valore richiesta è assente o non corrispondente.
- La verifica del Bearer token controlla che l'API key lato server corrisponda all'header
Authorizationusato dal client. - Eventi unificati: gli handler per inizializzazione, ciclo di vita della sessione e prompt/risorse/strumenti rimangono disponibili così puoi reagire alle sessioni autenticate in tempo reale.
Vantaggi di business e tecnici
- Sicurezza vendibile: i clienti chiedono automazioni AI autenticate, e l'autenticazione MCP fornisce una risposta chiavi in mano quando si risponde a RFP o questionari di compliance.
- Efficienza operativa: gli amministratori gestiscono le credenziali tramite semplici proprietà del componente piuttosto che modifiche di codice sparse.
- Governance scalabile: gli header per-tenant facilitano l'instradamento delle sessioni a back-end specifici o l'applicazione di rate limit mantenendo un singolo binario.
- Pronto per il futuro: poiché il codice di autenticazione fa parte del trasporto MCP core, le nuove aggiunte al protocollo ereditano automaticamente le stesse barriere protettive.
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;
