A versão 2025.10.0 do sgcWebSockets eleva a conectividade com o Model Context Protocol (MCP) com uma camada de autenticação reforçada para os componentes cliente e servidor. Este artigo destaca como os novos recursos combinam controle de acesso de nível empresarial com o fluxo de desenvolvimento ágil que as equipes Delphi esperam do sgcWebSockets.
O que há de novo
- Aplicação dupla: as bibliotecas cliente incluem automaticamente os headers que o servidor verifica, eliminando lacunas entre descoberta e aplicação.
- Consciência de transporte: a autenticação funciona independentemente de as requisições usarem HTTP clássico ou transportes streamáveis como SSE, para que você adote streaming com confiança.
- Prontidão comercial: propriedades prontas para uso, hooks de validação e eventos de telemetria reduzem o custo de auditoria de cargas de trabalho reguladas.
MCP Client
O cliente MCP expõe todos os controles de segurança através da propriedade MCPOptions.AuthenticationOptions. Habilite fluxos de API key ou header personalizado de forma independente para satisfazer políticas de zero-trust ou baseadas em tenant, e o componente injeta os headers necessários durante cada POST HTTP e upgrade SSE.
- Autenticação por Header Personalizado permite definir um par header/valor proprietário (por exemplo,
X-TenantouX-Region). - Suporte a API Key/Bearer token formata automaticamente o header padrão
Authorization: Bearer, garantindo compatibilidade com gateways e camadas de gerenciamento de API. - Propagação de sessão mantém o identificador de sessão MCP sincronizado entre requisições, simplificando a observabilidade.
- Pronto para streaming: assim que o transporte muda para
aimcptrHttpStreamable, o cliente inicia uma thread SSE que preserva os mesmos headers autenticados.
Junto com heartbeats, metadados do cliente e personalização HTTP/TLS, você pode alinhar as conversas MCP à lista de conformidade da sua organização sem sacrificar a velocidade de desenvolvimento.
MCP Server
O servidor espelha os controles do cliente com objetos dedicados de endpoint, transporte e configuração MCP. À medida que as requisições chegam, o componente valida cada header recebido e gera um erro descritivo quando uma credencial está ausente ou incorreta. Como a validação ocorre antes de a requisição entrar na sua lógica de negócio, você interrompe o uso indevido precocemente e mantém seu código focado no valor de domínio.
- Validação centralizada de headers rejeita requisições imediatamente quando o par header/valor requerido está ausente ou incompatível.
- Verificação de Bearer token verifica se a chave de API do lado do servidor corresponde ao header
Authorizationusado pelo cliente. - Eventos unificados: os handlers de inicialização, ciclo de vida de sessão e prompt/recurso/ferramenta permanecem disponíveis para que você possa reagir a sessões autenticadas em tempo real.
Vantagens técnicas e comerciais
- Segurança que você pode vender: os clientes exigem automações de IA autenticadas, e o MCP Authentication fornece uma resposta pronta ao responder a RFPs ou questionários de conformidade.
- Eficiência operacional: os administradores gerenciam credenciais através de simples propriedades de componentes em vez de alterações de código dispersas.
- Governança escalável: os headers por tenant facilitam o roteamento de sessões para back-ends específicos ou a aplicação de limites de taxa enquanto se mantém um único binário.
- Preparação para o futuro: como o código de autenticação faz parte do transporte MCP principal, novas adições de protocolo herdam as mesmas salvaguardas automaticamente.
Exemplo em Delphi
O trecho a seguir mostra como uma única rotina de configuração pode habilitar a Autenticação MCP tanto para um cliente quanto para um servidor em Delphi. Adapte os valores de credenciais ao seu ambiente.
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;
