codex-computer-use-linux
Provides Linux desktop automation capabilities, including taking screenshots, moving and clicking the mouse, typing text, pressing keys, dragging, and scrolling within the Linux graphical session.
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., "@codex-computer-use-linuxTake a screenshot and verify the login form is displayed."
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.
Codex Computer Use for Linux is an open-source Linux computer-use MCP server and Codex skill for controlled desktop GUI automation. It gives Codex a deliberately small tool surface for working with visible native applications while keeping sensitive workflows out of scope.
This is an independent community project. It is not made, supported, or endorsed by OpenAI and does not claim feature parity with OpenAI Computer Use.
OpenAI's current Computer Use plugin supports macOS and Windows, while Codex can connect to local STDIO MCP servers. This project fills the Linux integration gap with an MCP action layer and a skill that teaches Codex the safe observe → act → verify loop. See the official Computer Use and MCP documentation for the product boundaries.
Why MCP plus a skill?
Layer | Responsibility |
MCP server | Executes typed, bounded Linux desktop actions and reports capability errors. |
Codex skill | Chooses safe action sequences, verifies UI state, and stops on sensitive flows. |
Plugin | Packages the skill and MCP connection for repeatable installation. |
A skill alone cannot reliably provide live screenshots or controlled input. An MCP server alone does not teach the model a safe visual workflow. The hybrid plugin follows OpenAI's documented plugin architecture.
Related MCP server: desk-mcp
What it does
Linux-only runtime guard; no silent macOS or Windows fallback.
Wayland input through
ydotool; X11 input throughxdotoolwithydotoolfallback.Screenshots through
grim,gnome-screenshot,scrot, or ImageMagickimport.Typed MCP tools for status, screenshot, pointer movement, click, drag, text, keys, and scroll.
No arbitrary shell tool, application launcher, clipboard reader, or secret store access.
Best-effort blocking of terminals, ChatGPT, and Codex when the active window is discoverable.
Structured Doctor output and in-memory MCP contract tests.
Installable Codex plugin plus direct MCP-server setup.
Quick start
Requirements
Linux with an active graphical session.
Python 3.11 or newer.
One screenshot backend.
One input backend.
Session | Screenshot | Input | Notes |
Wayland |
|
|
|
X11 |
|
|
|
Install only the packages relevant to your desktop. Typical package names are:
# Debian / Ubuntu
sudo apt install python3 python3-venv xdotool gnome-screenshot ydotool grim
# Fedora
sudo dnf install python3 xdotool gnome-screenshot ydotool grim
# Arch Linux
sudo pacman -S python xdotool gnome-screenshot ydotool grimPackage availability differs by distribution and desktop environment. On Wayland, configure and
start ydotoold according to your distribution. The upstream
ydotool documentation explains its /dev/uinput
permission model; do not run Codex itself as root.
Install
Install the server CLI with one of these isolated Python tool managers:
uv tool install git+https://github.com/maxionice/codex-computer-use-linux.gitor:
pipx install git+https://github.com/maxionice/codex-computer-use-linux.gitRun the Doctor before connecting Codex:
codex-computer-use-linux --doctorOption A: install the Codex plugin
codex plugin marketplace add maxionice/codex-computer-use-linux
codex plugin add codex-computer-use-linux@maxionice-linux-toolsStart a new Codex thread after installing so the skill and MCP tools are loaded.
Option B: add only the MCP server
codex mcp add linux-desktop -- codex-computer-use-linux
codex mcp listFor approval on input-producing tools, configure default_tools_approval_mode = "writes" for the
server in ~/.codex/config.toml.
Example prompts
Use $use-linux-desktop to open the app's settings and verify that dark mode works.Inspect the visible calculator app, enter 125 * 8, and report the displayed result.Reproduce the onboarding bug in the already-open Linux app. Stop before any login prompt.MCP tools
Tool | Effect |
| Reports session, available backends, active window, and warnings. |
| Returns the current desktop as PNG image content. |
| Moves the pointer to absolute screenshot coordinates. |
| Moves and clicks left, middle, or right. |
| Drags between two absolute coordinates. |
| Types bounded plain text into the focused control. |
| Presses a named key with optional modifiers. |
| Scrolls on X11; Wayland users can use Page Up/Down through |
The server never accepts a command string or invokes a shell. Every native command is constructed from validated typed arguments.
Safety model
Desktop automation can act with your logged-in user's permissions and screenshots may contain sensitive data. Keep the target app visible, close unrelated sensitive apps, and review every approval prompt.
The bundled skill refuses terminal, ChatGPT, Codex, credential, administrator, security, payment, and privacy-setting flows. Active-window blocking is best effort because some Wayland compositors do not expose the focused application. Read the complete safety model before use.
Development
git clone https://github.com/maxionice/codex-computer-use-linux.git
cd codex-computer-use-linux
python -m venv .venv
. .venv/bin/activate
python -m pip install -e '.[dev]'
python -m ruff format --check .
python -m ruff check .
python -m mypy src
python -m pytestThe project uses the stable MCP Python SDK 2.x, which supports the 2026-07-28 MCP specification. See the official MCP Python SDK.
Uninstall and rollback
codex plugin remove codex-computer-use-linux
codex plugin marketplace remove maxionice-linux-tools
codex mcp remove linux-desktop
uv tool uninstall codex-computer-use-linuxIf you installed with pipx, replace the final command with
pipx uninstall codex-computer-use-linux. Removing the plugin or MCP entry stops Codex from
launching the server; removing the tool installation deletes the local executable. System packages
such as ydotool are not removed automatically.
Trademark and affiliation
This is an independent open-source project and is not affiliated with or endorsed by OpenAI. OpenAI, Codex, ChatGPT, and related marks belong to their respective owners.
License
Apache-2.0. See LICENSE.
Available Tools
8 toolsclickClick the Linux desktopA
Move to absolute screenshot coordinates and click a mouse button. Use one click unless the visible control clearly requires a double-click.
| Name | Required | Description | Default |
|---|---|---|---|
| x | Yes | ||
| y | Yes | ||
| count | No | ||
| button | No | left | |
| interval_ms | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| action | Yes | |
| backend | Yes | |
| message | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (all false, providing little safety context), the description discloses that the pointer first moves to absolute screenshot coordinates and defaults to a single click. This adds meaningful behavioral context, though details like waiting behavior or output are omitted.
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 concise sentences that front-load the primary action and immediately follow with a key usage detail. Every word adds value.
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 core action and coordinate system are covered, but the description does not mention button options, valid count range, or timing behavior. With five parameters and no parameter descriptions, more context would help, though the simplicity of the tool makes it somewhat 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?
Schema description coverage is 0%, so the description must compensate. It clarifies that x/y are absolute screenshot coordinates and hints at count via the double-click note, but it does not explain count, button, or interval_ms parameters beyond their defaults.
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 to absolute screenshot coordinates and click a mouse button.' The verb 'click' and resource 'mouse button' are specific, and the coordinate context distinguishes it from siblings like move_pointer and drag_pointer.
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 on when to use this tool versus alternatives. The only usage note is about using one click unless a double-click is clearly needed, which addresses count behavior rather than tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
desktop_statusInspect Linux desktop capabilitiesARead-onlyIdempotent
Call first to detect Wayland or X11, screenshot and input backends, the active window, and safety warnings. This does not capture the screen or send input.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| platform | Yes | |
| warnings | No | |
| available | Yes | |
| session_type | Yes | |
| active_window | No | |
| input_backend | No | |
| scroll_supported | Yes | |
| screenshot_backend | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint false. The description adds value by explicitly stating 'This does not capture the screen or send input,' reinforcing no side effects, and mentioning 'safety warnings' as part of the output, which provides behavioral context beyond the annotations.
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, consisting of two sentences. The first sentence front-loads the primary action and scope, while the second clarifies limitations. No extraneous words; every sentence 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?
For a simple tool with no parameters and annotations covering safety, the description effectively covers all needed context: the purpose, what it detects, usage timing, and explicit non-actions. The output schema handles return value details, so the description is complete for an inspection 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 has zero parameters, so schema coverage is trivially complete (100%). Description does not need to explain parameters, but it adds relevant context about what the tool detects and returns, satisfying the baseline of 4 for zero-parameter 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 purpose with specific verbs ('detect') and resources (Wayland/X11, screenshot/input backends, active window, safety warnings). It explicitly distinguishes itself from sibling tools by stating what it does not do, 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?
'Call first' is an explicit usage instruction indicating this tool should be used before others to detect environment capabilities. The description also clarifies it does not capture the screen or send input, guiding users away from using it for those actions and toward sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
drag_pointerDrag on the Linux desktopA
Drag a mouse button between two absolute coordinates from the latest screenshot.
| Name | Required | Description | Default |
|---|---|---|---|
| end_x | Yes | ||
| end_y | Yes | ||
| button | No | left | |
| start_x | Yes | ||
| start_y | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| action | Yes | |
| backend | Yes | |
| message | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate the tool is mutating (readOnlyHint=false) and not idempotent. The description adds the key dependency on the latest screenshot, which is valuable. It does not describe the full drag sequence (press-move-release) or potential side effects, so some behavioral detail remains undisclosed beyond annotations.
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, clear sentence with no unnecessary words. It front-loads the core action and packs the essential constraint (screenshot dependency) into a concise statement. Every word contributes to understanding.
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 has five parameters and a dependency on prior screenshots, both of which are addressed. The description doesn't explain return values, but an output schema exists. Given the simplicity of the action, the description provides sufficient context for an agent to understand usage, though it could briefly mention the press-move-release behavior to be 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?
The schema clearly defines parameter names, types, and bounds, but the description adds crucial meaning by specifying that coordinates are absolute and come from the latest screenshot. It does not elaborate on the button parameter, though the schema provides an enum and default. Since schema coverage is 0%, the description partially compensates but not fully.
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 the specific verb 'drag' and clearly identifies the resource (mouse button) and the action's scope (between two absolute coordinates from the latest screenshot). This distinguishes it from sibling tools like move_pointer (which moves without holding a button) and click (single click).
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 that the tool operates on coordinates from the latest screenshot, indicating a dependency on a prior screenshot. However, it doesn't explicitly state when to use this over alternatives like move_pointer or click, nor does it mention exclusions. Usage context is implied but not fully explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
move_pointerMove the desktop pointerAIdempotent
Move the pointer to absolute coordinates from the latest screenshot.
| Name | Required | Description | Default |
|---|---|---|---|
| x | Yes | ||
| y | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| action | Yes | |
| backend | Yes | |
| message | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover idempotency and destructiveness. The description adds the key context that coordinates are relative to the latest screenshot, which is useful. However, it does not describe potential side effects (e.g., pointer motion animation) or failure modes, so it only partially goes beyond the annotations.
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, focused sentence that wastes no words. It explains the core action, coordinate source, and scope immediately, making it highly scannable and effective.
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 two-parameter tool with annotations and an output schema, the description provides sufficient context: it names the action, the coordinate reference, and implies the prerequisite of a screenshot. It could mention the relationship to 'take_screenshot' or 'click' for fuller contextual integration, but overall it is complete enough for an agent to invoke correctly.
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 only defines x and y as integers. The description enriches these by stating they are 'absolute coordinates from the latest screenshot', clarifying their meaning and coordinate system. Since schema coverage is 0%, this is a significant contribution, though it could be more explicit about whether coordinates are pixel-based or relative to the screenshot's resolution.
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'), the target resource ('pointer'), and the specific coordinate basis ('absolute coordinates from the latest screenshot'). This distinguishes it from sibling tools like 'click' or 'drag_pointer' by specifying that it only moves, and the coordinate reference is unique.
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: it should be used after taking a screenshot, since coordinates are derived from that screenshot. This provides clear context but does not explicitly mention alternatives or when not to use the tool, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
press_keyPress a keyboard keyA
Press one allow-listed key with optional ctrl, alt, shift, or super modifiers in the focused Linux app.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | ||
| modifiers | No | ||
| interval_ms | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| action | Yes | |
| backend | Yes | |
| message | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate the tool is not read-only, so a side effect is expected. The description adds that the key must be allow-listed and that the action targets the focused Linux app, which is useful context, but it does not elaborate on potential side effects or restrictions beyond that.
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, well-structured sentence that conveys the essential purpose, scope, and modifier options without unnecessary detail.
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 only one required parameter, the description is mostly adequate, but the undefined 'allow-listed' key set is a notable gap. It does not specify which keys are accepted, which could lead to failed invocations. However, the output schema exists, so return values are not the responsibility of 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?
Schema description coverage is 0%, so the description must compensate. It mentions the key and modifier options, but does not explain the interval_ms parameter, and the 'allow-listed key' set is left undefined. Thus, parameter semantics are only partially addressed.
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 ('Press') and resource ('key'), clearly stating the action is a single key press with optional modifiers in the focused Linux app. This distinguishes it from related tools like type_text and click.
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 clearly communicates when to use this tool: pressing a key with modifiers in the focused Linux app. It implies a distinction from text typing or mouse actions, though it does not explicitly name alternative tools or exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scrollScroll the X11 desktopA
Scroll vertically by a small number of steps. Positive scrolls up and negative scrolls down. On Wayland use press_key with PAGEUP or PAGEDOWN instead.
| Name | Required | Description | Default |
|---|---|---|---|
| steps | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| action | Yes | |
| backend | Yes | |
| message | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds the crucial sign convention ('Positive scrolls up and negative scrolls down') and clarifies it is for X11 by contrasting with Wayland. Annotations provide no safety hints (all false), so this context carries the burden, and it does so adequately, though it doesn't disclose the exact mechanics of the scroll event.
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 action, then sign convention, then the alternative. Every sentence earns its place with zero fluff.
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 scroll tool with an output schema present, the description covers all necessary aspects: purpose, parameter semantics, alternative usage, and platform note. No significant gaps remain.
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 description for 'steps' (0% coverage), but the description explains the direction meaning of positive/negative values. It does not specify what a 'step' exactly corresponds to (e.g., lines or notches), but the bounded range implies discrete increments, so the meaning is sufficiently clarified.
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 'Scroll vertically by a small number of steps' with a specific verb and resource (X11 desktop), and it distinguishes from siblings by explicitly naming press_key as the Wayland alternative. This is a clear, non-tautological purpose.
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 when-to-use guidance: 'On Wayland use press_key with PAGEUP or PAGEDOWN instead.' This tells the agent exactly when to avoid this tool and what to use instead, leaving no ambiguity about platform applicability.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
take_screenshotTake a desktop screenshotARead-onlyIdempotent
Capture the current Linux desktop as PNG image content. Use before choosing coordinates and again after every action that changes visible state.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false. The description adds context beyond annotations by specifying it captures the Linux desktop as PNG image content, and that it reflects visible state. This is useful, though it could mention potential caveats like screen resolution or multi-monitor handling, but that is minor given the annotations.
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 purpose, the second gives usage guidance. It is front-loaded, efficient, and every sentence earns its place with no redundancy or fluff.
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, zero-parameter tool with strong annotations, the description is complete. It covers what it does (capture desktop screenshot), the output format (PNG), the platform (Linux), and when to use it (before coordinate selection and after state changes). No critical information is missing.
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 schema coverage is 100% and there is nothing to explain. The baseline for zero parameters is 4, and the description adds clarity about the output format (PNG image content), which is relevant context even though not a parameter.
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 ('Capture') and resource ('current Linux desktop'), with a clear output format ('PNG image content'). It clearly distinguishes itself from sibling tools like click or type_text, which are input actions rather than observation.
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 explicit usage guidance: 'Use before choosing coordinates and again after every action that changes visible state.' This tells the agent exactly when to invoke this tool relative to other actions, which is highly actionable and context-rich.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
type_textType text into the focused controlA
Type bounded plain text into the currently focused control. Never pass passwords, tokens, recovery codes, payment data, or terminal commands.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | ||
| interval_ms | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| action | Yes | |
| backend | Yes | |
| message | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are sparse (all hints false) and do not disclose safety or side effects. The description adds context about 'plain text' and 'focused control', implying a non-interpretive typing action. It does not explain behaviors such as whether existing text is replaced, what happens if no control is focused, or that interval_ms controls typing speed. Since annotations provide little, the description carries the burden but only partially covers behavioral traits.
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 primary purpose and followed by a concise safety warning. Every word earns its place, with no redundancy or filler. The structure is ideal for quick comprehension.
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 2 parameters, and the output schema exists (though not shown), so return value documentation is covered. The description conveys the core action and a critical security constraint. However, it omits the prerequisite that a control must already be focused, which is important for correct usage in an agent context. It also does not mention any potential failure modes when typing into non-text fields.
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 does not explain either parameter. While 'text' is somewhat self-evident from the tool's purpose, 'interval_ms' is only documented in the schema with a default of 12, giving no indication of its effect (e.g., delay between keystrokes). The description should compensate for the lack of schema descriptions but does not.
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 with a specific verb and object: 'Type bounded plain text into the currently focused control.' This distinguishes it from sibling tools like click, press_key, and scroll, which handle different input modalities. The phrase 'bounded plain text' also clarifies the text is not interpreted as commands or special keys.
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 gives clear context: the tool types text into the currently focused control. It also includes an explicit 'Never' list (passwords, tokens, recovery codes, payment data, terminal commands) which serves as a when-not guideline for sensitive content. However, it does not name alternative sibling tools or explicitly compare when to use this tool versus press_key or other input methods, so it falls short of a 5.
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.
8 tool updates
v0.1.0- First observed
click - First observed
desktop_status - First observed
drag_pointer - First observed
move_pointer - First observed
press_key - First observed
scroll - First observed
take_screenshot - First observed
type_text
TDQS
Each tool targets a distinct action: status inspection, screenshot capture, pointer movement, clicking, dragging, typing, key pressing, and scrolling. No two tools have overlapping purposes; even move_pointer and click are clearly differentiated by the act of clicking.
Most tools follow a verb_noun pattern (take_screenshot, move_pointer, drag_pointer, type_text, press_key), but 'click' is a bare verb and 'desktop_status' is a noun phrase. This inconsistency in naming style is noticeable but still readable.
Eight tools cover the essential actions for computer use on Linux without being excessive. Each tool serves a distinct purpose, and the count is well within the ideal 3-15 range.
The surface covers the core actions: observing the screen, moving the pointer, clicking, dragging, typing, pressing keys, and scrolling. Minor gaps exist, such as no explicit method to retrieve the current cursor position or handle clipboard, but these are not critical for the primary purpose.
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
Hosted real Google Chrome MCP with per-user persistent state. Navigate, click, type, screenshot.
Browser MCP for logged-in tasks. Uses your Chrome — credentials stay local. Zero-token replay.
Access Kernel's cloud-based browsers and app actions via MCP (remote HTTP + OAuth).
Governed data discovery, exact queries, decisions, simulations, and runtime utilities over MCP.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceProvides automated GUI testing and control capabilities through an MCP server that enables mouse movements, keyboard input, screen captures, and image recognition across Windows, macOS, and Linux.46MIT
- AlicenseNot gradedqualityDmaintenanceA desktop automation MCP server that enables AI agents to interact with Linux environments through screenshots, window inspection, and input simulation. It provides tools for mouse control, keyboard input, and screen capture using xdotool and XDG Desktop Portals.MIT
- AlicenseNot gradedqualityAmaintenanceSmall MCP server for GNOME Wayland desktop automation, enabling element lookup, activation, typing, screenshots, and wait helpers through AT-SPI and Mutter RemoteDesktop.1MIT
- 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.528487MIT
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/maxionice/codex-computer-use-linux'
If you have feedback or need assistance with the MCP directory API, please join our Discord server