mcpField
S
StockSharp DesktopDriver

StockSharp DesktopDriver

本地服务
github.com/StockSharp开发工具03 天前更新

关于 StockSharp DesktopDriver

StockSharp DesktopDriver 可供测试、命令行工具和 AI Agent 检查并操作 Avalonia、WPF 与 MAUI 桌面应用。它读取控件的结构化内容,而非依赖屏幕图像,并可限制输入仅用于安全的测试运行。

主要功能

  1. 01读取窗口与控件内容
  2. 02操作控件并等待状态变化
  3. 03支持 Avalonia、WPF 和 MAUI
  4. 04通过适配器解析专用控件
  5. 05提供命令行与测试组件

适用场景

  1. 01检查桌面应用中的表格和树
  2. 02自动化桌面应用测试
  3. 03让 AI Agent 操作桌面应用
  4. 04在受控测试运行中发送输入

MCP 相关

其 MCP 服务可让 AI Agent 通过 MCP 驱动桌面应用,并与命令行和测试运行器一样连接本地应用端点。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

暂未收录安装方式

我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。

代码仓库
安装包
nugetStockSharp.DesktopDriver.Mcp1.0.1

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

StockSharp DesktopDriver

MCP on NuGet CLI on NuGet

通过测试、命令行或经由 MCP 连接的 AI Agent,驱动基于 Avalonia、WPF 或 MAUI 构建的桌面应用。

DesktopDriver 读取的是界面,而不是屏幕。表格会返回其列和行,树会返回其节点,工作区会返回其面板——这些描述不会因主题、字体或语言而改变。输入会经过工具包自身的处理流程,并且仅作用于无法接触任何真实内容的运行实例。图片供人查看;测试则检查控件所表达的内容。

工作原理

  1. 可被驱动的应用会引用其工具包的引导程序。以常规方式启动时,它不会打开任何内容。使用 --ui-automation 启动时,它会打开一个仅限当前 OS 用户访问的本地命名管道端点,并将端点位置写入 --ui-automation-endpoint=<path> 指定的文件。
  2. 运行器——测试、命令行或 MCP 服务——以这种方式启动应用(或连接到他人已启动的应用),在会话握手中检查产品、实例和协议,然后询问:打开了哪些窗口,这个窗口里有什么,这个表格显示了什么。之后,它可以点击、输入文本、按键和滚动,并等待结果发生变化。
  3. 适配器会将控件转换为协议支持的内容:网格、树、列表、选择器、工作区、图表、文档、示意图。应用可以通过标准适配器所用的同一接口,为自己的控件注册适配器。

NuGet 包

使用 .NET 10 SDK 安装 CLI 或 MCP 服务:

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 分发。

包说明
StockSharp.DesktopDriver.Contracts协议:请求、响应、状态、地址
StockSharp.DesktopDriver.Runtime读取、身份、修订版本和等待,不依赖任何工具包
StockSharp.DesktopDriver.Host应用内部的端点,以及用于读取应用启动方式的 UiAutomationLaunch
StockSharp.DesktopDriver.Client每个运行器都会通过它进行交互的类型化客户端
StockSharp.DesktopDriver.Runner启动、查找并连接应用;包含可启动应用的目录
StockSharp.DesktopDriver.TestingMSTest 测试套件在运行器之外所需的内容
StockSharp.DesktopDriver.Cli命令行
StockSharp.DesktopDriver.McpMCP 服务,参见其 README
StockSharp.DesktopDriver.AvaloniaAvalonia:读取、输入和标准控件的图片
StockSharp.DesktopDriver.Avalonia.ProDataGridAvalonia:将 ProDataGrid 的 DataGrid 读取为表格
StockSharp.DesktopDriver.Avalonia.DockAvalonia:将 Dock.Avalonia 工作区读取为面板和组
StockSharp.DesktopDriver.Avalonia.HeadlessAvalonia:用于无头测试的输入
StockSharp.DesktopDriver.Bootstrap.AvaloniaAvalonia:只需调用一次即可让应用可被驱动
StockSharp.DesktopDriver.WpfWPF:读取、输入和标准控件的图片
StockSharp.DesktopDriver.Bootstrap.WpfWPF:只需调用一次即可让应用可被驱动
StockSharp.DesktopDriver.MauiMAUI:读取、输入和标准控件的图片
StockSharp.DesktopDriver.Bootstrap.MauiWindows 上的 MAUI:只需调用一次即可让应用可被驱动

让应用可供驱动

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 接受相同的参数。

示例应用展示了这三种工具包的启动和关闭方式。WPF 和 MAUI Windows 示例还包含一些测试:启动可执行文件,通过本地管道连接, 读取控件、发送输入并获取屏幕截图。

UiAutomationStartup.For 会判断是否允许输入。只与自身进程内的对象通信的应用,始终可以安全地通过点击来操作。连接到真实对象(例如代理、商店或服务)的应用,只有在通过会替换这些对象的测试配置文件启动时才安全;否则,端点仍可读取,但所有输入都会被拒绝。

许多应用会提供两个构建版本:普通版本不包含驱动程序,另一个版本则可供驱动。驱动程序只会被第二个版本引用,因此第一个版本从构建时起就不会有任何监听器。

驱动应用

在测试中:

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 会打印所有操作。

在 Agent 中:注册 MCP 服务,参见 DesktopDriver.Mcp。

其 MCP 名称为 StockSharp.DesktopDriver,显示标题为 StockSharp DesktopDriver。

文档

构建和测试

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" />

如果产品通过在命令行传递属性来构建自身的第二个可驱动副本,则在引用中添加 GlobalPropertiesToRemove="<that property>":驱动程序没有为其单独构建的版本,否则会在同一文件夹中构建两次。

许可证

参见 LICENSE。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。