# GNOME UI MCP (oci · ghcr.io/asattelmaier/gnome-ui-mcp:0.5.0)

GNOME Wayland desktop automation via AT-SPI discovery and Mutter input.

- Trust score: 43/100 (low)
- Change this week: −2
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-08-03

## Components

- oci · `ghcr.io/asattelmaier/gnome-ui-mcp:0.5.0`: 43/100 (this document), [markdown](https://verifymcp.io/servers/asattelmaier-gnome-ui-mcp/ghcr-io-asattelmaier-gnome-ui-mcp-0-5-0.md), [page](https://verifymcp.io/servers/asattelmaier-gnome-ui-mcp/ghcr-io-asattelmaier-gnome-ui-mcp-0-5-0)

## Channel facts

- Registry: `oci`
- Package: `ghcr.io/asattelmaier/gnome-ui-mcp:0.5.0`
- Transport: `stdio`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-08-03.

- **Supply Chain Security**: 0/100
  - Malware scan not yet available for this package.
  - CVE data not yet available for this package.
  - Install-script risk not yet assessed.
  - Dependency-health data not yet available.
- **Provenance & Transparency**: 45/100
  - Source repository is publicly reachable at the declared URL.
  - Provenance check failed: no build-provenance attestation is published.
  - Clear OSI-approved license (MIT).
  - Actively maintained (last published 38 days ago).
  - Disclosure check failed: no security disclosure policy was found in the source repository.
- **Schema Quality & AI Usability**: 77/100
  - AI-judged instruction clarity (excellent).
  - Tool/resource definitions use about 6689 tokens (~58/item across 115 items; 115 tools + 0 resources), lean.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 23/100
  - Stability observed for 7 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 100/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 100% of tool parameters carry a description.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

**Unverified: 1 category.** A category scored 0 because we could not verify it: a data source with nothing on this package, evidence we could not reach, or a check we could not run. We only credit what we can confirm.

## Install

### Claude

```bash
claude mcp add asattelmaier-gnome-ui-mcp -- docker run --rm -i ghcr.io/asattelmaier/gnome-ui-mcp:0.5.0
```

### Codex

```bash
codex mcp add asattelmaier-gnome-ui-mcp -- docker run --rm -i ghcr.io/asattelmaier/gnome-ui-mcp:0.5.0
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "asattelmaier-gnome-ui-mcp": {
      "type": "local",
      "command": [
        "docker",
        "run",
        "--rm",
        "-i",
        "ghcr.io/asattelmaier/gnome-ui-mcp:0.5.0"
      ],
      "enabled": true
    }
  }
}
```

### Hermes

```yaml
mcp_servers:
  asattelmaier-gnome-ui-mcp:
    command: "docker"
    args: ["run", "--rm", "-i", "ghcr.io/asattelmaier/gnome-ui-mcp:0.5.0"]
```

### Other

```json
{
  "mcpServers": {
    "asattelmaier-gnome-ui-mcp": {
      "command": "docker",
      "args": [
        "run",
        "--rm",
        "-i",
        "ghcr.io/asattelmaier/gnome-ui-mcp:0.5.0"
      ]
    }
  }
}
```

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-08-03 (score 43, +4)

- [functional improvement] Stability: unverified → 0.23

### 2026-07-31 (score 39, −6)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-27 (score 45, +34)

- [functional improvement] Tool coverage: unverified → 100
- [functional] First check of Schema quality: excellent
- [functional] First check of Tool coverage: 100
- [functional] First check of Schema quality: pass
- [functional] First check of Schema quality: fail

### 2026-07-26 (score 11)

First indexed and scored.

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

## MCP tools (115)

### `accessibility_tree` (~127 tokens)

Return the accessibility tree for the whole desktop or a specific application. Optionally filter by roles, states, or showing-only.

Input parameters:

- `app_name`: Only return the tree for this application.
- `filter_roles`: Only include nodes with these roles.
- `filter_states`: Only include nodes that have all these states.
- `include_actions` (boolean): Include available actions on each node.
- `include_text` (boolean): Include text content of each node.
- `max_depth` (integer): Maximum depth to traverse.
- `showing_only` (boolean): Only include nodes that are currently showing.

### `activate_element` (~49 tokens)

Activate an element with action first, then focus plus keyboard, then mouse fallback.

Input parameters:

- `action_name`: Specific AT-SPI action to invoke.
- `element_id` (string, required): Element ID to activate.

### `analyze_screenshot` (~56 tokens)

Analyze a screenshot using a vision language model.

Input parameters:

- `model`: Specific model to use.
- `prompt` (string, required): Analysis prompt.
- `provider` (string): VLM provider: openrouter, anthropic, or ollama.

### `assert_element` (~95 tokens)

Assert that an element exists with expected states. Returns pass/fail with structured checks.

Input parameters:

- `app_name`: Restrict search to this application.
- `expected_states`: States the element should have.
- `query` (string, required): Text to search for.
- `role`: Expected element role.
- `timeout_ms` (integer): Maximum time to wait for element to appear.
- `unexpected_states`: States the element should not have.

### `assert_text` (~61 tokens)

Assert that an element's text matches expected value.

Input parameters:

- `element_id` (string, required): Element ID to check text of.
- `expected` (string, required): Expected text value.
- `match` (string): Match mode: exact, contains, startswith, or regex.

### `clear_boundaries` (~13 tokens)

Remove automation boundaries.

### `click` (~77 tokens)

Click the element referenced by a uid from the latest snapshot. Auto-waits for the UI to settle and reports effect verification.

Input parameters:

- `dbl_click` (boolean): Set true for a double click.
- `include_snapshot` (boolean): Attach a fresh snapshot of the result to the response.
- `uid` (string, required): Element uid from the latest snapshot.

### `click_at` (~78 tokens)

Click at absolute screen coordinates and report input injection plus any observable effect verification.

Input parameters:

- `button` (string): Mouse button.
- `click_count` (integer): Number of clicks (1=single, 2=double, 3=triple).
- `x` (integer, required): X screen coordinate.
- `y` (integer, required): Y screen coordinate.

### `click_element` (~93 tokens)

Click an element or its resolved clickable ancestor, and report input injection plus observable effect verification.

Input parameters:

- `action_name`: Specific AT-SPI action to invoke.
- `button` (string): Mouse button: left, middle, or right.
- `click_count` (integer): Number of clicks (1=single, 2=double, 3=triple).
- `element_id` (string, required): Element ID to click.

### `click_notification_action` (~45 tokens)

Invoke an action on a desktop notification by its ID and action key.

Input parameters:

- `action_key` (string, required): Action key to invoke.
- `notification_id` (integer, required): Notification ID.

### `click_text_ocr` (~48 tokens)

Find text on screen via OCR and click it.

Input parameters:

- `button` (string): Mouse button: left, middle, or right.
- `target` (string, required): Text to find and click.

### `clipboard_read` (~54 tokens)

Read the Wayland clipboard contents. Supports custom MIME types for reading binary data (returned as base64).

Input parameters:

- `mime_type` (string): MIME type to request.
- `selection` (string): Selection type: clipboard or primary.

### `clipboard_write` (~71 tokens)

Write to the Wayland clipboard. Supports custom MIME types. For binary types, pass base64-encoded data as text.

Input parameters:

- `mime_type` (string): MIME type for the data.
- `selection` (string): Selection type: clipboard or primary.
- `text` (string, required): Text to write to clipboard.

### `close_app` (~35 tokens)

Gracefully close all windows of an application by sending Alt+F4.

Input parameters:

- `app_name` (string, required): Application name to close.

### `close_window` (~19 tokens)

Close the currently focused window via Alt+F4.

### `collapse_node` (~33 tokens)

Collapse a tree or expander node if it is currently expanded.

Input parameters:

- `element_id` (string, required): Element ID to collapse.

### `compare_screenshots` (~86 tokens)

Compare two screenshots using a vision language model.

Input parameters:

- `image_path_1` (string, required): Path to the first screenshot.
- `image_path_2` (string, required): Path to the second screenshot.
- `model`: Specific model to use.
- `prompt`: Custom comparison prompt.
- `provider` (string): VLM provider: openrouter, anthropic, or ollama.

### `compare_state` (~43 tokens)

Compare two desktop state snapshots and return changes.

Input parameters:

- `after_id` (string, required): Snapshot ID for after state.
- `before_id` (string, required): Snapshot ID for before state.

### `dbus_call` (~107 tokens)

Call any D-Bus method on the session bus. Use with caution.

Input parameters:

- `args`: Arguments to pass to the method.
- `bus_name` (string, required): D-Bus bus name.
- `interface` (string, required): D-Bus interface name.
- `method` (string, required): Method to call.
- `object_path` (string, required): D-Bus object path.
- `signature`: D-Bus type signature for the arguments.
- `timeout_ms` (integer): Timeout in milliseconds.

### `dismiss_notification` (~35 tokens)

Dismiss a desktop notification by its ID via D-Bus CloseNotification.

Input parameters:

- `notification_id` (integer, required): Notification ID to dismiss.

### `drag` (~96 tokens)

Drag from one screen position to another with smooth interpolation.

Input parameters:

- `button` (string): Mouse button.
- `duration_ms` (integer): Duration of the drag in milliseconds.
- `end_x` (integer, required): Ending X coordinate.
- `end_y` (integer, required): Ending Y coordinate.
- `start_x` (integer, required): Starting X coordinate.
- `start_y` (integer, required): Starting Y coordinate.
- `steps` (integer): Number of interpolation steps.

### `element_at_point` (~79 tokens)

Return the deepest visible element at a given screen coordinate.

Input parameters:

- `app_name`: Restrict search to this application.
- `include_click_target` (boolean): Include resolved click target in result.
- `max_depth` (integer): Maximum depth to search.
- `x` (integer, required): X screen coordinate.
- `y` (integer, required): Y screen coordinate.

### `expand_node` (~33 tokens)

Expand a tree or expander node if it is currently collapsed.

Input parameters:

- `element_id` (string, required): Element ID to expand.

### `file_dialog_set_path` (~52 tokens)

Set a file path in a GTK file dialog by sending Ctrl+L to activate the location entry, typing the path, and pressing Return.

Input parameters:

- `path` (string, required): File path to set in the dialog.

### `fill` (~103 tokens)

Type text into an input, or set a checkbox/radio/switch from a boolean value (true/false), for the element referenced by a uid from the latest snapshot. Auto-waits for the UI to settle.

Input parameters:

- `include_snapshot` (boolean): Attach a fresh snapshot of the result to the response.
- `uid` (string, required): Element uid from the latest snapshot.
- `value` (string, required): Text to type, or 'true'/'false' for toggles.

### `fill_form` (~91 tokens)

Fill multiple elements in one call from a list of {uid, value} objects (uids from the latest snapshot). Prefer this over repeated fill calls for forms: fewer round trips. Auto-waits for the UI to settle.

Input parameters:

- `fields` (array, required): List of {uid, value} objects to fill, in order.
- `include_snapshot` (boolean): Attach a fresh snapshot of the result to the response.

### `find_and_activate` (~161 tokens)

Find the best matching element and activate it, optionally scoped to a subtree or visible popup.

Input parameters:

- `action_name`: Specific AT-SPI action to invoke.
- `app_name`: Restrict search to this application.
- `bounds_only` (boolean): Only match elements that have screen bounds.
- `clickable_only` (boolean): Only match elements that are directly clickable.
- `max_depth` (integer): Maximum tree depth to search.
- `query` (string, required): Text to search for.
- `role`: Only match elements with this role.
- `showing_only` (boolean): Only match elements that are currently showing.
- `within_element_id`: Scope search to children of this element.
- `within_popup` (boolean): Scope search to the currently visible popup.

### `find_elements` (~181 tokens)

Search accessible elements by text and optional role filter, with optional clickable and bounds filters, optionally scoped to a subtree or visible popup.

Input parameters:

- `app_name`: Restrict search to this application.
- `bounds_only` (boolean): Only return elements that have screen bounds.
- `clickable_only` (boolean): Only return elements that are directly clickable.
- `max_depth` (integer): Maximum tree depth to search.
- `max_results` (integer): Maximum number of results to return.
- `query` (string): Text to search for in element names and descriptions.
- `role`: Only return elements with this role (e.g. 'push button').
- `showing_only` (boolean): Only return elements that are currently showing.
- `within_element_id`: Scope search to children of this element.
- `within_popup` (boolean): Scope search to the currently visible popup.

### `find_text_ocr` (~70 tokens)

Find text on screen via OCR and return its coordinates.

Input parameters:

- `height`: Height of search region.
- `target` (string, required): Text to search for.
- `width`: Width of search region.
- `x`: X coordinate of search region.
- `y`: Y coordinate of search region.

### `focus_element` (~31 tokens)

Focus an element through the AT-SPI component interface.

Input parameters:

- `element_id` (string, required): Element ID to focus.

### `get_action_history` (~31 tokens)

Get recent automation actions with undo hints.

Input parameters:

- `last_n` (integer): Number of recent actions to return.

### `get_element_path` (~39 tokens)

Return the ancestry chain from root to a given element as a list of nodes.

Input parameters:

- `element_id` (string, required): Element ID to trace path for.

### `get_element_properties` (~45 tokens)

Return extended AT-SPI properties for an element: value, selection, relations, attributes, and image info.

Input parameters:

- `element_id` (string, required): Element ID to get properties for.

### `get_element_text` (~47 tokens)

Return detailed text information for an element: full text, caret offset, selections, and text attributes at the caret position.

Input parameters:

- `element_id` (string, required): Element ID to get text from.

### `get_elements_by_ids` (~44 tokens)

Resolve multiple element IDs in one call, returning summaries for found elements and a list of missing IDs.

Input parameters:

- `element_ids` (array, required): List of element IDs to resolve.

### `get_focused_element` (~18 tokens)

Return metadata about the currently focused element.

### `get_keyboard_layout` (~18 tokens)

Read the active keyboard layout from GSettings.

### `get_monitor_for_point` (~39 tokens)

Return which monitor contains the given screen coordinates.

Input parameters:

- `x` (integer, required): X screen coordinate.
- `y` (integer, required): Y screen coordinate.

### `get_pixel_color` (~37 tokens)

Get the pixel color at screen coordinates.

Input parameters:

- `x` (integer, required): X screen coordinate.
- `y` (integer, required): Y screen coordinate.

### `get_region_color` (~60 tokens)

Get the average color of a screen region.

Input parameters:

- `height` (integer, required): Height of region.
- `width` (integer, required): Width of region.
- `x` (integer, required): X coordinate of region.
- `y` (integer, required): Y coordinate of region.

### `get_table_cell` (~49 tokens)

Return information about a specific cell in a table element.

Input parameters:

- `col` (integer, required): Column index.
- `element_id` (string, required): Table element ID.
- `row` (integer, required): Row index.

### `get_table_info` (~34 tokens)

Return table dimensions, column headers, and caption for a table element.

Input parameters:

- `element_id` (string, required): Table element ID.

### `get_tooltip_text` (~51 tokens)

Get the tooltip text for an element. Checks the element's description first, then looks for tooltip relations in the AT-SPI tree.

Input parameters:

- `element_id` (string, required): Element ID to get tooltip from.

### `gsettings_get` (~39 tokens)

Read a GSettings key value.

Input parameters:

- `key` (string, required): Key name within the schema.
- `schema` (string, required): GSettings schema ID.

### `gsettings_list_keys` (~30 tokens)

List all keys in a GSettings schema.

Input parameters:

- `schema` (string, required): GSettings schema ID.

### `gsettings_reset` (~42 tokens)

Reset a GSettings key to its default value.

Input parameters:

- `key` (string, required): Key name within the schema.
- `schema` (string, required): GSettings schema ID.

### `gsettings_set` (~62 tokens)

Write a GSettings key value.

Input parameters:

- `key` (string, required): Key name within the schema.
- `schema` (string, required): GSettings schema ID.
- `value` (string|integer|number|boolean, required): Value to set (string, number, or boolean).

### `highlight_element` (~58 tokens)

Take a screenshot with a colored rectangle highlighting an element for visual debugging.

Input parameters:

- `color` (string): Color of the highlight rectangle.
- `element_id` (string, required): Element ID to highlight.
- `label`: Optional label to display on the highlight.

### `hover` (~64 tokens)

Move the pointer over the element referenced by a uid from the latest snapshot (e.g. to reveal a hover menu or tooltip).

Input parameters:

- `include_snapshot` (boolean): Attach a fresh snapshot of the result to the response.
- `uid` (string, required): Element uid from the latest snapshot.

### `hover_element` (~31 tokens)

Move cursor to an element's center without clicking.

Input parameters:

- `element_id` (string, required): Element ID to hover over.

### `key_combo` (~137 tokens)

Send a key combination such as ctrl+c, alt+F4, ctrl+shift+t, or super. Modifiers are pressed in order before the principal key and released in reverse order after. Optionally verify the effect against a target element.

Input parameters:

- `combo` (string, required): Key combination string (e.g. ctrl+c, alt+F4).
- `element_id`: Optional element to verify effect against.
- `poll_interval_ms` (integer): Polling interval for settle check.
- `settle_timeout_ms` (integer): Max time to wait for shell to settle.
- `stable_for_ms` (integer): How long shell must be stable.

### `kill_app` (~41 tokens)

Forcefully kill an application by PID. Sends SIGTERM first, then SIGKILL if still alive.

Input parameters:

- `app_name` (string, required): Application name to kill.

### `launch_app` (~36 tokens)

Launch an application by desktop ID.

Input parameters:

- `desktop_id` (string, required): Desktop file ID (e.g. org.gnome.Calculator.desktop).

### `launch_with_logging` (~39 tokens)

Launch an application with stdout/stderr capture. Warning: executes the specified command on the host system.

Input parameters:

- `command` (string, required): Command to execute.

### `list_applications` (~21 tokens)

List applications currently visible through the AT-SPI desktop tree.

### `list_desktop_apps` (~52 tokens)

List installed desktop applications.

Input parameters:

- `include_hidden` (boolean): Include hidden applications.
- `max_results` (integer): Maximum number of results to return.
- `query` (string): Search query to filter applications.

### `list_key_names` (~36 tokens)

List symbolic key names by category.

Input parameters:

- `category` (string): Key category: navigation, function, modifier, editing, or all.

### `list_monitors` (~18 tokens)

List all connected monitors with geometry and properties.

### `list_windows` (~31 tokens)

List top-level windows across the desktop or for one application.

Input parameters:

- `app_name`: Filter windows by application name.

### `list_workspaces` (~17 tokens)

List all workspaces with their windows.

### `mouse_move` (~51 tokens)

Move the mouse cursor to absolute screen coordinates without clicking. Useful for hover effects, tooltips, and drag preparation.

Input parameters:

- `x` (integer, required): X screen coordinate.
- `y` (integer, required): Y screen coordinate.

### `mouse_move_relative` (~57 tokens)

Move the mouse cursor by a relative offset (dx, dy) from its current position. Useful when absolute coordinates are not known.

Input parameters:

- `dx` (number, required): Horizontal offset in pixels.
- `dy` (number, required): Vertical offset in pixels.

### `mouse_move_smooth` (~94 tokens)

Smoothly move the mouse cursor from one position to another over a given duration. Interpolates intermediate positions for natural-looking movement.

Input parameters:

- `duration_ms` (integer): Duration of the movement in milliseconds.
- `end_x` (integer, required): Ending X coordinate.
- `end_y` (integer, required): Ending Y coordinate.
- `start_x` (integer, required): Starting X coordinate.
- `start_y` (integer, required): Starting Y coordinate.

### `move_window` (~43 tokens)

Move the focused window by a pixel offset using keyboard move mode.

Input parameters:

- `dx` (integer, required): Horizontal offset in pixels.
- `dy` (integer, required): Vertical offset in pixels.

### `move_window_to_workspace` (~29 tokens)

Move the focused window to an adjacent workspace.

Input parameters:

- `direction` (string): Direction to move.

### `navigate_menu` (~60 tokens)

Navigate a menu hierarchy by sequentially activating each item in the path. Waits for sub-menus to appear between levels.

Input parameters:

- `app_name`: Application to search menus in.
- `menu_path` (array, required): List of menu item names to navigate through.

### `notification_monitor_read` (~27 tokens)

Read captured notifications since monitoring started.

Input parameters:

- `clear` (boolean): Clear notifications after reading.

### `notification_monitor_start` (~14 tokens)

Start monitoring desktop notifications.

### `notification_monitor_stop` (~14 tokens)

Stop monitoring desktop notifications.

### `ocr_screen` (~61 tokens)

Extract text from the screen or a region using OCR. Use for apps with poor accessibility.

Input parameters:

- `height`: Height of region.
- `width`: Width of region.
- `x`: X coordinate of region.
- `y`: Y coordinate of region.

### `ping` (~16 tokens)

Return basic health information for the desktop backend.

### `poll_events` (~57 tokens)

Poll for captured AT-SPI events.

Input parameters:

- `max_events` (integer): Maximum number of events to return.
- `subscription_id` (string, required): Subscription ID from subscribe_events.
- `timeout_ms` (integer): Maximum time to wait for events.

### `press_key` (~113 tokens)

Press and release a key by GDK key name, optionally verifying the effect against a target element and settled GNOME Shell popup state.

Input parameters:

- `element_id`: Optional element to verify effect against.
- `key_name` (string, required): GDK key name (e.g. Return, Escape).
- `poll_interval_ms` (integer): Polling interval for settle check.
- `settle_timeout_ms` (integer): Max time to wait for shell to settle.
- `stable_for_ms` (integer): How long shell must be stable.

### `read_app_log` (~48 tokens)

Read stdout/stderr of a launched application by PID.

Input parameters:

- `last_n_lines` (integer): Number of lines from the end (0 = all).
- `pid` (integer, required): Process ID.

### `resize_window` (~43 tokens)

Resize the focused window by a pixel delta using keyboard resize mode.

Input parameters:

- `dh` (integer, required): Height change in pixels.
- `dw` (integer, required): Width change in pixels.

### `resolve_click_target` (~40 tokens)

Resolve the nearest actionable ancestor for an element so labels can map to clickable parents.

Input parameters:

- `element_id` (string, required): Element ID to resolve click target for.

### `screen_record_start` (~81 tokens)

Start recording the screen or a region to video.

Input parameters:

- `draw_cursor` (boolean): Include mouse cursor in recording.
- `framerate` (integer): Recording framerate.
- `height`: Height of recording region.
- `width`: Width of recording region.
- `x`: X coordinate of recording region.
- `y`: Y coordinate of recording region.

### `screen_record_stop` (~55 tokens)

Stop recording and optionally convert to GIF.

Input parameters:

- `gif_fps` (integer): GIF frames per second.
- `gif_width` (integer): GIF width in pixels.
- `to_gif` (boolean): Convert recording to GIF.

### `screenshot` (~60 tokens)

Capture the current GNOME desktop to a PNG file. Optionally return the image as a base64-encoded string.

Input parameters:

- `filename`: Output file path. Auto-generated if omitted.
- `return_base64` (boolean): Include the image in the response content.

### `screenshot_area` (~79 tokens)

Capture a rectangular region of the screen to a PNG file.

Input parameters:

- `filename`: Output file path. Auto-generated if omitted.
- `height` (integer, required): Height of the region.
- `width` (integer, required): Width of the region.
- `x` (integer, required): X coordinate of the region.
- `y` (integer, required): Y coordinate of the region.

### `screenshot_window` (~92 tokens)

Capture a window to a PNG file. Focuses the window by element_id first, then captures the currently focused window via D-Bus ScreenshotWindow.

Input parameters:

- `filename`: Output file path. Auto-generated if omitted.
- `include_cursor` (boolean): Include mouse cursor in screenshot.
- `include_frame` (boolean): Include window frame decorations.
- `window_element_id` (string, required): Element ID of the window to capture.

### `scroll` (~75 tokens)

Scroll the mouse wheel at the current pointer position or at given screen coordinates. Use direction and clicks for discrete mouse-wheel steps.

Input parameters:

- `clicks` (integer): Number of discrete scroll steps.
- `direction` (string): Scroll direction.
- `x`: Optional X coordinate to scroll at.
- `y`: Optional Y coordinate to scroll at.

### `scroll_smooth` (~81 tokens)

Perform smooth (non-discrete) scrolling at a given position. Use dx/dy for horizontal/vertical scroll amounts as floating-point values.

Input parameters:

- `dx` (number): Horizontal scroll amount.
- `dy` (number): Vertical scroll amount.
- `x` (integer, required): X coordinate to scroll at.
- `y` (integer, required): Y coordinate to scroll at.

### `scroll_to_element` (~62 tokens)

Scroll an element into view if it is off-screen.

Input parameters:

- `element_id` (string, required): Element ID to scroll to.
- `max_scrolls` (integer): Maximum number of scroll attempts.
- `scroll_clicks` (integer): Number of scroll clicks per attempt.

### `select_element_text` (~74 tokens)

Select text within an element using the AT-SPI Text interface. Provide start_offset and end_offset for a range, or omit both to select all text.

Input parameters:

- `element_id` (string, required): Element ID containing text.
- `end_offset`: End offset for text selection.
- `start_offset`: Start offset for text selection.

### `select_option` (~60 tokens)

Select a child item within a container element via the AT-SPI Selection interface. Use for combo boxes, list boxes, and menus.

Input parameters:

- `child_index` (integer, required): Index of the child to select.
- `element_id` (string, required): Container element ID.

### `select_window` (~57 tokens)

Choose a window (from list_windows) as the implicit scope for take_snapshot, and try to focus it. Subsequent take_snapshot calls without a 'window' argument capture this window.

Input parameters:

- `window` (string, required): Window id from list_windows.

### `session_info` (~16 tokens)

Get information about the current isolated session.

### `session_start` (~59 tokens)

Start an isolated GNOME Shell session via gnome-shell --headless. Creates a private D-Bus session with its own display and input.

Input parameters:

- `height` (integer): Display height in pixels.
- `width` (integer): Display width in pixels.

### `session_stop` (~16 tokens)

Stop the isolated GNOME Shell session.

### `set_boundaries` (~42 tokens)

Restrict automation to a specific application.

Input parameters:

- `allow_global_keys`: Key combos allowed outside the boundary.
- `app_name`: Application name to restrict automation to.

### `set_element_text` (~42 tokens)

Replace the text contents of an editable element.

Input parameters:

- `element_id` (string, required): Element ID to set text on.
- `text` (string, required): New text content.

### `set_element_value` (~56 tokens)

Set the numeric value of a slider, spinbutton, or progress bar via the AT-SPI Value interface.

Input parameters:

- `element_id` (string, required): Element ID to set value on.
- `value` (number, required): Numeric value to set.

### `set_toggle_state` (~61 tokens)

Set a toggle button or checkbox to a desired on/off state. Returns no-op if already in the desired state.

Input parameters:

- `desired_state` (boolean, required): Desired state: true for on, false for off.
- `element_id` (string, required): Toggle element ID.

### `snap_window` (~26 tokens)

Snap the focused window to a screen position.

Input parameters:

- `position` (string): Snap position.

### `snapshot_state` (~17 tokens)

Capture a snapshot of the current desktop state.

### `subscribe_events` (~48 tokens)

Subscribe to AT-SPI events. Returns subscription ID.

Input parameters:

- `app_name`: Filter events to this application.
- `event_types` (array, required): List of AT-SPI event types to subscribe to.

### `switch_workspace` (~24 tokens)

Switch to an adjacent workspace.

Input parameters:

- `direction` (string): Direction to switch.

### `take_snapshot` (~113 tokens)

Capture a snapshot of the accessibility tree and assign every element a stable uid. Reference these uids in click, fill, hover, and fill_form. Defaults to the active window; pass 'window' (from list_windows) or 'app_name' to scope it. Taking a new snapshot invalidates older uids.

Input parameters:

- `app_name`: Snapshot this application instead of a single window.
- `max_depth`: Maximum tree depth to capture.
- `window`: Window id from list_windows. Defaults to the active window.

### `toggle_overview` (~31 tokens)

Toggle the GNOME Shell activities overview.

Input parameters:

- `active`: Set overview state. Defaults to True if omitted.

### `toggle_window_state` (~27 tokens)

Toggle the focused window's state.

Input parameters:

- `state` (string): Window state to toggle.

### `touch_rotate` (~108 tokens)

Perform a two-finger rotation gesture around a center point. Angles are in radians. Two touch slots trace circular arcs on opposite sides.

Input parameters:

- `center_x` (integer, required): Center X coordinate.
- `center_y` (integer, required): Center Y coordinate.
- `duration_ms` (integer): Duration of the gesture in milliseconds.
- `end_angle` (number, required): End angle in radians.
- `radius` (number, required): Radius of the rotation arc.
- `start_angle` (number, required): Start angle in radians.

### `type_into` (~65 tokens)

Find an input field by label text and type into it. AT-SPI first, OCR fallback.

Input parameters:

- `label` (string, required): Label text of the input field.
- `submit` (boolean): Press Enter after typing.
- `text` (string, required): Text to type into the field.

### `type_text` (~26 tokens)

Type text into the currently focused element.

Input parameters:

- `text` (string, required): Text to type.

### `unsubscribe_events` (~28 tokens)

Unsubscribe from AT-SPI events.

Input parameters:

- `subscription_id` (string, required): Subscription ID to unsubscribe.

### `visible_shell_popups` (~20 tokens)

Return visible GNOME Shell popup or menu containers.

### `visual_diff` (~60 tokens)

Compare two screenshots and return changed regions.

Input parameters:

- `image_path_1` (string, required): Path to the first image.
- `image_path_2` (string, required): Path to the second image.
- `threshold` (integer): Color difference threshold (0-255).

### `wait_and_act` (~157 tokens)

Wait for an element to appear, then act on it. Atomic wait+act in one MCP call.

Input parameters:

- `poll_interval_ms` (integer): Polling interval in milliseconds.
- `then_action` (string): Action to perform: activate, click, focus, or set_text.
- `then_query`: Override query for the action target.
- `then_role`: Override role for the action target.
- `then_text`: Text to set (for set_text action).
- `timeout_ms` (integer): Maximum time to wait in milliseconds.
- `wait_app_name`: Application filter for the wait phase.
- `wait_query` (string, required): Text to wait for in element names.
- `wait_role`: Role filter for the wait phase.

### `wait_for_app` (~79 tokens)

Wait for an application to appear in the AT-SPI tree.

Input parameters:

- `app_name` (string, required): Application name to wait for.
- `poll_interval_ms` (integer): Polling interval in milliseconds.
- `require_window` (boolean): Require at least one window to be open.
- `timeout_ms` (integer): Maximum time to wait in milliseconds.

### `wait_for_element` (~171 tokens)

Poll the accessibility tree until a matching element appears or the timeout expires, optionally scoped to a subtree or visible popup.

Input parameters:

- `app_name`: Restrict search to this application.
- `bounds_only` (boolean): Only match elements that have screen bounds.
- `clickable_only` (boolean): Only match elements that are directly clickable.
- `poll_interval_ms` (integer): Polling interval in milliseconds.
- `query` (string, required): Text to search for in element names.
- `role`: Only match elements with this role.
- `showing_only` (boolean): Only match elements that are currently showing.
- `timeout_ms` (integer): Maximum time to wait in milliseconds.
- `within_element_id`: Scope search to children of this element.
- `within_popup` (boolean): Scope search to the currently visible popup.

### `wait_for_element_gone` (~173 tokens)

Poll the accessibility tree until a matching element disappears or the timeout expires, optionally scoped to a subtree or visible popup.

Input parameters:

- `app_name`: Restrict search to this application.
- `bounds_only` (boolean): Only match elements that have screen bounds.
- `clickable_only` (boolean): Only match elements that are directly clickable.
- `poll_interval_ms` (integer): Polling interval in milliseconds.
- `query` (string, required): Text to search for in element names.
- `role`: Only match elements with this role.
- `showing_only` (boolean): Only match elements that are currently showing.
- `timeout_ms` (integer): Maximum time to wait in milliseconds.
- `within_element_id`: Scope search to children of this element.
- `within_popup` (boolean): Scope search to the currently visible popup.

### `wait_for_popup_count` (~82 tokens)

Poll the GNOME Shell until the number of visible popups matches a count.

Input parameters:

- `count` (integer, required): Expected number of popups.
- `max_depth` (integer): Maximum tree depth to search for popups.
- `poll_interval_ms` (integer): Polling interval in milliseconds.
- `timeout_ms` (integer): Maximum time to wait in milliseconds.

### `wait_for_shell_settled` (~84 tokens)

Poll until GNOME Shell popup state has stayed unchanged for a short time.

Input parameters:

- `max_depth` (integer): Maximum tree depth for popup detection.
- `poll_interval_ms` (integer): Polling interval in milliseconds.
- `stable_for_ms` (integer): How long shell must be stable.
- `timeout_ms` (integer): Maximum time to wait in milliseconds.

### `wait_for_window` (~79 tokens)

Wait for a window to appear.

Input parameters:

- `app_name`: Restrict search to this application.
- `poll_interval_ms` (integer): Polling interval in milliseconds.
- `query` (string, required): Window title text to match.
- `role`: Only match windows with this role.
- `timeout_ms` (integer): Maximum time to wait in milliseconds.

### `wayland_protocols` (~30 tokens)

List Wayland protocols supported by the compositor.

Input parameters:

- `filter_protocol`: Filter protocols by substring match.

## Diagnostics

Captured diagnostic sections: Provenance. The full working is on the page: https://verifymcp.io/servers/asattelmaier-gnome-ui-mcp/ghcr-io-asattelmaier-gnome-ui-mcp-0-5-0#diagnostics

## Score history

- 2026-08-03: 43
- 2026-08-02: 39
- 2026-08-01: 39
- 2026-07-31: 39
- 2026-07-30: 45
- 2026-07-29: 45
- 2026-07-28: 45
- 2026-07-27: 45
- 2026-07-26: 11

## Links

- Repository: https://github.com/asattelmaier/gnome-ui-mcp
- Changelog RSS feed: https://verifymcp.io/servers/asattelmaier-gnome-ui-mcp/ghcr-io-asattelmaier-gnome-ui-mcp-0-5-0/changelog.xml
- Changelog JSON feed: https://verifymcp.io/servers/asattelmaier-gnome-ui-mcp/ghcr-io-asattelmaier-gnome-ui-mcp-0-5-0/changelog.json
- HTML version of this page: https://verifymcp.io/servers/asattelmaier-gnome-ui-mcp/ghcr-io-asattelmaier-gnome-ui-mcp-0-5-0
