desktop-mcp
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., "@desktop-mcptake a screenshot and click on the dialog's OK button"
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.
desktop-mcp
Desktop vision and control for LLMs on Linux, including Wayland — the model takes a screenshot of the whole screen and clicks, types and scrolls on what it sees. Plain MCP over stdio, so it works in Claude Code, Claude Desktop, Cursor, or any other MCP client.
Read this first: you may not need this
Anthropic ships computer use natively, and where that works you should use it instead — it is better integrated and actually maintained:
macOS and Windows: Claude Desktop has computer use built in, in Cowork and Claude Code. It drives your real desktop. (docs)
Building your own agent: the Claude API has a first-party
computertool (GA as thecomputer_toolset_20260801toolset). (docs)
The gap this fills is Linux. As of August 2026 computer use is not available in the Linux desktop app, and desktop automation on Wayland is genuinely awkward in a way X11 never was:
COSMIC's compositor does not implement
wlr-screencopy, sogrimfails outright and every screenshot tool needs a per-compositor path.There is no protocol to query the cursor position, and none to enumerate another client's windows.
Input has to go in below the compositor via
/dev/uinput, because the commonly packagedydotoolexposes a relative pointer whose long jumps get mangled by pointer acceleration.
If you are on macOS or Windows, this repo is mostly redundant. If you are on Linux — particularly Wayland — it is the working option.
Desktop-automation MCP servers are not a new category; there are thousands of MCP servers. What is specific here is the Wayland-native absolute-uinput input path, measured pixel-exact on COSMIC.
Related MCP server: mcp-linux-desktop
Status
Written to be cross-platform, but only one configuration has actually been exercised. The rest is code paths, not evidence — treat it accordingly.
Platform | Screenshot | Input | Tested |
Linux / Wayland |
|
| Yes — COSMIC only |
Linux / X11 |
|
| No |
macOS |
|
| No |
Windows |
|
| No |
What was tested, and how
Verified end-to-end on:
Pop!_OS 24.04 LTS, kernel 7.0.11, COSMIC (
cosmic-comp1.0.0), Wayland, single 2560x1440 display, Python 3.13.
Results:
Check | Method | Result |
Screenshot |
| 2560x1440 captured, downscaled to 1400x788 |
Pointer accuracy | 5 target points, read back through XWayland | 5/5 exact, 0px error |
Buttons and scroll |
|
|
Drag |
| 26 |
Typing | Both | Text landed in a focused editor |
Chords |
| Applied |
Click via MCP | Full stdio round trip against a native Wayland app | New tab opened |
Untested and worth knowing: multi-monitor layouts, HiDPI scaling, non-US
keyboard layouts on the raw-keycode path (wtype handles those correctly;
uinput keycodes assume US), and every non-COSMIC compositor.
Reports from other platforms are welcome — desktop_info dumps everything
needed to diagnose a backend problem.
Install
git clone <this repo> && cd desktop-mcp
uv venv && uv pip install -e .macOS, Windows, and Linux/X11 also need the input dependencies:
uv pip install -e ".[gui]"Linux: one-time permission setup
Injecting input on Wayland means writing to /dev/uinput, which is root-owned
by default:
bash scripts/setup-linux.sh # needs sudo once
# then log out and back inmacOS: one-time permission setup
Grant Screen Recording and Accessibility to whichever app launches the server (Terminal, iTerm, Claude Desktop) in System Settings → Privacy & Security.
Wire it up
Claude Code:
claude mcp add desktop -- /absolute/path/to/desktop-mcp/.venv/bin/python -m desktop_mcp.serverClaude Desktop (claude_desktop_config.json) and Cursor
(.cursor/mcp.json) use the same shape:
{
"mcpServers": {
"desktop": {
"command": "/absolute/path/to/desktop-mcp/.venv/bin/python",
"args": ["-m", "desktop_mcp.server"]
}
}
}Tools
Tool | Purpose |
| Capture the desktop |
| Left/right/middle click, single or double |
| Move the pointer without clicking (hover) |
| Press, move, release — selections, sliders, window moves |
| Wheel scroll under a point |
| Type into the focused element |
| Chords like |
| Where the pointer is |
| Open windows, where the OS permits it |
| Pause, then look again |
| Environment, active backends, safety settings |
Coordinates
Screenshots are downscaled (1400px long edge by default) before being sent, so the model works in image pixels; the server maps them back to screen pixels on every call. Pass exactly the coordinates you read off the screenshot.
This is the detail most home-grown computer-use tools get wrong. Miss it and every click lands at a consistent fraction of where it was aimed.
Why /dev/uinput instead of ydotool on Linux
Commonly packaged ydotool builds expose a relative pointer, so a jump to
(1280, 720) is delivered as one large relative motion — which the compositor
runs through pointer acceleration. The cursor lands near the target rather than
on it, and the error grows with distance. An absolute uinput device sidesteps
acceleration: measured 5/5 exact on a 2560x1440 screen. ydotool remains a
fallback when /dev/uinput is not writable.
Click timing
Compositors dispatch pointer motion asynchronously, and toolkits ignore a button press that arrives before they have processed the motion that put the cursor over the widget. Measured on COSMIC: a 30ms gap between move and press reliably highlights a button but never activates it — the hover state is proof the coordinates are right, which makes this failure easy to misread as a targeting bug. 250ms activates it. A press also has to be held (~90ms) to register as a real click rather than a stray event.
Both delays are tunable; lower them only if your desktop tolerates it.
Safety
This gives a model the same reach over the machine as the person sitting at it. It can read anything on screen — open password managers, private messages, tokens — and click anything, including destructive buttons. Treat a session as if you had handed someone your keyboard.
Environment variables:
Variable | Default | Effect |
| off | Screenshots allowed, all input refused |
|
| Max input actions per minute |
| — | Extra comma-separated chords to refuse |
| — | Append every action to this file |
|
| Screenshot long edge in pixels |
|
| Seconds between moving the pointer and pressing |
|
| Seconds a mouse button is held down |
ctrl+alt+F1–F12 are always blocked; VT switching can drop the graphical
session out from under you.
A read-only reviewer setup:
DESKTOP_MCP_READ_ONLY=1 python -m desktop_mcp.serverVerify
.venv/bin/python scripts/mcp_smoke.py # real stdio MCP round tripAvailable Tools
11 toolsclickB
Click at (x, y), in screenshot-image coordinates.
button: "left", "right" or "middle". count: 2 for a double-click.
| Name | Required | Description | Default |
|---|---|---|---|
| x | Yes | ||
| y | Yes | ||
| count | No | ||
| button | No | left | |
| screenshot | No |
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 states the action and coordinate system, but does not mention side effects, return values (e.g., whether a screenshot is returned), or prerequisites like window focus or timeouts. It is not misleading but very minimal.
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, with the core action front-loaded. It includes parameter details in a compact format without any redundant text. Every sentence earns its place, making it appropriately concise and well-structured.
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 simplicity of a click tool and no output schema, the description covers the essential action and key parameters. However, it omits potential context such as what happens after the click (does it capture a screenshot?), whether the cursor is moved, and any error conditions. For a tool with no annotations, this is a moderate gap but not severe.
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 must compensate. It clarifies the meaning of x and y by specifying they are in screenshot-image coordinates, and it explicitly explains button ('left', 'right', 'middle') and count ('2 for a double-click'). However, the screenshot parameter is not explained, and the count semantics beyond 2 are unspecified. Overall, it adds meaningful value to most 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 states a specific verb ('Click') and a coordinate system ('screenshot-image coordinates'), which clearly identifies the tool's purpose. It distinguishes from sibling tools like move, drag, or scroll by focusing on a simple click action, though it does not explicitly name an alternative. The mention of button and count further specifies the behavior.
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 guidance on when to use this tool versus alternatives like click vs. double-click via count, or when to use drag or scroll instead. It does not mention any exclusions or preferred contexts. The only usage hint is the parameter explanation, but that is about how to invoke, not when.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cursor_positionA
Report where the pointer is, in both image and screen coordinates.
| 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 behavioral burden. It discloses that the tool reports in both image and screen coordinates, which is useful. However, it doesn't mention that it's read-only (though obvious), nor the output structure, though an output schema exists. It adequately covers the main behavior but could add a note about no side effects or state changes.
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?
A single, concise sentence that front-loads the core action and covers both coordinate systems. No filler, no redundancy. Reads clearly and efficiently.
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 zero-parameter tool with a descriptive output schema (not shown), the description covers the essential purpose. It doesn't mention edge cases like whether the cursor must be within a window, but that's likely covered by the output schema. The description is complete for a typical query 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 baseline is 4 per the rubric. No parameter explanation is needed. The description correctly focuses on the output rather than inputs, which is appropriate for a parameterless tool.
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 states a specific verb ('Report') and a clear resource (the pointer position), and specifies two coordinate systems (image and screen). This makes the tool's function immediately clear and distinguishes it from sibling tools like click or move, which are actions rather than queries.
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 the tool is used to get the current pointer location, but it does not explicitly say when to use it versus alternatives like screenshot or desktop_info. It also doesn't mention that it's a read-only query or that it's useful before other actions. Fine for a simple tool, but lacks guidance on when to choose this over siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
desktop_infoA
Report the environment, the chosen backends, and the active safety limits.
Worth calling once at the start of a session, or whenever something fails.
| Name | Required | Description | Default |
|---|---|---|---|
No 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 exactly what the tool returns (environment, backends, safety limits) and is implicitly a read-only reporting operation. It does not mention side effects or error behavior, but for a simple info tool that's acceptable. It adds value beyond the empty schema by defining the semantic content.
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: the first states the core purpose, the second provides usage timing. It is front-loaded with the key information and contains zero fluff. Every word earns its place. Ideal length for a tool of this simplicity.
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 zero-parameter info tool with no output schema, this description is complete. It explains what the tool does and when to call it. The agent has everything needed to decide whether to invoke it and what to expect. No further clarification is required.
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 schema is empty with 100% schema description coverage by default. Per the rubric, the baseline is 4 when there are no parameters. The description doesn't need to add parameter-specific semantics, and none are present. There is nothing to improve here.
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 states a specific verb ('Report') and a clear resource: 'the environment, the chosen backends, and the active safety limits.' This is unambiguous and distinguishes it from all sibling tools, which are action-oriented (click, type, etc.). It clearly identifies what information is returned.
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 explicitly advises when to call it: 'Worth calling once at the start of a session, or whenever something fails.' This gives clear timing context. It does not explicitly list alternatives, but given the sibling set is all action tools, it's obvious this is the dedicated info tool. Could be improved with a 'when not to use' statement, but it provides solid guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dragB
Press at one point, move, and release at another.
Use for selecting text, moving windows, and dragging sliders.
| Name | Required | Description | Default |
|---|---|---|---|
| to_x | Yes | ||
| to_y | Yes | ||
| button | No | left | |
| from_x | Yes | ||
| from_y | Yes | ||
| screenshot | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It describes only the physical gesture and does not mention what the tool returns (despite a 'screenshot' parameter defaulting to true), whether the action is reversible, or any side effects on the UI. This is a significant gap for a tool that manipulates the system state.
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 and front-loaded with the essential action. It is appropriately concise with no filler, making it easy to parse 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?
For a tool with 6 parameters, no parameter descriptions, and no annotations, this description is insufficient. It omits coordinate conventions, button values, and return behavior, leaving the agent with too many unknowns to call the tool reliably.
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 coverage is 0% and the description provides no parameter details. It does not clarify the coordinate system (screen vs window-relative), units, the meaning of the 'button' parameter, or the 'screenshot' parameter. An agent has to guess these crucial details.
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 drag action (press, move, release) and provides concrete use cases (selecting text, moving windows, dragging sliders), which sufficiently distinguishes it from sibling tools like click and move. The verb and resource are specific 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?
It gives explicit use cases ('Use for selecting text, moving windows, and dragging sliders') that tell the agent when to invoke it. However, it does not state when not to use it or name alternatives, so some inference is required, but the guidance is still clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
keyB
Press a key or chord, e.g. "enter", "ctrl+s", "alt+tab", "cmd+space".
Modifiers: ctrl, alt, shift, super (aka win), cmd. "cmd" is Command on macOS and Super elsewhere, so one chord works across platforms.
| Name | Required | Description | Default |
|---|---|---|---|
| combo | Yes | ||
| presses | No | ||
| screenshot | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must fully disclose behavior. It explains the core key press action and the cross-platform behavior of 'cmd', but omits the 'screenshot' parameter (default true) which implies the tool may capture a screenshot after pressing, and does not mention 'presses' effects. These are significant undocumented behaviors.
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. The core purpose and examples are front-loaded, and the modifier explanation is directly relevant. No redundant content exists.
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 tool, the description covers the primary action but misses the screenshot side effect and press count, which are important for correct usage. The lack of output schema and annotations means the description should be more thorough to compensate, but it is not.
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 must explain all parameters. It elaborates on 'combo' through examples and modifier details, but gives no explanation for 'presses' or 'screenshot'. The description only partially compensates for the schema's lack of information.
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 presses a key or chord, with concrete examples like 'enter', 'ctrl+s', 'alt+tab'. This verb+resource definition is specific and distinguishes it from sibling tools like 'type_text' (which types text) and 'click' (which clicks).
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 keyboard shortcuts and chords, and explains modifiers. However, it does not explicitly contrast with alternatives or state when not to use it (e.g., for typing text). Usage context is implicit rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_windowsA
List open windows with their titles and geometry, where the OS allows it.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavior. It mentions 'where the OS allows it', acknowledging platform limitations, but does not detail what happens on unsupported systems (e.g., empty list, error) or clarify that it is a read-only, side-effect-free operation. This leaves some ambiguity.
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 concise sentence that front-loads the action and output. It contains no unnecessary words and is directly usable.
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 tool with no parameters and no output schema, the description adequately conveys the essential behavior and its limitation. It could explicitly state the return format (list) but 'List' implies that. Given the low complexity, this is nearly 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?
With zero parameters and 100% schema coverage (trivial empty schema), the description has no parameter details to add. The baseline of 4 applies because there are no parameters to explain.
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 states a specific verb (list), resource (open windows), and what it returns (titles and geometry). This clearly distinguishes it from sibling tools that perform actions (click, drag, type_text) or capture screenshots.
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. While the purpose is clear, there is no mention of when listing windows is appropriate, such as before automation to determine target coordinates, or any exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
moveB
Move the pointer to (x, y) without clicking -- useful for hover states.
| Name | Required | Description | Default |
|---|---|---|---|
| x | Yes | ||
| y | Yes | ||
| screenshot | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full responsibility for behavioral disclosure. It only states that the tool moves the pointer without clicking; it omits any mention of the screenshot parameter, whether the move is instantaneous or animated, or any side effects (e.g., triggering hover effects). No information on coordinate system or edge cases is given.
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?
One sentence with no filler. The core purpose is front-loaded, and the differentiating 'without clicking' appears early. It is appropriately minimal, though the screenshot parameter is not mentioned in the description, which is a minor structural omission.
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 pointer-move tool with no annotations and an unexplained screenshot parameter, the description is incomplete. It does not clarify the coordinate origin, whether coordinates are relative to the screen or window, or what the screenshot parameter does. The tool is simple enough that the missing info is notable but not catastrophic, yet the description leaves the agent guessing on a parameter that could affect behavior.
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% and the description adds no meaning to any of the parameters. It mentions (x, y) but that is already in the schema as integers. The screenshot parameter is completely unexplained — the description does not hint at when it should be set to true or what it does. The description adds zero value beyond 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 action (move pointer), the target (to x,y), and the key differentiator from siblings: 'without clicking'. It explicitly mentions a use case ('useful for hover states'), which immediately distinguishes it from the click, drag, and scroll 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 a usage scenario (hover states) but does not explicitly say when not to use this tool versus alternatives like click or drag. It contrasts with clicking but offers no explicit exclusions or alternative routing beyond the implicit 'without clicking' context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
screenshotA
Capture the desktop and return it as an image.
Take one before acting, and after any action whose result you need to see. All other tools expect coordinates measured on this image.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full burden of behavioral disclosure. It implies a read-only operation (capturing an image) but does not explicitly state safety, side effects, or limitations such as screen resolution or multi-monitor behavior. The description adds context about the return type but omits potential caveats.
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 only two sentences and every word earns its place. It prioritizes the core action first and then provides timely usage guidance, with no fluff or repetition.
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 zero-parameter tool with no output schema, the description covers the essential points: what it does, when to use it, and why it matters for other tools. It could mention whether it captures the entire desktop or the primary monitor, but the core usage is well covered given the tool's simplicity.
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 accepts no parameters, and the input schema confirms this. Since there are no parameters to document, the description correctly says nothing about them, and the baseline for zero-parameter tools is high.
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 states a specific action ('Capture the desktop') and the resulting output ('return it as an image'). It clearly distinguishes itself from sibling tools like click, move, and type_text, which all operate on coordinates relative to this image.
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?
Explicitly instructs when to take a screenshot: 'before acting' and 'after any action whose result you need to see.' It also tells agents why this matters by noting that 'all other tools expect coordinates measured on this image,' which connects to how the tool should be used in the workflow.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scrollA
Scroll under the pointer at (x, y).
dy is in wheel detents: negative scrolls down the page, positive scrolls up.
| Name | Required | Description | Default |
|---|---|---|---|
| x | Yes | ||
| y | Yes | ||
| dx | No | ||
| dy | No | ||
| screenshot | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explains dy semantics (negative scrolls down, positive scrolls up), which adds value beyond the schema. However, it does not disclose other behaviors like the default screenshot or dx handling. Given no annotations, the description carries the full burden but is incomplete.
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 short sentences, front-loaded with the core purpose, no wasted words. It efficiently communicates the essential information.
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 action, the description covers the core (location and vertical direction) but leaves dx and screenshot semantics unspecified. It does not mention return value, but no output schema exists, so that is not strictly required. Still, the screenshot default behavior should be disclosed for full completeness.
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 description explicitly explains dy, and x,y are self-evident from the phrase 'at (x,y)'. However, dx and screenshot parameters are not described, and with 0% schema coverage, the description only partially compensates. The lack of explanation for screenshot (default true) could lead to unexpected behavior.
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 states a specific verb ('Scroll'), a target ('under the pointer at (x, y)'), and a clear action. It is distinct from sibling tools like click, move, and drag, even without explicit comparison, because the scroll action is 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?
No guidance is provided on when to use this tool versus alternatives like drag or key. There are no exclusions, prerequisites, or situational hints. The description only explains parameter semantics, not usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
type_textA
Type text into whatever currently has keyboard focus.
Click the target field first. Newlines in the text are typed as Enter.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | ||
| screenshot | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the burden of behavioral disclosure. It reveals the newline-as-Enter behavior and the focus requirement, but it does not mention the effect of the 'screenshot' parameter (e.g., whether a screenshot is taken after typing) or what happens if no element is focused. It adds some value but leaves key behavioral aspects undocumented.
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, front-loaded with the core action and then a concise usage/behavior note. Every word earns its place—no fluff, no redundancy, and the critical 'click first' instruction is immediately actionable.
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 2-parameter tool with no output schema and no annotations, the description covers the main action, the focus requirement, and the newline behavior. However, the screenshot parameter's purpose is left completely unexplained, which is a notable omission given it is optional and defaults to true. The description is adequate for basic use but not fully 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 coverage is 0%, so the description must compensate. It clearly implies that 'text' is the string to type, but it provides zero explanation of the 'screenshot' parameter, which is optional and defaults to true. This is a significant gap because the screenshot behavior is not mentioned at all, leaving the agent uncertain about its purpose or when to disable it.
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 states a specific verb ('type') and resource ('text into whatever currently has keyboard focus'), clearly distinguishing it from siblings like click, key, and move. The focus qualifier adds precision, making the tool's scope 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?
It gives a clear prerequisite ('Click the target field first') and defines how newlines are handled, which informs when to use this tool (for text input into focused fields). It does not explicitly name alternatives or exclusions, but the focus-based instruction implies a compare-and-contrast with click or key tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
waitC
Pause, then look again. Use while a page loads or an animation finishes.
| Name | Required | Description | Default |
|---|---|---|---|
| seconds | No | ||
| screenshot | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It only says 'Pause, then look again,' which hints at a screenshot but doesn't disclose that the pause is blocking, how the screenshot is handled, or that the screenshot is optional (though the schema implies it). No side effects or return behavior are mentioned.
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, front-loaded sentence with no filler. It places the core action ('Pause') first and follows with a usage hint. It is appropriately brief, though possibly too terse given the missing details.
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 tool with two optional parameters and no output schema, the description still falls short. It doesn't clarify the screenshot behavior (when it's taken, whether it's after the pause), the meaning of default values, or what the tool returns. An agent would need to infer too much from the parameter names.
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 must compensate. It provides no explanation of the 'seconds' or 'screenshot' parameters, nor their defaults. The parameter names are self-explanatory, but the description adds zero semantic value beyond the schema's field names.
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 states a clear verb ('Pause') and a resource context (page loads, animations), and the phrase 'look again' implies a screenshot. However, it's vague about whether the operation is purely a delay or also includes a capture, and it doesn't differentiate clearly from the sibling 'screenshot' tool.
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 explicitly says 'Use while a page loads or an animation finishes,' providing a concrete when-to-use scenario. It doesn't mention when not to use it or alternatives, but the context given is specific enough for an agent to recognize the situation.
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.
11 tool updates
v0.1.0- First observed
click - First observed
cursor_position - First observed
desktop_info - First observed
drag - First observed
key - First observed
list_windows - First observed
move - First observed
screenshot - First observed
scroll - First observed
type_text - First observed
wait
TDQS
Scored across 11 tools
Each tool maps to a distinct input modality or query—screenshot, pointer actions, keyboard actions, and state queries—so there is little chance of selecting the wrong tool. The only adjacent pair is type_text vs key, but their descriptions clearly separate literal text entry from chords/hotkeys.
Most names are short, lowercase imperative verbs (click, move, drag, scroll, wait), with a few compound state/query names (cursor_position, desktop_info) and two verb_noun pairs (type_text, list_windows). The style is readable and predictable, though not every tool follows a uniform verb_noun pattern.
11 tools cover the core desktop-automation surface without redundancy or bloat. Each tool addresses a distinct need, so the count feels intentional and well-scoped.
The set provides observation (screenshot, cursor_position, list_windows, desktop_info), mouse control (click, move, drag, scroll), keyboard control (type_text, key), and a synchronization primitive (wait), covering the full cycle of GUI automation. I don't see an obvious missing operation that would leave an agent stuck in normal desktop flows.
Maintenance
Related MCP Connectors
OCR, transcription, file extraction, and image generation for AI agents via MCP.
Melaya is a remote MCP server. It gives an assistant hands on your own Android phone and browser: it reads the screen through the accessibility tree, then taps, types and navigates inside the apps and sites you allow-list, with no per-app API. It also builds, schedules and runs agent pipelines across 6k+ connected tools. OAuth 2.1, nothing to install.
YouTube transcripts, search, channel browsing, and playlists for AI agents via MCP.
LLM Orchestration Agent (Mcp)
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceControls a real Linux desktop from any MCP host. Reads accessibility trees, takes screenshots, and drives clicks, scrolls, and keystrokes across GNOME, KDE/KWin, Hyprland, i3, and COSMIC.342 npm520MIT
- AlicenseNot gradedqualityDmaintenanceEnables full Linux desktop control including windows, mouse, keyboard, clipboard, audio, screenshots, OCR, accessibility, and system management through MCP-compatible AI agents.1MIT
- FlicenseNot gradedqualityBmaintenanceAn MCP server that gives a model eyes and hands on a Linux Wayland desktop, enabling screenshot capture, mouse/keyboard control, OCR, and icon detection via OmniParser.1-
- AlicenseNot gradedqualityAmaintenanceMCP server for controlling Linux desktops over Wayland, enabling AI agents to perform mouse, keyboard, window, and screenshot operations on Fedora KDE Plasma.AGPL 3.0