/ Directory / Playground / Windows MCP
● Community CursorTouch ⚡ Instant

Windows MCP

by CursorTouch · CursorTouch/Windows-MCP

Computer-use for Windows — Claude reads the UI Automation tree (not just pixels), so it can drive Excel, Outlook, legacy LOB apps reliably.

Windows MCP exposes the Windows UI Automation API plus screenshot + input synthesis as MCP tools. Unlike pixel-only computer-use, it gives Claude a structured view of the desktop tree — windows, controls, names, automation IDs — so clicks land on the right control even when layouts shift. Built for automating the kind of internal Windows software that doesn't have an API.

Why use it

Key features

Live Demo

What it looks like in practice

windows-mcp-cursortouch.replay ▶ ready
0/0

Install

Pick your client

~/Library/Application Support/Claude/claude_desktop_config.json  · Windows: %APPDATA%\Claude\claude_desktop_config.json
{
  "mcpServers": {
    "windows-mcp-cursortouch": {
      "command": "uvx",
      "args": [
        "windows-mcp"
      ]
    }
  }
}

Open Claude Desktop → Settings → Developer → Edit Config. Restart after saving.

~/.cursor/mcp.json · .cursor/mcp.json
{
  "mcpServers": {
    "windows-mcp-cursortouch": {
      "command": "uvx",
      "args": [
        "windows-mcp"
      ]
    }
  }
}

Cursor uses the same mcpServers schema as Claude Desktop. Project config wins over global.

VS Code → Cline → MCP Servers → Edit
{
  "mcpServers": {
    "windows-mcp-cursortouch": {
      "command": "uvx",
      "args": [
        "windows-mcp"
      ]
    }
  }
}

Click the MCP Servers icon in the Cline sidebar, then "Edit Configuration".

~/.codeium/windsurf/mcp_config.json
{
  "mcpServers": {
    "windows-mcp-cursortouch": {
      "command": "uvx",
      "args": [
        "windows-mcp"
      ]
    }
  }
}

Same shape as Claude Desktop. Restart Windsurf to pick up changes.

~/.continue/config.json
{
  "mcpServers": [
    {
      "name": "windows-mcp-cursortouch",
      "command": "uvx",
      "args": [
        "windows-mcp"
      ]
    }
  ]
}

Continue uses an array of server objects rather than a map.

~/.config/zed/settings.json
{
  "context_servers": {
    "windows-mcp-cursortouch": {
      "command": {
        "path": "uvx",
        "args": [
          "windows-mcp"
        ]
      }
    }
  }
}

Add to context_servers. Zed hot-reloads on save.

claude mcp add windows-mcp-cursortouch -- uvx windows-mcp

One-liner. Verify with claude mcp list. Remove with claude mcp remove.

Use Cases

Real-world ways to use Windows MCP

Automate a Windows-only LOB app that has no API

👤 RPA engineers tired of UiPath licenses ⏱ ~60 min advanced

When to use: Internal app vendor won't expose an API; you need Claude to enter daily data.

Prerequisites
  • Windows 10/11 with the target app installed — Standard install
  • Python 3.10+ for uvx — winget install Python.Python.3.12
Flow
  1. Inspect the UI tree
    Launch the app BookingSystem.exe, then dump the UI tree of the main window. I want to see automation IDs.✓ Copied
    → Tree shows controls with AutomationId — not just nameless buttons
  2. Drive a happy path once
    Now: open the New Booking dialog, fill customer 'Acme Inc', date 2026-05-12, save. Take a screenshot at the end.✓ Copied
    → Booking saved; screenshot confirms
  3. Generalize and loop
    Read /work/bookings.csv. For each row, repeat the booking flow. Save screenshots into /work/runs/.✓ Copied
    → Each row processed; screenshots per booking

Outcome: Headless automation of a vendor app, replayable from a CSV.

Pitfalls
  • App uses custom controls (e.g. WinForms ListView with no AutomationId) — Fall back to coordinate clicks on a fixed window position; document the brittleness
  • Modal dialog steals focus mid-loop — Always check active window before send_keys; abort if unexpected
Combine with: filesystem

Extract data from Excel without an Excel API

👤 Analysts where IT won't enable COM/Office API ⏱ ~15 min intermediate

When to use: You can open Excel but can't programmatically.

Flow
  1. Open the file
    Launch Excel, open C:\reports\Q2.xlsx, focus the 'Sales' sheet.✓ Copied
    → Window title shows the file name
  2. Copy the range
    Select A1:D200, copy to clipboard, then read clipboard text.✓ Copied
    → Tab-separated table returned
  3. Save as CSV via filesystem
    Parse that into rows and save to /tmp/Q2-sales.csv.✓ Copied
    → CSV created

Outcome: Excel data in CSV form without poking at the COM API or installing third-party packages.

Pitfalls
  • Clipboard formats vary across Excel versions — Try CSV first; fall back to TSV via clipboard variants
Combine with: filesystem

Capture a desktop bug for a teammate while you're heads-down

👤 Devs juggling support ⏱ ~5 min beginner

When to use: A flake reproduces on your Win box and you want a clean screenshot + repro instructions.

Flow
  1. Repro and capture
    Take a screenshot of the active app window. Save as bug.png.✓ Copied
    → PNG written
  2. Annotate steps
    List the last 5 user-visible UI elements you interacted with — window titles, dialog labels — so I can paste this into the ticket.✓ Copied
    → Concrete element-level repro steps

Outcome: Tightly-scoped bug ticket without alt-tabbing.

Pitfalls
  • Screenshot includes private info — Crop the active window only, not full desktop
Combine with: github

Combinations

Pair with other MCPs for X10 leverage

windows-mcp-cursortouch + filesystem

Drive a desktop app from a CSV input

Read /work/orders.csv. For each row, click through the booking app.✓ Copied
windows-mcp-cursortouch + github

Capture a desktop bug and open an issue

Screenshot active window, then create a GitHub issue with the PNG and reproducer steps.✓ Copied

Tools

What this MCP exposes

ToolInputsWhen to callCost
list_windows (none) Find the target app free
get_ui_tree window_id? Discovery before clicking free
click automation_id | x,y Click a known control free
type_text text: str Enter text into focused field free
send_keys keys: str (e.g. 'ctrl+s') Hotkeys / modifiers free
screenshot window_id?, region? Visual confirmation free
launch_process exe: str Start the target app free
read_clipboard (none) After copy free

Cost & Limits

What this costs to run

API quota
None — local automation
Tokens per call
50–500 (UI tree dumps can be larger)
Monetary
Free OSS
Tip
Avoid dumping the full UI tree on every step — narrow by window_id

Security

Permissions, secrets, blast radius

Minimum scopes: control of the local desktop session
Credential storage: None — but Claude can see whatever's on screen
Data egress: Local; nothing leaves the machine unless you also grant a network MCP
Never grant: administrator account auto-launch remote access pairing

Troubleshooting

Common errors and fixes

Control not found by automation_id

App uses dynamic IDs or no IDs. Use get_ui_tree and match by name/role hierarchy

Verify: Inspect with Microsoft inspect.exe
Clicks land on wrong window

Always call set_focus on target window before click; check active window after

uvx install fails with 'wheel' error

Install Visual C++ Build Tools; some pywin32 deps need them

Alternatives

Windows MCP vs others

AlternativeWhen to use it insteadTradeoff
Anthropic Computer Use (pixel)You need cross-platform pixel-based controlLess reliable on Windows than UIA-based; more brittle to layout shifts
AutoIt / PowerShellYou're scripting outside an LLMNo agent layer; manual scripting only
Peekaboo (macOS)You're on macOS, not WindowsDifferent OS; not interchangeable

More

Resources

📖 Read the official README on GitHub

🐙 Browse open issues

🔍 Browse all 400+ MCP servers and Skills