DeskVNC DeskVNC

One Client, Three Operating Systems

DeskVNC is one native client that speaks VNC, RDP and SSH. The same binary, the same MCP server, the same 25 tools. Install it on Windows, macOS or Linux and your saved machines and your AI agent workflow are available everywhere.

The cross-platform promise

One install. One host library. One MCP server registration. No matter which OS is on your desk.

The protocol cores are written from scratch, not wrapped around a third-party library, so the behaviour is identical on every platform. Your saved hosts travel with your profile. The MCP server binary is on the PATH in the same way on every OS. An agent that connects to a Linux workstation through your laptop can connect to the same workstation through a Windows machine using the same saved host id.

Download and install

macOS

Download the DMG from the latest release. It is signed and notarized, so it opens without a warning.

Mount the DMG and drag DeskVNC into Applications.

The MCP server binary lives at:

/Applications/DeskVNCViewer.app/Contents/MacOS/dvv

Windows

Download the MSI or portable EXE from the latest release. The installer is signed. Run it and follow the steps.

The MCP server binary lives at one of these paths:

%LOCALAPPDATA%\DeskVNCViewer\dvv.exe
C:\Program Files\DeskVNCViewer\dvv.exe

The exact location depends on whether you chose per-user or system-wide install.

Linux

Download the tarball from the latest release. Extract it and run the installer script, or drop the binary into a directory on your PATH.

The MCP server binary is installed to:

/usr/bin/dvv

Register the MCP server once

After install, register the server with your agent. Run this once and it applies everywhere you run the agent on that machine.

For Claude Code:

claude mcp add deskvnc -- /Applications/DeskVNCViewer.app/Contents/MacOS/dvv mcp --stdio

On Windows, adjust the path:

claude mcp add deskvnc -- "C:\Program Files\DeskVNCViewer\dvv.exe" mcp --stdio

On Linux:

claude mcp add deskvnc -- /usr/bin/dvv mcp --stdio

Claude Code has a button in the AI Agents panel that does this for you. On any other agent, run dvv doctor and it prints the exact registration line.

The four-call loop works everywhere

Once registered, the same tool calls work on any platform the agent runs on.

dvv_hosts   {}                                    // list saved machines
dvv_open    {"hostId": "<id>", "perceive": true}  // open one, get a limb id
dvv_control {"limbId": "...", "action": "acquire"} // take the wheel
dvv_screen  {"limbId": "...", "form": "full", "scale": 0.25} // look
dvv_click   {"limbId": "...", "x": 700, "y": 400, "generation": 1}
dvv_screen  {"limbId": "...", "form": "damage-crop"} // look again
dvv_type    {"limbId": "...", "text": "notepad", "wpm": 3000}
dvv_key     {"limbId": "...", "keys": "meta+r"}

Benchmarks are the same on every OS, measured on a real 1920x1080 Windows desktop over LAN: dvv_open and attach in 4 ms, dvv_control acquire in under 1 ms, dvv_screen at scale 0.25 in 25 ms, one observe-then-act cycle in 19 ms, about 52 actions per second, dvv_type at 447 characters per second.

Error handling is identical across platforms

The four error codes apply the same way on Windows, macOS and Linux:

LIMB_GONE - the connection dropped. Call dvv_hosts to find the machine again and reopen it.

GEOMETRY_CHANGED - the screen resized since you computed the click coordinates. Read the screen again and retry.

SCREEN_CHANGED - something window-sized repainted since the last pixel read. Read the screen again before typing or pressing keys.

LEASE_REVOKED - a person took the wheel. Read lease.human_took_over from dvv_status to confirm. Stop driving.

These are the only denial codes. There are no others.

Keyboard handling

Keyboard layouts, dead keys and CJK input methods reach the remote intact on every platform. System shortcuts can be passed through to the remote, and scroll wheel and trackpad behaviour matches the local setting regardless of what the remote expects.

Secrets stay in the OS keychain

Credentials for saved hosts are stored in Keychain Services on macOS, Credential Manager on Windows, and Secret Service on Linux. The OS handles them, not a config file. The encrypted file fallback for headless Linux machines is available the same way on every Linux install.

Protocol coverage is the same everywhere

VNC: RFB 3.3 through 3.8 with every common encoding, VeNCrypt, RA2 and Apple authentication. Verified against x11vnc, TigerVNC, QEMU, RealVNC and macOS Screen Sharing.

RDP: Windows desktops with NLA, RemoteApp, resolution control and the usual codecs.

SSH: a terminal that survives a drop, SFTP transfers, tunnels and PuTTY key files.

Everything works the same on every OS.

One client, one set of MCP tools

25 tools in the manifest, asserted in source as TOOL_COUNT: usize = 25. dvv_hosts, dvv_limbs, dvv_open, dvv_wait, dvv_control, dvv_screen, dvv_click, dvv_type, dvv_key, dvv_status, dvv_signals, dvv_reconnect, dvv_close, dvv_files, dvv_transfer, dvv_clipboard, dvv_term_read, dvv_term_send, dvv_run, and the group family dvv_group_open, dvv_group_list, dvv_group_run, dvv_group_grow, dvv_group_shrink, dvv_group_close for addressing several machines as one.

The same tool names, the same arguments, the same response shapes on Windows, macOS and Linux.