Delphi MCP クライアント

· コンポーネント

sgcWebSockets バージョン 2025.10.0 は、Delphi アプリケーションを Model Context Protocol 2025-06-18 仕様に準拠させるための商用グレードの MCP クライアント実装で AI 統合ツールキットを拡張します。厳選されたコンテキストの提供、ツール呼び出しのオーケストレーション、リソース対応アシスタントの提供をすべて単一のコンポーネントで実現します。 

Model Context Protocol (MCP) は、アシスタントが機能をネゴシエートし、構造化されたコンテキストを交換する方法を標準化します。MCP クライアントのサポートを追加することで、sgcWebSockets は以下を実現します。

TsgcAI_MCP_Client の主な特長

ターンキー MCP ハンドシェイク 

単一の Initialize 呼び出しからプロトコルネゴシエーションを実行します。クライアントはサーバーから返されたセッション識別子を尊重しながら、製品名、タイトル、セマンティックバージョンをアドバタイズします。

豊富な機能サーフェス

Ping、ToolsList、ToolsCall、PromptsList、PromptsGet、ResourcesList、ResourcesRead を含む既成のメソッド呼び出しを発行できます。すべてのレスポンス型は強く型付けされており、下流処理が容易です。

イベント駆動のカスタマイズ

初期化、ping、ツール発見、プロンプト取得、リソースストリーミングなどの細粒度イベントにフックして、ビジネス層に到達する前にすべての交換をトレース・パーソナライズできます。


このコンポーネントは JSON-RPC リクエスト識別子を自動的にインクリメントし、呼び出し間で MCP セッション識別子を永続化し、リモートエラーが返されると型付き例外を発生させます。HTTP 接続は専用クライアント内にカプセル化されており、トラフィックをログに記録して OpenSSL 3.0 API で TLS 1.3 をネゴシエートします。

設定の概要

Delphi 統合サンプル

以下のコードスニペットは、MCP クライアントをデータモジュールに配置し、起動時に初期化し、リモートアシスタントが要求したときにツール呼び出しレスポンスを提供する方法を示しています。 

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;