Skip to main content

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.

Metadata

Release files for mcvnc 2026.3.7.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for mcvnc 2026.3.7.1
File Size Uploaded
mcvnc-2026.3.7.1.tar.gz 133.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for mcvnc 2026.3.7.1
File Interpreter ABI Platform
mcvnc-2026.3.7.1-py3-none-any.whl Python 3 none any Details

Total release size: 160.9 kB

Release files / mcvnc-2026.3.7.1.tar.gz

Download URL mcvnc-2026.3.7.1.tar.gz
Size 133.4 kB
Tags Source
SHA-256 checksum
How to use checksums
1dfff61c5b1aafa94552f8f9f8d66e33bb992d6f452f97a537794d4b24fc5a25
BLAKE2b-256 checksum
How to use checksums
11a50e417b2bd98aba129e3493aadd7041396ca40202162b118c88e7326235b2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.11.3 {"installer":{"name":"uv","version":"0.11.3","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}

Release files / mcvnc-2026.3.7.1-py3-none-any.whl

Download URL mcvnc-2026.3.7.1-py3-none-any.whl
Size 27.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
9fa388f5eceb0214dffe838add13c8e816f442574573fb96562c69a29516837b
BLAKE2b-256 checksum
How to use checksums
785aeea33f8c48eb95316a4eb8c625ad8b7a60d74a8fd6b80e195bdc0f5ebbb7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.11.3 {"installer":{"name":"uv","version":"0.11.3","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}

Release history Release notifications | RSS feed

This release

2026.3.7.1 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page