La versión 2025.10.0 de sgcWebSockets eleva la conectividad Model Context Protocol (MCP) con una capa de autenticación reforzada para los componentes cliente y servidor. Este artículo destaca cómo las nuevas capacidades combinan control de acceso de calidad empresarial con el flujo de desarrollo rápido que los equipos Delphi esperan de sgcWebSockets.
Novedades
- Aplicación dual: las bibliotecas cliente incluyen automáticamente las cabeceras que el servidor verifica, cerrando los huecos entre descubrimiento y aplicación.
- Conciencia del transporte: la autenticación funciona independientemente de si las peticiones usan HTTP clásico o transportes streamable como SSE, por lo que puedes adoptar streaming con confianza.
- Listo para producción comercial: propiedades ya preparadas, hooks de validación y eventos de telemetría reducen el coste de auditar cargas reguladas.
Cliente MCP
El cliente MCP expone todos los ajustes de seguridad mediante la propiedad MCPOptions.AuthenticationOptions. Activa los flujos de API key o de cabecera personalizada de forma independiente para satisfacer políticas zero-trust o basadas en tenant, y el componente inyecta las cabeceras necesarias durante cada HTTP POST y upgrade SSE.
- La autenticación con cabecera personalizada te permite establecer un par cabecera/valor propio (por ejemplo,
X-TenantoX-Region). - El soporte de API Key/Bearer token formatea automáticamente la cabecera estándar
Authorization: Bearer, asegurando compatibilidad con gateways y capas de gestión de API. - La propagación de sesión mantiene sincronizado el identificador de sesión MCP entre peticiones, simplificando la observabilidad.
- Listo para streaming: en cuanto el transporte cambia a
aimcptrHttpStreamable, el cliente arranca un hilo SSE que preserva las mismas cabeceras autenticadas.
Junto con heartbeats, metadatos de cliente y personalización HTTP/TLS, puedes alinear las conversaciones MCP con el checklist de compliance de tu organización sin sacrificar la velocidad de desarrollo.
Servidor MCP
El servidor refleja los controles del cliente con objetos dedicados de endpoint, transporte y configuración MCP. A medida que llegan peticiones, el componente valida cada cabecera entrante y lanza un error descriptivo cuando una credencial falta o es incorrecta. Como la validación ocurre antes de que la petición entre en tu lógica de negocio, detienes el mal uso temprano y mantienes tu código centrado en el valor del dominio.
- La validación centralizada de cabeceras rechaza peticiones inmediatamente cuando el par cabecera/valor requerido está ausente o no coincide.
- La verificación de Bearer token comprueba que la API key del lado servidor coincide con la cabecera
Authorizationusada por el cliente. - Eventos unificados: inicialización, ciclo de vida de sesión y manejadores de prompt/resource/tool siguen disponibles para que puedas reaccionar a sesiones autenticadas en tiempo real.
Ventajas de negocio y técnicas
- Seguridad que puedes vender: los clientes exigen automatizaciones de IA autenticadas, y la autenticación MCP proporciona una respuesta llave en mano al responder a RFPs o cuestionarios de compliance.
- Eficiencia operativa: los administradores gestionan credenciales mediante propiedades simples del componente en lugar de cambios de código dispersos.
- Gobernanza escalable: las cabeceras por tenant facilitan enrutar sesiones a back-ends específicos o aplicar rate limits manteniendo un único binario.
- Preparado para el futuro: como el código de autenticación es parte del transporte MCP central, las nuevas adiciones de protocolo heredan automáticamente las mismas guardas.
Ejemplo Delphi
El siguiente fragmento muestra cómo una única rutina de configuración puede activar la autenticación MCP tanto para un cliente como para un servidor en Delphi. Adapta los valores de credenciales a tu entorno.
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;
