sgcWebSockets バージョン 2025.10.0 は、Delphi アプリケーションを Model Context Protocol 2025-06-18 仕様に準拠させるための商用グレードの MCP クライアント実装で AI 統合ツールキットを拡張します。厳選されたコンテキストの提供、ツール呼び出しのオーケストレーション、リソース対応アシスタントの提供をすべて単一のコンポーネントで実現します。
Model Context Protocol (MCP) は、アシスタントが機能をネゴシエートし、構造化されたコンテキストを交換する方法を標準化します。MCP クライアントのサポートを追加することで、sgcWebSockets は以下を実現します。
- MCP 準拠のアシスタントとのエンタープライズグレードの相互運用性により、一貫した初期化と機能発見ワークフローを保証します。
- ドロップイン型の Delphi コンポーネントにより、既存の VCL、FMX、WebBroker プロジェクトでの AI 強化体験の市場投入時間を短縮します。
- 組み込みの HTTP ロギングと TLS 1.3 トランスポート強化により、すべての JSON-RPC 交換に対する運用の可視性を提供します。
TsgcAI_MCP_Client の主な特長
ターンキー MCP ハンドシェイク
単一の Initialize 呼び出しからプロトコルネゴシエーションを実行します。クライアントはサーバーから返されたセッション識別子を尊重しながら、製品名、タイトル、セマンティックバージョンをアドバタイズします。
豊富な機能サーフェス
Ping、ToolsList、ToolsCall、PromptsList、PromptsGet、ResourcesList、ResourcesRead を含む既成のメソッド呼び出しを発行できます。すべてのレスポンス型は強く型付けされており、下流処理が容易です。
イベント駆動のカスタマイズ
初期化、ping、ツール発見、プロンプト取得、リソースストリーミングなどの細粒度イベントにフックして、ビジネス層に到達する前にすべての交換をトレース・パーソナライズできます。
このコンポーネントは JSON-RPC リクエスト識別子を自動的にインクリメントし、呼び出し間で MCP セッション識別子を永続化し、リモートエラーが返されると型付き例外を発生させます。HTTP 接続は専用クライアント内にカプセル化されており、トラフィックをログに記録して OpenSSL 3.0 API で TLS 1.3 をネゴシエートします。
設定の概要
- クライアントプロファイル:
MCPOptions.ClientInfoを設定して、名前、タイトル、バージョンメタデータでアシスタント統合ソリューションを提示します。 - サーバーエンドポイント:
MCPOptions.ServerOptions.URLに接続先の MCP 互換 HTTPS エンドポイントを設定します。 - HTTP スタック:
TsgcAI_MCP_HTTP_Clientをベースとし、JSON コンテンツタイプ、自動セッションヘッダー、セキュアな TLS デフォルト値に最適化されたトランスポート層です。 - 可観測性フック:
OnMCPToolsCallやOnMCPResourcesReadなどのイベントハンドラーをサブスクライブして、すべてのプロトコル遷移を監査・強化できます。
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;
