Skip to main content

Point of View – Screenshot capture, mouse/keyboard control, and window management as a CLI and MCP server for LLM agents

Project description

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

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

pov_desktop-0.1.0.tar.gz (16.5 kB view details)

Uploaded Source

Built Distribution

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

pov_desktop-0.1.0-py3-none-any.whl (21.2 kB view details)

Uploaded Python 3

File details

Details for the file pov_desktop-0.1.0.tar.gz.

File metadata

  • Download URL: pov_desktop-0.1.0.tar.gz
  • Upload date:
  • Size: 16.5 kB
  • Tags: Source
  • Uploaded using 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}

File hashes

Hashes for pov_desktop-0.1.0.tar.gz
Algorithm Hash digest
SHA256 2eaf06f82ba8fe4891c57a1a4f9e1ba3f512e459f8ee1e03f01f31849acf0471
MD5 2ef372e53744e58517ba1dfc815eefbb
BLAKE2b-256 15e5a562595bb8a23062b104e16fd7f00581b48abcf79eb4e9a354d3b7ec4b2a

See more details on using hashes here.

File details

Details for the file pov_desktop-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: pov_desktop-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 21.2 kB
  • Tags: Python 3
  • Uploaded using 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}

File hashes

Hashes for pov_desktop-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 f2cfb40f318c1e72dca171c1ec8a959d789ea3e2a8e914b2f20b5778c421e30e
MD5 dcbd90c8b69c7a7b6b3a0110a8b2d70a
BLAKE2b-256 078d561742d7f56b35c757f9398be369970670d4d4477f9f18fb288394300672

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