Desktop MCP logo

Desktop MCP

Controls a Windows desktop with screenshots, window management, input automation, and ffmpeg recording over MCP.

Install Desktop MCP

Pick your client, then add it in one click or paste the config.

STDIOPython
~/Library/Application Support/Claude/claude_desktop_config.json
claude_desktop_config.json
{
  "mcpServers": {
    "desktop-mcp": {
      "command": "uvx",
      "args": [
        "desktop-mcp"
      ]
    }
  }
}

Settings → Developer → Edit Config, merge this into mcpServers, then fully quit and reopen Claude Desktop.

Install not yet sandbox-tested— we haven't run this command through our automated sandbox yet. Not a red flag; we're working through the catalog.

Overview

The desktop-mcp MCP server exposes Windows desktop observation, window control, mouse and keyboard input, and screen recording through MCP tools. It runs as a stdio server and uses environment variables to enable higher-risk tool groups, with input disabled by default. Reach for it when an agent needs to inspect or operate a trusted Windows workstation, but review its screen access and input-injection risks first.

Use cases

  • Capture screenshots of a Windows application
  • Inspect and organize visible windows
  • Automate mouse and keyboard actions on a trusted workstation
  • Record a Windows desktop session with ffmpeg

Key features

  • Windows screenshot and window observation
  • Window focus, resize, minimize, and restore
  • Mouse and keyboard input automation
  • ffmpeg screen recording
  • Environment-gated tool groups
  • Input rate limiting and coordinate validation

Security & health

What it can reach and how reliably it runs — from our own checks, not the maintainer’s claims.

ActiveLast checked 1d ago

Recent health check succeeded.

4/4 checks healthy over the last 22d

Supply-chain signal

No high-severity advisories surfaced by our automated scan.

Critical 0High 0Medium 0Low 0

Scanned 14d ago via OSV.dev · desktop-mcp (PyPI)

How Desktop MCP works

What desktop-mcp MCP server does

The desktop-mcp MCP server gives an MCP client access to selected Windows desktop operations. Its always-enabled observation group can capture a monitor, region, or window as a PNG, enumerate open windows, identify the active window, and look up window details by title. The returned screenshot is a file path in a scratch directory rather than inline image data.

Additional capabilities are divided into separate groups. Window tools can focus, move, resize, minimize, and restore windows. Input tools can move, click, drag, and scroll the mouse, press keys, send hotkeys, and type text. The recording group starts, reports, and stops ffmpeg-based screen recordings.

How it works

The package exposes a FastMCP server that communicates over stdio. Install it with pip, then register the desktop-mcp command in an MCP host configuration. A Python module invocation is also available when the host configuration uses python -m desktop_mcp.

Observation is available without an enable flag. Window management, input, and recording are independently controlled by environment variables. Disabled groups return structured policy_refusal errors. Input actions also pass through a rate limiter, set to 60 actions per minute by default, and over-limit requests return rate_limited errors.

The server initializes Windows DPI awareness and validates mouse coordinates against virtual-desktop bounds. Recording uses ffmpeg's Windows gdigrab mechanism and includes a duration cap, graceful stopping, and protection against a stale recorder left by a crashed process.

Setup and configuration

Install the package with:

Terminal
pip install desktop-mcp

A stdio client can register it with a command such as:

config.json
{
  "mcpServers": {
    "desktop-mcp": {
      "command": "desktop-mcp"
    }
  }
}

Set DESKTOP_MCP_ENABLE_WINDOW=1, DESKTOP_MCP_ENABLE_INPUT=1, or DESKTOP_MCP_ENABLE_RECORD=1 to activate the corresponding optional group. Input remains disabled unless explicitly enabled. The input limit can be adjusted with DESKTOP_MCP_RATE_LIMIT_PER_MIN.

Tools and capabilities

The desktop-mcp MCP server organizes tools into these groups:

  • observe: screenshot, list_windows, get_active_window, and window_info.
  • window: focus, move or resize, minimize, and restore operations.
  • input: mouse movement, clicks, drags, scrolling, key presses, hotkeys, and text entry.
  • record: start, inspect, and stop screen recordings.

Limitations and notes

The observation group cannot be disabled. Any caller that can reach the server may capture visible content from any window, including sensitive applications. PNG files remain in the scratch directory, which defaults to %TEMP%\\desktop-mcp-scratch, until cleared.

Enabling input grants control of the focused window and should be treated as equivalent to handing the caller the keyboard and mouse. Run the desktop-mcp MCP server only under a trusted harness and host, leave unnecessary groups disabled, and avoid running it elevated unless the consequences are understood.

Windows User Interface Privilege Isolation can prevent window-handle operations against elevated applications; those failures are surfaced as structured errors. Injected mouse and keyboard actions targeting elevated windows may instead appear successful while Windows silently discards them. The project does not provide a bypass. Input behavior is tested with mocked pyautogui rather than every real elevated-window case, and DPI coordinate agreement is not fully verified by automated tests.

Reviews

No reviews yet — be the first to share how it worked for you.

Frequently Asked Questions about Desktop MCP

desktop-mcp is an MCP server that connects AI clients to a Windows desktop. Its main tools capture screenshots, inspect and manage windows, send mouse and keyboard input, and start or stop ffmpeg screen recordings. Observation is enabled by default, while window, input, and recording groups require explicit environment-based activation.

Install it with `pip install desktop-mcp`, then register the `desktop-mcp` command in an MCP host's stdio server configuration. The package also supports launching with `python -m desktop_mcp` and does not require an environment variable just to start.

Set `DESKTOP_MCP_ENABLE_INPUT=1` before starting the server. Input is disabled by default, and disabled calls return a structured `policy_refusal` error. Enabled input is rate-limited, with the default limit controlled at 60 actions per minute.

Set `DESKTOP_MCP_ENABLE_RECORD=1` before starting the server. This exposes tools to start, check, and stop ffmpeg screen recordings using Windows `gdigrab`, subject to the server's recording safeguards and duration cap.

Yes, desktop-mcp can be used with Cursor when configured as a stdio MCP server. The README provides a generic MCP-host configuration rather than a Cursor-specific setup, so add the `desktop-mcp` command through Cursor's MCP configuration.

Related MCP servers

Add a badge to your READMEShow it’s listed — live SVG, Markdown or HTML.

AllMCPs Directory Badge

Full Badge Customizer

Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.

Badge Style:
Live Dynamic SVG PreviewDesktop MCP AllMCPs Directory Badge
Markdown (GitHub README)
[![AllMCPs](https://allmcps.com/api/badge/desktop-mcp?style=directory)](https://allmcps.com/mcp/desktop-mcp)
HTML Embed
<a href="https://allmcps.com/mcp/desktop-mcp"><img src="https://allmcps.com/api/badge/desktop-mcp?style=directory" alt="Desktop MCP on AllMCPs" /></a>