Skip to main content

pov - Point of View

Screenshot capture, mouse/keyboard control, and window management — as a CLI and MCP server for LLM vision agents.

Lets LLMs (Claude Desktop, Cursor, OpenCode) see and interact with the Windows desktop. Works on Windows, macOS, Linux (X11/Wayland), and WSL.

Install

uv sync

Or install globally:

uv tool install .

CLI Usage

# Screenshots
pov capture                     # Capture screenshot, print base64
pov capture --output shot.png   # Save to file
pov capture --monitor 1         # Specific monitor
pov monitors                    # List available monitors

# Mouse
pov click                       # Left-click at current position
pov click 500 300               # Left-click at (500, 300)
pov click 500 300 --button right --clicks 2
pov move-mouse 800 600          # Move cursor to (800, 600)
pov scroll -3                   # Scroll down 3 clicks
pov scroll 5 --x 400 --y 200   # Scroll up at position
pov cursor                      # Print current cursor position

# Keyboard
pov type "Hello, world!"        # Type text literally
pov key enter                   # Press a key
pov key ctrl+c                  # Key combo
pov key alt+f4                  # Another combo

# Windows
pov windows                     # List visible windows
pov processes                   # List windowed processes
pov foreground                  # Get the focused window
pov focus <hwnd>                # Focus a window by handle
pov window-state <hwnd> minimize
pov move-window <hwnd> --x 100 --y 100
pov resize-window <hwnd> --width 1024 --height 768
pov close-window <hwnd>         # Gracefully close a window

# MCP server
pov serve                       # stdio transport (default)
pov serve --transport sse --port 8000

MCP Server

The MCP server exposes 16 tools:

Screenshots

Tool Description
screenshot Capture a screenshot and return it as an image
list_monitors List available monitors and their geometry

Mouse

Tool Description
mouse_move Move the cursor to screen coordinates
mouse_click Click at coordinates (or current position)
mouse_scroll Scroll the mouse wheel
get_cursor_position Get the current cursor position

Keyboard

Tool Description
keyboard_type Type a string of text literally
keyboard_key Press a key or combo (e.g. ctrl+c, alt+f4)

Window Management

Tool Description
list_windows List all visible windows with handles, titles, positions
focus_window Bring a window to the foreground
set_window_state Minimize, maximize, restore, hide, or show a window
move_window Move and/or resize a window
resize_window Resize a window without moving it
get_foreground_window Get info about the currently focused window
close_window Gracefully close a window (WM_CLOSE)
list_processes List running processes with visible windows

Claude Desktop / Cursor / OpenCode

Add to your MCP config:

{
  "mcpServers": {
    "pov": {
      "command": "uv",
      "args": ["run", "--directory", "/path/to/pov", "pov", "serve"]
    }
  }
}

SSE Transport

{
  "mcpServers": {
    "pov": {
      "url": "http://127.0.0.1:8000/sse"
    }
  }
}

Platform Support

Platform Backend Notes
Windows mss + ctypes Screenshots via mss, input/windows via Win32
macOS mss Screenshot capture only
Linux mss Screenshot capture only (X11 and Wayland)
WSL PowerShell + .NET/Win32 Full support — captures the Windows desktop, controls mouse/keyboard, manages windows

Development

# Install in development mode
uv sync

# Run the CLI
uv run pov --help

# Run the MCP server
uv run pov serve

Metadata

Release files for pov-desktop 0.1.0

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

Source distribution (sdist)

Source distribution for pov-desktop 0.1.0
File Size Uploaded Provenance Actions
pov_desktop-0.1.0.tar.gz 16.5 kB Without provenance Details for pov_desktop-0.1.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for pov-desktop 0.1.0
File Interpreter ABI Platform Actions
pov_desktop-0.1.0-py3-none-any.whl Python 3 none any Details for pov_desktop-0.1.0-py3-none-any.whl

Total release size: 37.6 kB

Release files / pov_desktop-0.1.0.tar.gz

Download URL pov_desktop-0.1.0.tar.gz
Size 16.5 kB
Tags Source
SHA-256 checksum
How to use checksums
2eaf06f82ba8fe4891c57a1a4f9e1ba3f512e459f8ee1e03f01f31849acf0471
BLAKE2b-256 checksum
How to use checksums
15e5a562595bb8a23062b104e16fd7f00581b48abcf79eb4e9a354d3b7ec4b2a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.9.16 {"installer":{"name":"uv","version":"0.9.16","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release files / pov_desktop-0.1.0-py3-none-any.whl

Download URL pov_desktop-0.1.0-py3-none-any.whl
Size 21.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
f2cfb40f318c1e72dca171c1ec8a959d789ea3e2a8e914b2f20b5778c421e30e
BLAKE2b-256 checksum
How to use checksums
078d561742d7f56b35c757f9398be369970670d4d4477f9f18fb288394300672
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.9.16 {"installer":{"name":"uv","version":"0.9.16","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Security for pov-desktop 0.1.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files No provenance

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