rustdesk-mcp
by zsunny6658
README.md
# RustDesk MCP Server
[](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
MITThis server cannot be deployed
Maintenance
ActivityStale
ResponsivenessNo issues