faze79/WPFVisualTreeMcp

πŸ–₯️ OS Automation🟒 Verified Active
0 Views
0 Installs

️⃣ 🏠 πŸͺŸ - Inspect, debug and drive running WPF (.NET desktop) apps: visual tree, dependency properties, data bindings and binding errors, DataContext, and screenshots with open popups/menus included, plus clicking, item selection, text input and keyboard shortcuts. Auto-injects into any running WPF process (x64/x86) with no source changes. dotnet tool install -g WpfVisualTreeMcp

Quick Install

One-Click IDE Configuration
claude_desktop_config.json
{
  "mcpServers": {
    "faze79-wpfvisualtreemcp": {
      "command": "npx",
      "args": [
        "-y",
        "faze79-wpfvisualtreemcp"
      ]
    }
  }
}
Or

Using an AI coding agent (Claude Code, Cursor, etc.)? Copy a ready-made prompt that tells it to fetch the setup instructions and install this server for you.

Documentation Overview

WpfVisualTreeMcp

Build Release .NET 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, data bindings, screenshots, clicks, text input and keyboard, against any running WPF process, no source changes needed.

Demo: an AI agent drives a WPF app and finds a binding bug

An AI agent queries controls by visible text, fills the form, selects a list item, clicks Submit β€” then explains why the Status box stayed empty by pulling the app's binding errors. Every step is one MCP tool call (or CLI command).

Quickstart (60 seconds)

  1. Download and extract the latest release zip (requires the .NET 8 Desktop Runtime).
  2. Register it in your MCP client β€” for Claude Code, add to .mcp.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.

Overview

WpfVisualTreeMcp is a Model Context Protocol (MCP) server that allows AI coding agents (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

  • Screenshot Capture - Capture window/element screenshots visible to AI agents
  • 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), 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 registryvariesvaries

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

Installation

Option 1: .NET tool / NuGet (Recommended)

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:

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 WpfVisualTreeMcp.Server.exe

Option 3: Build from Source

git clone https://github.com/faze79/WpfVisualTreeMcp.git
cd WpfVisualTreeMcp
dotnet build -c Release

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:

# Add to current project only
claude 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:

claude mcp list

Option 2: Project-level JSON Configuration

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

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

Option 3: Global JSON Configuration

Add to ~/.claude/settings.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):

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

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:

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 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' captures real on-screen pixels including open popups, dropdowns and context menus
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 β€” UI Automation invoke (Invoke/Toggle/Select/ExpandCollapse) by default, physical=true for a real OS mouse click (auto-scrolls into view), click_type='double'/'right' for double/right clicks. 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.

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

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 β€” record a driven workflow, export an xUnit + driver test
  • 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:

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

    code .
    # or
    start WpfVisualTreeMcp.sln
    
  3. Build and run tests:

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

    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                 # 20 WPF tools (17 inspection + click/set-text/send-keys)
β”‚   β”‚   β”œβ”€β”€ Cli/CliRunner.cs            # One-shot CLI front-end (v0.4.0)
β”‚   β”‚   └── Services/                   # Process & IPC management
β”‚   β”œβ”€β”€ WpfVisualTreeMcp.Inspector/     # Injected DLL (.NET Framework 4.8)
β”‚   β”œβ”€β”€ 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 (48 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.8 + .NET 8.0-windows (Inspector, dual-target)
  • IPC: Named Pipes for server-to-application communication
  • Tools: 28 tools auto-discovered via [McpServerTool] attributes (22 read-only inspection incl. wpf_wait_for, wpf_snapshot, wpf_diff, wpf_evaluate_binding, wpf_explain_triggers + 6 state-changing: wpf_click_element, wpf_select_item, wpf_set_text, wpf_send_keys, wpf_set_property, wpf_revert_property)
  • 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.

Related MCP Servers

dimpagk92/cellar

πŸ¦€ πŸ“‡ 🏠 🍎 🐧 - Hybrid computer-use runtime. Fuses accessibility tree + Chrome DevTools Protocol + vision into structured context with per-element confidence. 4 MCP tools (see/act/think/perceive). Continuous awareness engine (Cortex) with freshness + side-effect detection. Works offline with Ollama + local models.

πŸ–₯️ OS Automation0 views
fixed-width/glass

πŸ¦€ 🏠 🍎 πŸͺŸ 🐧 - Gives a coding agent a build β†’ see β†’ interact β†’ debug loop over the native GUI app it is writing: launch the app, screenshot it, read its accessibility tree, inject mouse/keyboard/gestures, tail its logs, and diff frames to confirm a change landed. Drives apps as an external black box with no app integration, so any toolkit or language works. 30 tools with text-first responses (element ids, diffs, waits) so the agent need not screenshot every step, plus optional sandboxing of the launched app. Backends: X11, Wayland, Windows, macOS, Android emulators, and the iOS Simulator.

πŸ–₯️ OS Automation0 views
Harusame64/desktop-touch-mcp

πŸ“‡ πŸ¦€ 🏠 πŸͺŸ - Windows desktop automation for LLM agents with entity-based actions instead of coordinate-only clicking. Uses UIA, CDP, screenshots, keyboard/mouse/clipboard, and terminal control, plus entity leases, verified delivery, causal context, and interaction memory to reduce silent UI automation failures.

πŸ–₯️ OS Automation0 views
juergenkoller-software/freezetext-mcp

🏠 🍎 - MCP server for FreezeText β€” OCR anything on your Mac screen. Freeze the screen and extract text via Apple Vision (videos, popups, protected PDFs), OCR a region or base64 image, and manage a searchable capture history. 12 tools.

πŸ–₯️ OS Automation0 views

Engagement

Views
0
Installs
0
Upvotes
0

Views and upvotes are unique per visitor network (hashed IP). Installs count copy actions.

Status

Health: Active

Recent health check succeeded.

Last checked: 7/29/2026, 4:31:10 AM

Unclaimed listing (imported or pending owner verification). Claim it β†’
β˜… Spotlight Slot

Feature Your MCP Server

Get maximum visibility for your server across our directory, search results, and detail pages.

Spotlight Your Server

Own this project?

This directory is pre-filled from public sources. Claim via GitHub README, site badge, or DNS TXT to get the verified badge and attach your website.

Claim this listing

Promote this listing

Optional paid placement. Free listings stay free forever.

Share & Embed

Add our SVG badge (dark/light directory styles) or embeddable widget to your site.