pov
Click on "Install 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., "@povtake 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.
| Name | Required | Description | Default |
|---|---|---|---|
| hwnd | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and discloses key behavioral traits: it sends WM_CLOSE and may prompt the user to save. However, it does not specify whether the call blocks, what happens if the window handle is invalid, or whether it waits for the close to complete.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured: a one-line action summary, a brief behavioral note, and a parameter definition. Every sentence serves a purpose with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple single-param tool, the description covers the action and parameter adequately. Return behavior is absent but the output schema exists to fill that gap. Missing error-handling edge cases slightly reduce completeness, hence 4.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has no descriptions (0% coverage), so the description compensates by explaining 'hwnd: The window handle.' This adds essential meaning beyond the bare schema, though the explanation is minimal and doesn't mention where to obtain the handle (e.g., list_windows).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Gracefully close a window (sends WM_CLOSE)' with a specific verb and resource. It distinguishes from sibling tools by focusing solely on the close action, unlike focus_window or set_window_state.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for closing windows but does not explicitly state when to use it versus alternatives (e.g., force-teminating a process). It mentions the application may prompt to save, giving some context, but lacks explicit guidance on exclusions or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
focus_windowA
Bring a window to the foreground and give it focus.
Parameters
hwnd:
The window handle (from list_windows).
| Name | Required | Description | Default |
|---|---|---|---|
| hwnd | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full responsibility for behavioral disclosure. It only states the core action and does not describe side effects, limitations, failure conditions, or what happens on success or failure, leaving significant behavioral information unaddressed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single-purpose sentence followed by a short Parameters section, with no redundant filler. Everything included adds value and is front-loaded, making it easy to scan and understand quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity—one parameter and an output schema exists—the description is largely complete. It tells the user exactly what the tool does and how to supply hwnd, though it lacks deeper behavioral caveats that might exist in more complex environments.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema only defines hwnd as an integer, but the description adds that it is 'The window handle (from list_windows)', providing essential provenance and integration context. With a single parameter and 0% schema coverage, this explanation effectively compensates for schema limitations.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'Bring' and resource 'window to the foreground and give it focus', clearly stating the tool's purpose. It distinguishes itself from sibling tools like move_window, resize_window, close_window, and get_foreground_window, which address different aspects of window management.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when a window needs to be brought to the foreground, and it notes that hwnd comes from list_windows, providing useful context. However, it does not explicitly state when not to use it or compare with alternatives like set_window_state, leaving room for ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_cursor_positionA
Get the current mouse cursor position.
Returns {"x": <int>, "y": <int>}.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden of behavioral disclosure. It clearly states the return format (a dict with x and y integers), which indicates a read-only operation. However, it does not mention potential edge cases (e.g., multi-monitor coordinates) or confirm the lack of side effects, though the 'get' verb implies no mutation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise, with two short sentences that front-load the core purpose and immediately follow with the return type. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple: no parameters, no complex inputs. The output schema exists and the description explicitly states the return structure. Given the low complexity and available context, the description is fully adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are no parameters, so the description does not need to explain parameter behavior. The input schema is empty, and the 100% schema coverage baseline for no parameters is satisfied.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool gets the current mouse cursor position, using a specific verb and resource. It is distinct from sibling tools like mouse_move and mouse_click, which perform actions rather than retrieving state.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The purpose implies this tool is used to retrieve the cursor position, but there is no explicit guidance on when to use it relative to alternatives. While it is obvious that a getter would be used for reading, the description does not state conditions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_foreground_windowA
Get information about the currently focused window.
Returns hwnd, title, process_name, pid.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the burden. It implies a read-only operation via 'Get information' and enumerates return values, but does not disclose potential error conditions or permission requirements. This is a minor gap for such a simple tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise—two sentences that immediately state the purpose and return values. No redundant or extraneous text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the zero-parameter signature and presence of an output schema, the description is reasonably complete. It covers the essential return fields and purpose, though it could add a note about when to use this tool over list_windows.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the baseline is 4. The description adds no conflicting information and correctly focuses on output rather than input.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Get information about the currently focused window' and lists the exact return fields. This distinguishes it from sibling tools like list_windows (which lists all windows) and focus_window (which changes focus).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context—use it to retrieve details about the active window. It does not explicitly name alternatives or exclusions, but for a simple zero-parameter getter, this is sufficient guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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").
| Name | Required | Description | Default |
|---|---|---|---|
| keys | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral disclosure burden. It explains accepted formats and gives examples, but does not mention whether the press targets the active window, whether it blocks, or what happens on invalid keys. This is adequate but not detailed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core action and immediately provides high-value examples. The 'Parameters' section is somewhat redundant with the schema, but it adds concrete format examples and does not include unnecessary prose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter keyboard tool with an output schema, the description provides enough to invoke correctly: what it does, valid input formats, and examples. It omits whether the target is the foreground window, but that is an implied prerequisite in the context of sibling focus_window and other desktop automation tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema only defines keys as a string, but the description adds meaningful detail by showing accepted formats ('enter', 'ctrl+c', 'alt+tab') and labeling them 'human-friendly combos.' This compensates for the 0% schema description coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb and resource: 'Press a key or key combination.' The examples ('ctrl+c', 'alt+f4') clearly distinguish it from sibling keyboard_type, which would type strings rather than execute key combinations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'Accepts human-friendly combos' and the examples imply usage for keyboard shortcuts, but there is no explicit guidance on when to prefer this over keyboard_type or whether a window must be focused first. No alternatives are named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses that text is typed literally and special characters are escaped, which is a key behavioral nuance. However, it does not mention focus requirements or potential failure modes. For a simple typing tool, this is above-average disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise, with a single introductory sentence followed by a short parameter section. Every sentence adds value, and it is front-loaded with the core purpose. There is no fluff or repetition beyond the necessary parameter list.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple with one required parameter and an output schema present. The description explains the main behavior and the literal-escaping nuance. While it doesn't cover every edge case (e.g., whether focus is required), for a straightforward type-text tool it is sufficiently complete. The presence of an output schema means return values are not required in the description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides only a string type with no description. The description adds a parameter section stating 'text: The text to type,' which is minimal. However, the main body clarifies that the text is interpreted literally and special characters are escaped, which adds meaning beyond the schema. This compensates partially for the low schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb+resource: 'Type a string of text as keyboard input.' It clearly distinguishes from sibling tools like keyboard_key by focusing on text strings, while also noting literal handling of special characters. This leaves no ambiguity about what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The context is clear: this tool is for typing arbitrary text as keyboard input. It implies use cases where literal text is needed, but it does not explicitly say 'use this instead of keyboard_key for shortcuts' or provide when-not-to-use guidance. No exclusions are stated, so it's a solid 4 but not a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden. It discloses return format (index, position, size) and the important nuance that index 0 is the virtual bounding box. This goes beyond a bare 'list' description and sets expectations about the special index.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Only two sentences, front-loaded with the primary purpose, followed by return details. Every sentence adds value without waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given zero parameters, an output schema exists, and the description fully covers the key behavioral nuance (index 0 bounding box), the description is complete for the tool's complexity. Sibling tools about screen interaction benefit from this geometry info.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the baseline of 4 applies. The description contributes nothing about parameters, but none are needed, and the schema already confirms no parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'List available monitors and their geometry' with a specific verb and resource. It distinguishes itself from sibling tools by being the only tool that deals with monitor enumeration.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context: when monitor geometry is needed, call this tool. It doesn't explicitly mention alternatives or exclusions, but the context is clear given the absence of other monitor-related tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_processesA
List running processes that have visible windows.
Returns a list with pid, process_name, title,
responding (bool), and memory_mb.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It explicitly states the filter (visible windows) and the return fields (pid, process_name, title, responding, memory_mb), which adds useful context. However, it does not mention side effects (none obvious for a list operation), permission requirements, or whether it snapshots live data. This is adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, both front-loaded and free of filler. The first sentence states the action and scope; the second lists the returned fields. Every word earns its place, and it is easily scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple, no-argument tool, the description is nearly complete: it explains the filter and the output structure. However, it does not distinguish itself from the sibling 'list_windows', and there is no mention of platform or process scope (e.g., user vs system processes). Given the simplicity and the existence of an output schema, this is a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, and the input schema is an empty object. Per the rubric, a 0-parameter tool gets a baseline score of 4 since no parameter documentation is needed. The description does not attempt to explain any parameters, which is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('List') and clearly specifies the resource ('running processes') with a qualifier ('that have visible windows'). This distinguishes it from the sibling tool 'list_windows', which focuses on windows rather than process-level data. It also lists the returned fields, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives. The description does not mention list_windows or other sibling tools, nor does it provide context such as 'use this for process memory usage' or 'use list_windows for window titles'. The only implied usage is from the verb 'list'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses that only visible windows are listed (not hidden ones), provides the output structure (hwnd, title, process_name, etc.), and implicitly indicates a read-only operation. It does not discuss edge cases or permission requirements, but for a simple list operation this is adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the core action. The first sentence states the action and scope; the second lists return fields and gives a usage hint. No fluff or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-parameter, read-only tool with an output schema, the description is complete: it states purpose, output fields, and a usage pointer. It doesn't cover error cases or limitations (e.g., what happens if no windows are visible), but those are minor for a simple enumeration tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the schema already trivially covers 100%. The description enhances understanding by explaining what the returned fields mean and how to use the primary output (hwnd), which is effectively the tool's 'parameter' for downstream tools.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's action ('List all visible windows') and scope ('on the desktop'). It distinguishes itself from siblings like list_monitors and list_processes by specifically enumerating windows and explicitly returning window handles (hwnd) for use by other window tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use it: 'Use hwnd to identify a window for other window tools.' This gives clear context but does not explicitly mention alternatives or when not to use it. Since sibling tools like focus_window or close_window are well-differentiated, the context is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| x | No | ||
| y | No | ||
| button | No | left | |
| clicks | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explains parameter behaviors (e.g., -1 for current position, button choices, click count) but does not disclose broader behavioral traits such as physical cursor movement, permission requirements, or side effects. Since no annotations are provided, the description carries the full burden, but it covers only the immediate mechanics without deeper context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured. It opens with a clear one-sentence summary, then uses a bulleted list for parameters. Every line provides essential information without redundancy, making it easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers all necessary aspects for operating the tool: coordinates, button, and click count. Since an output schema exists, return values need not be described. The tool is simple and the documentation is complete for its scope, though it lacks environmental or safety notes, which prevents a perfect score.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides no parameter descriptions, but the tool description fully compensates by explaining each parameter in detail, including the special meaning of -1 for x and y, the valid button options, and the meaning of clicks. This adds significant value beyond the raw schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Click the mouse at the given coordinates.' It specifies the action (click) and the resource (mouse coordinates), effectively distinguishing it from siblings like mouse_move or keyboard_type. The purpose is explicit and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not provide explicit guidance on when to use this tool versus alternatives. While the name and description make the primary use case obvious, there is no mention of exclusions or alternative tools for similar tasks. Usage context is implied but not stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mouse_moveA
Move the mouse cursor to the given screen coordinates.
Parameters
x: Horizontal pixel coordinate. y: Vertical pixel coordinate.
| Name | Required | Description | Default |
|---|---|---|---|
| x | Yes | ||
| y | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full responsibility for behavioral disclosure. It only restates the obvious action and adds the detail that coordinates are screen-based, but it does not mention side effects, limitations, special behaviors (e.g., no click, instant movement), or potential errors. This is minimal and lacks context beyond the primary action.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very concise, front-loaded with the main purpose, and structured clearly with a parameter list. Every sentence adds value, and there is no unnecessary text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple, and the combination of a clear purpose plus parameter explanations is sufficient for basic usage. An output schema exists, so return values are covered. However, it could mention coordinate system origin (e.g., top-left) or error behavior for out-of-bounds values, but these are minor omissions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although the schema has 0% description coverage, the description includes a parameter section explaining x as horizontal pixel coordinate and y as vertical pixel coordinate. This adds meaningful semantics beyond the bare integer type in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's action: 'Move the mouse cursor to the given screen coordinates.' This is a specific verb and resource, and it distinguishes from siblings like mouse_click and get_cursor_position by focusing on movement only.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives such as mouse_click or get_cursor_position. The description implies it is for positioning the cursor, but it does not state explicit conditions, exclusions, or mention other tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| x | No | ||
| y | No | ||
| amount | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of explaining behavior. It does this well by stating that positive amount scrolls up, negative scrolls down, and that x/y can target specific coordinates or use current cursor position. However, it doesn't mention potential platform-specific behavior or absence of side effects, but the core behavior is transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise: one opening sentence followed by a well-structured parameter list. Every sentence adds value, and the formatting is easy to parse with clear labels and explanations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple scroll tool, the description covers the essential behavior and all parameters. The existence of an output schema means return values may not need to be explained. It lacks a bit of high-level context about when scrolling is applicable (e.g., scrolling a window or element), but overall it is sufficiently complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description fully compensates by explaining each parameter: amount (number of clicks, direction), x and y (coordinates, with -1 meaning current position). This exceeds the minimum needed and makes the parameters clear.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action: 'Scroll the mouse wheel.' This is a specific verb+resource that distinguishes it from siblings like mouse_move and mouse_click. The parameter details further clarify that it controls scroll direction and position.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the name and description, but there is no explicit guidance on when to use this tool over alternatives like keyboard scrolling or mouse_move. The parameter documentation offers some context (e.g., x/y = -1 scrolls at current cursor position), but no exclusions or alternative tool references are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| x | No | ||
| y | No | ||
| hwnd | Yes | ||
| width | No | ||
| height | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses the key behavior of passing -1 to keep a parameter's current value, which is helpful. However, no annotations exist, and the description doesn't mention potential limitations or side effects, such as whether the window is brought to foreground or if it works on minimized windows.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-structured, with a brief summary followed by a parameter list. No unnecessary wording.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a window manipulation tool, the description covers the essential parameters and the -1 behavior. It omits details like coordinate reference (screen vs client) and error behavior, but the output schema likely covers return values. The description is mostly complete for standard use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Every parameter in the schema is explained in the description with units and the -1 sentinel meaning. This fully compensates for the 0% schema description coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Move and/or resize a window.' It uses a specific verb and resource, and distinguishes from sibling resize_window by covering both move and resize operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives like resize_window or set_window_state. The description only explains what the tool does and its parameters, without mentioning exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| hwnd | Yes | ||
| width | No | ||
| height | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden. It discloses the -1 keep-current behavior and the no-move guarantee. However, it omits potential side effects, error conditions, or permission requirements, leaving some behavioral transparency gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is succinct and well-structured, front-loading the purpose in the first sentence and then providing parameter details. There is no redundant or filler text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple, and the description covers purpose, parameters, and key behavior. The -1 semantics are explained. It does not discuss return values, but an output schema exists. Minor gaps like error handling could be added, but overall it's quite complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has no descriptions, so the description provides the only semantics. It clearly explains hwnd as the window handle and width/height as pixel values with -1 meaning keep current, fully compensating for zero schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (resize), the resource (window), and a key constraint (without moving it), which distinguishes it from sibling tools like move_window and set_window_state. It is immediately clear what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for resizing windows but does not explicitly state when to prefer this over alternatives like move_window or set_window_state. There is no exclusion guidance, so it falls at the implied level.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| monitor | No | ||
| max_width | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does disclose key behavior: it captures the screen, returns an image, and down-scales to max_width preserving aspect ratio. It also clarifies monitor numbering semantics (0=all, 1=primary, etc.). It doesn't cover permissions, errors, or image format, so it's not a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the core action and return value, followed by a neatly formatted Parameters block. Every sentence contributes usage-relevant detail, with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter capture tool without an output schema, this description is nearly complete: it states purpose, return value, parameter semantics, and a helpful reference to list_monitors. The main gap is that it doesn't specify the image return format or error behavior, but that's a minor omission for a simple tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema descriptions are empty (0% coverage), but the description fully documents both parameters: monitor numbering and max_width scaling, including the 0 case to disable. This exceeds the schema's bare type/default information and gives the agent all necessary usage detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description opens with 'Capture a screenshot of the user's screen,' which is a specific verb+resource statement that clearly differentiates it from sibling input/output tools. It also adds the return value purpose: 'so you can see what the user sees.'
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'Returns the image so you can see what the user sees' provides a clear use context for visual awareness. It also advises 'Use list_monitors first if you're unsure' for the monitor parameter, giving a practical prerequisite. However, it doesn't mention when not to use or alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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".
| Name | Required | Description | Default |
|---|---|---|---|
| hwnd | Yes | ||
| state | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It lists the allowed states but does not mention potential side effects (e.g., what happens when hiding a window), whether the operation is reversible, error conditions, or any required permissions. For a mutation tool, this lack of behavioral context is a significant gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured: a one-sentence summary followed by a compact parameter list. Every sentence adds value, and the format is easy to parse. No fluff or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple with only two parameters and an output schema, so the description covers the essential inputs adequately. However, it omits behavioral details such as error handling, idempotency, or whether the state change is persistent, which are not covered by annotations or the output schema. This makes it merely adequate, not comprehensive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Even though the schema provides no descriptions (0% coverage), the tool description explains both parameters: hwnd is 'The window handle (from list_windows)' and state is an enum listing all valid values. This fully compensates for the missing schema descriptions and adds practical guidance on how to obtain the hwnd.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Change a window's display state' with examples (minimize, maximize, restore). This distinguishes it from sibling tools like move_window, resize_window, focus_window, and close_window, which handle different aspects of window management.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no explicit guidance on when to use this tool versus alternatives. It implies the hwnd should come from list_windows, but there is no mention of when to choose this over focus_window, move_window, or close_window. The task's context signals list siblings, but the description itself does not address selection criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
16 tool updates
v0.1.0- First observed
close_window - First observed
focus_window - First observed
get_cursor_position - First observed
get_foreground_window - First observed
keyboard_key - First observed
keyboard_type - First observed
list_monitors - First observed
list_processes - First observed
list_windows - First observed
mouse_click - First observed
mouse_move - First observed
mouse_scroll - First observed
move_window - First observed
resize_window - First observed
screenshot - First observed
set_window_state
TDQS
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
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
OCR, transcription, file extraction, and image generation for AI agents via MCP.
MCP server connecting AI agents to 100+ apps (Gmail, Slack, Notion, GitHub) via one-click OAuth.
The Remote MCP server acts as a standardized bridge between LLM applications (like Claude, ChatGPT, and Cursor) and external services, enabling AI agents to access external tools and resources. Its primary capability is providing a centralized search tool to discover other MCP servers and their respective tools. Unlike local implementations, it runs remotely with OAuth authentication and permission controls for security.
Related MCP Servers
- AlicenseAqualityAmaintenanceWindows desktop automation MCP server — screenshot, mouse, keyboard & UI Automation. Lets LLM agents see and control your Windows desktop directly.301,29217MIT
- AlicenseAqualityAmaintenanceAllows 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.301,292MIT
- AlicenseNot gradedqualityAmaintenanceEnables Windows desktop automation via MCP, allowing AI agents to control mouse, keyboard, and screen capture with the same interface as Anthropic's computer-use tool.2MIT
- AlicenseNot gradedqualityCmaintenanceA 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.87MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/empezarcero/pov'
If you have feedback or need assistance with the MCP directory API, please join our Discord server