Autenticação MCP no Delphi

· Recursos

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

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.


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.

Vantagens técnicas e comerciais

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;