La version 2025.10.0 de sgcWebSockets renforce la connectivité Model Context Protocol (MCP) avec une couche d'authentification durcie pour les composants client et serveur. Cet article met en évidence comment les nouvelles capacités combinent un contrôle d'accès de niveau entreprise avec le workflow de développement rapide attendu de sgcWebSockets par les équipes Delphi.
Nouveautés
- Double application : les bibliothèques clientes incluent automatiquement les en-têtes que le serveur vérifie, comblant les écarts entre la découverte et l'application.
- Conscience du transport : l'authentification fonctionne quelle que soit la nature des requêtes — HTTP classique ou transports streamables comme SSE — tu peux donc adopter le streaming en toute confiance.
- Prête pour le commerce : propriétés clés en main, hooks de validation et événements de télémétrie réduisent le coût d'audit des charges régulées.
Client MCP
Le client MCP expose tous les leviers de sécurité via la propriété MCPOptions.AuthenticationOptions. Active indépendamment les flux par clé API ou par en-tête personnalisé pour satisfaire les politiques zero-trust ou par locataire ; le composant injecte alors les en-têtes requis lors de chaque POST HTTP et upgrade SSE.
- Authentification par en-tête personnalisé : te permet de définir une paire en-tête/valeur propriétaire (par exemple,
X-TenantouX-Region). - Clé API/jeton Bearer : formate automatiquement l'en-tête standard
Authorization: Bearer, garantissant la compatibilité avec les passerelles et les couches de gestion d'API. - Propagation de session : maintient l'identifiant de session MCP synchronisé entre les requêtes, simplifiant l'observabilité.
- Prêt pour le streaming : dès que le transport bascule vers
aimcptrHttpStreamable, le client démarre un thread SSE qui conserve les mêmes en-têtes authentifiés.
Associé aux heartbeats, aux métadonnées client et à la personnalisation HTTP/TLS, tu peux aligner les conversations MCP sur la checklist de conformité de ton organisation sans sacrifier la vitesse de développement.
Serveur MCP
Le serveur reflète les contrôles client avec des objets de configuration dédiés pour l'endpoint, le transport et MCP. À l'arrivée des requêtes, le composant valide chaque en-tête entrant et lève une erreur descriptive si un identifiant est manquant ou incorrect. Parce que la validation a lieu avant que la requête n'entre dans ta logique métier, tu stoppes les abus tôt et tu gardes ton code centré sur la valeur du domaine.
- Validation centralisée des en-têtes : rejette immédiatement les requêtes lorsque la paire en-tête/valeur requise est absente ou ne correspond pas.
- Vérification du jeton Bearer : vérifie que la clé API côté serveur correspond à l'en-tête
Authorizationutilisé par le client. - Événements unifiés : initialisation, cycle de vie de session et gestionnaires de prompt/resource/tool restent disponibles pour réagir aux sessions authentifiées en temps réel.
Avantages métier et techniques
- Une sécurité qui se vend : les clients exigent des automatisations IA authentifiées, et MCP Authentication offre une réponse clé en main aux RFP ou questionnaires de conformité.
- Efficacité opérationnelle : les administrateurs gèrent les identifiants via de simples propriétés de composants au lieu de modifications de code disséminées.
- Gouvernance évolutive : les en-têtes par locataire permettent de router facilement les sessions vers des back-ends spécifiques ou d'appliquer des limites de débit tout en conservant un seul binaire.
- Pérennité : parce que le code d'authentification fait partie du transport MCP de base, les nouveaux ajouts au protocole héritent automatiquement des mêmes garde-fous.
Exemple Delphi
L'extrait suivant montre comment une seule routine de configuration peut activer MCP Authentication à la fois pour un client et un serveur en Delphi. Adapte les valeurs d'identification à ton environnement.
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;
