A side-by-side look at the WPFVisualTreeMcp and Glasswarp MCP servers: transport, auth, tools, quality signals, and the config to install either one in Claude, Cursor, Windsurf or VS Code.
Verdict: choose WPFVisualTreeMcp for os automation work; choose Glasswarp for os automation as a local process. You can also run both side by side in one mcpServers block.
wpf_list_processes, wpf_attach, wpf_get_visual_tree.GLASSWARP_API_KEY.demos.list, demos.get, rigs.list.Rows where the two servers differ are marked.
| Spec | ||
|---|---|---|
| Category | OS Automation | OS Automation |
| Quality signal | 56/100 · Good | 57/100 · Good |
| Install command | Not confirmed yet | Confirmed |
| Transport | — | Local subprocess (stdio) |
| Auth | No auth required | Not declared |
| Pricing | Free | Not declared |
| Required env vars | None listed | GLASSWARP_API_KEY |
| Verified owner | Community listing | Community listing |
| GitHub stars | 20 | 0 |
| Directory activity | 4 views 0 installs 0 upvotes | 2 views 0 installs 0 upvotes |
| Tools | 35 | 16 |
| Full listing | View WPFVisualTreeMcp | View Glasswarp |
wpf_list_processesList all running WPF applicationswpf_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 elementwpf_find_elementsQuery elements by type, x:Name, **visible text**, property values and visibility; results include text, automation id, enabled/visible state and screen boundswpf_find_elements_deepSame query filters without result limit, across all windows including adorners/popupswpf_capture_screenshotCapture a screenshot of the window or element (returns image); `mode='screen'` includes popups and menus; `full_content=true` with render mode captures scrollable contentwpf_reportAggregate current binding/validation errors, UI state counts and recent binding traces, with explicit scan limits and coveragewpf_recordStart, stop, inspect or clear a workflow recording with stable selectorswpf_assertAssert a dependency-property value; successful assertions are included in active recordingswpf_replayReplay a workflow against a fresh app, stopping at the first failed stepwpf_export_testExport a stopped recording as a runnable xUnit project or workflow JSONdemos.listList showcase run contracts (id, title, install, command). Read-only catalog — does NOT start a session, touch a rig, or run solvers. Use when the user asks for Minesweeper/Mona Lisa/Paint demos or you need the glasswarp-demo command. Prefer demos.get for one full card. For ad-hoc UI work use rigs.list → session.start → screen.observe instead.demos.getReturn one showcase run contract (install, command, needs, framing). Does NOT execute the demo or control a PC. Call after demos.list when you know the demo_id. If the client can run shell, offer the command; if chat-only, show the card. Do not replace this with a slow MCP click loop for solver demos.rigs.listList Windows machines (rigs) paired to this API key: id, name, online, api_access_enabled, and USABLE flag. Read-only — does not start a session. Call first before start_session. A rig is USABLE only when online AND the owner enabled API access. If none are USABLE, tell the user to install the host agent, pair in Console → Rigs, and enable API access — never ask for OS passwords.session.startStart a metered desktop session on a USABLE rig from rigs.list. Side effects: begins wall-clock billing, shows an on-screen “API session active” indicator, enables observe/input until session.end. Idle sessions auto-end after ~15 minutes. Always call session.end when done or abandoning. Do not call if no USABLE rig exists. Returns session_id and Live View URL (owner console login required).session.endEnd an active session. Side effects: stops billing, runs host safety_restore, closes apps launched via app.launch. Always call when finished or abandoning — do not leave sessions open. Safe to call once; further observe/input on that session_id will fail.screen.observeRead the current screen: UIA targets (numbered ids + native coords) and a text summary. Does not move mouse/keyboard. Default image=false (no JPEG) for speed; set image=true only when you must judge pixels visually (then max_width≈960, quality≈60). If changed=false, JPEG is omitted even when requested — do not re-analyze; wait or act differently. If dirty is null, assume changed. Prefer input.send_actions for multi-step UI; observe after meaningful steps, not after every click. Target ids are valid only until the next UI change.input.click_targetLeft/right/middle-click a UIA target by id from the latest screen.observe (uses native center coords). Prefer over input.click_xy. Side effect: real mouse click on the remote Windows desktop. Do not reuse target_id after the screen may have changed — re-observe first. For click→type→keys sequences, use input.send_actions (one turn) instead of chaining this tool.input.click_xyClick at native screen coordinates (0…native_width-1, 0…native_height-1 from screen.observe). Last resort when no suitable UIA target exists — prefer input.click_target. Never use JPEG/downscaled pixel coords. Side effect: real mouse click on the remote desktop.input.type_textType a Unicode string into the currently focused control via native input. Does not click first — focus the field (input.click_target / input.send_actions) before calling. Side effect: keystrokes on the remote desktop. For form fills (click → type → tab/enter), prefer input.send_actions in one call.input.send_keysSend a key or chord to the focused window (e.g. enter, tab, ctrl+s, alt+f4, win). Side effect: real key events on the remote desktop. Prefer bundling into input.send_actions when the shortcut follows a click/type in the same planned sequence. Use input.type_text for literal strings, not this tool.input.dragPress-move-release mouse drag in native capture coordinates. Use for drawing, sliders, selection boxes, and drag-and-drop. Side effect: mouse_down → moves → mouse_up on the remote desktop. Prefer input.send_actions if the drag is one step in a longer predictable sequence.input.scrollMove the cursor to native (x,y) then apply a vertical mouse-wheel delta. Side effect: scroll on whatever is under that point. Negative delta scrolls toward the bottom of the page. Prefer input.send_actions when scroll is part of a multi-step sequence. Re-observe after scrolling lists/pages before clicking targets.Paste either block (or both) into your client config, e.g. claude_desktop_config.json or ~/.cursor/mcp.json. We only show a config when the install command is confirmed.
No confirmed install command for WPFVisualTreeMcp yet — follow the setup steps linked from its listing page rather than a guessed package name.
{
"mcpServers": {
"glasswarp": {
"command": "npx",
"args": [
"-y",
"@glasswarp/mcp"
],
"env": {
"GLASSWARP_API_KEY": "YOUR_GLASSWARP_API_KEY_HERE"
}
}
}
}