Labsco
MCP SERVER

WpfPilot MCP

by skuzadev

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

Desktop & OS Automation
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 — ranking, explaining, validating — exists precisely because picking a durable selector is the hard part. The optional probe is the other reason to look: binding errors, command state and validation are 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 by selector: click, type, select, toggle, expand, scroll, drag and drop, menus and dialogs — `wpf_click`, `wpf_type_text`, `wpf_select`, `wpf_toggle`, `wpf_drag_drop`, `wpf_open_menu_path`, `wpf_accept_dialog`
  • Waits and assertions with structured errors — `wpf_wait_for_visible`, `wpf_wait_for_text`, `wpf_assert_text`, `wpf_assert_enabled`, `wpf_assert_no_validation_errors`
  • DataGrid and tree work as first-class operations — `wpf_grid_find_row`, `wpf_grid_get_cell`, `wpf_grid_set_cell`, `wpf_grid_sort_by_column`, `wpf_tree_select_path`
  • Selector building, ranking, explanation and validation, so a test does not hang on a brittle path — `wpf_build_selector`, `wpf_rank_selectors`, `wpf_explain_selector`, `wpf_validate_selector`
  • Recording and replay, then test generation — `wpf_record_start`, `wpf_record_stop`, `wpf_replay`, `wpf_export_test`, `wpf_generate_smoke_test`, `wpf_export_page_object`
  • Accessibility checks: missing names, missing help text, tab order and keyboard access — `wpf_check_missing_names`, `wpf_check_tab_order`, `wpf_check_keyboard_access`, `wpf_assert_accessibility`
  • MVVM diagnostics through the optional probe: ViewModel properties, binding errors, command state, validation and dispatcher status — `wpf_probe_connect`, `wpf_get_viewmodel`, `wpf_get_binding_errors`, `wpf_get_command_state`, `wpf_get_dispatcher_status`
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