pov
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@pov take a screenshot and describe what you see"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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
# With uv
uv pip install pov-desktop
# With pip
pip install pov-desktopTo install the pov CLI as a standalone tool:
uv tool install pov-desktopOr from source:
git clone https://github.com/empezarcero/pov.git
cd pov
uv syncRelated MCP server: desktop-touch-mcp
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 8000MCP Server
The MCP server exposes 16 tools:
Screenshots
Tool | Description |
| Capture a screenshot and return it as an image |
| List available monitors and their geometry |
Mouse
Tool | Description |
| Move the cursor to screen coordinates |
| Click at coordinates (or current position) |
| Scroll the mouse wheel |
| Get the current cursor position |
Keyboard
Tool | Description |
| Type a string of text literally |
| Press a key or combo (e.g. |
Window Management
Tool | Description |
| List all visible windows with handles, titles, positions |
| Bring a window to the foreground |
| Minimize, maximize, restore, hide, or show a window |
| Move and/or resize a window |
| Resize a window without moving it |
| Get info about the currently focused window |
| Gracefully close a window (WM_CLOSE) |
| 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 |
| Screenshots via mss, input/windows via Win32 |
macOS |
| Screenshot capture only |
Linux |
| 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 serveAvailable Tools
16 toolsclose_windowA
Gracefully close a window (sends WM_CLOSE).
The application may prompt the user to save before closing.
Parameters
hwnd: The window handle.
Inputs: hwnd (required). Returns: object
focus_windowA
Bring a window to the foreground and give it focus.
Parameters
hwnd:
The window handle (from list_windows).
Inputs: hwnd (required). Returns: object
get_cursor_positionA
Get the current mouse cursor position.
Returns {"x": <int>, "y": <int>}.
Inputs: no named parameters. Returns: object
get_foreground_windowA
Get information about the currently focused window.
Returns hwnd, title, process_name, pid.
Inputs: no named parameters. Returns: object
keyboard_keyA
Press a key or key combination.
Accepts human-friendly combos. Examples:
Single keys: "enter", "tab", "escape", "f5", "space"
Combos: "ctrl+c", "ctrl+shift+t", "alt+f4", "ctrl+a"
Parameters
keys: Key combination string (e.g. "ctrl+c", "enter", "alt+tab").
Inputs: keys (required). Returns: object
keyboard_typeA
Type a string of text as keyboard input.
Types the text literally -- special characters are escaped so they are sent as-is.
Parameters
text: The text to type.
Inputs: text (required). Returns: object
list_monitorsA
List available monitors and their geometry.
Returns a list of monitors with their index, position (left, top), and size (width, height). Index 0 is the virtual bounding box that spans all monitors.
Inputs: no named parameters. Returns: result
list_processesA
List running processes that have visible windows.
Returns a list with pid, process_name, title,
responding (bool), and memory_mb.
Inputs: no named parameters. Returns: result
list_windowsA
List all visible windows on the desktop.
Returns a list of window objects with: hwnd (window handle),
title, process_name, pid, class_name, state
(normal/minimized/maximized), left, top, width, height.
Use hwnd to identify a window for other window tools.
Inputs: no named parameters. Returns: result
mouse_clickA
Click the mouse at the given coordinates.
Parameters
x: Horizontal pixel coordinate. -1 = click at current cursor position. y: Vertical pixel coordinate. -1 = click at current cursor position. button: Which button: "left", "right", or "middle". clicks: Number of clicks (1 = single, 2 = double).
Inputs: x, y, button, clicks. Returns: object
mouse_moveA
Move the mouse cursor to the given screen coordinates.
Parameters
x: Horizontal pixel coordinate. y: Vertical pixel coordinate.
Inputs: x (required), y (required). Returns: object
mouse_scrollA
Scroll the mouse wheel.
Parameters
amount: Number of scroll "clicks". Positive = scroll up, negative = scroll down. x: Horizontal pixel coordinate. -1 = scroll at current cursor position. y: Vertical pixel coordinate. -1 = scroll at current cursor position.
Inputs: amount (required), x, y. Returns: object
move_windowA
Move and/or resize a window.
Pass -1 for any parameter to keep its current value.
Parameters
hwnd: The window handle. x: New left edge in pixels (-1 = keep current). y: New top edge in pixels (-1 = keep current). width: New width in pixels (-1 = keep current). height: New height in pixels (-1 = keep current).
Inputs: hwnd (required), x, y, width, +1 more. Returns: object
resize_windowA
Resize a window without moving it.
Pass -1 for either dimension to keep its current value.
Parameters
hwnd: The window handle. width: New width in pixels (-1 = keep current). height: New height in pixels (-1 = keep current).
Inputs: hwnd (required), width, height. Returns: object
screenshotA
Capture a screenshot of the user's screen.
Returns the image so you can see what the user sees.
Parameters
monitor:
Which monitor to capture. 0 = all monitors combined into one
image, 1 = primary monitor, 2 = second monitor, etc.
Use list_monitors first if you're unsure.
max_width:
Maximum width in pixels. The image is down-scaled (preserving
aspect ratio) if it exceeds this. Use 0 to disable.
Inputs: monitor, max_width.
set_window_stateA
Change a window's display state (minimize, maximize, restore, etc.).
Parameters
hwnd:
The window handle (from list_windows).
state:
One of "minimize", "maximize", "restore", "hide", "show".
Inputs: hwnd (required), state (required). Returns: object
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 16 tools
Most tools have clearly distinct purposes (mouse vs keyboard vs window vs display), but move_window and resize_window overlap since move_window can also resize with -1 parameters, and focus_window vs set_window_state could potentially confuse. Descriptions are clear enough to disambiguate.
Naming follows mixed conventions: list_monitors, close_window, and focus_window use verb-first, while mouse_move, mouse_click, and keyboard_type are noun-first, and screenshot is a single word. The pattern is readable but not consistent across the set.
With 16 tools, the set is on the heavier side of typical scopes, but it covers four distinct domains (display, input, window, process) with no redundant tools. Each tool earns its place, though it feels slightly larger than necessary.
Core desktop automation workflows are covered: capture screen, move/click/scroll, type, and manage windows. Missing capabilities like per-window screenshots and drag-and-drop are minor gaps that agents can often work around with existing tools.
Maintenance
Related MCP Connectors
Connect ChatGPT, Claude, Cursor or VS Code to your Windows PC: files, terminal, browser, apps.
OCR, transcription, file extraction, and image generation for AI agents via MCP.
Persistent memory, knowledge graph, task management and more for AI agents via MCP.
Web scraping, browser automation, screenshots and AI data extraction for AI agents via MCP.
Related MCP Servers
- AlicenseAqualityAmaintenanceWindows desktop automation MCP server — screenshot, mouse, keyboard & UI Automation. Lets LLM agents see and control your Windows desktop directly.30677 npm25MIT
- AlicenseAqualityCmaintenanceAllows AI clients to see and control Windows 10/11 desktops via MCP, with screenshots, UI Automation, Chrome CDP, keyboard/mouse, and terminal using semantic element targeting.30677 npmMIT
- AlicenseNot gradedqualityDmaintenanceA local, dependency-free MCP server that gives AI agents controlled access to the active Windows desktop, enabling automated interaction with applications through screenshots, clicks, typing, and window management.151 npm1MIT
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to capture multi-monitor screenshots with coordinate grids and perform mouse, keyboard, scrolling, dragging, and window-management actions on Windows via MCP tools or CLI. It provides pixel-accurate desktop automation for computer-use agents.MIT