Skip to main content

Windows Remote MCP Server - control Windows desktops via MCP protocol

Project description

WinRemote MCP — Run MCP Servers Remotely on Windows

PyPI version Python License: MIT CI Downloads

The ultimate Windows MCP server for remote desktop control and automation. Control any Windows machine through the Model Context Protocol — perfect for AI agents, Claude Desktop, and OpenClaw integration. Transform your Windows desktop into a powerful, remotely-accessible automation endpoint.

Run on the Windows machine you want to control. Built with FastMCP and the Model Context Protocol.

Quickstart (30 seconds)

# Install from PyPI
pip install winremote-mcp

# Start the Windows MCP server
winremote-mcp

That's it! Your Windows MCP server is now running on http://127.0.0.1:8090 and ready to accept commands from MCP clients like Claude Desktop or OpenClaw.

What Problem It Solves

  • Remote Windows Control: Control Windows desktops from anywhere through standardized MCP protocol
  • AI Agent Integration: Enable Claude, GPT, and other AI agents to interact with Windows GUI applications
  • Cross-Platform Automation: Bridge the gap between Linux/macOS development environments and Windows targets
  • Headless Windows Management: Manage Windows servers and workstations without RDP or VNC overhead

Features

  • Desktop Control — Screenshot capture (JPEG compressed, multi-monitor), click, type, scroll, keyboard shortcuts
  • Window Management — Focus windows, minimize-all, launch/resize applications, multi-monitor support
  • Remote Shell Access — PowerShell command execution with working directory support
  • File Operations — Read, write, list, search files; binary transfer via base64 encoding
  • System Administration — Windows Registry access, service management, scheduled tasks, process control
  • Network Tools — Ping hosts, check TCP ports, monitor network connections
  • Advanced Features — OCR text extraction, screen recording (GIF), annotated screenshots with UI element labels
  • Security & Auth — Optional API key authentication, localhost-only binding by default

Installation

From PyPI (Recommended)

pip install winremote-mcp

From Source

git clone https://github.com/dddabtc/winremote-mcp.git
cd winremote-mcp
pip install .

With Optional Dependencies

# Install with OCR support (includes pytesseract)
pip install winremote-mcp[ocr]

# Install development dependencies
pip install winremote-mcp[test]

OCR Setup (Optional)

For text extraction from screenshots:

# 1. Install Tesseract OCR engine
winget install UB-Mannheim.TesseractOCR

# 2. Install with OCR dependencies
pip install winremote-mcp[ocr]

Usage

Basic Usage

# Start MCP server (localhost only, no auth)
winremote-mcp

# Start with remote access and authentication
winremote-mcp --host 0.0.0.0 --port 8090 --auth-key "your-secret-key"

# Enable all tools including high-risk Tier 3 (Shell, FileWrite, etc.)
winremote-mcp --enable-all

# Start with hot reload for development
winremote-mcp --reload

MCP Client Configuration

For Claude Desktop (claude_desktop_config.json):

{
  "mcpServers": {
    "winremote": {
      "command": "winremote-mcp",
      "args": ["--transport", "stdio"]
    }
  }
}

For OpenClaw or other HTTP MCP clients:

{
  "mcpServers": {
    "winremote": {
      "type": "streamable-http", 
      "url": "http://192.168.1.100:8090/mcp",
      "headers": {
        "Authorization": "Bearer your-secret-key"
      }
    }
  }
}

Auto-Start on Boot

# Create Windows scheduled task
winremote-mcp install

# Remove scheduled task  
winremote-mcp uninstall

Security

Tools are organized into three risk tiers. By default, only Tier 1-2 tools are enabled.

Tier Risk Default Examples
Tier 1 Read-only ✅ Enabled Snapshot, GetSystemInfo, ListProcesses
Tier 2 Interactive ✅ Enabled Click, Type, Shortcut, App
Tier 3 Destructive ❌ Disabled Shell, FileWrite, KillProcess, RegWrite
# Enable all tiers (use with caution)
winremote-mcp --enable-all

# Always use auth for remote access
winremote-mcp --host 0.0.0.0 --auth-key "your-secret-key"

See SECURITY.md for the full security guide.

Tools

Tool Description
Desktop
Snapshot Screenshot (JPEG, configurable quality/max_width) + window list + UI elements
AnnotatedSnapshot Screenshot with numbered labels on interactive elements
OCR Extract text from screen via OCR (pytesseract or Windows built-in)
ScreenRecord Record screen activity as animated GIF
Input
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
Window Management
FocusWindow Bring window to front (fuzzy title match)
MinimizeAll Show desktop (Win+D)
App Launch/switch/resize applications
System
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
ReconnectSession Reconnect disconnected Windows desktop session to console
File System
FileRead Read file content
FileWrite Write file content
FileList List directory contents
FileSearch Search files by pattern
FileDownload Download file as base64 (binary)
FileUpload Upload file from base64 (binary)
Registry & Services
RegRead Read Windows Registry value
RegWrite Write Windows Registry value
ServiceList List Windows services
ServiceStart Start a Windows service
ServiceStop Stop a Windows service
Scheduled Tasks
TaskList List scheduled tasks
TaskCreate Create a scheduled task
TaskDelete Delete a scheduled task
Network
Scrape Fetch URL content
Ping Ping a host
PortCheck Check if a TCP port is open
NetConnections List network connections
EventLog Read Windows Event Log entries

How It Works

graph LR
    A["MCP Client<br/>(Claude/AI)"] -->|commands| B["WinRemote MCP<br/>Server"]
    B -->|API calls| C["Windows APIs<br/>(Win32/WMI/PS)"]
    C -->|results| B
    B -->|responses| A

Transport Options:

  • stdio: Direct process communication (ideal for Claude Desktop)
  • HTTP: RESTful API with optional authentication (ideal for remote access)

Core Architecture:

  1. Tool Layer: 40+ Windows automation tools (screenshot, click, type, etc.)
  2. Task Manager: Concurrency control and task cancellation
  3. Transport Layer: MCP protocol over stdio or HTTP
  4. Security Layer: Optional Bearer token authentication

Troubleshooting / FAQ

Q: MCP server not starting?

A: Check Python version (requires 3.10+) and ensure no other service is using port 8090:

python --version
netstat -an | findstr :8090

Q: Can't connect from remote machine?

A: Use --host 0.0.0.0 to bind to all interfaces (default is localhost only):

winremote-mcp --host 0.0.0.0 --auth-key "secure-key"

Q: Screenshot tool returns empty/black images?

A: Windows may be locked or display turned off. Ensure:

  • Windows is unlocked and display is active
  • No screen saver is running
  • For multi-monitor setups, specify monitor parameter

Q: OCR not working?

A: Install Tesseract OCR engine:

winget install UB-Mannheim.TesseractOCR
pip install winremote-mcp[ocr]

Q: Permission errors with registry/services?

A: Run with administrator privileges:

# Right-click Command Prompt → "Run as administrator"
winremote-mcp

Contributing

We welcome contributions! Please see our Contributing Guide for details.

Development Setup

git clone https://github.com/dddabtc/winremote-mcp.git
cd winremote-mcp
pip install -e ".[test]"
pytest  # Run tests

Acknowledgments

Inspired by Windows-MCP by CursorTouch. Thanks for the pioneering work on Windows desktop automation via MCP.

License

This project is licensed under the MIT License - see the LICENSE file for details.


Ready to automate Windows with AI? ⚡ Install winremote-mcp and connect your favorite AI agent to any Windows machine in under 30 seconds.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

winremote_mcp-0.4.6.tar.gz (63.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

winremote_mcp-0.4.6-py3-none-any.whl (35.0 kB view details)

Uploaded Python 3

File details

Details for the file winremote_mcp-0.4.6.tar.gz.

File metadata

  • Download URL: winremote_mcp-0.4.6.tar.gz
  • Upload date:
  • Size: 63.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for winremote_mcp-0.4.6.tar.gz
Algorithm Hash digest
SHA256 63b6cb5e3efaaeef9e765784f46d0ef49cd5a7cc7c2d818066ce2d813e430571
MD5 a437527676d078f7aaf1cb500730b764
BLAKE2b-256 4092771debed07aeb40dcade7c37e978c4efbb38a597d3d35d5361c95db29064

See more details on using hashes here.

Provenance

The following attestation bundles were made for winremote_mcp-0.4.6.tar.gz:

Publisher: publish.yml on dddabtc/winremote-mcp

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file winremote_mcp-0.4.6-py3-none-any.whl.

File metadata

  • Download URL: winremote_mcp-0.4.6-py3-none-any.whl
  • Upload date:
  • Size: 35.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for winremote_mcp-0.4.6-py3-none-any.whl
Algorithm Hash digest
SHA256 8cb081d1edcfd136475302c1bd814f6d2dbae43b6cabcb943288462d2c6605c5
MD5 6fb71744f8ff229381ce0e921a80c3a7
BLAKE2b-256 3affa1cb882ce83efa61eae3e0abd15169e949ae86159d8be60273331aeea2e3

See more details on using hashes here.

Provenance

The following attestation bundles were made for winremote_mcp-0.4.6-py3-none-any.whl:

Publisher: publish.yml on dddabtc/winremote-mcp

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page