MCP 認証 Delphi

· 機能

sgcWebSockets 2025.10.0 リリースでは、クライアントとサーバーの両コンポーネントに強化された認証レイヤーを追加し、Model Context Protocol(MCP)接続のセキュリティを向上させました。本記事では、新機能がエンタープライズグレードのアクセス制御と Delphi チームが期待する迅速な開発ワークフローをどのように組み合わせているかを紹介します。

新機能

MCP Client

MCP クライアントは MCPOptions.AuthenticationOptions プロパティですべてのセキュリティ設定を公開しています。API キーやカスタムヘッダーフローを個別に有効化してゼロトラストやテナントベースのポリシーを満たすことができ、コンポーネントは各 HTTP POST および SSE アップグレード時に必要なヘッダーを自動注入します。


ハートビート、クライアントメタデータ、HTTP/TLS カスタマイズと組み合わせることで、開発速度を犠牲にせずに MCP 通信を組織のコンプライアンスチェックリストに準拠させることができます。

MCP Server

サーバーは専用のエンドポイント・トランスポート・MCP 設定オブジェクトでクライアントと同等の制御を提供します。リクエストが届くと、コンポーネントはすべての受信ヘッダーを検証し、認証情報が不足または不正な場合は分かりやすいエラーを発生させます。検証はビジネスロジックの前に行われるため、不正使用を早期に防止しコードをドメインの価値に集中させられます。

ビジネスおよび技術的メリット

Delphi サンプルコード

以下のコードは、Delphi でクライアントとサーバーの両方に MCP 認証を有効化する設定ルーティンの例です。認証情報の値はご利用の環境に合わせて変更してください。 

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;