关于 Umbriel
Umbriel 是用于控制 Linux 桌面 Umbriel Wayland 合成器的 MCP 服务。它提供窗口、工作区、输入、屏幕和剪贴板操作,并可通过配置档限制操作范围。
主要功能
- 01列出并控制窗口和工作区
- 02查看输出并操控指针或键盘
- 03截取屏幕并执行 OCR
- 04读取和写入剪贴板
- 05通过配置档限制操作
适用场景
- 01查看窗口和工作区
- 02自动执行桌面输入
- 03读取屏幕文字
- 04将 Agent 限制为只读桌面访问
MCP 相关
向 MCP 客户端提供 Umbriel 合成器状态和操作能力。它直接连接 Umbriel 的 IPC 套接字,并支持 `no-exec` 和 `read-only` 等配置档。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
umbriel-mcp
mcp-name: io.github.dot-ASH/umbriel-mcp
用于 Umbriel Wayland 合成器的 MCP 服务。
向 MCP 客户端开放 Umbriel:列出并控制窗口、工作区和输出设备,操控指针和键盘,截取屏幕并可选择进行 OCR,还能读取或写入剪贴板。
合成器状态和操作会直接通过 Umbriel 的 IPC 套接字执行,而不是调用命令行工具,因此检查只需一次往返,无需启动进程。指针、键盘和剪贴板直接使用 Wayland 协议。只有屏幕截图和 OCR 会调用外部程序。
安装前请阅读
完全访问权限意味着完全控制你的桌面。 在默认的 full 配置中,连接到此服务的 Agent 可以启动任意命令、在任何位置输入和点击、读取并覆盖剪贴板,以及查看屏幕。屏幕上或剪贴板中的所有内容对模型都可见。使用配置文件授予较少权限。
这是一个尽力维护的个人项目,跟随仍在积极演进的合成器开发。请预期 0.x 版本会有行为变更,也请预期 Umbriel 变更时项目可能会出问题。除我业余时间所能提供的支持外,不作其他支持承诺。
兼容性
支持情况取决于 Umbriel 自身的可用性:如果 Umbriel 能在你的系统上运行,此服务应该也能运行。服务本身是适用于 x86_64 和 aarch64 Linux 的静态二进制文件,无需运行时库,因此发行版只影响 Umbriel 和两个屏幕辅助工具的安装。
| 发行版 | Umbriel | umbriel-mcp |
|---|---|---|
| Arch Linux | AUR umbriel-git | 使用此仓库中的 makepkg(计划发布 AUR 软件包) |
| Ubuntu 26.04+ | Noctalia APT 仓库(umbriel) | 发布版二进制文件 |
| Debian Trixie / Sid | Noctalia APT 仓库(umbriel) | 发布版二进制文件 |
| Fedora | Terra(umbriel-nightly) | 发布版二进制文件 |
| 其他发行版 | 请参阅 Umbriel 安装页面 | 发布版二进制文件或 cargo install |
不支持较旧版本的 Ubuntu,因为 Umbriel 没有为其打包。
Arch 用户注意: 名为 umbriel 的 AUR 软件包只是一个占位包,并非合成器。请勿安装;合成器的软件包是 umbriel-git。
安装
以下每种方式都会安装 Umbriel、屏幕辅助工具和 umbriel-mcp,然后检查安装结果。如果你已经在运行 Umbriel,可跳过 Umbriel 安装步骤。Umbriel 命令摘自其安装页面;如有变更,请查看该页面。
Arch Linux
yay -S umbriel-git # the compositor, if needed
sudo pacman -S grim tesseract tesseract-data-eng wf-recorder # screenshots, OCR, recording
然后,将此服务作为从本仓库配方构建的 pacman 软件包安装。它会下载预构建的发布版二进制文件并检查校验和,因此无需编译:
git clone https://github.com/dot-ASH/umbriel-mcp
cd umbriel-mcp/packaging/aur-bin
makepkg -si
umbriel-mcp doctor
稍后可用 sudo pacman -R umbriel-mcp-bin 卸载。计划发布同名 AUR 软件包;发布后,本节会改为使用 yay -S umbriel-mcp-bin。
Ubuntu 26.04 及更高版本
-
如有需要,从 Noctalia APT 仓库安装 Umbriel(仅支持 amd64 和 arm64):
wget https://pkg.noctalia.dev/deb/nickh-archive-keyring.deb sudo dpkg -i nickh-archive-keyring.deb sudo wget -O /etc/apt/sources.list.d/noctalia-resolute.sources \ https://pkg.noctalia.dev/deb/noctalia-resolute.sources sudo apt update sudo apt install umbriel -
安装屏幕辅助工具:
sudo apt install grim tesseract-ocr tesseract-ocr-eng wf-recorder -
安装服务:
curl -fsSL https://raw.githubusercontent.com/dot-ASH/umbriel-mcp/main/install.sh | sh这会为你的架构下载最新发布版,根据该版本的
SHA256SUMS检查文件,将其安装到~/.local/bin/umbriel-mcp(无需sudo),并运行umbriel-mcp doctor。Ubuntu 会在该目录存在后于登录时将~/.local/bin添加到PATH,因此如果之后找不到umbriel-mcp,请注销并重新登录。如果你将较旧版本安装到了/usr/local/bin,脚本会提示你将其移除。不使用脚本手动安装
arch=$(uname -m) # x86_64 or aarch64 tag=v0.4.1 base="https://github.com/dot-ASH/umbriel-mcp/releases/download/$tag" curl -LO "$base/umbriel-mcp-$tag-$arch-linux.tar.gz" curl -LO "$base/SHA256SUMS" sha256sum --check --ignore-missing SHA256SUMS tar -xzf "umbriel-mcp-$tag-$arch-linux.tar.gz" install -Dm755 "umbriel-mcp-$tag-$arch-linux/umbriel-mcp" ~/.local/bin/umbriel-mcp -
在 Umbriel 会话中的终端里检查设置:
umbriel-mcp doctor
Debian Trixie 和 Sid
与 Ubuntu 的步骤相同,但使用 Debian 仓库源;在 Trixie 上还需使用 backports 套件:
wget https://pkg.noctalia.dev/deb/nickh-archive-keyring.deb
sudo dpkg -i nickh-archive-keyring.deb
sudo wget -O /etc/apt/sources.list.d/noctalia-trixie.sources \
https://pkg.noctalia.dev/deb/noctalia-trixie.sources # Sid: noctalia-unstable.sources
sudo apt update
sudo apt install -t trixie-backports umbriel # Sid: sudo apt install umbriel
sudo apt install grim tesseract-ocr tesseract-ocr-eng wf-recorder
然后安装服务,该步骤也会运行 umbriel-mcp doctor:
curl -fsSL https://raw.githubusercontent.com/dot-ASH/umbriel-mcp/main/install.sh | sh
Fedora
sudo dnf install umbriel-nightly # from the Terra repository
sudo dnf install grim tesseract tesseract-langpack-eng wf-recorder
然后安装服务,该步骤也会运行 umbriel-mcp doctor:
curl -fsSL https://raw.githubusercontent.com/dot-ASH/umbriel-mcp/main/install.sh | sh
其他发行版
按照 Umbriel 安装页面安装 Umbriel,
然后通过软件包管理器安装 grim、tesseract 和 Tesseract 的英语数据(eng.traineddata)。使用 curl -fsSL https://raw.githubusercontent.com/dot-ASH/umbriel-mcp/main/install.sh | sh 安装服务,或使用 Cargo 构建(需要 Rust 1.89 或更高版本,例如从 rustup 安装):
cargo install umbriel-mcp --locked
umbriel-mcp doctor 会列出在 Arch、Debian/Ubuntu 和 Fedora 上需要安装的确切软件包,并在其他发行版上提供通用指导。
更新
umbriel-mcp update # install the latest release in place
umbriel-mcp update --check # only report whether one exists
update 会下载最新版本,根据 SHA256SUMS 校验文件,确认新二进制文件能够运行且报告的版本符合预期,然后才替换旧文件,因此更新失败不会影响旧二进制文件的正常运行。之后请重启你的运行环境;正在运行的会话会继续使用旧版本。umbriel-mcp doctor 也会提示是否有新版本。后台不会检查更新。
- 如果二进制文件位于你无权写入的目录中(例如
/usr/local/bin),它会提示你运行sudo umbriel-mcp update。 - 如果它是通过软件包管理器(pacman 或 makepkg、
cargo install、Nix)安装的,它会拒绝更新,并告知你软件包管理器对应的命令,以免两者版本不一致。 - 0.3.0 之前的版本无法自行更新到已签名版本;请运行一次安装脚本以安装 0.3.0,此后即可使用
umbriel-mcp update。 - 发布版本均已签名。只有当
SHA256SUMS带有 umbriel-mcp 发布密钥的有效签名时,update和安装脚本才会接受该版本。该密钥的公钥部分内置于二进制文件和脚本中;只有通过验证后才会信任其校验和。遭到篡改或未签名的发布版本会被拒绝。即使 GitHub 账户遭到入侵,更新仍受到保护;但使用脚本首次安装不受此保护,因为脚本本身来自 GitHub。 - 0.2.3 及更早版本的发布未经签名,因此脚本和
update只会安装 0.3.0 及更高版本。
卸载
umbriel-mcp uninstall
此操作会列出将要删除的内容,并询问一次(--yes 可跳过询问):
- 在 pi、Claude Code、opencode、Cursor、VS Code 或 Zed 中注册的
umbriel服务。 Claude Code 会通过其自身的 CLI 取消注册;对于其他工具,只会从配置文件中删除umbriel条目,注释、格式和其他服务均保持不变。如果名为umbriel的条目运行的是其他程序,则会保留。 umbriel-mcp程序本身(如果它是通过安装脚本或umbriel-mcp update安装的)。如果你通过符号链接运行它,只会删除链接。如果它是通过 pacman、cargo 或 Nix 安装的,则会打印相应的卸载命令。
--keep-binary 只会取消注册。配置备份和屏幕录制会列出,但不会删除。之后请重启任何正在运行的运行环境。不会搜索单个项目中的注册项(项目的 opencode.json 或 .cursor/mcp.json);请手动删除这些条目。
要求
指针、键盘和剪贴板功能只需 Umbriel 会话正在运行,无需其他依赖。屏幕工具才需要以下外部程序:
| 工具 | 用途 | Arch | Debian/Ubuntu | Fedora |
|---|---|---|---|---|
grim | screenshot、OCR 工具 | grim | grim | grim |
tesseract | screenshot_with_ocr、find_text_on_screen、click_text | tesseract | tesseract-ocr | tesseract |
| 英语 OCR 数据 | 同上 | tesseract-data-eng | tesseract-ocr-eng | tesseract-langpack-eng |
wf-recorder | start_recording、stop_recording | wf-recorder | wf-recorder | wf-recorder |
这些工具始终会显示;如果调用所需的程序缺失,则会报错并指出要安装的软件包。
套接字通过 UMBRIEL_SOCKET 查找;如果未设置,则回退到
$XDG_RUNTIME_DIR/umbriel-$WAYLAND_DISPLAY.sock。
在你的执行环境中注册
umbriel-mcp install pi # also: claude-code, vscode, opencode, cursor
umbriel-mcp install zed # prints config to paste
umbriel-mcp install claude-code --profile no-exec
这会通过各执行环境自己的 CLI 注册服务,因此 umbriel-mcp 不会自行读取或编辑它们的配置文件:
| 执行环境 | 执行命令 |
|---|---|
| pi | 使用直接暴露和描述运行 pi mcp add |
| Claude Code | claude mcp add --scope user |
| VS Code | code --add-mcp |
| opencode | opencode mcp add |
| Cursor | 如果你的 cursor-agent 支持,则运行 cursor-agent mcp add |
| Zed | 无需执行:Zed 没有用于此操作的 CLI,因此会打印供粘贴的配置 |
如果未安装 opencode 或 Cursor 的 CLI,或者 Cursor 的 CLI 不支持 mcp add,则会打印供粘贴的配置。只有传入 --profile 时,注册时才会添加配置;因此默认配置仍为 full。
pi 注册使用直接暴露,因此模型会在工具列表中看到这些工具,并通过一次 list_windows 调用回答“工作区 4 上有什么?”,而不是搜索工具或尝试运行 hyprctl。如果你之前手动注册了 pi,请再次运行 umbriel-mcp install pi,以切换为直接暴露。Zed 代码片段保留 "args": [],因为如果缺少该项,Zed 会拒绝整个设置文件。
任何其他 MCP 客户端都可以使用纯 stdio 形式:
{
"mcpServers": {
"umbriel": { "command": "umbriel-mcp", "args": [] }
}
}
检查设置
umbriel-mcp doctor 会验证 Umbriel 套接字是否可访问,合成器是否提供虚拟指针和虚拟键盘协议,以及是否已安装 grim、tesseract、Tesseract 的英语数据和 wf-recorder。每个问题都会单独列出,并附上在 Arch、Debian/Ubuntu 和 Fedora 上修复问题的命令;其他发行版则会提供通用建议。只有在所有条件都满足时,它才会以状态码 0 退出。
配置档案
--profile 会限制服务可以执行的操作。每个配置档案中都会显示所有工具;不允许执行的调用会返回错误,并指出配置档案名称。
| 配置档案 | 允许的操作 |
|---|---|
full(默认) | 所有操作,包括 launch_app 和启动操作 |
no-exec | 除启动程序之外的所有操作:拒绝 launch_app 和任何会启动程序的 run_action |
read-only | 查询、屏幕截图、OCR 和读取剪贴板 |
no-exec 会阻止服务启动程序,但它不是沙箱。能够向已聚焦终端输入内容的 Agent 仍可通过输入工具运行命令。
工具
检查 — list_windows、list_workspaces、list_outputs、get_active_window、list_layers。窗口和显示器列表默认简洁显示:窗口包含 id、应用、标题、位置、尺寸、工作区和 has_keyboard_focus;显示器包含名称、位置、尺寸、当前模式、缩放比例和工作区。传入 detail: true 可查看 Umbriel 报告的所有字段,包括每种显示模式。
窗口和工作区控制 — switch_workspace、focus_window、close_window、kill_window、move_window_to_workspace、toggle_fullscreen、toggle_floating、resize_window、set_workspace_layout、toggle_overview、launch_app、run_action
输入 — mouse_move、mouse_click、mouse_scroll、mouse_drag、type_text、key_press。这些工具会操作你的实际鼠标和键盘,因此如果你同时使用桌面,操作会相互冲突;服务会提示 Agent 在接管前先询问。为确保输入发送到预期位置:
type_text和key_press接受window_id:如果该窗口未获得键盘焦点,就不会输入任何内容,错误信息会指出当前获得焦点的窗口。mouse_click和mouse_move接受window_id,以及以该窗口左上角为原点计算的x和y。如果窗口不在屏幕上,或坐标点位于窗口之外,操作会被拒绝。- 输入、按键或点击后,结果会说明哪个窗口获得了键盘焦点。
关于 Umbriel 本身 —
umbriel_info(版本、键盘布局、子地图、颜色和撕裂状态)、list_actions(run_action和按键绑定接受的所有操作,可筛选)、config_options(来自 Umbriel 自身架构的准确配置键、类型、默认值和允许值)、read_config(读取你的配置或其中一个部分,例如keybinds,并进行验证)。这些工具会读取已安装的umbriel命令和你的配置,因此与正在运行的版本一致。架构不包含文字说明;相关解释请参阅 Umbriel 文档。
更改设置 — set_option 和 reset_option 用于更改单项设置,例如 layout.gap 或 appearance.blur.enabled;set_keybind 和 remove_keybind 用于更改按键绑定。系统会根据 Umbriel 的架构检查键和值(类型、范围、允许值),然后使用 umbriel config validate 检查编辑后的配置。对于 window_rule 等规则列表,可使用 add_rule、replace_rule 和 remove_rule 进行编辑;这些工具接受 JSON 格式的规则,以及按 read_config 显示顺序从 1 开始计数的位置。
每项更改都必须先经你批准,之后才会写入:
- 在支持 MCP elicitation 的客户端(Claude Code 2.1.76+、VS Code、Cursor、opencode v2)中,你会看到一个显示确切更改内容的对话框,并可勾选是否保留备份。只有你批准后才会写入;模型无法回答此对话框。10 分钟内未作答则不会写入任何内容。
- 在不支持该功能的客户端(pi、opencode 1.x)中,工具不会写入任何内容,而是返回更改内容和一次性确认码。模型会被告知向你展示更改内容、询问是否保留备份,并等待你的答复后再调用
apply_config_change。这依赖模型遵循该指示,因此安全性不如对话框。所有写入工具都标记为有破坏性,因此运行环境的权限提示或扩展也可以向你确认。 - 确认码会在 10 分钟后过期,只能使用一次;如果预览后文件发生变化,确认码将被拒绝。
相同的审批步骤也会询问你是否要保留上一版配置的备份。如果你回答“是”,或没有回答此问题,备份会保存到配置文件旁边,命名为 config.toml.bak-<time>;回答“否”可避免产生备份文件。每当写入新备份时,umbriel-mcp 会保留自身最新的 5 个备份,并删除更早的备份;启动时使用 --keep-backups N 可保留更多备份(最多 1000 个)。写入更改时,仅会修改发生变化的行(保留注释和格式);符号链接配置仍会保持为符号链接,Umbriel 会立即应用更改。
配置文件仍受配置档案限制。read-only 会拒绝所有更改。no-exec 会拒绝 spawn: 按键绑定和热角操作,以及可能启动程序、加载文件或削弱安全检查的设置(general.autostart、events、environment、include、效果着色器、drm、screencast.disable_dynamic_confirmation);这些操作需要 full。始终会拒绝禁用唯一已启用输出设备的操作;更改键盘布局或 general.mod_key 时会显示警告。
录制 — start_recording 会录制一台显示器,或录制一个位于屏幕上的窗口区域,并将文件保存到 ~/Videos/umbriel-mcp/recording-<UTC time>.mp4(或你的 XDG_VIDEOS_DIR)。除非明确请求,否则不会录制音频。录制默认在 30 秒后自动停止(允许设置为 1 秒至 60 分钟);stop_recording 可提前停止录制并报告文件位置,同一时间只能进行一次录制。
如果 umbriel-mcp 退出,录制会停止并完成文件写入。录制与屏幕截图一样属于观察操作,因此所有配置档案都允许录制。wf-recorder 录制时屏幕上不会显示任何内容。
选择捕获内容 — 如果你请求截图或录制,却没有说明要捕获什么,系统会让你选择:整个屏幕(仅限截图)、某台显示器或某个窗口。录制时,系统还会询问时长,可选范围为 30 秒到 60 分钟,默认预选 30 秒;除非你已说明时长。带有对话框的客户端会在一个对话框中显示这些选项;其他客户端则由模型询问你。模型出于自身需要截取屏幕或开始录制时,不会询问,也不会等待你。
屏幕与剪贴板 — screenshot、screenshot_with_ocr、find_text_on_screen、click_text、wait_for_text、wait_for_change、clipboard_read、clipboard_write。
- 使用
window_id时,捕获和文本搜索仅涵盖该窗口,即使它位于隐藏工作区也一样,且不会切换到该窗口(需要grim1.5 或更高版本;较旧的grim只能捕获屏幕上可见的窗口)。这样就不会捕获其他窗口。 - 使用
region(屏幕坐标中的x、y、width、height)时,只会捕获该矩形区域,并保持完整分辨率,方便放大查看细节。 - 每次捕获都会注明时间;如果窗口标题自上次捕获后发生了变化,也会予以提示,这通常意味着窗口显示了不同的页面,或有其他人在使用它。
wait_for_text会等待文本出现。wait_for_change会等待窗口、显示器或区域与上次捕获相比发生变化,并在其停止变化后返回稳定的画面;如果没有变化,也会说明这一点。两者默认最多等待 10 秒(最长 30 秒),因此 Agent 可以等待页面加载,而不必靠猜测来设置休眠时间。
key_press 接受诸如 ctrl+shift+Tab、super+q、F5 或 alt+Left 这样的组合键;大写字母(ctrl+A)表示同时按下 Shift。type_text 接受任意 Unicode 文本,其中 \n 会作为 Return 键输入,\t 会作为 Tab 键输入。
run_action 接受 umbriel msg --help 中的任意操作,因此即使没有专用工具,也能使用合成器支持的全部动词。
说明
Umbriel 中的工作区隶属于某个输出设备,而非一个全局工作区池。选择器接受位置或名称,也支持可选的 /output 后缀;workspace 和 output 参数会为你构造该后缀。
默认情况下,截图会缩小到 1024px 宽,并以 JPEG 格式返回,同时附带坐标映射说明,以便从图像坐标还原屏幕坐标。OCR 则有所不同:它始终在完整分辨率的捕获图像上运行,因为在缩小后的预览图中识别文本会一无所获。因此,find_text_on_screen 和 click_text 会直接报告绝对屏幕坐标,并支持匹配 Open File 这样的多词短语。
许可证
MIT
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。