LabscoMCP early access ↗
skuzadevMCP SERVER · OFFICIAL PROJECT

WpfPilot MCP

Drive a Windows WPF application by semantic selectors — inspect the UI tree, click, assert, record a workflow and generate xUnit + FlaUI tests.

by skuzadev ↗Desktop & OS Automation✓ Official

LABSCO SUMMARY

Selectors, not coordinates — and the probe sees what UI Automation cannot.

Coordinate-based desktop automation breaks on the first layout change; everything here goes through semantic selectors, and the tooling around them — building, explaining, validating and healing — exists precisely because picking a durable selector is the hard part. The optional probe is the other reason to look: with it connected, wpf_why_disabled checks a button's command state and the app's binding errors, the WPF bugs that never show up in a screenshot. Scope is deliberately local — it acts on UI visible to your user account, and mutating actions are audited under local app data.

What it is

A local MCP server for WPF desktop apps. It attaches to a running process, works through UI Automation with selectors rather than screen coordinates, and adds an optional in-process probe that reaches ViewModels, bindings, commands and validation that UI Automation cannot see.

What you get

  • Session management and UI inspection: attach to or launch an app, list windows, capture and diff semantic snapshots — wpf_attach, wpf_launch_app, wpf_list_windows, wpf_snapshot, wpf_diff_snapshot
  • Actions, waits and checks through four verb tools rather than one tool per gesture — wpf_act performs UI actions, wpf_query reads UI state, wpf_wait waits for it and wpf_assert verifies it, with wpf_capabilities listing the verbs, query kinds and wait conditions they accept
  • Apps and windows handled directly — wpf_list_apps, wpf_select_window, wpf_focus_window, wpf_get_window_state, wpf_set_window_state, wpf_close_window, wpf_detach
  • Selector building, explanation, validation and healing, so a test does not hang on a brittle path — wpf_build_selector, wpf_explain_selector, wpf_validate_selector, wpf_heal_selector
  • Recording and replay, then export as a test — wpf_record_start, wpf_record_stop, wpf_replay, wpf_export_recording, wpf_export_test
  • Screenshots and failure evidence — wpf_screenshot, wpf_screenshot_element, wpf_highlight_element, wpf_capture_failure_artifacts
  • The optional in-app probe — wpf_probe_install_instructions, wpf_probe_connect, wpf_probe_status — and wpf_why_disabled for why a control is disabled; the separate ViewModel, binding and command tools appear only with WPFPILOT_MCP_TOOLS=full, which the project reserves for maintainer debugging

Requirements

Windows 10 or 11 and a WPF application to automate. Node.js 18+ if you use npx; no .NET SDK is needed for the release binary or the npm launcher. Add npx -y @skuzadev/wpfpilot-mcp to your client — the launcher downloads the Windows release binary on first run and proxies stdio to it. If the target app runs as administrator, the MCP client may need to be elevated too. The MVVM diagnostics require the probe to be installed in the app and ProbeHost.Start() to have been called.

Setup effort

One command — npx -y @skuzadev/wpfpilot-mcp