VNC client MCP server — connect to remote desktops, capture screens, send input
Project description
mcvnc
VNC client as an MCP server. Gives language models interactive access to remote desktops -- connect to VNC sessions, capture screenshots, send keyboard and mouse input, read and write the clipboard.
Built on FastMCP and asyncvnc2.
Install
pip install mcvnc
Or with uv:
uv tool install mcvnc
Quickstart
Claude Code
claude mcp add mcvnc -- uvx mcvnc
Other MCP hosts (stdio transport)
{
"mcpServers": {
"mcvnc": {
"command": "uvx",
"args": ["mcvnc"]
}
}
}
Manual / development
git clone https://git.supported.systems/warehack.ing/mcvnc.git
cd mcvnc
make install # uv sync --group dev
make run # uv run mcvnc
Tools
Connection
| Tool | Description |
|---|---|
vnc_connect |
Connect to a VNC server (host, port, password) |
vnc_disconnect |
Close a session |
vnc_list_sessions |
List active connections |
vnc_session_info |
Details for a specific session |
Screen
| Tool | Description |
|---|---|
vnc_screenshot |
Full-desktop screenshot (returns inline PNG + metadata) |
vnc_screenshot_region |
Capture a specific rectangle of the desktop |
vnc_screen_info |
Desktop dimensions without capturing |
vnc_wait_for_screen_change |
Wait until the screen updates after an interaction |
Input
| Tool | Description |
|---|---|
vnc_type_text |
Type a string of text |
vnc_press_key |
Press a single key (Enter, Tab, Escape, etc.) |
vnc_key_combo |
Key combination (Ctrl+C, Alt+F4, etc.) |
vnc_click |
Click at coordinates (left/right/middle) |
vnc_double_click |
Double-click at coordinates |
vnc_move |
Move the mouse cursor |
vnc_drag |
Click-drag from one point to another |
vnc_scroll |
Scroll up or down |
Clipboard
| Tool | Description |
|---|---|
vnc_get_clipboard |
Read the remote clipboard |
vnc_set_clipboard |
Write to the remote clipboard |
Typical workflow
vnc_connect -> vnc_screenshot -> interpret UI -> interact
^ |
| v
+---- vnc_screenshot <---- vnc_wait_for_screen_change
Use vnc_screenshot_region when you only care about a dialog, menu, or status bar -- it requests just that rectangle from the VNC server instead of the full desktop.
Use vnc_wait_for_screen_change after interactions to wait for the UI to actually update before taking the next screenshot. Optionally pass a region to watch for changes only within that area.
Configuration
All settings via environment variables, all optional:
| Variable | Default | Description |
|---|---|---|
MCVNC_DEFAULT_PORT |
5900 |
Default VNC port |
MCVNC_CONNECTION_TIMEOUT |
10 |
Connection timeout (seconds) |
MCVNC_SCREENSHOT_TIMEOUT |
30 |
Screenshot timeout (seconds) |
MCVNC_SCREENSHOT_MAX_WIDTH |
0 |
Max screenshot width, 0 = no limit |
MCVNC_WAIT_CHANGE_TIMEOUT |
5 |
Wait-for-change timeout (seconds) |
Development
make install # uv sync --group dev
make test # pytest
make lint # ruff check
License
GPL-3.0-or-later -- required by the asyncvnc2 dependency.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file mcvnc-2026.3.7.tar.gz.
File metadata
- Download URL: mcvnc-2026.3.7.tar.gz
- Upload date:
- Size: 134.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.26 {"installer":{"name":"uv","version":"0.9.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"EndeavourOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7d13205603f9956e8bcb67bab59cd8893acdbadb9d6c6550bc99fd48c1a9eaaf
|
|
| MD5 |
32912f7d878640097fde43b549d713d1
|
|
| BLAKE2b-256 |
f4c65707d64d88ff4754fcaffbf1aa5e1e4361578a31d1efeb7c95b71e3cd3ab
|
File details
Details for the file mcvnc-2026.3.7-py3-none-any.whl.
File metadata
- Download URL: mcvnc-2026.3.7-py3-none-any.whl
- Upload date:
- Size: 27.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.26 {"installer":{"name":"uv","version":"0.9.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"EndeavourOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f8b824c5433ae9b821842122037ad5433f4e119bfacb0497f2618d75e85ac4f9
|
|
| MD5 |
4ac49a523b77c6c926d43f0795ec6864
|
|
| BLAKE2b-256 |
8269272f5741cc9943f5e451f454297f90487b596848c24b4ea6a1717d580b6e
|