wpf_actLABSCO 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_actperforms UI actions,wpf_queryreads UI state,wpf_waitwaits for it andwpf_assertverifies it, withwpf_capabilitieslisting 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— andwpf_why_disabledfor why a control is disabled; the separate ViewModel, binding and command tools appear only withWPFPILOT_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
USE CASES
Finding out why a button is disabled
Ask why the control is disabled — with the probe connected, the answer also checks command state and binding errors — instead of guessing from the greyed-out control.
Turning a manual click-through into a test
Record the workflow, replay it to confirm, then export it as an xUnit test.
39 tools
Listed in project code.
wpf_assertwpf_attachwpf_build_selectorwpf_capabilitieswpf_capture_failure_artifactswpf_close_windowwpf_detachwpf_diff_snapshotwpf_explain_screenwpf_explain_selectorwpf_export_recordingwpf_export_testwpf_focus_windowwpf_get_app_metadatawpf_get_window_statewpf_heal_selectorwpf_highlight_elementwpf_launch_appwpf_list_appswpf_list_windowswpf_probe_connectwpf_probe_install_instructionswpf_probe_statuswpf_querywpf_record_startwpf_record_stopwpf_replaywpf_screenshotwpf_screenshot_elementwpf_select_windowwpf_session_statuswpf_set_window_statewpf_snapshotwpf_snapshot_elementwpf_validate_selectorwpf_waitwpf_watch_ui_changeswpf_why_disabledBEFORE YOU INSTALL
What to know first
Tools you get
39 tools registered in the project's code.
Requires
- npx on PATH
- Node.js 18+
INSTALLATION
Connect your client
Server setup
npx -y @skuzadev/wpfpilot-mcpMCP Clients
Claude Desktop, Claude Code, Cursor, Cline, Windsurf, JetBrains IDEs
{
"mcpServers": {
"wpfpilot-mcp": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"@skuzadev/wpfpilot-mcp"
]
}
}
}VS Code, Visual Studio
{
"servers": {
"wpfpilot-mcp": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"@skuzadev/wpfpilot-mcp"
]
}
}
}Continue
{
"mcpServers": [
{
"name": "wpfpilot-mcp",
"type": "stdio",
"command": "npx",
"args": [
"-y",
"@skuzadev/wpfpilot-mcp"
]
}
]
}Zed
{
"context_servers": {
"wpfpilot-mcp": {
"source": "custom",
"command": "npx",
"args": [
"-y",
"@skuzadev/wpfpilot-mcp"
]
}
}
}