La versión 2025.10.0 de sgcWebSockets amplía el toolkit de integración de IA con una implementación de cliente MCP de calidad empresarial que mantiene tus aplicaciones Delphi alineadas con la especificación Model Context Protocol 2025-06-18. Ofrece contexto curado, orquesta llamadas a herramientas y atiende asistentes con conciencia de recursos, todo desde un único componente.
El Model Context Protocol (MCP) estandariza cómo los asistentes negocian capacidades e intercambian contexto estructurado. Añadiendo soporte de cliente MCP, sgcWebSockets habilita:
- Interoperabilidad de calidad empresarial con cualquier asistente compatible con MCP, garantizando flujos coherentes de inicialización y descubrimiento de capacidades.
- Mayor rapidez de salida al mercado de experiencias enriquecidas con IA en proyectos VCL, FMX o WebBroker existentes, gracias a un componente Delphi listo para usar.
- Visibilidad operativa sobre cada intercambio JSON-RPC mediante logging HTTP integrado y endurecimiento del transporte con TLS 1.3.
Aspectos destacados de TsgcAI_MCP_Client
Handshake MCP llave en mano
Ejecuta la negociación del protocolo desde una única llamada Initialize. El cliente anuncia el nombre, el título y la versión semántica de tu producto, y respeta el identificador de sesión devuelto por el servidor.
Amplia superficie de capacidades
Lanza llamadas a métodos listos para usar como Ping, ToolsList, ToolsCall, PromptsList, PromptsGet, ResourcesList y ResourcesRead. Cada tipo de respuesta está fuertemente tipado, lo que simplifica el procesamiento posterior.
Personalización dirigida por eventos
Engánchate a eventos granulares —inicialización, ping, descubrimiento de herramientas, recuperación de prompts y streaming de recursos— para trazar y personalizar cada intercambio antes de que llegue a tu capa de negocio.
El componente incrementa automáticamente los identificadores de petición JSON-RPC, persiste los identificadores de sesión MCP entre llamadas y lanza excepciones tipadas cuando se devuelve un error remoto. La conectividad HTTP está encapsulada en un cliente especializado que registra el tráfico y negocia TLS 1.3 con las APIs de OpenSSL 3.0.
Resumen de configuración
- Perfil del cliente: configura
MCPOptions.ClientInfopara presentar tu solución integrada con asistente con metadatos de nombre, título y versión. - Endpoint del servidor: establece
MCPOptions.ServerOptions.URLcon el endpoint HTTPS compatible con MCP al que quieres conectar. - Pila HTTP: construida sobre
TsgcAI_MCP_HTTP_Client, la capa de transporte está afinada para tipos de contenido JSON, cabeceras de sesión automáticas y valores seguros por defecto de TLS. - Hooks de observabilidad: suscríbete a manejadores de eventos como
OnMCPToolsCalloOnMCPResourcesReadpara auditar y enriquecer cada transición del protocolo.
Ejemplo de integración en Delphi
El fragmento siguiente muestra cómo soltar el cliente MCP en un data module, inicializarlo al arrancar y servir una respuesta a una llamada de herramienta en cuanto el asistente remoto la solicite.
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;
