mcpField
X
XamlMcp

XamlMcp

本地服务
github.com/trrahul开发工具2812 周前更新

关于 XamlMcp

XamlMcp 是开源的 XAML MCP 服务与 AI 检查工具包,面向 Avalonia、WPF、WinUI 3 和 .NET MAUI 应用。它让 MCP 客户端检查并操作正在运行的应用,适合需要自动化调试或界面探查的开发者。

主要功能

  1. 01遍历可视树与逻辑树
  2. 02读写属性并检查样式与资源
  3. 03截取窗口或节点的 PNG 截图
  4. 04合成点击、按键、文本与滚轮输入
  5. 05通过认证的本地传输观察变化

适用场景

  1. 01让 AI 助手检查正在运行的 WPF 或 Avalonia 界面结构
  2. 02调试绑定错误与调度器失败
  3. 03在 Android 设备上检查 .NET MAUI 应用

MCP 相关

XamlMcp 是本地 stdio MCP 服务,向 Claude Code、Codex 等 MCP 客户端暴露 list-apps、tree、props、input、action 等工具。

配置

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

暂未收录安装方式

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

代码仓库
安装包
nugetXamlMcp.Server1.0.0-preview.2

工具

还没有获取到工具列表

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

详细介绍

XamlMcp

XamlMcp 是一款开源的 XAML MCP 服务和 AI 检查工具包,适用于 Avalonia、WPF、WinUI 3 和 .NET MAUI。它让 Claude Code、Codex、GitHub Copilot 和其他 MCP 客户端能够检查并驱动正在运行的应用:遍历视觉树或逻辑树,读取和写入属性,检查样式和资源,捕获屏幕截图,发送输入,调用命令和自动化模式,并通过经过身份验证的本地传输观察变化。

请参阅 XamlMcp 安装与配置指南,了解适用于受支持框架和 AI 客户端的精简设置流程。

当前版本为 1.0.0-preview.3。它支持 Avalonia、现代 .NET WPF、独立部署且未打包的 WinUI 3,以及运行于 Windows 和 Android 的 .NET MAUI。协议版本 2 已稳定。原生 MAUI 节点、iOS 和 Mac Catalyst 暂不支持。

请参阅更新日志,了解面向用户的版本历史;参阅框架功能与工具矩阵,了解各工具的支持情况和能力限制。预览版发布指南介绍了各个包的用途、安装选项和验证命令。

软件包

软件包说明
XamlMcp.Avalonia用于 Avalonia 应用的进程内 Agent(net8.0,Avalonia 11.3.18+ 和 12.x)
XamlMcp.Wpf用于现代 .NET WPF 应用的进程内 Agent(net8.0-windows)
XamlMcp.WinUI用于未打包 WinUI 3 应用的进程内 Agent(Windows App SDK 2.3.1)
XamlMcp.Maui用于 .NET MAUI 10.0.80 的逻辑 Agent(net10.0、Windows 和 Android API 24+;屏幕截图需要 API 26+)
XamlMcp.Windows.InputWindows 框架 Agent 使用的共享防护型 Win32 原始输入核心
XamlMcp.Agent.Hosting与框架无关的桌面发现、身份验证和命名管道主机
XamlMcp.Protocol共享 JSON-RPC 协议契约——DTO 和帧处理;不依赖 UI 框架
XamlMcp.ServerStdio MCP 服务:名为 xamlmcp 的 dotnet tool,用于将 AI 客户端连接到正在运行的 Agent

安装

前提条件:你检查的应用可以面向 .NET 8 或更高版本,但 xamlmcp 工具(以及从源代码构建此仓库或示例)需要 .NET 10 SDK/runtime。

为你的 UI 框架添加 Agent 软件包:

dotnet add package XamlMcp.Avalonia --version 1.0.0-preview.3
dotnet add package XamlMcp.Wpf --version 1.0.0-preview.3
dotnet add package XamlMcp.WinUI --version 1.0.0-preview.3
dotnet add package XamlMcp.Maui --version 1.0.0-preview.3

Agent 要求的最低版本是 Avalonia 11.3.18。如果项目锁定了较旧的引用(当前的 avalonia.app 模板锁定为 11.3.0),还原会因 NU1605 软件包降级错误而失败——请将 Avalonia.* 软件包引用升级到至少 11.3.18。

安装 MCP 服务工具:

dotnet tool install --global XamlMcp.Server --version 1.0.0-preview.3

你也可以不进行全局安装,直接运行服务:

dnx [email protected]

附加 Avalonia Agent

有两种入口可显式选择启用诊断。只有按构建启用 Agent(选项 B)或按启动启用 Agent(选项 A)时,才会开始监听:

using XamlMcp.Avalonia;

// Option A - fluent, in BuildAvaloniaApp. Compiled in, but INERT unless the
// XAML_MCP=1 environment variable is set when the app launches.
public static AppBuilder BuildAvaloniaApp()
    => AppBuilder.Configure<App>()
        .UsePlatformDetect()
        .AttachXamlMcp();

// Option B - on the Application instance (e.g. in OnFrameworkInitializationCompleted).
// Marked [Conditional("DEBUG")]: the CALL SITE disappears from YOUR Release builds.
public override void OnFrameworkInitializationCompleted()
{
    this.AttachXamlMcp();
    base.OnFrameworkInitializationCompleted();
}

为什么有两种形式?[Conditional] 要求方法返回 void,因此流畅式 AppBuilder 重载无法使用它,而是通过环境变量进行门控。为什么不在软件包中直接使用 #if DEBUG?这样会根据此软件包打包时的编译方式进行门控,完全无法获知你的应用配置。两种重载分别根据你的构建配置或启动环境进行门控。

请注意两者的区别:选项 B 的调用会从 Release 二进制文件中完全移除;选项 A 的代码会包含在 Release 中,但除非启动时存在 XAML_MCP=1,否则不会生效——任何能够控制启动环境的人都可以启用它。如果你使用流畅式写法,但需要彻底排除它,请用你自己的 #if DEBUG 包裹 .AttachXamlMcp() 这一行。

附加 WPF Agent

在 OnStartup 中对 WPF Application 调用扩展方法:

using System.Windows;
using XamlMcp.Wpf;

public partial class App : Application
{
    protected override void OnStartup(StartupEventArgs e)
    {
        this.AttachXamlMcp();
        base.OnStartup(e);
    }
}

WPF 方法使用 [Conditional("DEBUG")],因此调用点会从使用该方法的应用的 Release 构建中消失。没有可通过环境变量启用的 WPF 重载。Agent 使用执行附加操作的 Application.Dispatcher。由 WPF 次要 UI 线程拥有的窗口和控件不在支持范围内。

附加 WinUI Agent

在 WinUI UI 线程上附加,显式注册每个 Window,并将调用放在应用的诊断构建门控内:

using Microsoft.UI.Xaml;
using XamlMcp.WinUI;

public partial class App : Application
{
    private WinUiXamlMcpSession? _xamlMcp;
    private IDisposable? _windowRegistration;

    protected override void OnLaunched(LaunchActivatedEventArgs args)
    {
        var window = new MainWindow();
#if DEBUG
        var session = WinUiXamlMcp.Attach();
        _xamlMcp = session;
        _windowRegistration = session.RegisterWindow(window);
        window.Closed += async (_, _) =>
        {
            _windowRegistration?.Dispose();
            await session.DisposeAsync();
        };
#endif
        window.Activate();
    }
}

Attach() 不会被条件编译:调用方负责设置 #if DEBUG 或等效的诊断门控。一个会话支持一个 DispatcherQueue,以及该队列上显式注册的窗口。最低支持版本为 Windows App SDK 2.3.1、目标框架 net8.0-windows10.0.19041.0、Windows 10 1809(10.0.17763.0)和 win-x64。

WinUI 支持非打包模式。使用 WindowsPackageType=None、 WindowsAppSDKSelfContained=true,并发布到一个全新的目录:

dotnet publish MyWinUiApp.csproj -c Release -r win-x64 --self-contained true -o artifacts/winui

发布输出必须保留生成的 .xbf 和 .pri 资源。不支持 MSIX/包身份、证书、Store 分发、XAML Islands 和多个 UI 线程。

附加 .NET MAUI Agent

在构建 MAUI 应用时,于应用的诊断构建门控内调用 UseXamlMcp():

using XamlMcp.Maui;

public static MauiApp CreateMauiApp()
{
    var builder = MauiApp.CreateBuilder()
        .UseMauiApp<App>();

#if DEBUG
    builder.UseXamlMcp();
#endif

    return builder.Build();
}

同一软件包和 UseXamlMcp() 调用适用于非打包的 Windows 应用,以及运行 MAUI 10.0.80 的可调试 Android 应用。该软件包不会检查使用方的配置,因此调用方必须设置 #if DEBUG 或等效的诊断门控。Android 项目必须将 SupportedOSPlatformVersion 设为 24.0 或更高版本。截图需要 API 26 或更高版本。

在 Windows 上,Agent 会在 %LOCALAPPDATA%/XamlMcp/instances/ 下写入发现文件(使用 XAML_MCP_DIR 可覆盖该目录),并通过当前用户的命名管道提供 JSON-RPC 2.0 服务。在 Android 上,它只监听设备环回地址,并在应用私有存储中保存每次启动的描述符。服务通过可调试的 run-as 访问读取该描述符,并且仅在连接期间创建由其管理的 adb forward。两种传输方式都要求在任何检查调用之前提供每次启动的令牌。

要发现 Android 应用,请将其应用 ID 传递给 MCP 服务。授权设备在线数量超过一个时,请明确选择设备:

claude mcp add xamlmcp -- xamlmcp --android-package dev.example.app --android-device emulator-5554

Windows 构建所需的前置条件是 .NET 10 SDK 和 MAUI Windows 工作负载。Android 还需要 .NET Android 工作负载和 Android SDK 平台工具(adb)。不支持 iOS 和 Mac Catalyst。

连接 AI 客户端

XamlMcp 是本地 stdio MCP 服务。Claude Code 或 Codex 会在客户端会话需要时启动它;无需运行持久服务进程。

此代码库包含适用于这两个客户端的可移植项目配置:

这两种配置都通过 dnx 直接运行固定版本的预览版 NuGet 软件包,因此需要 .NET 10 SDK,但无需全局安装工具。克隆代码库后,打开新的客户端会话并验证注册:

claude mcp get xamlmcp
codex mcp get xamlmcp

若要为你的用户帐户或从其他项目注册固定版本的预览版,请运行:

claude mcp add --scope user xamlmcp -- dnx [email protected]
codex mcp add xamlmcp -- dnx [email protected]

或者,全局安装该工具并注册其 xamlmcp 命令:

dotnet tool install --global XamlMcp.Server --version 1.0.0-preview.3
claude mcp add --scope user xamlmcp -- xamlmcp
codex mcp add xamlmcp -- xamlmcp

如果客户端已有名为 xamlmcp 的服务,请先移除或更新该条目,再添加新的服务。根据需要使用 claude mcp remove xamlmcp --scope <local|user|project> 或 codex mcp remove xamlmcp。

接下来启动经过插桩的应用。使用 Avalonia 的 fluent 附加形式时,请设置 XAML_MCP=1。然后让客户端依次调用 list-apps → attach(instanceId) → 下方任意工具。 整数 PID 附加仍是 Windows 桌面的兼容方式。

工具用途
list-apps正在运行的已插桩应用(不透明实例 ID、平台和已清理的元数据;桌面条目还包含 pid)
attach连接到一个应用;报告其各工具的能力标志
detach释放当前应用连接及其传输资源
tree视觉/逻辑树快照;节点 ID 的来源
search按自动化 ID/类型/名称/样式类/伪类/文本查找节点
ancestors节点的祖先链
props属性及其值、来源/优先级、自动化模式和命令槽
set-prop写入属性,或清除本地值(unset)
styles已应用的样式选择器和设置器(受能力限制)
bindings活动绑定、来源/路径/状态/错误、DataContext 来源和模板标识
failures在可选的操作关联游标之后,获取有界的绑定/调度器故障证据
resources获取节点或应用作用域中可见的已解析资源
pseudo-class切换 :pointerover、:pressed 等状态
screenshot窗口或节点的 PNG 图像,可选包含同次捕获的节点映射 — 以真正的 MCP 图像形式返回
wait-for有界轮询节点是否存在、可见、已启用/已聚焦,或是否满足属性谓词
hit-test按深度优先顺序返回逻辑坐标处的视觉堆栈,并包含节点引用和缩放信息
input合成点击、按键、文本和滚轮操作
action自动化模式(invoke/toggle/select/…)和绑定的 ICommand
assets列出不透明的框架资源标识符(avares://、WPF pack、xamlmcp-asset:/// 或 maui-asset:///)
open-asset读取资源(图像以图像形式返回,文本以文本形式返回)
dialog-wait驱动程序,可选启用:等待应用打开的原生对话框(文件选择器、消息框)
dialog-act驱动程序,可选启用:对其执行操作 — set-file-name、accept、cancel、select-button
window-list驱动程序,可选启用:列出应用的顶层窗口及其状态和边界
window-act驱动程序,可选启用:对窗口执行 activate/move/resize/close 操作

AI 客户端作者需要了解以下三点:

  • 定位: 节点工具接受精确的 {snapshotId, nodeId} 目标,或使用 automationId、name、type、text 或 styleClass 的定位器,还可选择通过 within 限定范围。定位器 必须唯一匹配,除非明确指定 nth;如果存在歧义,工具会返回带类型的候选项,而不会 静默选择节点。

  • 观察: 每个会改变状态的工具(set-prop、pseudo-class、input、action) 都会等待一个稳定窗口(默认为 250 ms),并返回变更摘要。对于快速操作序列,可传入 settleMs: 0 或 observe: false。在 Avalonia 和 WPF 上,同一结果还包含 failureCursor;将其传给 failures,即可仅检索该操作之后观察到的绑定或调度器故障。可选的精确 categories 参数可筛选结果页。当 truncated 为 true 时,将 nextCursor 传回以获取下一页,避免跳过证据。 游标会在分离或替换连接时过期。

  • 快照: 只要节点仍然有效,精确节点引用在当前快照及之前的三个快照中均可使用。对于必须经重新查询仍能继续的工作流,请使用定位器;遇到 stale-snapshot 或 stale-node 错误时,表示需要重新解析目标。

WPF 功能说明
  • 已启用并经实时验证的功能包括 tree、按类型/名称/文本 search、ancestors、属性、资源、屏幕截图、路由输入、 操作、观察和打包资源。
  • WPF 没有类似 Avalonia 的类或伪类集合。样式类/伪类搜索和 pseudo-class 修改会返回 unsupported-capability。
  • 已启用 styles,但功能有意受限:WPF 提供已声明的样式、setter、触发器和值来源,而非完整的已应用选择器级联。请读取结果中的 degraded 和 degradationReason。
  • 已启用 bindings。它会报告简单和复合绑定声明、当前状态和验证错误、DataContext 继承、模板化父级,以及命名的控件/内容/项目/标题模板槽。WPF 不会保留直接逸出到应用代码中的转换器异常;绑定表达式中体现的转换器失败会报告为 converter-error。
  • 已启用 failures,可捕获有界的绑定跟踪和调度程序异常证据。它只会在首次修改或查询 failures 之前开始捕获,会保留现有的 WPF 跟踪侦听器,也不会将调度程序异常标记为已处理。WPF 要求进行进程级跟踪刷新,而公共 API 无法撤销此操作;分离时会移除 XamlMcp 的侦听器并恢复其源级别,但框架的内部跟踪基础设施在该进程中仍保持初始化状态。
  • 路由输入会引发 WPF 事件,并报告机制 routed;它不声称等同于物理鼠标、焦点、捕获或 Mouse.DirectlyOver。非空的 modifiers 会返回 unsupported-capability,因为路由事件构造无法注入修饰键状态。 input-raw 为 false,因为公共的 InputManager.ProcessInput 验证也未能满足这些要求。
  • WPF 屏幕截图通过 RenderTargetBitmap 渲染。单独的弹出窗口必须通过其自身的 tree ref 捕获;原生子 HWND 和 GPU/空域内容不在此渲染范围内。
  • assets 会枚举 SDK 生成的 *.g.resources,并且只打开由其自身提供的标识符。这是编译器约定——WPF 没有公共的包资源枚举 API——普通复制的 Content 文件不会被列出。
WinUI 功能说明
  • 已启用并通过实时验证的功能包括可视化 tree、类型/名称/文本 search、祖先节点、资源、屏幕截图、语义操作、 命令槽、未打包资源和有界观测。
  • tree.logical=false 和 props.complete=false。属性枚举使用文档中列出的已知依赖属性目录;目录之外的读取和写入会返回类型化错误,而不会声称属性枚举完整。
  • styles 已启用,但处于降级状态,因为 WinUI 不会公开完整的已应用选择器级联。屏幕截图使用 RenderTargetBitmap;原生 HWND、空域/GPU 内容和独立顶层界面仍受文档所述渲染限制。
  • input 仅在 mechanism: "raw" 时启用;路由注入会返回 unsupported-capability。原始点击、移动、滚轮、按键和输入文本使用受保护的 SendInput:已注册的所有者必须恰好是前台根窗口,指针坐标必须仍解析到该 HWND,显式指定的键盘目标必须能够接收焦点。这些检查和注入并非原子操作,因此原始输入仅适用于明确启用的诊断会话。
  • 伪类修改以及按样式类/伪类搜索仍处于禁用状态。视觉状态不会被呈现为伪类。
  • bindings 处于禁用状态并会返回 unsupported-capability;WinUI 不会通过完整的公共检查 API 公开所需的绑定表达式图。
  • failures 处于禁用状态,直至在 M38 中实现等效的公共框架证据。
  • 资源以未打包应用程序目录为根目录,使用不透明的 xamlmcp-asset:/// 标识符,强制执行路径包含限制和字节数限制,并拒绝路径遍历和重解析点路径。
  • 观测采用有界采样差异,并记录 Window/Popup 日志。请求范围快照时会生成新的快照,并使较早的节点引用失效,与其他桌面 Agent 的行为一致。
.NET MAUI 能力说明
  • tree 必须使用 scope: "logical"。节点引用仅标识 MAUI IVisualTreeElement 对象; 永远不会返回原生处理程序 PlatformView 对象。
  • 类型/名称/文本/样式类搜索、祖先、可绑定属性、资源、降级样式、 截图、平台操作、打包资源和有界观测已在 Windows 和 Android 模拟器上实时验证。
  • 属性枚举使用公共静态 BindableProperty 字段,按设计并不完整。 在目标类型允许的情况下,支持写入标量、枚举、颜色、厚度、矩形和点;复杂对象写入会返回类型化错误。
  • Windows 输入使用操作系统级原始注入,并报告 raw;不提供路由输入。 Android 通过 Activity/视图堆栈分发触摸、滚轮、按键和文本,并报告 routed;绝不提供原始输入。
  • 操作模式因节点和平台而异。公共 ICommand 插槽在两个平台上均可用。Windows 映射 WinUI 自动化提供程序;Android 映射无障碍操作。 Android 仅提供具有可验证节点本地后置条件的操作;通用 click/invoke 和绝对百分比 scroll 会被有意拒绝。读取 props.patterns 可查看单个节点确切接受的动词。
  • styles 有意采用降级实现。MAUI 视觉状态会报告为样式帧,而非协议伪类。伪类变更/搜索和原生树范围会返回 unsupported-capability。
  • bindings 已禁用,并会返回 unsupported-capability;MAUI 不会公开此契约所需的活动绑定表达式和源图。
  • 在 M38 实现等效的公共框架证据之前,failures 处于禁用状态。
  • 截图在 Windows 上使用 WinUI 渲染,在 Android 上使用 PixelCopy,并在普通视图上回退到 Canvas。原生/空域内容和未附加的处理程序仍受平台限制。
  • MauiAsset 项通过包的清单目标生成的不透明 maui-asset:/// 标识符公开。只有由 assets 签发的标识符才能打开。
  • 观测使用有界逻辑指纹和平台生命周期日志。限定范围的快照会生成新的引用;可选像素哈希受平台截图限制。
  • Android 支持 API 24+。截图需要 API 26+。iOS 和 Mac Catalyst 不受支持。

原生对话框和窗口管理(Windows,可选启用)

原生文件选择器和消息框是独立的 Win32 窗口——tree 无法看到它们,input 也无法访问它们。驱动程序在 XamlMcp.Server 内运行,以处理这一边界。默认关闭,且仅支持 Windows。在注册到 MCP 客户端的命令中启用它:

claude mcp add --scope user xamlmcp -- dnx [email protected] --enable-driver
codex mcp add xamlmcp -- dnx [email protected] --enable-driver

如果你安装了全局工具,请将 dnx [email protected] 替换为 xamlmcp。注册启用了 Driver 的命令之前,请移除或更新现有的 xamlmcp 客户端条目。

操作流程:点击打开对话框的按钮(input/action),然后 dialog-wait 会返回对话框引用及其结构(按钮自动化 ID、是否存在文件名编辑框——绝不包含控件值),接着由 dialog-act 以语义方式操作。 window-list/window-act 用于管理应用自身的顶层窗口(close 需要 confirm: true)。

范围与安全性:

  • 仅匹配归属于已附加应用进程的对话框,并且只匹配上次变更调用之后出现的对话框——绝不会触碰预先存在的窗口。
  • set-file-name 路径会根据 --driver-file-roots <p1;p2;…> 进行验证(默认值:你的 用户配置文件);任何不在范围内的路径都会导致类型化的 path-not-allowed 错误。
  • 不支持提权(UAC)应用和非交互式会话,并会报告类型化错误。
  • 对话框引用会在分离、对话框关闭或应用退出时失效——请重新运行 dialog-wait。

安全模型

  • 明确选择启用诊断 — 每个框架部分都会展示由调用方负责的构建或启动门控;只有应用选择启用后,才会开始监听。
  • 令牌优先握手。 每种 Agent 传输方式都必须先使用其每次启动时生成的令牌进行身份验证,然后才能分发任何检查方法。未经身份验证的调用会收到类型化错误,连接随即关闭。
  • 桌面端发现和管道。 Windows 命名管道使用 PipeOptions.CurrentUserOnly。在 Unix 上,发现文件仅对所有者可读写(目录权限为 0700,文件权限为 0600),并会在正常关闭时删除;服务端会清理 PID 已失效或已被复用的条目。
  • Android 私有发现。 描述符保存在应用私有存储中,服务端只能通过可调试的 run-as 读取。Agent 绑定到设备环回地址,服务端则创建并移除其拥有的确切 ADB 转发。令牌、私有路径、设备端口、主机端口和原始 ADB 输出都不会进入 MCP 结果或错误。
  • 令牌和桌面管道名称绝不会出现在 MCP 输出或错误消息中。
  • 一次仅允许一个经过身份验证的会话;后续客户端会在操作系统层面排队,直到当前会话结束。

示例

samples/SampleApp 是一个小型 Avalonia 应用,通过 .AttachXamlMcp() 接入,并提供每种工具都能操作的内容:一个菜单栏,以及涵盖选择、树、切换、文本、选择器和滚动/虚拟化控件的选项卡页面 — 这些也是控件交互矩阵测试套件端到端驱动的页面。运行并操作它:

XAML_MCP=1 dotnet run --project samples/SampleApp

samples/MauiSampleApp 是 Windows/Android MAUI 测试应用。Debug 构建中会启用 Agent 接入,Windows 目标则以未打包方式运行:

dotnet run --project samples/MauiSampleApp -f net10.0-windows10.0.19041.0

使用已安装的 SDK 工具构建其 Android 目标:

dotnet build samples/MauiSampleApp/MauiSampleApp.csproj -f net10.0-android -c Debug

(PowerShell:$env:XAML_MCP="1"; dotnet run --project samples/SampleApp。)

samples/WpfSampleApp 是 WPF 测试应用。其 Debug 构建会自动接入:

dotnet run --project samples/WpfSampleApp

samples/WinUiSampleApp 是独立的未打包 WinUI 控件实验室。它提供稳定名称以供检查,并涵盖样式和资源、所有受支持的操作模式、观察摘要、屏幕截图、弹出窗口和次级窗口根、文本和二进制资源,以及供 Driver 使用的原生文件对话框。Agent 接入仍限定在 #if DEBUG 内。

dotnet run --project samples/WinUiSampleApp -c Debug -p:Platform=x64

如需无人值守检查,请传入示例应用的屏幕外启动开关:

dotnet run --project samples/WinUiSampleApp -c Debug -p:Platform=x64 -- --hidden

使用以下命令运行其真实进程 MCP 覆盖测试:

dotnet test tests/XamlMcp.WinUI.Tests/XamlMcp.WinUI.Tests.csproj -c Debug --filter FullyQualifiedName~LiveWinUiSampleTests

交互式 Driver 功能默认不启用,因为它会打开原生桌面对话框:

$env:XAMLMCP_DESKTOP_TESTS = "1"
dotnet test tests/XamlMcp.WinUI.Tests/XamlMcp.WinUI.Tests.csproj -c Debug --filter FullyQualifiedName~WinUiDriverLiveTests

受保护的原始输入验证同样默认不启用,因为它会移动真实指针,并要求测试主机获得前台所有权:

$env:XAMLMCP_DESKTOP_TESTS = "1"
dotnet test tests/XamlMcp.WinUI.Tests/XamlMcp.WinUI.Tests.csproj -c Debug --filter FullyQualifiedName~LiveWinUiInputTests

如需验证可部署的未打包输出,请将 Release 发布到一个全新目录:

$publishDir = "artifacts/winui-sample/$([Guid]::NewGuid().ToString('N'))"
dotnet publish samples/WinUiSampleApp/WinUiSampleApp.csproj -c Release -r win-x64 `
  --self-contained true -p:Platform=x64 -p:WindowsPackageType=None -o $publishDir

输出必须包含 WinUiSampleApp.exe、WinUiSampleApp.pri、生成的 .xbf 文件,以及 Assets/fixture.txt 和 Assets/fixture.bin。

从源代码构建

dotnet build                                 # XamlMcp.slnx
dotnet test                                  # suite on Avalonia 11.3.x
dotnet test -p:AvaloniaTestVersion=12.1.0    # same suite on the 12.x line

解决方案包含 net10.0-android,因此完整还原/构建需要 .NET Android 工作负载。设备测试默认不启用:模拟器测试通道需设置 XAMLMCP_ANDROID_LIVE=1,实体设备测试通道还需设置 XAMLMCP_ANDROID_PHYSICAL=1。如果 ADB 报告了多个已授权设备,请设置 XAMLMCP_ANDROID_DEVICE。

许可证

Apache-2.0 — 请参阅 LICENSE。

评论

支持 Markdown

第一次接触 MCP?

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

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