MCP 在 Delphi 中的身份验证

· 功能

sgcWebSockets 2025.10.0 版本为客户端和服务器组件引入了强化的认证层,将模型上下文协议(MCP)连接提升至新的安全水平。本文介绍新功能如何将企业级访问控制与 Delphi 团队期望的快速开发工作流相结合。

新增功能

MCP 客户端

MCP 客户端通过 MCPOptions.AuthenticationOptions 属性公开所有安全配置。可以独立启用 API 密钥或自定义请求头流程,以满足零信任或基于租户的策略,组件会在每次 HTTP POST 和 SSE 升级时自动注入所需的请求头。

结合心跳、客户端元数据和 HTTP/TLS 自定义,您可以在不牺牲开发效率的情况下使 MCP 对话符合组织的合规要求。

MCP 服务器

服务器通过专用的端点、传输和 MCP 配置对象镜像客户端控制。当请求到达时,组件验证每个传入的请求头,并在凭证缺失或不正确时返回描述性错误。由于验证在请求进入业务逻辑之前完成,可以及早阻止滥用,使代码专注于领域价值。

商业与技术优势

Delphi 示例

以下代码片段展示了如何通过单一配置例程同时为 Delphi 的客户端和服务器启用 MCP Authentication。请根据您的环境修改凭证值。

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;