StockSharp DesktopDriver について
StockSharp DesktopDriverは、テスト、コマンドラインツール、AIエージェントからAvalonia、WPF、MAUIのデスクトップアプリを調査・操作できます。画面画像ではなくコントロールの構造化データを読み取り、安全なテスト実行に入力を制限できます。
主な機能
- 01ウィンドウとコントロール内容の読み取り
- 02操作後の状態変化を待機
- 03Avalonia、WPF、MAUIに対応
- 04アプリ固有コントロールへのアダプター
- 05コマンドラインとテスト用パッケージ
活用シーン
- 01デスクトップアプリの表やツリーを調査
- 02デスクトップアプリのテストを自動化
- 03AIエージェントによるアプリ操作
- 04制御されたテスト実行で入力を送信
MCP 対応
MCPサーバーを介してAIエージェントからデスクトップアプリを操作でき、ローカルのアプリケーションエンドポイントに接続します。CLIやテストランナーからも利用できます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
StockSharp DesktopDriver
Avalonia、WPF、MAUI で構築されたデスクトップアプリケーションを、テストやコマンドライン、または MCP 経由で AI エージェントから操作できます。
DesktopDriver は画面ではなく、インターフェースを読み取ります。テーブルは列と行、ツリーは項目、ワークスペースはパネルで応答します。テーマ、フォント、言語を変えても、これらの情報は変わりません。 入力はツールキット独自のパイプラインを通り、実際の環境に影響しない実行に限って行われます。 画像は人が確認するためのものです。テストでは、コントロールが伝える内容を検証します。
仕組み
- 操作対象のアプリケーションは、使用するツールキットのブートストラップを参照します。通常の方法で起動すると、何も開きません。
--ui-automationを指定して起動すると、現在の OS ユーザーに制限されたローカルの名前付きパイプエンドポイントを開き、エンドポイントの場所を--ui-automation-endpoint=<path>で指定されたファイルに書き込みます。 - テスト、コマンドライン、MCP サーバーなどのランナーは、その方法でアプリケーションを起動するか、他のユーザーが起動したアプリケーションに接続します。セッションハンドシェイクで製品、インスタンス、プロトコルを確認してから、どのウィンドウが開いているか、このウィンドウには何があるか、このテーブルには何が表示されているかを問い合わせます。その後、クリック、入力、キーの押下、スクロールを行い、応答が変わるまで待機できます。
- アダプターは、コントロールをプロトコルが認識する形式に変換します。グリッド、ツリー、リスト、ピッカー、ワークスペース、チャート、ドキュメント、ダイアグラムなどが対象です。アプリケーションは、標準アダプターと同じインターフェースを通じて、独自のコントロール用アダプターを登録できます。
NuGet パッケージ
CLI または MCP サーバーをインストールするには、.NET 10 SDK を使用します。
dotnet tool install StockSharp.DesktopDriver.Cli --tool-path tools
dotnet tool install StockSharp.DesktopDriver.Mcp --tool-path tools
コマンドは tools/desktop-driver と tools/desktop-driver-mcp です。アプリケーションに自動化機能を追加するには、そのツールキット用のブートストラップパッケージを参照してください。コードから操作するには、クライアント、ランナー、テスト用のパッケージを使用します。
MCP Registry への公開と Claude Desktop 拡張機能については、MCP の配布を参照してください。
アプリケーションを操作可能にする
Avalonia では、メインウィンドウの作成後に次のようにします(サンプルでも同様に、グリッドモジュールのみを使用しています)。
public override void OnFrameworkInitializationCompleted()
{
if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop)
{
desktop.MainWindow = new MainWindow();
if (UiAutomationLaunch.TryRead(desktop.Args) is { } launch)
{
_automation = AvaloniaAutomationBootstrap.Start(
UiAutomationStartup.For("my.app", version, fixtureId: null, hasLiveOutsideWorld: false, isTestProfile: false),
launch.EndpointFile,
[binder => new DataGridAutomationModule(binder), binder => new DockAutomationModule(binder)]);
}
}
base.OnFrameworkInitializationCompleted();
}
アプリケーションの終了時に、返されたランタイムを破棄してください。WpfAutomationBootstrap と
MauiAutomationBootstrap も同じ引数を受け取ります。
サンプルアプリケーションでは、3 つのツールキットすべてについて、起動と終了の方法を紹介しています。WPF と MAUI の Windows サンプルには、実行可能ファイルを起動し、ローカルパイプ経由で接続して、コントロールを読み取り、入力を送信し、スクリーンショットを取得するテストもあります。
UiAutomationStartup.For は、入力を許可するかどうかを判断します。プロセス外のものと一切通信しないアプリケーションは、常に安全にクリック操作できます。実際のもの(ブローカー、ストア、サービスなど)に接続するアプリケーションは、それを置き換えるテストプロファイルで起動された場合に限り安全です。それ以外の場合、エンドポイントは読み取りを続けますが、すべての入力が拒否されます。
多くのアプリケーションは、通常版と操作可能な版の 2 種類のビルドを提供しています。ドライバーは後者からのみ参照されるため、前者は構成上、待ち受けを行いません。
操作する
テストから:
await using var app = await DrivenApplication.StartAsync(executable, extraArguments: null, TimeSpan.FromSeconds(60), cancellationToken);
await using var client = await app.ConnectAsync("my.app", cancellationToken);
var windows = await client.GetSurfacesAsync(cancellationToken);
コマンドラインから、誰かが --ui-automation を指定して起動したアプリケーションを対象にする場合:
tools/desktop-driver find --endpoint endpoint.json --kind grid
tools/desktop-driver grid-rows --endpoint endpoint.json --node window:MainWindow/Instruments --limit 5
引数なしで desktop-driver を実行すると、すべての操作が表示されます。
エージェントから:MCP サーバーを登録してください。詳細は DesktopDriver.Mcp を参照してください。
MCP 名は StockSharp.DesktopDriver、表示タイトルは StockSharp DesktopDriver です。
ドキュメント
- ドライバーの構築方法
- プロトコル
- 各コントロールに対する応答と、アダプターの追加方法
- コマンドライン
- MCP サーバー
- ビルド、テストスイート、リリース
- サンプルアプリケーションと Windows 統合テスト
ビルドとテスト
dotnet build DesktopDriver.slnx
dotnet test DesktopDriver.Runtime.Tests --filter "FullyQualifiedName~Revision"
MAUI プロジェクトには MAUI Windows ワークロードが必要です。MCP アプリケーションのテスト、WPF のスクリーンショットテスト、および DesktopDriver.Windows.Tests の実行には、対話型の Windows デスクトップセッションが必要です。Release ビルドの後、./.github/scripts/Test.ps1 -Suite Headless または -Suite Desktop を使用して、ハングおよびセッションのタイムアウトを設定したテストスイートを実行してください。
ソースからのパッケージ
dotnet pack DesktopDriver.slnx -c Release -o artifacts/packages
パッケージではなくソースを使用する
このリポジトリの隣にチェックアウトした製品からは、プロジェクト自体を参照できます。
<ProjectReference Include="..\DesktopDriver.Mcp\DesktopDriver.Bootstrap.Avalonia\DesktopDriver.Bootstrap.Avalonia.csproj" />
コマンドラインでプロパティを渡して、自身の操作可能なコピーを 2 つ目にビルドする製品では、参照に GlobalPropertiesToRemove="<that property>" を追加してください。ドライバーにはその製品用の独立したビルドがなく、そうしないと同じフォルダーに 2 回ビルドされてしまいます。
ライセンス
LICENSE を参照してください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。