Windows computer use
Drive the local Windows desktop through the windows-computer-use MCP tools. The server runs on
this machine and controls the real displays, mouse, and keyboard.
Tools
- screenshot — see the screen:
desktop,display:N/display:primary|left|right, a window (window:<title>, even if it is behind others),foreground, or aregion. Returns a downscaled image + acapture_id. - act — input, batched:
left_click,type,key,scroll,drag,hold_key,paste,click_element,mouse_move_relative, … Coordinates are in the last screenshot's image space. - record — record N seconds → one timestamped frame montage + an mp4 (judge motion/animation).
- play — run a timed input script at a cadence while recording (games):
hold w 2,look 200 0,tap space,probe/untilfor telemetry-driven early stop. - window — find / focus / close /
get_text(read via UI Automation, no screenshot) /click_element(click a control by accessible name) — all token-cheap, no image. Usecloseto close UWP/Store apps (their window PID isn't the killable process). - process —
launch(incl.shell:truefor URLs /ms-settings:/ Store apps),kill,wait,shell,wait_for_file,wait_for_window(readiness — use instead of guessing a sleep). - system —
displays(monitor layout, DPI, scale),cursor, clipboard get/set.
Rules that prevent the common mistakes
- Coordinates are in the last
screenshot's image space; the server maps them to physical pixels. A newer capture invalidates old coordinates — each screenshot returns acapture_idandacterrors if you click against a stale frame. Pass thatcapture_idtoactwhen precision matters. - Keyboard input goes to the FOREGROUND window. To type into an app, pass
act focus="<title>"(focuses atomically before the batch) or callwindow focusfirst.acttells you which window actually received the input. - To read text, use
window get_text(UIA + OCR fallback) instead of a screenshot — far cheaper, and it works without focusing the window. To click a labeled control, useclick_element— it invokes via UI Automation and works even when the window isn't foreground. - Multi-monitor: call
system displaysfirst; target a monitor withdisplay:0/display:primary|left|right. Displays are 0-indexed. - Readiness: after
process launch, usewait_for_windowrather than sleeping. - Screenshots are inline + downscaled; video and full-resolution captures are written to a file and the path/link is returned.