GNOME UI MCP
OCI · GHCR.IO/ASATTELMAIER/GNOME-UI-MCP:0.5.0 · SCANNED SEP 20
GNOME Wayland desktop automation via AT-SPI discovery and Mutter input.
Available components
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. How we score → Why this is hard to score →
Supply Chain Security0
- Malware scan not yet available for this package.Unverified
- Known CVEs could not be checked: this artifact ships no SBOM, so there is no dependency list to read. Publishing one would let us assess it.Unverified
- Install-script risk not yet assessed.Unverified
- Dependency health could not be checked: this artifact ships no SBOM, so there is no dependency list to read. Publishing one would let us assess it.Unverified
Provenance & Transparency45
- Source repository is publicly reachable at the declared URL. View diagnostics → Pass
- Provenance check failed: no build-provenance attestation is published. See how to fix → View diagnostics → Fail
- Clear OSI-approved license (MIT).Pass
- Actively maintained (last published 86 days ago).Pass
- Disclosure check failed: no security disclosure policy was found in the source repository. See how to fix → Fail
Schema Quality & AI Usability78
- AI-judged instruction clarity (excellent).Pass
- Tool/resource definitions use about 6689 tokens (~58/item across 115 items; 115 tools + 0 resources), lean.Pass
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management90
- Stability observed for 27 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage100
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 100% of tool parameters carry a description.Pass
Tool Safety75
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- 0 of 3 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation; "clear_boundaries" implies "remove" and declares no destructiveHint at all, which the MCP spec reads as destructive by default. See how to fix → Fail
- An AI judge read all 116 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
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.
How do I install the GNOME UI MCP server?
GNOME UI MCP runs locally as a container image, launched with docker run --rm -i ghcr.io/asattelmaier/gnome-ui-mcp:0.5.0. Ready-made configuration for Claude, Cursor, VS Code, Codex and 3 more is on this page, copied from each client's own documentation.
oci · ghcr.io/asattelmaier/gnome-ui-mcp:0.5.0
claude mcp add asattelmaier-gnome-ui-mcp -- docker run --rm -i ghcr.io/asattelmaier/gnome-ui-mcp:0.5.0
{
"mcpServers": {
"asattelmaier-gnome-ui-mcp": {
"command": "docker",
"args": [
"run",
"--rm",
"-i",
"ghcr.io/asattelmaier/gnome-ui-mcp:0.5.0"
]
}
}
} {
"servers": {
"asattelmaier-gnome-ui-mcp": {
"command": "docker",
"args": [
"run",
"--rm",
"-i",
"ghcr.io/asattelmaier/gnome-ui-mcp:0.5.0"
]
}
}
} codex mcp add asattelmaier-gnome-ui-mcp -- docker run --rm -i ghcr.io/asattelmaier/gnome-ui-mcp:0.5.0
{
"$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
}
}
} mcp_servers:
asattelmaier-gnome-ui-mcp:
command: "docker"
args: ["run", "--rm", "-i", "ghcr.io/asattelmaier/gnome-ui-mcp:0.5.0"] {
"McpServers": {
"asattelmaier-gnome-ui-mcp": {
"Transport": "stdio",
"Command": "docker",
"Arguments": [
"run",
"--rm",
"-i",
"ghcr.io/asattelmaier/gnome-ui-mcp:0.5.0"
]
}
}
} {
"mcpServers": {
"asattelmaier-gnome-ui-mcp": {
"command": "docker",
"args": [
"run",
"--rm",
"-i",
"ghcr.io/asattelmaier/gnome-ui-mcp:0.5.0"
]
}
}
} Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 19 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 83 to 87. That category is still filling its 30-day observation window: 25 days of observed history at the previous scan, 26 at this one. The score rises as the window fills, whether or not the server changes.
- 17 Sept 26 −3
- Stability: pass → 0.80 functional
- 16 Sept 26 +1
- Stability: 0.97 → pass security
- 14 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 90 to 93. That category is still filling its 30-day observation window: 27 days of observed history at the previous scan, 28 at this one. The score rises as the window fills, whether or not the server changes.
- 12 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 83 to 87. That category is still filling its 30-day observation window: 25 days of observed history at the previous scan, 26 at this one. The score rises as the window fills, whether or not the server changes.
- 10 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 77 to 80. That category is still filling its 30-day observation window: 23 days of observed history at the previous scan, 24 at this one. The score rises as the window fills, whether or not the server changes.
- 9 Sept 26 −4
- Stability: pass → 0.77 functional
- 8 Sept 26 +1
- Stability: 0.97 → pass security
- Security disclosure: unverified → fail ▼ functional
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 20 Sept 2026 · Analysed oci/ghcr.io/asattelmaier/gnome-ui-mcp:0.5.0
Provenance No attestation
The registry publishes no build provenance for this version, so there is nothing to verify.
| Result | No attestation |
|---|---|
| Ecosystem | oci |
| Reason | No attestation published |
Background: How many MCP packages publish verified provenance →
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
accessibility_tree ~127
Return the accessibility tree for the whole desktop or a specific application. Optionally filter by roles, states, or showing-only.
| Name | Type | Req | Description |
|---|---|---|---|
| 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. |
No output schema declared.
No examples provided.
activate_element ~49
Activate an element with action first, then focus plus keyboard, then mouse fallback.
| Name | Type | Req | Description |
|---|---|---|---|
| action_name | – | – | Specific AT-SPI action to invoke. |
| element_id | string | yes | Element ID to activate. |
No output schema declared.
No examples provided.
analyze_screenshot ~56
Analyze a screenshot using a vision language model.
| Name | Type | Req | Description |
|---|---|---|---|
| model | – | – | Specific model to use. |
| prompt | string | yes | Analysis prompt. |
| provider | string | – | VLM provider: openrouter, anthropic, or ollama. |
No output schema declared.
No examples provided.
assert_element ~95
Assert that an element exists with expected states. Returns pass/fail with structured checks.
| Name | Type | Req | Description |
|---|---|---|---|
| app_name | – | – | Restrict search to this application. |
| expected_states | – | – | States the element should have. |
| query | string | yes | 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. |
No output schema declared.
No examples provided.
assert_text ~61
Assert that an element's text matches expected value.
| Name | Type | Req | Description |
|---|---|---|---|
| element_id | string | yes | Element ID to check text of. |
| expected | string | yes | Expected text value. |
| match | string | – | Match mode: exact, contains, startswith, or regex. |
No output schema declared.
No examples provided.
clear_boundaries ~13
Remove automation boundaries.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
click ~77
Click the element referenced by a uid from the latest snapshot. Auto-waits for the UI to settle and reports effect verification.
| Name | Type | Req | Description |
|---|---|---|---|
| dbl_click | boolean | – | Set true for a double click. |
| include_snapshot | boolean | – | Attach a fresh snapshot of the result to the response. |
| uid | string | yes | Element uid from the latest snapshot. |
No output schema declared.
No examples provided.
click_at ~78
Click at absolute screen coordinates and report input injection plus any observable effect verification.
| Name | Type | Req | Description |
|---|---|---|---|
| button | string | – | Mouse button. |
| click_count | integer | – | Number of clicks (1=single, 2=double, 3=triple). |
| x | integer | yes | X screen coordinate. |
| y | integer | yes | Y screen coordinate. |
No output schema declared.
No examples provided.
click_element ~93
Click an element or its resolved clickable ancestor, and report input injection plus observable effect verification.
| Name | Type | Req | Description |
|---|---|---|---|
| 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 | yes | Element ID to click. |
No output schema declared.
No examples provided.
click_notification_action ~45
Invoke an action on a desktop notification by its ID and action key.
| Name | Type | Req | Description |
|---|---|---|---|
| action_key | string | yes | Action key to invoke. |
| notification_id | integer | yes | Notification ID. |
No output schema declared.
No examples provided.
click_text_ocr ~48
Find text on screen via OCR and click it.
| Name | Type | Req | Description |
|---|---|---|---|
| button | string | – | Mouse button: left, middle, or right. |
| target | string | yes | Text to find and click. |
No output schema declared.
No examples provided.
clipboard_read ~54
Read the Wayland clipboard contents. Supports custom MIME types for reading binary data (returned as base64).
| Name | Type | Req | Description |
|---|---|---|---|
| mime_type | string | – | MIME type to request. |
| selection | string | – | Selection type: clipboard or primary. |
No output schema declared.
No examples provided.
clipboard_write ~71
Write to the Wayland clipboard. Supports custom MIME types. For binary types, pass base64-encoded data as text.
| Name | Type | Req | Description |
|---|---|---|---|
| mime_type | string | – | MIME type for the data. |
| selection | string | – | Selection type: clipboard or primary. |
| text | string | yes | Text to write to clipboard. |
No output schema declared.
No examples provided.
close_app ~35
Gracefully close all windows of an application by sending Alt+F4.
| Name | Type | Req | Description |
|---|---|---|---|
| app_name | string | yes | Application name to close. |
No output schema declared.
No examples provided.
close_window ~19
Close the currently focused window via Alt+F4.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
collapse_node ~33
Collapse a tree or expander node if it is currently expanded.
| Name | Type | Req | Description |
|---|---|---|---|
| element_id | string | yes | Element ID to collapse. |
No output schema declared.
No examples provided.
compare_screenshots ~86
Compare two screenshots using a vision language model.
| Name | Type | Req | Description |
|---|---|---|---|
| image_path_1 | string | yes | Path to the first screenshot. |
| image_path_2 | string | yes | Path to the second screenshot. |
| model | – | – | Specific model to use. |
| prompt | – | – | Custom comparison prompt. |
| provider | string | – | VLM provider: openrouter, anthropic, or ollama. |
No output schema declared.
No examples provided.
compare_state ~43
Compare two desktop state snapshots and return changes.
| Name | Type | Req | Description |
|---|---|---|---|
| after_id | string | yes | Snapshot ID for after state. |
| before_id | string | yes | Snapshot ID for before state. |
No output schema declared.
No examples provided.
dbus_call ~107
Call any D-Bus method on the session bus. Use with caution.
| Name | Type | Req | Description |
|---|---|---|---|
| args | – | – | Arguments to pass to the method. |
| bus_name | string | yes | D-Bus bus name. |
| interface | string | yes | D-Bus interface name. |
| method | string | yes | Method to call. |
| object_path | string | yes | D-Bus object path. |
| signature | – | – | D-Bus type signature for the arguments. |
| timeout_ms | integer | – | Timeout in milliseconds. |
No output schema declared.
No examples provided.
dismiss_notification ~35
Dismiss a desktop notification by its ID via D-Bus CloseNotification.
| Name | Type | Req | Description |
|---|---|---|---|
| notification_id | integer | yes | Notification ID to dismiss. |
No output schema declared.
No examples provided.
drag ~96
Drag from one screen position to another with smooth interpolation.
| Name | Type | Req | Description |
|---|---|---|---|
| button | string | – | Mouse button. |
| duration_ms | integer | – | Duration of the drag in milliseconds. |
| end_x | integer | yes | Ending X coordinate. |
| end_y | integer | yes | Ending Y coordinate. |
| start_x | integer | yes | Starting X coordinate. |
| start_y | integer | yes | Starting Y coordinate. |
| steps | integer | – | Number of interpolation steps. |
No output schema declared.
No examples provided.
element_at_point ~79
Return the deepest visible element at a given screen coordinate.
| Name | Type | Req | Description |
|---|---|---|---|
| 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 | yes | X screen coordinate. |
| y | integer | yes | Y screen coordinate. |
No output schema declared.
No examples provided.
expand_node ~33
Expand a tree or expander node if it is currently collapsed.
| Name | Type | Req | Description |
|---|---|---|---|
| element_id | string | yes | Element ID to expand. |
No output schema declared.
No examples provided.
file_dialog_set_path ~52
Set a file path in a GTK file dialog by sending Ctrl+L to activate the location entry, typing the path, and pressing Return.
| Name | Type | Req | Description |
|---|---|---|---|
| path | string | yes | File path to set in the dialog. |
No output schema declared.
No examples provided.
fill ~103
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.
| Name | Type | Req | Description |
|---|---|---|---|
| include_snapshot | boolean | – | Attach a fresh snapshot of the result to the response. |
| uid | string | yes | Element uid from the latest snapshot. |
| value | string | yes | Text to type, or 'true'/'false' for toggles. |
No output schema declared.
No examples provided.
fill_form ~91
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.
| Name | Type | Req | Description |
|---|---|---|---|
| fields | array | yes | List of {uid, value} objects to fill, in order. |
| include_snapshot | boolean | – | Attach a fresh snapshot of the result to the response. |
No output schema declared.
No examples provided.
find_and_activate ~161
Find the best matching element and activate it, optionally scoped to a subtree or visible popup.
| Name | Type | Req | Description |
|---|---|---|---|
| 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 | yes | 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. |
No output schema declared.
No examples provided.
find_elements ~181
Search accessible elements by text and optional role filter, with optional clickable and bounds filters, optionally scoped to a subtree or visible popup.
| Name | Type | Req | Description |
|---|---|---|---|
| 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. |
No output schema declared.
No examples provided.
find_text_ocr ~70
Find text on screen via OCR and return its coordinates.
| Name | Type | Req | Description |
|---|---|---|---|
| height | – | – | Height of search region. |
| target | string | yes | Text to search for. |
| width | – | – | Width of search region. |
| x | – | – | X coordinate of search region. |
| y | – | – | Y coordinate of search region. |
No output schema declared.
No examples provided.
focus_element ~31
Focus an element through the AT-SPI component interface.
| Name | Type | Req | Description |
|---|---|---|---|
| element_id | string | yes | Element ID to focus. |
No output schema declared.
No examples provided.
get_action_history ~31
Get recent automation actions with undo hints.
| Name | Type | Req | Description |
|---|---|---|---|
| last_n | integer | – | Number of recent actions to return. |
No output schema declared.
No examples provided.
get_element_path ~39
Return the ancestry chain from root to a given element as a list of nodes.
| Name | Type | Req | Description |
|---|---|---|---|
| element_id | string | yes | Element ID to trace path for. |
No output schema declared.
No examples provided.
get_element_properties ~45
Return extended AT-SPI properties for an element: value, selection, relations, attributes, and image info.
| Name | Type | Req | Description |
|---|---|---|---|
| element_id | string | yes | Element ID to get properties for. |
No output schema declared.
No examples provided.
get_element_text ~47
Return detailed text information for an element: full text, caret offset, selections, and text attributes at the caret position.
| Name | Type | Req | Description |
|---|---|---|---|
| element_id | string | yes | Element ID to get text from. |
No output schema declared.
No examples provided.
get_elements_by_ids ~44
Resolve multiple element IDs in one call, returning summaries for found elements and a list of missing IDs.
| Name | Type | Req | Description |
|---|---|---|---|
| element_ids | array | yes | List of element IDs to resolve. |
No output schema declared.
No examples provided.
get_focused_element ~18
Return metadata about the currently focused element.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
get_keyboard_layout ~18
Read the active keyboard layout from GSettings.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
get_monitor_for_point ~39
Return which monitor contains the given screen coordinates.
| Name | Type | Req | Description |
|---|---|---|---|
| x | integer | yes | X screen coordinate. |
| y | integer | yes | Y screen coordinate. |
No output schema declared.
No examples provided.
get_pixel_color ~37
Get the pixel color at screen coordinates.
| Name | Type | Req | Description |
|---|---|---|---|
| x | integer | yes | X screen coordinate. |
| y | integer | yes | Y screen coordinate. |
No output schema declared.
No examples provided.
get_region_color ~60
Get the average color of a screen region.
| Name | Type | Req | Description |
|---|---|---|---|
| height | integer | yes | Height of region. |
| width | integer | yes | Width of region. |
| x | integer | yes | X coordinate of region. |
| y | integer | yes | Y coordinate of region. |
No output schema declared.
No examples provided.
get_table_cell ~49
Return information about a specific cell in a table element.
| Name | Type | Req | Description |
|---|---|---|---|
| col | integer | yes | Column index. |
| element_id | string | yes | Table element ID. |
| row | integer | yes | Row index. |
No output schema declared.
No examples provided.
get_table_info ~34
Return table dimensions, column headers, and caption for a table element.
| Name | Type | Req | Description |
|---|---|---|---|
| element_id | string | yes | Table element ID. |
No output schema declared.
No examples provided.
get_tooltip_text ~51
Get the tooltip text for an element. Checks the element's description first, then looks for tooltip relations in the AT-SPI tree.
| Name | Type | Req | Description |
|---|---|---|---|
| element_id | string | yes | Element ID to get tooltip from. |
No output schema declared.
No examples provided.
gsettings_get ~39
Read a GSettings key value.
| Name | Type | Req | Description |
|---|---|---|---|
| key | string | yes | Key name within the schema. |
| schema | string | yes | GSettings schema ID. |
No output schema declared.
No examples provided.
gsettings_list_keys ~30
List all keys in a GSettings schema.
| Name | Type | Req | Description |
|---|---|---|---|
| schema | string | yes | GSettings schema ID. |
No output schema declared.
No examples provided.
gsettings_reset ~42
Reset a GSettings key to its default value.
| Name | Type | Req | Description |
|---|---|---|---|
| key | string | yes | Key name within the schema. |
| schema | string | yes | GSettings schema ID. |
No output schema declared.
No examples provided.
gsettings_set ~62
Write a GSettings key value.
| Name | Type | Req | Description |
|---|---|---|---|
| key | string | yes | Key name within the schema. |
| schema | string | yes | GSettings schema ID. |
| value | string|integer|number|boolean | yes | Value to set (string, number, or boolean). |
No output schema declared.
No examples provided.
highlight_element ~58
Take a screenshot with a colored rectangle highlighting an element for visual debugging.
| Name | Type | Req | Description |
|---|---|---|---|
| color | string | – | Color of the highlight rectangle. |
| element_id | string | yes | Element ID to highlight. |
| label | – | – | Optional label to display on the highlight. |
No output schema declared.
No examples provided.
hover ~64
Move the pointer over the element referenced by a uid from the latest snapshot (e.g. to reveal a hover menu or tooltip).
| Name | Type | Req | Description |
|---|---|---|---|
| include_snapshot | boolean | – | Attach a fresh snapshot of the result to the response. |
| uid | string | yes | Element uid from the latest snapshot. |
No output schema declared.
No examples provided.
hover_element ~31
Move cursor to an element's center without clicking.
| Name | Type | Req | Description |
|---|---|---|---|
| element_id | string | yes | Element ID to hover over. |
No output schema declared.
No examples provided.
What is the GNOME UI MCP server?
GNOME UI MCP is listed in the public MCP registry as io.github.asattelmaier/gnome-ui-mcp. GNOME Wayland desktop automation via AT-SPI discovery and Mutter input. This page covers its container image (ghcr.io/asattelmaier/gnome-ui-mcp:0.5.0).
Is the GNOME UI MCP server safe to use?
GNOME UI MCP scores 52 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.
What tools does the GNOME UI MCP server expose?
GNOME UI MCP exposes 115 tools: accessibility_tree, activate_element, analyze_screenshot, assert_element, assert_text, and 110 more. Their descriptions and schemas cost roughly 6,671 tokens of context every time the server is loaded.
Is the GNOME UI MCP server still maintained?
GNOME UI MCP is still listed as active in the MCP registry. We last reached this channel on 20 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.
What licence is the GNOME UI MCP server under?
GNOME UI MCP declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.