La version 2025.10.0 de sgcWebSockets enrichit la boîte à outils d'intégration IA avec une implémentation MCP Client de qualité commerciale qui maintient tes applications Delphi en parfaite synchronisation avec la spécification Model Context Protocol 2025-06-18. Fournis un contexte soigné, orchestre les appels d'outils et propose des assistants conscients des ressources, le tout depuis un seul composant.
Le Model Context Protocol (MCP) standardise la façon dont les assistants négocient leurs capacités et échangent du contexte structuré. En ajoutant la prise en charge du client MCP, sgcWebSockets permet :
- Une interopérabilité de niveau entreprise avec tout assistant compatible MCP, garantissant des workflows cohérents d'initialisation et de découverte des capacités.
- Une mise sur le marché plus rapide des expériences augmentées par l'IA dans les projets VCL, FMX ou WebBroker existants grâce à un composant Delphi prêt à l'emploi.
- Une visibilité opérationnelle sur chaque échange JSON-RPC grâce à la journalisation HTTP intégrée et au durcissement du transport TLS 1.3.
Points forts de TsgcAI_MCP_Client
Handshake MCP clé en main
Exécute la négociation du protocole depuis un seul appel Initialize. Le client annonce le nom, le titre et la version sémantique de ton produit tout en respectant l'identifiant de session renvoyé par le serveur.
Surface de capacités riche
Émets des appels de méthodes prêts à l'emploi : Ping, ToolsList, ToolsCall, PromptsList, PromptsGet, ResourcesList et ResourcesRead. Chaque type de réponse est fortement typé, ce qui rend le traitement en aval sans effort.
Personnalisation pilotée par événements
Accroche-toi à des événements granulaires — initialisation, ping, découverte d'outils, récupération de prompts et streaming de ressources — pour tracer et personnaliser chaque échange avant qu'il n'atteigne ta couche métier.
Le composant incrémente automatiquement les identifiants de requête JSON-RPC, conserve les identifiants de session MCP entre les appels et lève des exceptions typées quand une erreur distante est renvoyée. La connectivité HTTP est encapsulée dans le client spécialisé qui journalise le trafic et négocie TLS 1.3 avec les APIs OpenSSL 3.0.
Aperçu de la configuration
- Profil du client : configure
MCPOptions.ClientInfopour présenter ta solution intégrée à l'assistant avec ses métadonnées de nom, titre et version. - Endpoint serveur : définis
MCPOptions.ServerOptions.URLsur l'endpoint HTTPS compatible MCP que tu souhaites atteindre. - Pile HTTP : construite sur
TsgcAI_MCP_HTTP_Client, la couche de transport est optimisée pour les types de contenu JSON, les en-têtes de session automatiques et des valeurs TLS sécurisées par défaut. - Hooks d'observabilité : abonne-toi à des gestionnaires d'événements comme
OnMCPToolsCallouOnMCPResourcesReadpour auditer et enrichir chaque transition du protocole.
Exemple d'intégration Delphi
L'extrait ci-dessous illustre comment poser le client MCP sur un module de données, l'initialiser au démarrage et servir une réponse d'appel d'outil dès que l'assistant distant la demande.
uses
sgcAI_MCP_Client, sgcJSON;
procedure TdmMCP.StartMCP;
begin
sgcMCP := TsgcAI_MCP_Client.Create(Self);
sgcMCP.MCPOptions.ClientInfo.Name := 'sgc-demo-pos';
sgcMCP.MCPOptions.ClientInfo.Title := 'Smart POS Assistant';
sgcMCP.MCPOptions.ClientInfo.Version := '2025.10.0';
sgcMCP.MCPOptions.ServerOptions.URL := 'https://mcp.partnercloud.com';
sgcMCP.OnMCPInitialize := DoMCPInitialize;
sgcMCP.OnMCPToolsCall := DoMCPToolsCall;
sgcMCP.Initialize;
end;
procedure TdmMCP.DoMCPInitialize(Sender: TObject;
const Request: TsgcAI_MCP_Request_Initialize;
const Response: TsgcAI_MCP_Response_Initialize;
var Accept: Boolean);
begin
Accept := Response.ServerInfo.SupportsTools('inventory.lookup');
end;
procedure TdmMCP.DoMCPToolsCall(Sender: TObject;
const Request: TsgcAI_MCP_Request_ToolsCall;
const Response: TsgcAI_MCP_Response_ToolsCall);
var
ResultPayload: IsgcJSON;
begin
if Request.Params.Name = 'inventory.lookup' then
begin
ResultPayload := TsgcJSON.CreateObject;
ResultPayload['sku'] := Request.Params.Arguments['sku'];
ResultPayload['availability'] := 'in-stock';
Response.Result := ResultPayload;
end;
end;
