{"id":46310433,"url":"https://github.com/barry-ran/quickdesk","last_synced_at":"2026-06-17T06:01:25.392Z","repository":{"id":341408237,"uuid":"1135556220","full_name":"barry-ran/QuickDesk","owner":"barry-ran","description":"QuickDesk is the first AI-native remote desktop — an open-source, free application with a built-in MCP (Model Context Protocol) Server that lets any AI agent see and control remote computers.","archived":false,"fork":false,"pushed_at":"2026-06-12T10:29:21.000Z","size":9905,"stargazers_count":243,"open_issues_count":3,"forks_count":39,"subscribers_count":7,"default_branch":"master","last_synced_at":"2026-06-12T12:14:14.605Z","etag":null,"topics":["agent","mcp","rdp","remote","remote-control","remote-desktop","rustdesk","teamviewer","todesk","vnc"],"latest_commit_sha":null,"homepage":"","language":"QML","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/barry-ran.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-01-16T09:09:27.000Z","updated_at":"2026-06-12T10:17:16.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/barry-ran/QuickDesk","commit_stats":null,"previous_names":["barry-ran/quickdesk"],"tags_count":17,"template":false,"template_full_name":null,"purl":"pkg:github/barry-ran/QuickDesk","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/barry-ran%2FQuickDesk","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/barry-ran%2FQuickDesk/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/barry-ran%2FQuickDesk/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/barry-ran%2FQuickDesk/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/barry-ran","download_url":"https://codeload.github.com/barry-ran/QuickDesk/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/barry-ran%2FQuickDesk/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34435981,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-17T02:00:05.408Z","response_time":127,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["agent","mcp","rdp","remote","remote-control","remote-desktop","rustdesk","teamviewer","todesk","vnc"],"created_at":"2026-03-04T13:06:42.392Z","updated_at":"2026-06-17T06:01:25.369Z","avatar_url":"https://github.com/barry-ran.png","language":"QML","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"docs/image/logo.png\" alt=\"QuickDesk Logo\" width=\"120\"\u003e\n\u003c/p\u003e\n\n\u003ch1 align=\"center\"\u003eQuickDesk\u003c/h1\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cstrong\u003eThe First AI-Native Remote Desktop\u003c/strong\u003e\u003cbr\u003e\n  Built-in MCP Server · AI Agents Control Any Remote Computer · Open-Source \u0026 Free\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/barry-ran/QuickDesk/actions/workflows/quickdesk-windows.yml\"\u003e\n    \u003cimg src=\"https://github.com/barry-ran/QuickDesk/actions/workflows/quickdesk-windows.yml/badge.svg\" alt=\"Windows Build\"\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://github.com/barry-ran/QuickDesk/actions/workflows/quickdesk-macos.yml\"\u003e\n    \u003cimg src=\"https://github.com/barry-ran/QuickDesk/actions/workflows/quickdesk-macos.yml/badge.svg\" alt=\"macOS Build\"\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://github.com/barry-ran/QuickDesk/releases\"\u003e\n    \u003cimg src=\"https://img.shields.io/github/v/release/barry-ran/QuickDesk\" alt=\"Release\"\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://github.com/barry-ran/QuickDesk/stargazers\"\u003e\n    \u003cimg src=\"https://img.shields.io/github/stars/barry-ran/QuickDesk\" alt=\"Stars\"\u003e\n  \u003c/a\u003e\n  \u003ca href=\"LICENSE\"\u003e\n    \u003cimg src=\"https://img.shields.io/github/license/barry-ran/QuickDesk\" alt=\"License\"\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  English | \u003ca href=\"README_zh.md\"\u003e中文\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://t.me/+utsmSUhNLc1iNTY1\"\u003eTelegram\u003c/a\u003e | \u003ca href=\"https://github.com/barry-ran/QuickDesk/issues\"\u003eIssues\u003c/a\u003e | \u003ca href=\"https://github.com/barry-ran/QuickDesk/releases\"\u003eDownload\u003c/a\u003e\n\u003c/p\u003e\n\n---\n\nQuickDesk is the **first AI-native remote desktop** — an open-source, free application with a **built-in MCP (Model Context Protocol) Server** that lets any AI agent see and control remote computers.\n\nWhile other remote desktop tools only serve human users, QuickDesk extends **AI Computer Use** from \"local machine only\" to **\"any remote machine in the world\"**. Connect Claude, GPT, Cursor, or any MCP-compatible AI to QuickDesk, and it can screenshot, click, type, drag, and automate across remote desktops — just like a human operator, but faster and 24/7.\n\nBuilt on Google Chromium Remoting technology (the engine behind Chrome Remote Desktop), QuickDesk delivers industrial-grade performance, stability, and security refined over 10+ years by Google.\n\nMain Interface\n![Main Interface](docs/image/screenshot_main.png)\n\nRemote Desktop\n![Remote Desktop](docs/image/screenshot_remote.png)\n\nAI Config\n![AI Config](docs/image/screenshot_mcp.jpg)\n\n## Why QuickDesk?\n\n### AI-First: The Only Remote Desktop with MCP Support  [ → MCP Integration Guide](docs/mcp-integration.md)\n\n- **Built-in MCP Server**: AI agents connect via standard MCP protocol — no plugins, no hacks, zero configuration\n- **Dual Transport**: stdio mode (AI client spawns process) or HTTP/SSE mode (QuickDesk hosts MCP server for multi-client access)\n- **Full Computer Use Toolkit**: 20+ MCP tools — screenshot, click, type, drag, scroll, hotkeys, clipboard, and more\n- **Real-Time Visibility**: AI operations are displayed in the QuickDesk GUI in real time — the user sees every mouse move and keystroke, and can intervene at any time\n- **Multi-Device AI Orchestration**: AI can connect to and control multiple remote machines simultaneously — batch automation, cross-device workflows, fleet management\n- **Guided Prompts**: 9 built-in MCP prompt templates covering remote operation, server health check, batch automation, system diagnosis, screen analysis, multi-device orchestration, and SOP documentation\n\n### High-Performance Foundation\n\n- **Open-Source \u0026 Free**: MIT License, no feature restrictions, no connection limits, commercial use welcome\n- **Self-Hosted**: Deploy your own signaling and TURN relay servers, keep full control of your data\n- **Commercial-Grade Foundation**: Built on Chromium Remoting — the same technology powering Chrome Remote Desktop, refined by Google for 10+ years and proven by billions of users\n- **Pure C++ Ultimate Performance**: Full C++ stack from protocol core to GUI — no GC pauses, no runtime overhead, minimal memory and CPU footprint\n- **Modern Codecs**: H.264, VP8, VP9, AV1 — flexibly switch based on network and hardware conditions\n- **WebRTC P2P Direct Connection**: Prioritizes peer-to-peer connections for lowest latency; automatically falls back to TURN relay when traversal fails\n- **Cross-Platform**: Windows and macOS supported (Linux planned)\n- **Modern UI**: Fluent Design interface built with Qt 6 + QML, with light and dark themes\n\n## Comparison\n\n| Feature | QuickDesk | RustDesk | BildDesk | ToDesk | TeamViewer |\n|---------|:---------:|:--------:|:--------:|:------:|:----------:|\n| **AI Agent Support (MCP)** | ✅ Built-in | ❌ | ❌ | ❌ | ❌ |\n| **Open Source** | ✅ MIT | ✅ AGPL-3.0 | ❌ | ❌ | ❌ |\n| **Free for Commercial Use** | ✅ | ❌ License required | ❌ | ❌ | ❌ |\n| **Core Language** | C++ | Rust + Dart | — | — | — |\n| **Remote Protocol** | Chromium Remoting (WebRTC) | Custom | Custom | Custom | Custom |\n| **Protocol Maturity** | ⭐⭐⭐⭐⭐ Google 10yr+ | ⭐⭐⭐ | ⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ |\n| **P2P Direct** | ✅ WebRTC ICE | ✅ TCP Hole Punching | ✅ | ✅ | ✅ |\n| **Video Codecs** | H.264/VP8/VP9/AV1 | VP8/VP9/AV1/H.264/H.265 | — | — | — |\n| **Self-Hosted** | ✅ Full solution | ✅ | ❌ | ❌ | ❌ |\n| **GUI Framework** | Qt 6 (C++) | Flutter (Dart) | — | — | — |\n| **Memory Usage** | ⭐⭐⭐⭐⭐ Very Low | ⭐⭐⭐ Medium | — | ⭐⭐⭐ | ⭐⭐⭐ |\n| **CPU Usage** | ⭐⭐⭐⭐⭐ Very Low | ⭐⭐⭐ Medium | — | ⭐⭐⭐ | ⭐⭐⭐ |\n| **Windows** | ✅ | ✅ | ✅ | ✅ | ✅ |\n| **macOS** | ✅ | ✅ | ✅ | ✅ | ✅ |\n| **Linux** | 🔜 | ✅ | ❌ | ✅ | ✅ |\n| **iOS/Android** | 🔜 | ✅ | ✅ | ✅ | ✅ |\n\n### Why Best-in-Class Performance?\n\n1. **Pure C++ Full Stack**: The entire stack — from low-level protocol to GUI — is implemented in C++. No garbage collection pauses, no VM/runtime overhead. Compared to RustDesk's Dart/Flutter GUI layer or ToDesk's Electron-based approach, CPU and memory usage are significantly lower.\n\n2. **Chromium-Level Optimization**: Core paths for video encoding/decoding, network transmission, and screen capture directly reuse Chromium's highly optimized C++ code, including SIMD instruction optimization and zero-copy rendering pipelines.\n\n3. **Shared Memory Video Transfer**: QuickDesk uses shared memory to pass video frames (YUV I420) between processes, eliminating the serialization/deserialization and data copying overhead of traditional IPC.\n\n4. **GPU-Accelerated Rendering**: YUV data is fed directly into the GPU rendering pipeline via Qt 6's `QVideoSink`, achieving zero-CPU-copy video rendering.\n\n## Features\n\n### AI Integration (MCP Server)\n- Built-in MCP Server — AI agents connect via standard protocol, works with Cursor, Claude Desktop, VS Code, and any MCP client\n- Dual transport: stdio (AI client launches process) or HTTP/SSE (QuickDesk manages MCP server, multiple AI clients connect)\n- Persistent MCP transport mode — remembers your stdio/HTTP choice across restarts\n- 40+ MCP tools: screenshot, mouse click/drag/scroll, keyboard type/hotkey, clipboard, OCR text recognition, UI element detection, screen verification, and more\n- Host-side skill host with built-in skills (system info, file operations, shell execution) — run structured tools on the remote machine\n- Pluggable skills architecture — add custom skill directories, skills auto-load and sync to connected clients\n- Skill host toggle in Settings — enable/disable the skill host process with persistent configuration\n- MCP Resources: real-time device status, connection info, host details\n- 9 MCP Prompts: operation guide, server health check, batch automation, system diagnosis, screen analysis, multi-device orchestration, SOP documentation\n- Real-time event streaming: connection state changes, clipboard updates, screen changes, performance stats\n- Event-driven tools: wait_for_event, wait_for_connection_state, wait_for_clipboard_change, wait_for_screen_change for reactive automation\n- Background automation mode: `show_window=false` for headless batch operations\n- Screenshot scaling: adjustable resolution for faster AI processing\n\n### Remote Control\n- High-definition, low-latency remote desktop display\n- Full keyboard and mouse mapping\n- Real-time remote cursor synchronization\n- Bidirectional clipboard sync\n- Adaptive frame rate and bitrate\n- Frame rate boost mode (Office / Gaming)\n- Privacy screen mode — blacks out the host's physical display and blocks local keyboard/mouse input during remote control, protecting session privacy (Windows 10 2004+)\n- Virtual display — creates virtual monitors via IDD driver for multi-screen extension, headless server remote access, privacy isolation, and resolution adaptation (Windows 10 2004+, requires virtual display driver installation)\n\n### Connection Management\n- 9-digit Device ID + temporary access code mechanism\n- Auto-refresh access code (configurable: 30 min to 24 hours, or never)\n- Multi-tab simultaneous connections to multiple remote devices\n- Connection history with quick reconnect\n- Real-time connection status monitoring\n\n### Performance Monitoring\n- Detailed latency breakdown panel (Capture → Encode → Network → Decode → Render)\n- Real-time frame rate, bitrate, and bandwidth statistics\n- Input round-trip time (RTT) monitoring\n- Encoding resolution and quality information\n\n### Personalization\n- Fluent Design style interface\n- Light and dark theme switching\n- i18n support (Chinese / English)\n- Video codec preference (H.264 / VP8 / VP9 / AV1)\n\n### Self-Hosted Deployment\n- Custom signaling server address\n- Custom STUN/TURN servers\n- Complete server deployment solution (Go signaling server + PostgreSQL + Redis + coturn)\n- **Web Admin Panel** — full-featured management dashboard for the signaling server:\n  - Real-time monitoring with ECharts trend charts (connections, new devices over 24h/7d/30d)\n  - Device management with search, filter, sort, pagination, batch operations, and device groups\n  - User management with batch enable/disable/delete/set-level\n  - Admin TOTP two-factor authentication (QR code setup, Google Authenticator compatible)\n  - Operation audit logs with filtering by action/admin/time range\n  - IP whitelist (CIDR support) for admin panel access control\n  - Webhook notifications (device online/offline, new device/user, connection failures)\n  - CSV data export for devices, users, and activity logs\n\n## Architecture\n\nQuickDesk uses a modular multi-process architecture:\n\n```mermaid\ngraph TD\n    subgraph AI[\"AI Agent (Claude / GPT / Cursor)\"]\n        A1[\"MCP Protocol\"]\n    end\n\n    subgraph MCP[\"quickdesk-mcp (Rust Bridge)\"]\n        M1[\"MCP stdio ↔ WebSocket\"]\n        M2[\"MCP HTTP/SSE ↔ WebSocket\"]\n    end\n\n    subgraph GUI[\"QuickDesk GUI (Qt 6)\"]\n        direction LR\n        WS[\"WebSocket API Server\"]\n        QML[\"QML/C++\"]\n        MainWin[\"Main Window\"]\n        RemoteWin[\"Remote Desktop Window\"]\n    end\n\n    subgraph Host[\"quickdesk-host (Chromium Remoting)\"]\n        H1[\"Screen Capture\"]\n        H2[\"Video Encoding\"]\n        H3[\"Input Event Handling\"]\n        H4[\"WebRTC Connection\"]\n    end\n\n    subgraph Client[\"quickdesk-client (Chromium Remoting)\"]\n        C1[\"Video Decoding\"]\n        C2[\"Input Event Injection\"]\n        C3[\"Shared Memory Video Frames\"]\n        C4[\"WebRTC Connection\"]\n    end\n\n    subgraph Signaling[\"Signaling Server (Go + Gin)\"]\n        S1[\"WebSocket Signaling\"]\n        S2[\"ICE Config Distribution\"]\n        S3[\"Device Registration \u0026 Auth\"]\n        S4[\"PostgreSQL + Redis\"]\n    end\n\n    subgraph TURN[\"TURN Server (coturn)\"]\n        T1[\"Relay when P2P traversal fails\"]\n    end\n\n    AI -- \"stdio (JSON-RPC)\" --\u003e MCP\n    AI -. \"HTTP/SSE\" .-\u003e M2\n    MCP -- \"WebSocket\" --\u003e WS\n    GUI -- \"Native Messaging\\n(stdin/stdout JSON)\" --\u003e Host\n    GUI -- \"Native Messaging\\n(stdin/stdout JSON)\" --\u003e Client\n    Host -- \"WebSocket\" --\u003e Signaling\n    Client -- \"WebSocket\" --\u003e Signaling\n    Signaling -- \"ICE Config\" --\u003e TURN\n    Host -. \"WebRTC P2P / TURN Relay\" .-\u003e Client\n```\n\n### Tech Stack\n\n| Layer | Technology |\n|-------|------------|\n| AI Integration | MCP Server (Rust) + WebSocket API |\n| GUI Client | Qt 6 (QML + C++17) |\n| UI Style | Fluent Design Component Library (custom-built) |\n| Remote Protocol Core | Chromium Remoting (C++) |\n| Video Codecs | H.264 / VP8 / VP9 / AV1 |\n| Network Transport | WebRTC (ICE/STUN/TURN) |\n| IPC | Native Messaging (JSON) + Shared Memory |\n| Signaling Server | Go + Gin + GORM |\n| Data Storage | PostgreSQL + Redis |\n| TURN Relay | coturn |\n| Logging | spdlog |\n| Build System | CMake 3.19+ |\n| CI/CD | GitHub Actions |\n\n## Getting Started\n\n### Download\n\nGo to [Releases](https://github.com/barry-ran/QuickDesk/releases) to download the latest version:\n\n| Platform | Download |\n|----------|----------|\n| Windows x64 | [QuickDesk-win-x64-setup.exe](https://github.com/barry-ran/QuickDesk/releases/latest) |\n| macOS ARM64 | [QuickDesk-mac-arm64.dmg](https://github.com/barry-ran/QuickDesk/releases/latest) |\n\n### Usage\n\n1. Install and run QuickDesk on both the **host** (remote) and **client** (local) machines\n2. The host will automatically generate a **Device ID** and **Access Code**\n3. On the client, enter the host's Device ID and Access Code, then click **Connect**\n4. You're now remotely controlling the host machine\n\n### Silent install (Windows installer)\n\nThe Windows package is built with **Inno Setup** (`scripts/installer/quickdesk.iss`). Standard Inno command-line switches apply:\n\n| Switch | Meaning |\n|--------|---------|\n| `/SILENT` | No wizard pages; progress window may appear |\n| `/VERYSILENT` | Fully unattended (no progress window) |\n| `/DIR=\"path\"` | Install directory (optional) |\n| `/TASKS=\"...\"` | Comma-separated tasks from `[Tasks]` |\n\nAvailable tasks:\n\n| Task | Description |\n|------|-------------|\n| `desktopicon` | Create desktop shortcut |\n| `startmenuicon` | Create Start Menu shortcut |\n| `vdd` | Install virtual display driver (IDD) and related files, required for virtual display feature |\n\nAll three tasks are selected by default (`Flags: checkedonce` — checked on first install, preserves user choice on upgrades). To skip the virtual display driver, explicitly exclude `vdd` via `/TASKS`.\n\nExamples:\n\n```bat\nREM Default tasks (includes virtual display driver when selected in script defaults)\nQuickDesk-win-x64-setup.exe /VERYSILENT\n\nREM Explicit tasks\nQuickDesk-win-x64-setup.exe /VERYSILENT /TASKS=\"desktopicon,startmenuicon,vdd\"\n\nREM Install without virtual display driver\nQuickDesk-win-x64-setup.exe /VERYSILENT /TASKS=\"desktopicon,startmenuicon\"\n\nREM Custom install path\nQuickDesk-win-x64-setup.exe /VERYSILENT /DIR=\"D:\\QuickDesk\"\n```\n\nAfter a silent install, **QuickDesk.exe is not auto-launched** (`skipifsilent` in the installer script), but the **QuickDeskHost** Windows service is still installed and started when configured in `[Run]`.\n\nAdministrator rights are required (`PrivilegesRequired=admin` in the script).\n\n## Build from Source\n\n### Requirements\n\n- CMake 3.19+\n- Qt 6.5+ (Multimedia and WebSockets modules required)\n- C++17 compiler\n\n### Windows\n\n```bash\n# Requires Visual Studio 2022 + MSVC\n# Set Qt path environment variable\nset ENV_QT_PATH=C:\\Qt\\6.8.3\n\n# Build\nscripts\\build_qd_win.bat Release\n\n# Package (requires Inno Setup)\nscripts\\publish_qd_win.bat Release\nscripts\\package_qd_win.bat Release\n```\n\n### macOS\n\n```bash\n# Requires Xcode Command Line Tools\n# Set Qt path environment variable\nexport ENV_QT_PATH=/path/to/Qt/6.8.3\n\n# Build\nbash scripts/build_qd_mac.sh Release\n\n# Package\nbash scripts/publish_qd_mac.sh Release\nbash scripts/package_qd_mac.sh Release\n```\n\n### API Key (Optional)\n\nIf you deploy your own signaling server with API Key enabled, there are two ways to configure the API Key:\n\n**Method 1: Runtime Configuration (Recommended)**\n\nIn QuickDesk **Settings → Network → API Key**, enter your signaling server's API Key. This is the recommended approach — no recompilation needed, and each deployment can use its own key.\n\n**Method 2: Build-time Injection**\n\nYou can also inject the API Key at build time as a compile-time default:\n\n```bash\n# Windows\nset ENV_QUICKDESK_API_KEY=your-secret-key\nscripts\\build_qd_win.bat Release\n\n# macOS\nENV_QUICKDESK_API_KEY=your-secret-key bash scripts/build_qd_mac.sh Release\n```\n\n\u003e **Priority**: Runtime API Key (from Settings) takes precedence over the build-time key. If both are set, the runtime value is used.\n\nWithout either configuration, the client can only connect to signaling servers without API Key protection.\n\n\u003e **WebClient note:** The WebClient is a static web page running in the browser. Since API keys embedded in JavaScript are visible via DevTools, the WebClient uses **Origin whitelist** validation instead of API Key. Configure `ALLOWED_ORIGINS` on the signaling server to restrict which domains can access it. Browsers automatically send the `Origin` header and JavaScript cannot forge it, so only the WebClient served from your official domain will be allowed.\n\nSee [Signaling Server Deployment](docs/signaling-server-deployment.md) for details.\n\n## Self-Hosted Deployment\n\nQuickDesk supports full self-hosted deployment. You can deploy all services on your own servers to ensure data security.\n\n### Components\n\n1. **Signaling Server** (required): Handles device registration and signaling relay\n   → [Signaling Server Deployment Guide](docs/signaling-server-deployment.md)\n2. **TURN Relay Server** (recommended): Provides relay when P2P direct connection fails\n   → [TURN Server Deployment Guide](docs/turn-server-deployment.md)\n\n### Docker Deploy (Signaling Server)\n\nThree deployment methods for the signaling server:\n\n```bash\ncd SignalingServer\ncp .env.example .env \u0026\u0026 vim .env\n\n# Option 1: Pull pre-built image (recommended)\n./deploy-pull.sh\n\n# Option 2: Build from source\n./deploy-build.sh\n\n# Option 3: Offline deploy (no internet needed)\n./deploy-offline.sh quickdesk-signaling-image.tar.gz\n```\n\nPre-built Docker images are automatically published to `ghcr.io/barry-ran/quickdesk-signaling` on each tagged release. See the [deployment guide](docs/signaling-server-deployment.md) for details.\n\n### Client Configuration\n\nIn QuickDesk **Settings → Network**:\n- Signaling server address: `ws://your-server.com:8000` or `wss://your-server.com:8000`\n- API Key: Enter the API Key configured on your signaling server (if enabled)\n- Custom STUN server: `stun:your-server.com:3478`\n- Custom TURN server: `turn:your-server.com:3478` (username and password required)\n\n## Project Structure\n\n```\nQuickDesk/\n├── QuickDesk/                    # Qt GUI client\n│   ├── main.cpp                  # Application entry point\n│   ├── src/\n│   │   ├── api/                  # WebSocket API server + request handlers\n│   │   ├── controller/           # Main controller\n│   │   ├── manager/              # Business managers (Host/Client/Process/TURN/...)\n│   │   ├── component/            # Video rendering, key mapping, cursor sync\n│   │   ├── core/                 # Config center, user data\n│   │   ├── viewmodel/            # MVVM ViewModel\n│   │   └── language/             # i18n\n│   ├── qml/\n│   │   ├── views/                # Main window, remote desktop window\n│   │   ├── pages/                # Remote control, settings, about pages\n│   │   ├── component/            # Fluent Design component library\n│   │   └── quickdeskcomponent/   # QuickDesk-specific components\n│   ├── base/                     # Base utilities\n│   └── infra/                    # Infrastructure (database, logging, HTTP)\n├── quickdesk-mcp/                # Rust MCP Bridge (stdio ↔ WebSocket)\n│   └── src/\n│       ├── main.rs               # Entry point, CLI args, MCP server startup\n│       ├── server.rs             # MCP tools, prompts, resources\n│       └── ws_client.rs          # WebSocket client for Qt API\n├── quickdesk-skill-host/         # Rust host-side skill host (Cargo workspace)\n│   ├── agent/                    # Skill host main binary\n│   ├── mcp-server-common/        # Shared MCP server framework\n│   └── skills/                   # Built-in skill MCP servers\n│       ├── sys-info/             # System information skill\n│       ├── file-ops/             # File operations skill\n│       └── shell-runner/         # Shell execution skill\n├── SignalingServer/              # Go signaling server\n│   ├── cmd/signaling/            # Entry point\n│   └── internal/                 # Business logic\n├── scripts/                      # Build, package, publish scripts\n├── docs/                         # Documentation\n│   ├── mcp-integration.md        # MCP integration guide (English)\n│   └── MCP接入指南.md             # MCP integration guide (Chinese)\n├── .github/workflows/            # CI/CD configuration\n└── version                       # Version number\n```\n\n## Roadmap\n\n- [x] Windows support\n- [x] macOS support\n- [x] P2P direct connection + TURN relay\n- [x] Multi-tab multi-connection\n- [x] Auto-refresh access code\n- [x] Video performance stats overlay\n- [x] Fluent Design UI\n- [x] Light and dark themes\n- [x] i18n (Chinese / English)\n- [x] **MCP Server — AI agents can control remote desktops**\n- [x] **20+ MCP tools (screenshot, click, type, drag, hotkey, clipboard, etc.)**\n- [x] **MCP Resources \u0026 Prompts**\n- [x] **Host-side skill host with built-in skills (sys-info, file-ops, shell-runner)**\n- [x] **OCR-based UI analysis tools (get_ui_state, find_element, screen_diff_summary, etc.)**\n- [x] **Persistent MCP transport mode and skill host settings**\n- [x] **Multi-directory skills loading with user-configurable paths**\n- [x] **Device memory \u0026 history retrieval (auto-profiling, operation logs, failure patterns)**\n- [x] **Workflow recording \u0026 playback (record, replay, parameterize)**\n- [x] **Trust layer \u0026 safety (risk assessment, confirmation dialogs, emergency stop, audit log)**\n- [x] **Privacy screen — blacks out host physical display and blocks local input during remote sessions**\n- [x] **Virtual display — IDD virtual display driver for multi-screen extension, headless remote, and resolution adaptation**\n- [x] File transfer\n- [x] Audio streaming\n- [x] Unattended access\n- [ ] Linux support\n- [ ] iOS / Android clients\n- [ ] Address book \u0026 device groups\n\n## Contributing\n\nContributions are welcome! Please follow these guidelines:\n\n1. Fork the repository and create a feature branch\n2. Keep code style consistent with the project\n3. Ensure the build passes before submitting a PR\n4. Each PR should contain a single feature or fix\n\n## License\n\nQuickDesk's own code is licensed under the [MIT License](LICENSE), free for commercial use.\n\nThe bundled `quickdesk-remoting` component is based on Chromium and licensed under the [BSD 3-Clause License](https://chromium.googlesource.com/chromium/src/+/refs/heads/main/LICENSE).\n\nFor complete third-party license information, see [THIRD_PARTY_LICENSES](THIRD_PARTY_LICENSES).\n\n## Acknowledgments\n\n- [Chromium Remoting](https://chromium.googlesource.com/chromium/src/+/refs/tags/140.0.7339.249/remoting/) — Remote desktop protocol core\n- [Qt](https://www.qt.io/) — Cross-platform GUI framework\n- [spdlog](https://github.com/gabime/spdlog) — High-performance logging library\n- [coturn](https://github.com/coturn/coturn) — TURN relay server\n\n## Star History\n\n[![Star History Chart](https://api.star-history.com/svg?repos=barry-ran/QuickDesk\u0026type=Date)](https://star-history.com/#barry-ran/QuickDesk\u0026Date)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbarry-ran%2Fquickdesk","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbarry-ran%2Fquickdesk","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbarry-ran%2Fquickdesk/lists"}