Skip to main content
Glama
README.md
# RustDesk MCP Server

[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)

MCP (Model Context Protocol) server that lets AI agents control remote machines via [RustDesk](https://github.com/rustdesk/rustdesk).

## Architecture

```
┌────────────┐     MCP stdio      ┌──────────────┐      REST API      ┌─────────────────┐
│  AI Agent  │ ◄─────────────► │ rustdesk-mcp  │ ────────────────► │ rustdesk-api     │
│  (Claude/  │                  │  Server      │                   │ (lejianwen)      │
│   Cursor)  │                  └──────────────┘                   └─────────────────┘
└────────────┘                                              │
                                                           ▼
                                                      ┌──────────┐
                                                      │ RustDesk │
                                                      │ Devices  │
                                                      └──────────┘
```

## Components and Where They Run

| Component | Where | Description |
|-----------|-------|-------------|
| **rustdesk-mcp** (this project) | **NAS/server** | MCP server that translates AI requests to rustdesk-api calls |
| **rustdesk-api-server** | **NAS/server** | Third-party RustDesk API server (by lejianwen, Go) — device management, shell, file ops |
| **RustDesk client** | **Each target machine** | Normal RustDesk client, registers with api-server |
| **MCP client** | **Control machine** | Cursor/Claude/etc. — where the AI agent runs |

## Features

### Device Management
| Tool | Description |
|------|-------------|
| `rd_device_list` | List all registered devices |
| `rd_device_info` | Get device details (OS, version, status) |
| `rd_device_online` | Check if device is currently online |

### Remote Commands
| Tool | Description |
|------|-------------|
| `rd_device_shell` | Execute shell command on remote device |
| `rd_device_screenshot` | Take screenshot (returns base64 image) |

### File Operations
| Tool | Description |
|------|-------------|
| `rd_device_file_list` | List files on remote device |
| `rd_device_file_upload` | Upload local file to remote device |
| `rd_device_file_download` | Download file from remote device |
| `rd_device_file_delete` | Delete file on remote device |

### Power Operations
| Tool | Description |
|------|-------------|
| `rd_device_restart` | Restart remote device |
| `rd_device_shutdown` | Shutdown remote device |
| `rd_device_lock` | Lock remote device screen |

### Screen Control (via xdotool on target)
| Tool | Description |
|------|-------------|
| `rd_device_keypress` | Send keystrokes |
| `rd_device_mouse_move` | Move mouse to coordinates |
| `rd_device_mouse_click` | Click mouse at coordinates |

## Prerequisites

1. [RustDesk](https://rustdesk.com/) client installed on target devices
2. [rustdesk-api-server](https://github.com/lejianwen/rustdesk-api) running (default: `http://127.0.0.1:21114`)

## Installation

```bash
cd /vol3/1000/app/rustdesk-mcp
pip install -r requirements.txt
# or: pip install -e .
```

## Configuration

Edit `.env` with your rustdesk-api credentials:

| Variable | Default | Description |
|----------|---------|-------------|
| `RUSTDESK_API_BASE_URL` | `http://127.0.0.1:21114` | rustdesk-api server URL |
| `RUSTDESK_API_USERNAME` | `default` | API login username |
| `RUSTDESK_API_PASSWORD` | `default` | API login password |
| `RUSTDESK_TIMEOUT` | `30` | Request timeout (seconds) |

## Usage

```bash
python -m rustdesk_mcp
```

Or add to MCP client config:

```json
{
  "mcpServers": {
    "rustdesk": {
      "command": "python",
      "args": ["-m", "rustdesk_mcp"],
      "env": {
        "RUSTDESK_API_BASE_URL": "http://127.0.0.1:21114",
        "RUSTDESK_API_USERNAME": "default",
        "RUSTDESK_API_PASSWORD": "default"
      }
    }
  }
}
```

## Project Structure

```
rustdesk-mcp/
├── README.md
├── LICENSE
├── .gitignore
├── pyproject.toml
├── requirements.txt
└── rustdesk_mcp/
    ├── __init__.py
    ├── __main__.py
    └── server.py
```

## Roadmap

- [ ] Native RustDesk protocol screen control (not via shell)
- [ ] Session management
- [ ] Multi-user device filtering
- [ ] File search on remote devices
- [ ] Docker deployment

## License

MIT