De release 2025.10.0 van sgcWebSockets tilt Model Context Protocol(MCP)-connectiviteit naar een hoger niveau met een versterkte authenticatielaag voor zowel client- als servercomponenten. Dit artikel laat zien hoe de nieuwe mogelijkheden toegangsbeheer op enterprise-niveau combineren met de snelle ontwikkelworkflow die Delphi-teams van sgcWebSockets verwachten.
Wat is nieuw
- Dubbele afdwinging: clientbibliotheken voegen automatisch de headers toe die de server verifieert, waardoor er geen gat zit tussen ontdekken en afdwingen.
- Transport-bewustzijn: authenticatie werkt ongeacht of aanvragen klassiek HTTP of streamable transports zoals SSE gebruiken, dus je kunt met vertrouwen op streaming overstappen.
- Commercieel klaar: kant-en-klare properties, validatiehooks en telemetry-events verlagen de kosten van het auditen van gereguleerde workloads.
MCP-client
De MCP-client maakt alle beveiligingsinstellingen beschikbaar via de property MCPOptions.AuthenticationOptions. Schakel onafhankelijk API key- of custom-header-flows in om aan zero-trust- of tenant-gebaseerde policies te voldoen; de component voegt de vereiste headers automatisch toe bij elke HTTP POST en SSE-upgrade.
- Met custom-header-authenticatie kun je een eigen header/waarde-paar instellen (bijvoorbeeld
X-TenantofX-Region). - De ondersteuning voor API key/Bearer-token formatteert automatisch de standaard
Authorization: Bearer-header, voor compatibiliteit met gateways en API-managementlagen. - Sessiepropagatie houdt de MCP-sessie-identificatie gesynchroniseerd tussen aanvragen, wat de observability vereenvoudigt.
- Klaar voor streaming: zodra het transport overschakelt naar
aimcptrHttpStreamable, start de client een SSE-thread die dezelfde geauthenticeerde headers behoudt.
Samen met heartbeats, clientmetadata en aanpassingen van HTTP/TLS kun je MCP-conversaties laten aansluiten op de compliance-checklist van je organisatie zonder ontwikkelsnelheid in te leveren.
MCP-server
De server weerspiegelt de bedieningselementen van de client met aparte configuratie-objecten voor endpoint, transport en MCP. Wanneer aanvragen binnenkomen, valideert de component elke binnenkomende header en geeft hij een beschrijvende fout terug wanneer een credential ontbreekt of onjuist is. Omdat de validatie plaatsvindt voordat de aanvraag je business-logica bereikt, stop je misbruik vroegtijdig en blijft je code gericht op functionele waarde.
- Gecentraliseerde headervalidatie weigert aanvragen direct wanneer het vereiste header/waarde-paar ontbreekt of niet overeenkomt.
- Bearer-tokenverificatie controleert of de API key aan serverzijde overeenkomt met de
Authorization-header die de client gebruikt. - Verenigde events: initialisatie, sessielevenscyclus en prompt/resource/tool-handlers blijven beschikbaar, zodat je realtime kunt reageren op geauthenticeerde sessies.
Zakelijke en technische voordelen
- Beveiliging die je kunt verkopen: klanten eisen geauthenticeerde AI-automatiseringen en MCP-authenticatie biedt een kant-en-klaar antwoord bij RFP's of compliance-vragenlijsten.
- Operationele efficiëntie: beheerders beheren credentials via eenvoudige component-properties in plaats van verspreide codewijzigingen.
- Schaalbaar bestuur: per-tenant-headers maken het gemakkelijk om sessies naar specifieke back-ends te routeren of rate limits toe te passen terwijl je één binary behoudt.
- Toekomstbestendig: omdat de authenticatiecode deel uitmaakt van het centrale MCP-transport, erven nieuwe protocoltoevoegingen automatisch dezelfde beveiligingen.
Delphi-voorbeeld
Het volgende fragment laat zien hoe een enkele configuratieroutine MCP-authenticatie voor zowel een client als een server in Delphi kan inschakelen. Pas de credential-waarden aan je omgeving aan.
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;
