This project implements the RustDesk API using Go, and includes both a web UI and web client. RustDesk is a remote desktop software that provides self-hosted solutions.
[lejianwen/rustdesk-server] is a fork of the official RustDesk Server repository. 1. Solves the API connection timeout issue. 2. Can enforce login before initiating a connection. 3. Supports client websocket.
GitHub, Google and OIDC login, web admin authorized login, Basic implementation of the PC client's primary interfaces.Supports the Personal version api, which can be enabled by configuring the rustdesk.personal file or the RUSTDESK_API_RUSTDESK_PERSONAL environment variable.
| Login | |
![]() |
|
| Address Book | Groups |
![]() |
![]() |
The frontend and backend are separated to provide a user-friendly management interface, primarily for managing and displaying data.Frontend code is available at rustdesk-api-web
Admin panel URL: http://<your server[:port]>/_admin/
admin, and the password will be printed in the console. You can change the password via the command line.

Regular user interface:

Each user can have multiple address books, which can also be shared with other users.
shared group and regular group.OAuth support: Currently, GitHub, Google and OIDC are supported. You need to create an OAuth App and configure it in
the admin panel.
Google and Github, you don't need to fill the Issuer and ScpoesOIDC, you must set the Issuer. And Scopes is optional which default is openid,email,profile, please make sure this Oauth App can access sub, email and preferred_usernameGitHub OAuth App
at Settings -> Developer settings -> OAuth Apps -> New OAuth App here.Authorization callback URL to http://<your server[:port]>/api/oidc/callback,
e.g., http://127.0.0.1:21114/api/oidc/callback.Login logs
Simple mode, some simple commands have been GUI-ized and can be executed directly in the backend

Advanced mode, commands can be executed directly in the backend
LDAP Support, When you setup the LDAP(test for OpenLDAP and AD), you can login with the LDAP's user. https://github.com/lejianwen/rustdesk-api/issues/114 , if LDAP fail fallback local user
<your server[:port]>/admin/swagger/index.html<your server[:port]>/swagger/index.html

# help
./apimain -h
./apimain reset-admin-pwd <pwd>
conf/config.yaml. gorm.type is set to sqlite, MySQL-related configurations are not required.en and zh-CN are supported. The default is zh-CN.The environment variables correspond one-to-one with the configurations in the conf/config.yaml file. The prefix for variable names is RUSTDESK_API.
The table below does not list all configurations. Please refer to the configurations in conf/config.yaml.
| Variable Name | Description | Example |
|---|---|---|
| TZ | timezone | Asia/Shanghai |
| RUSTDESK_API_LANG | Language | en,zh-CN |
| RUSTDESK_API_APP_WEB_CLIENT | web client on/off; 1: on, 0 off, default: 1 | 1 |
| RUSTDESK_API_APP_REGISTER | register enable; true, false; default:false |
false |
| RUSTDESK_API_APP_SHOW_SWAGGER | swagger visible; 1: yes, 0: no; default: 0 | 0 |
| RUSTDESK_API_APP_TOKEN_EXPIRE | token expire duration | 168h |
| RUSTDESK_API_APP_DISABLE_PWD_LOGIN | disable password login | false |
| RUSTDESK_API_APP_REGISTER_STATUS | register user default status ; 1 enabled , 2 disabled ; default 1 | 1 |
| RUSTDESK_API_APP_CAPTCHA_THRESHOLD | captcha threshold; -1 disabled, 0 always enable, >0 threshold ;default 3 |
3 |
| RUSTDESK_API_APP_BAN_THRESHOLD | ban ip threshold; 0 disabled, >0 threshold ; default 0 |
0 |
| ----- ADMIN Configuration----- | ---------- | ---------- |
| RUSTDESK_API_ADMIN_TITLE | Admin Title | RustDesk Api Admin |
| RUSTDESK_API_ADMIN_HELLO | Admin welcome message, you can use html |
|
| RUSTDESK_API_ADMIN_HELLO_FILE | Admin welcome message file, |
will override RUSTDESK_API_ADMIN_HELLO | ./conf/admin/hello.html |
| ----- GIN Configuration ----- | --------------------------------------- | ----------------------------- |
| RUSTDESK_API_GIN_TRUST_PROXY | Trusted proxy IPs, separated by commas. | 192.168.1.2,192.168.1.3 |
| ----- GORM Configuration ----- | --------------------------------------- | ----------------------------- |
| RUSTDESK_API_GORM_TYPE | Database type (sqlite or mysql). Default is sqlite. | sqlite |
| RUSTDESK_API_GORM_MAX_IDLE_CONNS | Maximum idle connections | 10 |
| RUSTDESK_API_GORM_MAX_OPEN_CONNS | Maximum open connections | 100 |
| RUSTDESK_API_RUSTDESK_PERSONAL | Open Personal Api 1:Enable,0:Disable | 1 |
| ----- MYSQL Configuration ----- | --------------------------------------- | ----------------------------- |
| RUSTDESK_API_MYSQL_USERNAME | MySQL username | root |
| RUSTDESK_API_MYSQL_PASSWORD | MySQL password | 111111 |
| RUSTDESK_API_MYSQL_ADDR | MySQL address | 192.168.1.66:3306 |
| RUSTDESK_API_MYSQL_DBNAME | MySQL database name | rustdesk |
| RUSTDESK_API_MYSQL_TLS | Whether to enable TLS, optional values: true, false, skip-verify, custom | false |
| ----- RUSTDESK Configuration ----- | --------------------------------------- | ----------------------------- |
| RUSTDESK_API_RUSTDESK_ID_SERVER | Rustdesk ID server address | 192.168.1.66:21116 |
| RUSTDESK_API_RUSTDESK_RELAY_SERVER | Rustdesk relay server address
$ claude mcp add rustdesk-api \
-- python -m otcore.mcp_server <graph>