关于 GNOME UI MCP
GNOME UI MCP 是用于自动化 GNOME Wayland 桌面会话的 MCP 服务,结合 AT-SPI 检查界面并通过 Mutter 输入。它以快照和稳定元素 ID 定位界面操作。
主要功能
- 01通过 AT-SPI 检查桌面元素
- 02创建带元素 ID 的快照
- 03点击、填写、悬停和提交表单
- 04截取屏幕并等待界面变化
- 05选择窗口并查找元素
- 06支持 stdio、HTTP 和 SSE 传输
适用场景
- 01自动化操作当前 GNOME 会话
- 02查找并操作窗口中的控件
- 03依据快照中的元素填写表单
- 04连接本地或基于 HTTP 的 MCP 客户端
MCP 相关
通过 stdio、streamable HTTP 或 SSE 向 MCP 客户端提供 GNOME 桌面检查与交互工具。它使用 AT-SPI 发现界面,并通过 Mutter RemoteDesktop 输入。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
docker run -i --rm ghcr.io/asattelmaier/gnome-ui-mcp:0.5.0本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。
ghcr.io/asattelmaier/gnome-ui-mcp:0.5.0stdio工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
gnome-ui-mcp
用于 GNOME Wayland 桌面自动化的小型 MCP 服务。
它通过 AT-SPI 检查并操作 GNOME 桌面以发现元素,并通过 Mutter RemoteDesktop 输入。在实际使用中,这意味着可以查找和激活元素、输入文字、截取屏幕截图,以及使用等待助手来操作当前桌面会话。
导航采用快照驱动模式:先对活动窗口拍摄快照以获取稳定的元素 uid,然后对这些 uid 执行 click/fill/hover/fill_form。过期的 uid 会被拒绝,而不会被悄悄用于错误的目标;操作会自动等待 UI 稳定。请参阅下文的导航。
要求
- 使用 Wayland 的 GNOME Shell Linux 主机
- 要自动化的机器上有正在运行的本地 GNOME 会话
- 可用的会话环境:
DBUS_SESSION_BUS_ADDRESS、XDG_RUNTIME_DIR、WAYLAND_DISPLAY、DISPLAY、XDG_SESSION_TYPE
Docker
- Docker Engine
容器必须在与 GNOME 会话相同的机器上运行,并使用会话环境和运行时挂载。
Docker 镜像
推荐通过已发布的 GHCR 镜像运行服务:
ghcr.io/asattelmaier/gnome-ui-mcp:latest
latest 跟踪最新版本。诸如 v0.1.0 这样的版本标签也会发布对应的镜像标签。
Docker 设置
直接使用 docker run:
docker run --rm \
--security-opt apparmor=unconfined \
--network host \
--user "$(id -u):$(id -g)" \
-e DBUS_SESSION_BUS_ADDRESS="$DBUS_SESSION_BUS_ADDRESS" \
-e XDG_RUNTIME_DIR="$XDG_RUNTIME_DIR" \
-e WAYLAND_DISPLAY="$WAYLAND_DISPLAY" \
-e DISPLAY="$DISPLAY" \
-e XDG_SESSION_TYPE="${XDG_SESSION_TYPE:-wayland}" \
-v "$XDG_RUNTIME_DIR:$XDG_RUNTIME_DIR" \
-v /tmp/.X11-unix:/tmp/.X11-unix:ro \
ghcr.io/asattelmaier/gnome-ui-mcp:latest
必须使用 --user "$(id -u):$(id -g)",以便容器加入与 GNOME、D-Bus 和 AT-SPI 相同的用户会话。
通过 Compose 进行本地开发:
此方式还需要 docker compose。
- 将
.env.example复制为.env - 根据你的会话调整值
- 运行:
docker compose build
docker compose run --rm gnome-ui-mcp
可用传输方式
该服务支持三种传输方式,可在本地和 Docker 中使用:
stdio(默认):推荐用于会启动服务进程的本地 MCP 客户端streamable-http:推荐用于基于 HTTP 的集成,地址为http://127.0.0.1:8000/mcpsse:为向后兼容而提供,地址为http://127.0.0.1:8000/sse,消息通过 POST 发送到http://127.0.0.1:8000/messages/
示例:
gnome-ui-mcp
gnome-ui-mcp --transport streamable-http
gnome-ui-mcp --transport sse
在镜像名称后追加相同的标志,即可将其传递给 Docker 镜像:
docker run ... ghcr.io/asattelmaier/gnome-ui-mcp:latest --transport streamable-http
docker run ... ghcr.io/asattelmaier/gnome-ui-mcp:latest --transport sse
市场
仓库包含以下分发渠道的元数据:
- 通过
server.json接入 MCP Registry - 通过
.claude-plugin/plugin.json接入 Claude Code 插件市场 - 通过
.github/plugin/plugin.json接入 VS Code 和 GitHub Agent 插件市场
Claude Code 插件市场
要在 Claude Code 中将此仓库添加为插件市场:
/plugin marketplace add asattelmaier/gnome-ui-mcp
然后安装插件:
/plugin install gnome-ui-mcp
该插件通过 scripts/run-docker-mcp.sh 启动已发布的 Docker 镜像,因此主机必须能够使用 Docker 和 GNOME 会话环境。
MCP 客户端配置示例
{
"mcpServers": {
"gnome-ui": {
"command": "docker",
"args": [
"run",
"--rm",
"--security-opt",
"apparmor=unconfined",
"--network",
"host",
"--user",
"1000:1000",
"-e",
"DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus",
"-e",
"XDG_RUNTIME_DIR=/run/user/1000",
"-e",
"WAYLAND_DISPLAY=wayland-0",
"-e",
"DISPLAY=:0",
"-e",
"XDG_SESSION_TYPE=wayland",
"-v",
"/run/user/1000:/run/user/1000",
"-v",
"/tmp/.X11-unix:/tmp/.X11-unix:ro",
"ghcr.io/asattelmaier/gnome-ui-mcp:latest"
]
}
}
}
导航
推荐采用快照优先的方式操作桌面:
take_snapshot— 捕获活动窗口(或传入list_windows返回的window,或传入app_name)。每个元素都会获得一个稳定的不透明uid,例如7_42。click/fill/hover/fill_form— 通过uid引用元素。操作会自动等待 Shell 稳定,并报告效果验证结果。传入include_snapshot=true,即可在同一轮中获取结果的新快照。select_window用于设置隐式快照范围。
uid 仅对最新快照有效:如果 UI 已发生变化且某个 uid 因过期而被拒绝,请再次调用 take_snapshot 并使用新的 uid。较底层的路径工具(find_elements、click_element、set_element_text 等)仍可作为高级构建模块使用。
启动时可通过 --category NAME / --no-category NAME 启用或禁用工具类别(例如 --category navigation --category input)。
API 文档
完整工具参考文档见 https://asattelmaier.github.io/gnome-ui-mcp/
安全
此服务可以检查和控制当前桌面会话。请仅通过可信的 MCP 客户端使用。
在 Ubuntu 上以容器化方式运行时,可能需要设置 --security-opt apparmor=unconfined,
以便进程能够与 GNOME 会话总线通信。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。