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.
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.
- 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`
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.
One command — npx -y @skuzadev/wpfpilot-mcp
