使用说明
AvaloniaMcp
主控程序 调试服务器 阿瓦洛尼亚 UI 应用。连接到正在运行的Avalonia应用程序,并提供15个实时检查、调试和交互工具,专为与GitHub Copilot等AI编码代理一起使用而设计。
它的作用
在Avalonia应用程序中添加一行,即可获得一个完整的诊断服务器,AI代理(或通过CLI的人类)可以使用该服务器:
- 检查 视觉/逻辑树、控件属性、样式和资源
- 调试 数据绑定、ViewModel和绑定错误
- 互动 --单击按钮、键入文本、在运行时更改属性
- 截图 --将窗口或单个控件捕获为PNG
建筑
┌─────────────────────────┐ Named Pipe ┌──────────────────────┐
│ Your Avalonia App │ ◄──── (avalonia-mcp-{pid}) ──── │ MCP Server │
│ │ │ │
│ ┌───────────────────┐ │ JSON request/response │ ┌────────────────┐ │
│ │ .UseMcpDiagnostics()│ │ ◄───────────────────────── │ │ 15 MCP Tools │ │
│ │ DiagnosticServer │ │ (stdio) │ │ CLI mode │ │
│ └───────────────────┘ │ │ └────────────────┘ │
└─────────────────────────┘ └──────────────────────┘
▲
│ MCP (stdio)
┌────┴────┐
│ VS Code │
│ Copilot │
└─────────┘
| 项目 | 描述 |
|---|---|
| AvaloniaMcp。诊断 | 库已添加到您的Avalonia应用程序中。启动命名管道诊断服务器。 |
| AvaloniaMcp。服务器 | MCP服务器(stdio)+CLI。连接到应用程序并显示所有工具。 |
| AvaloniaMcp。演示 | Avalonia应用程序示例,包括数据绑定、列表、样式——用于测试。 |
快速开始
1.将诊断添加到Avalonia应用程序
添加引用 AvaloniaMcp.Diagnostics 还有一行给你 Program.cs:
using AvaloniaMcp.Diagnostics;
public static AppBuilder BuildAvaloniaApp()
=> AppBuilder.Configure<App>()
.UsePlatformDetect()
.UseMcpDiagnostics() // ← add this line
.LogToTrace();
这将在启动时在应用程序内启动一个命名管道服务器。它对UI没有任何影响——所有的自检都是通过管道按需进行的。
2.将MCP服务器安装为.NET工具
# From the repo root:
dotnet pack src/AvaloniaMcp.Server -o nupkg
dotnet new tool-manifest # if you don't already have one
dotnet tool install AvaloniaMcp --add-source ./nupkg
验证:
dotnet avalonia-mcp cli --help
3.在VS Code/GitHub Copilot中配置
添加到您的 全球 MCP设置(Settings → MCP 或 ~/.vscode/mcp.json):
{
"servers": {
"avalonia-mcp": {
"type": "stdio",
"command": "dotnet",
"args": ["avalonia-mcp"]
}
}
}
或按工作区 .vscode/mcp.json:
{
"servers": {
"avalonia-mcp": {
"type": "stdio",
"command": "dotnet",
"args": ["avalonia-mcp"]
}
}
}
服务器会自动发现正在运行的Avalonia应用程序。如果多个应用程序正在运行,请传递PID:
"args": ["avalonia-mcp", "--pid", "12345"]
使用CLI
该工具还可以作为独立的CLI进行快速调试:
# Start your Avalonia app first, then:
dotnet avalonia-mcp cli list_windows
dotnet avalonia-mcp cli get_visual_tree --maxDepth 5
dotnet avalonia-mcp cli find_control --typeName Button
dotnet avalonia-mcp cli get_control_properties --controlId "#MyButton"
dotnet avalonia-mcp cli get_data_context
dotnet avalonia-mcp cli get_binding_errors
dotnet avalonia-mcp cli click_control --controlId "#MyButton"
dotnet avalonia-mcp cli input_text --controlId "#MyTextBox" --text "Hello"
dotnet avalonia-mcp cli set_property --controlId "#MyButton" --propertyName IsVisible --value false
dotnet avalonia-mcp cli take_screenshot
内置自动发现功能——如果只有一个应用程序在运行,则没有 --pipe 或 --pid 需要。
工具参考
检查
| 工具 | 参数 | 说明 |
|---|---|---|
list_windows |
-- | 列出所有打开的窗口,包括标题、大小、位置和状态 |
get_visual_tree |
maxDepth? |
具有类型、名称、边界和可见性的完整视觉元素层次结构 |
get_logical_tree |
maxDepth? |
XAML意图逻辑树(您声明的控件,而不是模板内部) |
find_control |
name?, typeName?, text? |
按名称搜索(#MyBtn),类型(Button),或文本内容 |
get_control_properties |
controlId |
所有Avalonia属性:值、类型、是否显式设置 |
数据和绑定
| 工具 | 参数 | 说明 |
|---|---|---|
get_data_context |
controlId? |
ViewModel类型和所有公共属性,序列化为JSON |
get_binding_errors |
-- | 所有带有错误消息和时间戳的断开绑定 |
视觉和风格
| 工具 | 参数 | 说明 |
|---|---|---|
take_screenshot |
controlId? |
将窗口或特定控件捕获为base64 PNG格式 |
get_applied_styles |
controlId |
CSS类、伪类(:pointerover, :pressed),风格设定者 |
get_resources |
controlId? |
资源字典条目(画笔、模板、转换器) |
get_focused_element |
-- | 当前关注的元素信息 |
交互
| 工具 | 参数 | 说明 |
|---|---|---|
click_control |
controlId |
模拟点击——对按钮执行绑定命令 |
set_property |
controlId, propertyName, value |
在运行时设置任何Avalonia属性 |
input_text |
controlId, text |
在TextBox或输入控件中键入文本 |
发现
| 工具 | 参数 | 说明 |
|---|---|---|
discover_apps |
-- | 查找启用了MCP诊断的Avalonia应用程序 |
控制标识符
许多工具接受 controlId 参数。支持三种格式:
| 格式 | 示例 | 它匹配什么 |
|---|---|---|
#Name |
#MyButton |
控制与 Name="MyButton" |
TypeName |
Button |
视觉树中该类型的第一个控件 |
TypeName[n] |
Button[2] |
该类型的第N个控件(0索引) |
运作原理
- 初创公司 —
UseMcpDiagnostics()启动命名管道服务器(avalonia-mcp-{pid})并将发现文件写入%TEMP%/avalonia-mcp/{pid}.json - 连接 --MCP服务器(或CLI)读取发现文件以查找管道名称,然后连接
- 请求/响应 --命名管道上以换行符分隔的JSON:
{"method":"list_windows","params":{}} - 界面线程 --为了安全起见,所有可视化树操作都被编组到Avalonia调度线程
- MCP协议 --服务器将管道响应封装到MCP中
tools/call结果超过stdio
需求
- .NET 10 SDK(预览版)
- 阿瓦罗尼亚11.2+
建筑
dotnet build
运行演示
# Terminal 1: Start the demo app
dotnet run --project src/AvaloniaMcp.Demo
# Terminal 2: Interact via CLI
dotnet avalonia-mcp cli list_windows
dotnet avalonia-mcp cli find_control --typeName Button
dotnet avalonia-mcp cli click_control --controlId "#IncrementBtn"
dotnet avalonia-mcp cli get_data_context
dotnet avalonia-mcp cli take_screenshot
许可证
麻省理工学院
