Windows Remote MCP Server - control Windows desktops via MCP protocol
Project description
winremote-mcp
A Windows Remote MCP Server — control Windows desktops via the Model Context Protocol.
Built with FastMCP. Runs on the Windows machine you want to control.
Features
- Desktop Control — screenshot (JPEG compressed), click, type, scroll, keyboard shortcuts
- Window Management — focus, minimize-all, launch/resize apps
- Remote Management — PowerShell shell (with
cwd), clipboard, processes, system info, notifications - File Operations — read, write, list, search files
- Health Endpoint —
GET /healthreturns{"status":"ok","version":"0.2.0"} - Hot Reload —
--reloadflag for development - Auto-Start —
winremote install/winremote uninstallfor Windows scheduled tasks
Installation
# From PyPI (once published)
pip install winremote-mcp
# From source
pip install .
# With uv
uv pip install .
PyPI publishing: This repo uses GitHub Actions with trusted publishers. To enable, configure PyPI trusted publisher for the
dddabtc/winremote-mcprepo, workflowpublish.yml, environmentpypi.
Usage
stdio transport
winremote-mcp
# or
uv run winremote-mcp
Streamable HTTP transport (default, for remote access)
winremote-mcp --transport streamable-http --host 0.0.0.0 --port 8090
With hot reload (development)
winremote-mcp --reload
Health check
curl http://localhost:8090/health
# {"status":"ok","version":"0.2.0"}
Auto-start (Windows scheduled task)
# Create scheduled task to start on boot
winremote-mcp install
# Remove scheduled task
winremote-mcp uninstall
MCP Client Config
stdio:
{
"mcpServers": {
"windows-remote": {
"command": "uv",
"args": ["run", "winremote-mcp"]
}
}
}
streamable-http:
{
"mcpServers": {
"windows-remote": {
"type": "streamable-http",
"url": "http://<windows-ip>:8090/mcp"
}
}
}
What's New in v0.2.0
- Snapshot compression: Returns JPEG instead of PNG. Configurable
quality(default 75) andmax_width(default 1920) params. Significantly reduces image size. - Health endpoint:
GET /healthreturns JSON status — useful for monitoring and load balancers. - Shell cwd parameter: Optional
cwdparam to run commands in a specific directory. - Better pywin32 error reporting: Explicit error messages when pywin32 is missing instead of silent failures.
- Hot reload:
--reloadflag passes through to uvicorn for development. - Install/uninstall commands:
winremote installcreates a Windows scheduled task for auto-start on boot.
Tools
| Tool | Description |
|---|---|
| Snapshot | Screenshot (JPEG, configurable quality/max_width) + window list + UI elements |
| Click | Mouse click (left/right/middle, single/double/hover) |
| Type | Type text at coordinates |
| Scroll | Vertical/horizontal scroll |
| Move | Move mouse / drag |
| Shortcut | Keyboard shortcuts |
| Wait | Pause execution |
| FocusWindow | Bring window to front (fuzzy title match) |
| MinimizeAll | Show desktop (Win+D) |
| App | Launch/switch/resize applications |
| Shell | Execute PowerShell commands (with optional cwd) |
| GetClipboard | Read clipboard |
| SetClipboard | Write clipboard |
| ListProcesses | Process list with CPU/memory |
| KillProcess | Kill process by PID or name |
| GetSystemInfo | System information |
| Notification | Windows toast notification |
| LockScreen | Lock workstation |
| Scrape | Fetch URL content |
| FileRead | Read file content |
| FileWrite | Write file content |
| FileList | List directory contents |
| FileSearch | Search files by pattern |
Requirements
- Windows 10/11
- Python >= 3.10
Acknowledgments
Inspired by Windows-MCP by CursorTouch. Thanks for the pioneering work on Windows desktop automation via MCP.
Contributing
See CONTRIBUTING.md.
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file winremote_mcp-0.2.0.tar.gz.
File metadata
- Download URL: winremote_mcp-0.2.0.tar.gz
- Upload date:
- Size: 14.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f48aa84d82321dd41e481d1f2a8db12290564c59682759dd47cee94664372ae9
|
|
| MD5 |
90bde26595d96fc15b7acca74d714581
|
|
| BLAKE2b-256 |
489198ff2d5df1356422564b18f09d1e2f306d28b16915d1ac9b5f8afe01ef32
|
Provenance
The following attestation bundles were made for winremote_mcp-0.2.0.tar.gz:
Publisher:
publish.yml on dddabtc/winremote-mcp
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
winremote_mcp-0.2.0.tar.gz -
Subject digest:
f48aa84d82321dd41e481d1f2a8db12290564c59682759dd47cee94664372ae9 - Sigstore transparency entry: 928803170
- Sigstore integration time:
-
Permalink:
dddabtc/winremote-mcp@fe96c1bb648ecf3d5c3b535b7b0e1635ebf436cf -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/dddabtc
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@fe96c1bb648ecf3d5c3b535b7b0e1635ebf436cf -
Trigger Event:
release
-
Statement type:
File details
Details for the file winremote_mcp-0.2.0-py3-none-any.whl.
File metadata
- Download URL: winremote_mcp-0.2.0-py3-none-any.whl
- Upload date:
- Size: 15.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e3f195d891ec79958c1368d3a8c19a6f4a653c7c086c7fcf26ec4d19967b9d8c
|
|
| MD5 |
e5f0942a490543e79e7eeb6319426661
|
|
| BLAKE2b-256 |
825c4367d3d41fd6668168db316f863ac95324020b693c4e955787d10e384ffc
|
Provenance
The following attestation bundles were made for winremote_mcp-0.2.0-py3-none-any.whl:
Publisher:
publish.yml on dddabtc/winremote-mcp
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
winremote_mcp-0.2.0-py3-none-any.whl -
Subject digest:
e3f195d891ec79958c1368d3a8c19a6f4a653c7c086c7fcf26ec4d19967b9d8c - Sigstore transparency entry: 928803201
- Sigstore integration time:
-
Permalink:
dddabtc/winremote-mcp@fe96c1bb648ecf3d5c3b535b7b0e1635ebf436cf -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/dddabtc
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@fe96c1bb648ecf3d5c3b535b7b0e1635ebf436cf -
Trigger Event:
release
-
Statement type: