Skip to main content

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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

mcvnc-2026.3.7.tar.gz (134.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

mcvnc-2026.3.7-py3-none-any.whl (27.5 kB view details)

Uploaded Python 3

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

Hashes for mcvnc-2026.3.7.tar.gz
Algorithm Hash digest
SHA256 7d13205603f9956e8bcb67bab59cd8893acdbadb9d6c6550bc99fd48c1a9eaaf
MD5 32912f7d878640097fde43b549d713d1
BLAKE2b-256 f4c65707d64d88ff4754fcaffbf1aa5e1e4361578a31d1efeb7c95b71e3cd3ab

See more details on using hashes here.

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

Hashes for mcvnc-2026.3.7-py3-none-any.whl
Algorithm Hash digest
SHA256 f8b824c5433ae9b821842122037ad5433f4e119bfacb0497f2618d75e85ac4f9
MD5 4ac49a523b77c6c926d43f0795ec6864
BLAKE2b-256 8269272f5741cc9943f5e451f454297f90487b596848c24b4ea6a1717d580b6e

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page