Wpf Visual Tree

io.github.faze79由 GitHub 帳號 faze79 發布v0.20.0更新於 Oct 25, 2026

Inspect and drive WPF apps: trees, bindings, screenshots, mouse dragging and touch gestures.

已驗證STDIO僅桌面瀏覽器自動化開發者工具

概覽

AI 產生的概覽

檢查、偵錯並操控執行中的 WPF 桌面應用程式:視覺化樹狀結構、繫結、螢幕擷取、輸入手勢與工作流程錄製。

可以做什麼
  • 列出並附加到執行中的 WPF 處理程序,可自動注入目標應用程式
  • 讀取視覺化與邏輯樹狀結構、相依性屬性、DataContext、資源、樣式與繫結,並診斷繫結錯誤
  • 依 AutomationId、類型、名稱、文字或屬性值尋找元素,並擷取視窗或元素畫面
  • 透過點擊、輸入文字、快速鍵、滑鼠移動、滾輪、拖曳與觸控手勢操控應用程式
  • 錄製、重播工作流程並匯出為 xUnit 測試,對元素狀態做快照與比對,並可即時修改或還原相依性屬性
適用情境
適合讓助理查看執行中的 WPF 應用程式,說明控制項為何停用、排查繫結或觸發程序問題、核對版面配置,或在不修改原始碼的情況下重現並腳本化 UI 操作。
執行需求
僅限 Windows 10/11,需要 .NET 8、9 或 10 桌面執行階段(使用工具或 dnx 安裝時另需 .NET SDK)。可透過 NuGet/.NET 工具、發行壓縮檔、MCPB 套件或原始碼建置安裝;需有執行中且可被檢查的 WPF 應用程式,可透過自動注入或自架 Inspector 參考達成。未宣告帳號或 API 金鑰。
安裝前請注意
許多工具會變更執行中的應用程式:點擊、輸入文字、送出按鍵、拖曳、觸控手勢、選取項目與即時修改屬性都會作用於真實應用程式及其資料。自動注入會將 DLL 載入其他處理程序,Codex 外掛每次啟動都會從 nuget.org 解析最新套件。更新程式會取代已安裝檔案,並需重新啟動用戶端與被檢查的應用程式。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Wpf Visual Tree,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。

其他 MCP 客戶端

參照 儲存庫 中的啟動說明。

README

WpfVisualTreeMcp

[Build] [Release] [.NET: 8, 9, 10] [WPF on .NET Framework: 4.7.2, 4.8, 4.8.1] [License: MIT] [MCP Compatible]

Let AI agents see, debug and drive running WPF apps. Snoop + Playwright for AI, exposed over the Model Context Protocol — visual tree, bindings, screenshots, mouse dragging, touch gestures, text input and keyboard. Inspect running apps without source changes; touch behavior depends on the application's input support.

[Demo: native WPF drag-and-drop, touch gestures, form automation and binding diagnostics]

Drag-and-drop, move a canvas item, tap, hold, pan, pinch to zoom and rotate — then query controls, fill a form, select an item and diagnose a binding error. The gesture sequence records real WPF input through MCP, targets controls by AutomationId and checks the application's response, just like the automated tests.

Watch the animated demo directly.

New in v0.20.0: Verified support for WPF on .NET 9, .NET 10 and .NET Framework 4.8.1, on both x86 and x64. CI exercises automatic injection and self-hosting across all six supported target frameworks, plus the installed C# SDK from .NET 8, 9 and 10 test projects. The x86 injection helper can also use .NET 9 or 10 when .NET 8 is absent.

The WpfVisualTreeMcp.Automation C# SDK drives virtualized DataGrids/TreeViews, waits for controls, manages WPF windows and streams property changes. The 38-tool MCP server and CLI share the inspection and input engine, including direct AutomationId targeting.

Workflow recording/replay/xUnit export, aggregate diagnostics, full-content screenshots and .NET Framework 4.7.2 support remain available from v0.16.0. Thanks to @miloszkukla for the compatibility and screenshot work in PR #22.

Quickstart (60 seconds)

  1. Download and extract WpfVisualTreeMcp-vX.Y.Z-win-x64.zip from the latest release (requires a .NET 8, 9 or 10 Desktop Runtime).
  2. Register it in your MCP client — for Claude Code, add to .mcp.json:
    json
    {  "mcpServers": {    "wpf-visual-tree": {      "command": "C:/path/to/WpfVisualTreeMcp.Server.exe",      "args": []    }  }}
  3. Ask your agent: "Look at my running WPF app and tell me why the Save button is disabled."

Prefer the terminal? The same exe is a full CLI: WpfVisualTreeMcp.Server.exe help. From v0.14.0, run wpfinspect update (or WpfVisualTreeMcp.Server.exe update) to update the installation you launched. See updating. Using Codex? Follow the plugin installation to install the MCP configuration and skill together.

C# test SDK

WpfVisualTreeMcp.Automation exposes the inspection and input engine as C# objects, with direct process attachment and AutomationId locators. The package includes the injection payload and works without starting an MCP server or CLI.

ComponentSupported frameworks
WPF application being automated.NET Framework 4.7.2, 4.8, 4.8.1; .NET 8, 9, 10
C# project consuming the Automation NuGet.NET 8, 9, 10
ArchitecturesWindows x86 and x64; use an x64 test process to control either

The application and test project can use different frameworks: for example, a .NET 10 test can automate a .NET Framework 4.8.1 application. The SDK's net8.0 library works in .NET 9/10 test projects; it is not a .NET Framework test library. The compatibility matrix is exercised before release, including actual runtime-version checks. Framework 4.x target builds run on the installed 4.8.1 runtime, since those runtimes update in place.

powershell
dotnet add package WpfVisualTreeMcp.Automation --version 0.20.0
csharp
using WpfVisualTreeMcp.Automation;
await using var app = await WpfApplication.AttachAsync(processId);await app.ByAutomationId("LoadButton").ClickAsync();await app.ByAutomationId("StatusTextBox").WaitForTextAsync(    "loaded", timeout: TimeSpan.FromSeconds(30));await app.ByAutomationId("Canvas").PanAsync(100, 0);await app.ByAutomationId("Canvas").ZoomAsync(1.5);

Text waits compare the exact property value: not loaded does not match loaded. Timeouts throw with the expected and last observed values. Property predicates, cancellation, drag, touch, assertions, inspection and recording/replay are also available. Attached sessions leave the app running on disposal; launched sessions own and clean up their process by default.

csharp
await app.ByAutomationId("Orders").AsDataGrid()    .RowByKey("Id", "42").Cell("Quantity").SetTextAsync("7");await app.ByAutomationId("Folders").AsTreeView().Node("Projects", "WPF").SelectAsync();await app.ByAutomationId("Enabled").CheckAsync();await using var changes = await app.ByAutomationId("StatusTextBox").ObservePropertyAsync("Text");

The SDK is a separate package from the MCP tool WpfVisualTreeMcp. See installation, API examples and requirements.

Overview

WpfVisualTreeMcp is a Model Context Protocol (MCP) server that allows AI coding agents (Codex, Claude Code, Cursor, GitHub Copilot) to inspect and interact with running WPF applications. Think of it as giving your AI assistant the same capabilities as tools like Snoop WPF or Visual Studio's Live Visual Tree.

Why This Matters

Debugging WPF UI issues traditionally requires manual inspection with specialized tools. This project bridges that gap by exposing WPF inspection capabilities through MCP, enabling AI agents to:

  • Understand UI structure during code reviews
  • Diagnose binding errors automatically
  • Suggest fixes for layout issues
  • Assist with UI refactoring tasks
  • Analyze visual tree hierarchies in real-time

Features

Core Inspection

  • Process Discovery - List all running WPF applications available for inspection
  • Visual Tree Navigation - Traverse the complete visual tree hierarchy
  • Logical Tree Access - Navigate the logical tree structure
  • Property Inspection - Read all dependency properties of any UI element

Binding & Resources

  • Binding Analysis - Inspect bindings with converter, StringFormat, FallbackValue, MultiBinding support
  • DataContext Inspection - View DataContext type, properties, INPC status, and inheritance chain
  • Binding Error Detection - Automatically capture and report binding errors with classification
  • Resource Enumeration - Browse resource dictionaries at any scope
  • Style Inspection - View applied styles and templates

Search & Monitoring

  • Element Search - Find elements by type, name, or property values
  • Deep Search - Search entire tree including AdornerLayer and Popup elements
  • Property Watching - Monitor property changes in real-time

Interaction & Export

  • Touch Gestures (v0.13.0) - wpf_touch_gesture / CLI touch: native tap, long press, swipe, pinch and rotation with one or two contacts. Includes an interactive demo and WPF compatibility guidance.
  • Mouse Drag - wpf_drag / CLI drag: drag between visual-tree elements or by a local displacement, with left/right/middle buttons, configurable duration and local start/end points. Supports slider thumbs, splitters and drag-and-drop. See the parameters and examples.
  • Screenshot Capture - Current source uses auto capture for native hosted content and reports the selected mode; explicit render rejects unsupported native areas. Capture window/element screenshots visible to AI agents; full_content=true / CLI --full-content captures scrollable content, including virtualized lists, and restores the original scroll position
  • Element Highlighting - Visually highlight elements in the running app
  • Control Click (v0.4.0) - Click elements via UI Automation (Invoke/Toggle/Select/ExpandCollapse) or a real OS mouse click
  • Set Text (new in v0.5.0) - Fill a TextBox/ComboBox/PasswordBox via UI Automation IValueProvider.SetValue, with a TextBox.Text / PasswordBox.Password / reflected-Text fallback, or physical=true to type via OS keyboard input (full Unicode BMP)
  • Send Keys (new in v0.5.0) - Send keyboard shortcuts (Ctrl+S, Alt+F4, F5, Enter, Ctrl+Shift+F, ...) to an element or the focused window via OS keyboard input
  • Layout Information - Get detailed layout metrics
  • Tree Export - Export visual tree to XAML or JSON format
  • Auto-Injection - Inject Inspector into running WPF processes (no source changes needed); multi-architecture since v0.6.0 — a 64-bit server can inject into 32-bit WPF apps via a bundled WpfInjectorHelper.exe

Dual-Mode CLI (new in v0.4.0)

The same WpfVisualTreeMcp.Server.exe runs as either an MCP stdio server (no arguments, default) or as a one-shot CLI (any recognised subcommand). Useful when the MCP server isn't connected, for scripting, and for verifying the pipeline manually. Run WpfVisualTreeMcp.Server.exe help for the full command list. Output is JSON on stdout; diagnostics go to stderr.

How it compares

vs. the general tool categories:

WpfVisualTreeMcpSnoopFlaUI / WinAppDriverGeneric computer-use (screenshot + mouse)
ConsumerAI agents (MCP) + humans (CLI)Humans (GUI)Test code (C#)AI agents
Visual tree, dependency properties✅✅❌ (UIA view only)❌
Data bindings, binding errors, DataContext✅✅❌❌
Find controls by visible text / properties✅manualpartial (UIA)pixel guessing
Click / type / select / shortcuts✅❌✅✅ (blind)
Wait for UI conditions (no sleep loops)✅❌✅❌
Element screenshots + popup-aware screen capture✅❌partialfull screen only
Works without target source changes✅ (auto-injection)✅✅✅

vs. other WPF MCP servers. Most WPF MCP servers are built on UI Automation (FlaUI): they read the accessibility tree, and can only reach WPF internals — bindings, DataContext, ViewModel state — if you install their in-process probe into the app you want to inspect. This server takes the Snoop route instead: it injects at runtime, so it reads the real visual tree and diagnoses binding errors and DataContext with zero changes to the target app — nothing to add to your build, nothing to ship into production.

WpfVisualTreeMcpUIA-based servers (FlaUI)Other injection-based servers
Sees the real visual tree (not just the UIA view)✅ injection❌ accessibility tree✅
Binding errors + DataContext without a probe in the target✅❌ (needs in-process probe)partial
Interaction surfaceclick (UIA + physical, double/right), drag, touch gestures, set-text w/ read-back, send-keys, select-item (virtualized)click / type / selectusually invoke-only
Wait for element conditions✅ wpf_wait_for✅❌
Popup / dropdown / context-menu screenshots✅ screen modepartialscreenshot only
Cross-architecture injection (x64 ⇄ x86)✅n/a❌
Dual-mode: MCP server and one-shot CLI✅❌❌
DistributionNuGet (dnx/tool), official MCP registry, Codex plugin + skillvariesvaries

In short: UIA-based tools see what accessibility exposes, and computer-use agents see pixels. This project gives the agent the same insider view a WPF developer has in Snoop — with no probe to install in the target app — plus the widest set of hands to act on it, over a protocol every AI coding tool speaks.

Installation

Prerequisites

  • Windows 10/11
  • .NET 8.0 SDK or later
  • A WPF application to inspect

Building and running the complete compatibility suite requires the .NET 10 SDK, .NET 8/9/10 Desktop runtimes for x64 and x86, and .NET Framework 4.8.1.

Installation

Option 1: .NET tool / NuGet (Recommended)
bash
dotnet tool install -g WpfVisualTreeMcp     # installs the `wpfinspect` command

The package is also published as an MCP server package (PackageType: McpServer), so MCP clients that support NuGet-hosted servers can launch it directly:

bash
dnx WpfVisualTreeMcp                        # runs the MCP stdio server
Option 2: Download Release

Download the latest release from GitHub Releases:

  1. Download WpfVisualTreeMcp-vX.X.X-win-x64.zip
  2. Extract to a folder (e.g., C:\Tools\WpfVisualTreeMcp)
  3. The MCP server executable is server/WpfVisualTreeMcp.Server.exe
Desktop extension (MCPB)

Clients that support MCP bundles can import WpfVisualTreeMcp-v0.20.0-win-x64.mcpb. This Windows x64 bundle includes the server runtime and a self-contained x86 injection helper. A smaller compact bundle provides the same tools with a reduced runtime for catalogs with upload limits. Update either bundle through the client's extension UI. See the MCPB guide for requirements, packaging and verification.

Option 3: Build from Source
bash
git clone https://github.com/faze79/WpfVisualTreeMcp.gitcd WpfVisualTreeMcp# Visual Studio Developer PowerShell (C++ v143 toolset + Windows SDK)./scripts/Build-NativeBootstrapper.ps1dotnet build -c Release

For injection build requirements, package layout, and troubleshooting, see the Injector README. Injecting into x86 apps requires the x86 .NET 8 runtime for the helper.

Updating

powershell
wpfinspect update --check   # current/latest stable version; no installation changeswpfinspect update           # download and schedule installation automaticallywpfinspect update --status  # confirm completion or inspect a failure
# For an extracted release or a published folder, invoke that exact executable:C:\Tools\WpfVisualTreeMcp\server\WpfVisualTreeMcp.Server.exe update

update is available from v0.14.0. For an older global tool, bootstrap it once:

powershell
dotnet tool update -g WpfVisualTreeMcp

For an older portable copy, extract the latest release and use its server folder.

The command updates only the installation it was launched from. Global and custom --tool-path tools download the exact official NuGet package, then use dotnet tool update from that staged package (a .NET SDK is required). Temporary NuGet download failures and publication delays receive up to four attempts, with 10, 20 and 30 seconds between attempts. If preparation fails, installed files are unchanged; retry later. Portable folders receive the latest stable GitHub release's complete server payload, verified against its SHA-256 digest. A source build under bin is left to the source/build workflow; local manifest tools and dnx caches are left to their package manager. --check explains which installation was detected.

On Windows, installation starts in a hidden worker after the CLI exits so its executable is unlocked. A scheduled result means the worker was launched, not that installation finished. Run update --status until it reports updated or failed; a failed status returns exit code 1. JSON output includes the log path. Status, logs and portable backups are stored under %LOCALAPPDATA%\WpfVisualTreeMcp\updates, separately for each installation.

Close other MCP instances using the same files before updating. The updater does not stop applications: occupied files cause an error, and portable replacement failures trigger restoration from backup. Unrelated files and MCP configuration are preserved. After success, restart the MCP client and previously inspected WPF apps so both server and injected Inspector use the new version. Other installed copies and any separately copied self-hosted Inspector require their own update.

Configuration

The server uses the official Microsoft/Anthropic MCP SDK for .NET, providing guaranteed compatibility with Claude Code and other MCP clients.

Claude Code

Option 1: Command Line (Recommended)

Use the claude mcp add command to add the server directly:

bash
# Add to current project onlyclaude mcp add wpf-visual-tree -- C:/path/to/WpfVisualTreeMcp/publish/WpfVisualTreeMcp.Server.exe
# Add globally (available in all projects)claude mcp add --scope user wpf-visual-tree -- C:/path/to/WpfVisualTreeMcp/publish/WpfVisualTreeMcp.Server.exe

You can verify the server was added:

bash
claude mcp list

Option 2: Project-level JSON Configuration

Create or edit .mcp.json in your project root:

json
{  "mcpServers": {    "wpf-visual-tree": {      "command": "C:/path/to/WpfVisualTreeMcp/publish/WpfVisualTreeMcp.Server.exe",      "args": []    }  }}

Option 3: Global JSON Configuration

Add to ~/.claude/settings.json:

json
{  "mcpServers": {    "wpf-visual-tree": {      "command": "C:/path/to/WpfVisualTreeMcp/publish/WpfVisualTreeMcp.Server.exe",      "args": []    }  }}

Important Notes:

  • Use absolute paths to the built .exe file
  • Use forward slashes (/) in paths on Windows
  • Build in Release mode for production: dotnet build -c Release
  • Restart Claude Code after configuration changes
Cursor

Add to your Cursor settings (.cursor/mcp.json):

json
{  "mcpServers": {    "wpf-visual-tree": {      "command": "C:/path/to/WpfVisualTreeMcp/publish/WpfVisualTreeMcp.Server.exe",      "args": []    }  }}
Codex plugin

The repository includes a WPFVisualTreeMcp Codex plugin that installs the MCP configuration and a wpfvisualtreemcp skill together. It runs the latest stable NuGet package, not a build of the checked-out source. No machine-specific executable path is required.

Prerequisites for this installation method:

  • Windows 10/11 and a local Codex client with plugin support.
  • .NET 10 SDK, version 10.0.300 or newer within .NET 10 for dotnet dnx, plus the .NET 8 runtime.
  • Internet access to nuget.org on each MCP launch to resolve the latest stable version. Downloaded packages are cached by .NET. For x86 injection, install the x86 .NET 8 runtime as well.

From the repository root, register the local marketplace and install the plugin. You can also download WpfVisualTreeMcp-v0.20.0-codex-plugin.zip from GitHub Releases, extract it, and run these commands from the extracted root:

powershell
codex plugin marketplace add .codex plugin add wpfvisualtreemcp@WPFVisualTreeMcp

Restart Codex or open a new session, then ask it to inspect your running WPF app. The skill can also be invoked explicitly as $wpfvisualtreemcp.

Alternatively, install directly from the upstream Git repository without cloning it manually:

powershell
codex plugin marketplace add https://github.com/faze79/WPFVisualTreeMcp.gitcodex plugin add wpfvisualtreemcp@WPFVisualTreeMcp

Use codex plugin list --marketplace WPFVisualTreeMcp to check the installation. This is a repository marketplace; it does not imply publication in OpenAI's public plugin directory. If your client lacks codex plugin add, use a plugin-capable client or the direct MCP configuration below.

To use your own build, or to avoid the .NET 10 SDK requirement, register the published executable directly instead of installing the plugin:

powershell
codex mcp add wpf-visual-tree -- "C:/Tools/WpfVisualTreeMcp/server/WpfVisualTreeMcp.Server.exe"

Replace the example with the actual executable path. Avoid enabling both this manual entry and the plugin at the same time, which would start two servers.

Plugin files are under plugins/wpfvisualtreemcp/; the marketplace entry is .agents/plugins/marketplace.json. The plugin uses Codex's supported .codex-plugin/plugin.json compatibility format. Its manifest version identifies the plugin configuration and skill, independently of the NuGet server version. The MCP launch omits a package version and uses --no-http-cache to resolve the latest stable release from nuget.org on each start. Prereleases are excluded. Restart the MCP server or Codex to pick up a new server release; a running server does not update in place. Never add CLI subcommands such as list to the MCP launch arguments: no subcommand selects stdio mode.

The plugin starts in its own directory and includes a global.json selecting SDK 10.0.300 or a newer stable .NET 10 SDK. This keeps a target project's older SDK pin from disabling dotnet dnx. The noninteractive launch and x64/x86 Inspector injection were verified with SDK 10.0.402 and Codex CLI 0.162.1. The SDK pin keeps the launch on the tested .NET 10 command-line behavior.

The compatibility MCP configuration uses "cwd": ".", which Codex resolves relative to the installed plugin root. This resolution was verified through codex mcp list --json after installation in an isolated profile. After editing local plugin files, rerun codex plugin add wpfvisualtreemcp@WPFVisualTreeMcp to refresh the installed copy, then open a new Codex session.

For a Git-backed marketplace, update the plugin configuration and companion skill with:

powershell
codex plugin marketplace upgrade WPFVisualTreeMcpcodex plugin add wpfvisualtreemcp@WPFVisualTreeMcp

For a local marketplace, update its source checkout before reinstalling the plugin. The companion skill covers mouse dragging, touch gestures and update behavior. wpfinspect update updates a separately installed CLI or portable copy; it does not refresh a plugin or its skill, and should not be used to modify the plugin's shared dnx package cache. See Updating for standalone installations.

Self-Hosted Mode (Recommended)

For your WPF application to be inspectable, add a reference to the Inspector DLL and initialize it on startup:

  1. Add a project reference to WpfVisualTreeMcp.Inspector

  2. In your App.xaml.cs:

csharp
using System.Diagnostics;using System.Windows;using WpfVisualTreeMcp.Inspector;
public partial class App : Application{    protected override void OnStartup(StartupEventArgs e)    {        base.OnStartup(e);
        // Initialize the WPF Visual Tree Inspector        InspectorService.Initialize(Process.GetCurrentProcess().Id);    }
    protected override void OnExit(ExitEventArgs e)    {        InspectorService.Instance?.Dispose();        base.OnExit(e);    }}

This enables the MCP server to connect to your application via named pipes for real-time inspection.

Usage Examples

List Running WPF Applications

Use the wpf_list_processes tool to show all running WPF applications.

Attach and Inspect Visual Tree

Attach to the MyApp.exe WPF application and show me the visual tree of the main window.

Find Binding Errors

Check the attached WPF application for any binding errors and explain what's causing them.

Search for Elements

Find all Button elements in the visual tree that have IsEnabled set to false.

Export Visual Tree

Export the visual tree of the current window to JSON format so I can analyze the structure.

Architecture

┌─────────────────────────────────────────────────────────────┐│                    AI Agent (Claude Code)                    │└─────────────────────────┬───────────────────────────────────┘                          │ MCP Protocol (stdio)                          ▼┌─────────────────────────────────────────────────────────────┐│                 WpfVisualTreeMcp Server                      ││  ┌─────────────────┐  ┌─────────────────┐  ┌─────────────┐  ││  │   MCP Handler   │  │  Tree Navigator │  │   Injector  │  ││  │  (Tools/Res.)   │  │   & Inspector   │  │   Manager   │  ││  └────────┬────────┘  └────────┬────────┘  └──────┬──────┘  │└───────────┼────────────────────┼───────────────────┼────────┘            │                    │                   │            └────────────────────┼───────────────────┘                                 │ Named Pipes / IPC                                 ▼┌─────────────────────────────────────────────────────────────┐│                   Target WPF Application                     ││  ┌─────────────────────────────────────────────────────────┐││  │              Injected Inspector DLL                      │││  │  • VisualTreeHelper access                              │││  │  • LogicalTreeHelper access                             │││  │  • Property/Binding inspection                          │││  │  • Resource dictionary enumeration                      │││  └─────────────────────────────────────────────────────────┘│└─────────────────────────────────────────────────────────────┘

For detailed architecture documentation, see docs/ARCHITECTURE.md.

Available Tools

ToolDescription
wpf_list_processesList all running WPF applications
wpf_attachAttach to a WPF application (supports auto_inject for DLL injection)
wpf_get_visual_treeGet the visual tree hierarchy (default depth: 25, max: 100)
wpf_get_element_propertiesGet all dependency properties of an element
wpf_find_elementsQuery elements by exact AutomationId, type, x:Name, visible text, property values and visibility; results include text, automation id, enabled/visible state and screen bounds
wpf_find_elements_deepSame query filters without result limit, across all windows including adorners/popups
wpf_capture_screenshotCapture a screenshot of the window or element (returns image); mode='screen' includes popups and menus; full_content=true with render mode captures scrollable content
wpf_reportAggregate current binding/validation errors, UI state counts and recent binding traces, with explicit scan limits and coverage
wpf_record / wpf_get_recordingStart, stop, inspect or clear a workflow recording with stable selectors
wpf_assertAssert a dependency-property value; successful assertions are included in active recordings
wpf_replayReplay a workflow against a fresh app, stopping at the first failed step
wpf_export_testExport a stopped recording as a runnable xUnit project or workflow JSON
wpf_get_bindingsGet data bindings for an element (includes MultiBinding, converter, StringFormat)
wpf_get_binding_errorsList all captured binding errors
wpf_clear_binding_errorsClear the captured binding errors list
wpf_get_data_contextGet DataContext type, properties, INPC status, and inheritance chain
wpf_get_resourcesEnumerate resource dictionaries
wpf_get_stylesGet applied styles and templates
wpf_watch_propertyMonitor a property for changes
wpf_evaluate_bindingExplain why a property has its value — value source, and for bindings a hop-by-hop path resolution pinpointing where a broken binding fails
wpf_explain_triggersEvaluate Style and ControlTemplate triggers against the current state (condition, current value, active, setters) — 'why doesn't this trigger fire?'; and attribute a property's value to the style setter / active trigger that set it
wpf_snapshotCapture an element subtree's state (layout, visibility, brushes, text) under a label
wpf_diffDiff two snapshots — measure exactly what a change moved (property from→to, added/removed)
wpf_set_propertyLive-edit a dependency property at runtime (type-converted), to test a change without rebuilding. State-changing, reversible.
wpf_revert_propertyUndo wpf_set_property edits (one, filtered, or all) — restores the prior binding/value/default.
wpf_highlight_elementVisually highlight an element
wpf_click_elementClick a control by handle or AutomationId — pass automation_id="form.clear" directly; optional root_handle scopes lookup and duplicate IDs fail. UI Automation invoke by default, physical=true for a real OS mouse click, click_type='double'/'right' for double/right clicks. State-changing.
wpf_move_mouseMove/hover at a local point without clicking. Available from v0.17.0.
wpf_scrollWheel input vertically or horizontally; the app decides whether to scroll or zoom. Available from v0.17.0.
wpf_dragDrag with the mouse — source and target elements or relative displacement, local points, left/right/middle button, gradual movement and release cleanup. State-changing.
wpf_touch_gestureNative touch — tap, long press, swipe, two-finger pinch and rotation inside a visible element. Requires application touch support. State-changing.
wpf_select_itemSelect an item in a ComboBox/ListBox/ListView/TabControl by visible text or index — works with virtualized items. State-changing.
wpf_wait_forWait until an element is visible/exists/enabled/hidden, polling in the target app — no sleep-and-retry loops.
wpf_set_textSet text/value of a TextBox/ComboBox/PasswordBox — UI Automation IValueProvider.SetValue by default, physical=true to type via OS keyboard input. State-changing.
wpf_send_keysSend a keyboard shortcut (Ctrl+S, Alt+F4, F5, Enter, ...) to an element or the focused window. State-changing.
wpf_get_layout_infoGet layout information
wpf_export_treeExport visual tree to XAML or JSON

For complete tool documentation, see docs/TOOLS_REFERENCE.md.

All input actions accept automation_id instead of element_handle, including click, mouse movement, scrolling, drag, every touch gesture, selection, text and keyboard input. Assertions and property edits accept it too. IDs match AutomationProperties.AutomationId exactly and case-sensitively; duplicates fail. Use root_handle to scope lookup. Drag destinations accept target_automation_id and an independent target_root_handle. The same selectors work in recordings and exported tests.

text
wpf_touch_gesture(automation_id="Canvas", gesture="tap")wpf_touch_gesture(automation_id="Canvas", gesture="swipe", delta_x=80)wpf_touch_gesture(automation_id="Canvas", gesture="pinch", scale=1.5)wpf_drag(automation_id="Source", target_automation_id="Destination")wpf_set_text(automation_id="UserName", text="test")wpf_assert(automation_id="UserName", property_name="Text", expected_value="test")

CLI equivalents use --automation-id, --root, --target-automation-id and --target-root. Touch pan uses swipe, zoom uses pinch; the app must support touch/manipulations to react to those gestures.

Roadmap

Phase 1: Core Inspection ✅

  • Project structure and architecture
  • Process discovery and enumeration
  • Basic process attachment
  • Visual tree navigation
  • Property inspection
  • Element search

Phase 2: Advanced Features ✅

  • IPC communication via named pipes
  • Binding analysis and error detection
  • Resource dictionary enumeration
  • Style and template inspection
  • Property change monitoring (with notifications)

Phase 3: Interaction & Diagnostics ✅

  • Element highlighting overlay
  • XAML/JSON export
  • Screenshot capture (returns MCP ImageContentBlock)
  • DLL auto-injection into running WPF processes (x64/x86)
  • AdornerLayer and Popup visual tree traversal

Phase 4: CLI + Driving the App ✅ (v0.4.0 / v0.5.0)

  • Dual-mode executable (MCP stdio + one-shot CLI) (v0.4.0)
  • Control click via UI Automation patterns (v0.4.0)
  • Physical OS mouse click as opt-in fallback (v0.4.0)
  • User-level Claude Code skill bundling the CLI (v0.4.0)
  • Set text/value via UI Automation IValueProvider + fallbacks (v0.5.0)
  • Physical keyboard typing with Unicode BMP support (v0.5.0)
  • Keyboard shortcuts (Ctrl+S, Alt+F4, F5, ...) via OS input (v0.5.0)

Phase 5: Multi-architecture ✅ (v0.6.0)

  • Cross-bitness auto-injection (64-bit server → 32-bit target)
  • Architecture-matching WpfInjectorHelper.exe (32-bit .NET 8)
  • Removes v0.5.0 known limitation; both x86 and x64 WPF apps drivable

Phase 6: Query engine & full driving ✅ (v0.7.0)

  • Query elements by visible text, property values, visibility
  • Enriched results: text, automation id, enabled/visible state, screen bounds
  • wpf_select_item — select in ComboBox/ListBox/TabControl by text or index
  • Double / right click; scroll-into-view before physical input
  • Screen-mode screenshots (popups, dropdowns, context menus visible)
  • Set-text read-back verification; weak element-handle cache
  • Critical IPC serialization fix (request parameters were silently dropped)

Phase 7: Distribution & agent ergonomics ✅ (v0.7.1 / v0.8.0)

  • NuGet package, installable via dnx / dotnet tool install (MCP server package type)
  • Published to nuget.org (trusted publishing / OIDC) and the official MCP registry
  • Binding-error capture fixed (was never wired up), IPC parameter-drop fix
  • wpf_wait_for — wait for an element/condition, no sleep-and-retry loops
  • Concurrent IPC connections (a long wait no longer blocks other commands)

Next up

Shipped in v0.13.0: mouse dragging and native touch gestures, with MCP/CLI parity, sample demos, input cleanup, and real desktop validation across net48 x86/x64 and net8 x64. Shipped in v0.14.0: CLI self-update with version checks and installation status. Shipped in v0.15.0: Codex plugin marketplace, companion skill and plugin ZIP. Shipped in v0.16.0: workflow recording/replay/xUnit export, aggregate diagnostics, full-content screenshots and .NET Framework 4.7.2 compatibility.

The "change → measure → is it effective?" loop is complete: live-edit a property, then diff a before/after snapshot to see exactly what moved.

  • wpf_set_property / wpf_revert_property — live-edit a dependency property, then undo (v0.9.0)
  • wpf_snapshot / wpf_diff — before/after snapshot to verify a change's effect (v0.10.0)
  • wpf_evaluate_binding — explain why a property has its value; resolve a binding path hop-by-hop (v0.11.0)
  • wpf_record → wpf_export_test — stable-selector replay and fresh-process xUnit tests, including drag/touch (v0.16.0)
  • wpf_report — bounded aggregate diagnostics with explicit coverage (v0.16.0)
  • .NET Framework 4.7.2 and full-content scroll screenshots (v0.16.0)
  • Inspector-only NuGet package for self-hosted mode (reference instead of injection)
  • Streaming binding-error / property-change notifications to the MCP client
  • WinUI 3 support

See docs/ROADMAP.md for the full prioritized plan (rationale, design notes, effort, and suggested sequencing).

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

Development Setup

  1. Clone the repository:

    bash
    git clone https://github.com/faze79/WpfVisualTreeMcp.gitcd WpfVisualTreeMcp
  2. Open in Visual Studio 2022 or VS Code:

    bash
    code .# orstart WpfVisualTreeMcp.sln
  3. Build and run tests:

    bash
    dotnet builddotnet test
  4. Run the sample WPF app for testing:

    bash
    dotnet run --project samples/SampleWpfApp

Project Structure

WpfVisualTreeMcp/├── src/│   ├── WpfVisualTreeMcp.Server/        # MCP Server (.NET 8) - Uses official MCP SDK│   │   ├── Program.cs                  # Server initialization with MCP SDK│   │   ├── WpfTools.cs                 # 38 inspection, interaction and workflow tools│   │   ├── Cli/CliRunner.cs            # One-shot CLI front-end (v0.4.0)│   │   └── Services/                   # Process & IPC management│   ├── WpfVisualTreeMcp.Inspector/     # Injected DLL (Framework 4.7.2/4.8/4.8.1; .NET 8/9/10)│   ├── WpfVisualTreeMcp.Injector/      # Managed injection logic (CreateRemoteThread; net48 + net8.0)│   ├── WpfVisualTreeMcp.InjectorHelper/# x86 .NET 8 helper exe for cross-arch injection (v0.6.0)│   ├── WpfVisualTreeMcp.Bootstrapper/  # Native C++ DLL for CLR hosting│   └── WpfVisualTreeMcp.Shared/        # Shared models & IPC contracts├── samples/│   └── SampleWpfApp/                   # Test application├── tests/│   ├── WpfVisualTreeMcp.Tests/         # Unit tests│   └── WpfVisualTreeMcp.IntegrationTests/ # Live WPF integration tests├── publish/                            # Published server + native DLLs│   └── native/{x64,x86}/              # Architecture-specific bootstrapper└── docs/                               # Documentation

Technical Details

  • MCP SDK: Built with the official C# MCP SDK from Microsoft/Anthropic
  • Protocol: JSON-RPC 2.0 over stdio transport
  • Target Framework: .NET 8.0 (Server) / .NET Framework 4.7.2, 4.8 and .NET 8.0-windows (Inspector)
  • IPC: Named Pipes for server-to-application communication
  • Tools: 38 tools auto-discovered via [McpServerTool] attributes, covering inspection, diagnostics, interaction and workflow recording/testing. Replay performs recorded actions; full-content screenshots may temporarily scroll controls.
  • CLI: same executable runs as one-shot CLI when given a subcommand (Program.cs routes via CliRunner.IsCliCommand)

Acknowledgments

License

This project is licensed under the MIT License - see the LICENSE file for details.

來源:README.md,提交 8183220

工具

0
SourceWeft 曾在隔離沙箱中以無憑證方式啟動該軟體包一次,以列出其工具,但未能完成:該軟體包類型無法在沙箱中執行。

版本歷史

7
  1. v0.20.0最新Oct 25, 2026
  2. v0.18.0Oct 25, 2026
  3. v0.17.0Oct 22, 2026
  4. v0.16.0Oct 19, 2026
  5. v0.15.0Oct 19, 2026
  6. v0.13.0Oct 18, 2026
  7. v0.12.0Sep 16, 2026

評分

已滿足適用檢查項的 50%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通25 分

    請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。

  • 已宣告認證方式10 分

    請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。

  • 已列出工具15 分

    請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。

  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分