关于 ultranix-mcp
ultranix-mcp 是面向 Agent 和 MCP 客户端的 Rust MCP 服务,用于控制 Linux 桌面。它结合了以 Wayland 为主的输入与界面检查、多个合成器后端、备用提供方和安全控制。
主要功能
- 01鼠标与键盘输入
- 02屏幕截图、OCR 和图标查找
- 03无障碍界面树检查
- 04窗口与剪贴板管理
- 05屏幕录制与实时捕获
- 06审计日志与加密操作历史
适用场景
- 01自动执行 Wayland 桌面操作
- 02通过 OCR 或无障碍数据查找界面元素
- 03由 Agent 管理窗口和剪贴板
- 04录制或监控桌面活动
MCP 相关
通过 stdio 或可流式传输的 HTTP 向 MCP 客户端提供 Linux 桌面自动化工具。可按工具类别筛选可用能力。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
docker run -i --rm -e ULTRANIX_MCP_API_KEY -e ULTRANIX_MCP_API_KEY_FILE -e ULTRANIX_MCP_API_KEY_EXPIRES -e ULTRANIX_MCP_HISTORY_SECRET -e ULTRANIX_MCP_SENTRY_DSN -e ULTRANIX_MCP_AUDIT_SECRET ghcr.io/jxoesneon/ultranix-mcp:1.4.0ULTRANIX_MCP_API_KEY密钥API key(s) (uxcp_*) for HTTP transport auth - required for --transport http (fail-closed), unused on stdioULTRANIX_MCP_API_KEY_FILE密钥Path to a 0600 file holding uxcp_* keys, one per lineULTRANIX_MCP_API_KEY_EXPIRES密钥Optional RFC 3339 expiry for the env-sourced key (self-revoking)ULTRANIX_MCP_HISTORY_SECRET密钥AES-256-GCM secret for encrypted action history (per-install generated if unset)ULTRANIX_MCP_SENTRY_DSN密钥Optional Sentry DSN for error reporting (unset = disabled)ULTRANIX_MCP_AUDIT_SECRET密钥Optional HMAC-SHA256 signing secret for audit.jsonl lines (tamper evidence for SIEM ingestion)本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。
ghcr.io/jxoesneon/ultranix-mcp:1.4.0stdio工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
ultranix-mcp
**ultranix-mcp 是面向 AI Agent 的企业级安全 Linux 桌面自动化层。**它让 Model Context Protocol(MCP)客户端——Claude Desktop、Claude Code、Cursor、Windsurf 以及任何支持 MCP 的助手——能够查看、点击、输入并操控 Wayland 桌面:鼠标、键盘、屏幕截图、OCR、图标查找、窗口管理以及无障碍树检查。
ultranix-mcp 从设计上就原生支持 Wayland:优先使用合成器协议,其次使用 uinput/evdev,最后使用 XDG Desktop Portals;并且与其同系列项目(macOS 上的 ultramac、Windows 上的 ultrawin)共享相同的治理与信任保障:审计日志、速率限制、输入净化以及采用 AES-256-GCM 加密的操作历史记录。它是首个兼具跨合成器回退机制、完整治理保障和三操作系统同系列契约的 Linux 桌面 MCP——组织可以让 Agent 控制 Linux 桌面,同时不必放弃自身的控制权。
**状态:**v1.4.0 已实现。ROADMAP.md 中的阶段 0–5 均已发布,此外还包括 v1.1.0 系列功能(layer-shell 覆盖层、X11 原生提供方、PipeWire 门户捕获、选择启用 Sentry、OCR 缓存、更多指标)、v1.2.0 扩展功能(剪贴板工具、插件工具宏、
screen_record、sway/Wayfire/river/KDE/GNOME 会话检测、按后端划分的 cargo 功能、带帧的历史记录 v2)、v1.3.0 策略功能(运行时访问控制策略及按键角色、--readonly/--allow-tools/--deny-tools、按后端划分的调用指标、可选的 HMAC 签名审计行),以及 v1.4.0 覆盖范围扩展功能(Wayfire/river/GNOME 窗口回退层级、实时screen_stream捕获、插件公开的动态工具、OCI 镜像和-bin软件包)——各版本说明请参阅 CHANGELOG.md。经验证的目标环境为 CachyOS(Arch)+ Wayland 上的 Hyprland、PipeWire、xdg-desktop-portal-hyprland,并运行 AT-SPI2 总线;Rust 版本为 1.98.1。
功能
- 精准鼠标控制——通过
zwlr_virtual_pointer_v1协议实现点击、双击、拖动、滚动、按钮状态控制、位置查询和平滑路径移动。无需 root 权限或辅助守护进程。 - 高级键盘输入——通过
virtual-keyboard-unstable-v1输入文本并控制按键状态,完整支持修饰键和键位映射。 - 智能视觉——进程内通过
wlr-screencopy-unstable-v1捕获屏幕,使用 ONNX Runtime OCR(ortcrate)和 OWL-ViT 查找图标。支持区域截图、颜色采样(color_at)和会话空间焦点(set_spatial_focus限定screenshot/find_text_on_screen/find_icon的作用范围),并通过zwlr_layer_shell_v1实现真正的screen_highlight覆盖层(半透明、点击穿透;不支持 layer-shell 的合成器/会话会返回-32010 ProviderUnavailable——参见 docs/TOOLS.md)。 - 窗口管理——通过 Hyprland 的
hyprctlIPC 套接字(hyprctl -jJSON:clients、activewindow、dispatch、workspaces)、sway 在$SWAYSOCK上的专有 IPC 协议、Wayfire 在$WAYFIRE_SOCKET上的ipc/ipc-rules插件、river 上固定的riverctl子进程与 wlroots foreign-toplevel 组合实现窗口列表、聚焦、移动、调整大小、关闭和检查(riverctl保留对聚焦视图执行close及相对move/resize偏移量的功能;toplevel 协议提供枚举以及针对每个窗口的focus/close/min/max/fullscreen操作);还可使用作为共享 wlroots 回退层、也是未知 wlroots 会话唯一层级的wlr-toplevel、KDE 上的kdotool、GNOME 上的 “Window Calls” Shell 扩展(若已安装),或 X11 会话上的wmctrl。 - UI 检查——通过 AT-SPI2(
atspicrate)完整访问无障碍树:转储 UI 树、查询聚焦元素、搜索元素,以及等待元素并同步。 - 剪贴板与插件——通过
wl-clipboard(Wayland)或xclip/xsel(X11)执行clipboard_get/clipboard_set/clipboard_clear,写入操作需经过同意授权;还提供声明式插件工具宏——~/.ultranix-mcp/plugins/*.json清单中的目录工具步骤通过plugin_list/plugin_run/plugin_reload运行,每个步骤都会重新进入安全分发流程。清单中的tool部分(v1.4.0)会将插件注册为一流的tools/list条目,并生成inputSchema,通过相同的安全plugin_run流程进行分发。 - 屏幕录制与实时捕获——
screen_record按interval_ms捕获帧,持续最长duration_ms,并保存到新建的rec-<ulid>目录及其中的manifest.json(硬性上限:600 帧、512 MiB);screen_stream(v1.4.0)在stream-<ulid>下运行连续的start/status/latest/stop滚动窗口捕获(≤1800 帧、≤512 MiB,超限时淘汰最旧内容),其中latest返回最新帧,图像格式与screenshot相同。使用since/wait_ms可将其设为长轮询(最多等待 30 秒,以获取比水位标记更新的帧),而非忙轮询。 - 企业级安全——HTTP 上使用
uxcp_*API 密钥身份验证、每秒 10 个请求的令牌桶、输入清理、命令/路径白名单、AES-256-GCM 加密的操作历史记录,以及 JSONL 审计日志。参见 SECURITY.md。
架构
ultranix-mcp 是一个在 tokio 运行时上运行的 Rust 2024 单一二进制程序,基于
rmcp 构建——这是官方的
Model Context Protocol Rust SDK——并原生支持 stdio和streamable-HTTP
(:3010)传输方式。
桌面自动化层采用依赖注入下的提供程序 trait组织
(这一模式已在 ultrawin 的 src/traits.rs 中得到验证):
每项能力都是一个 Option<Arc<dyn Trait>>,因此缺失的合成器
功能、缺少的门户或无头 CI 环境都能优雅降级,而不会直接失败。
模拟提供程序实现相同的 trait,因此无需 Wayland 会话也能测试完整的
工具接口。
| 提供程序 trait | 职责 | 主要后端 |
|---|---|---|
CaptureProvider | 屏幕截图、区域捕获、屏幕信息 | wlr-screencopy-unstable-v1(进程内) |
InputProvider | 指针、滚动、键盘事件 | zwlr_virtual_pointer_v1 + virtual-keyboard-unstable-v1 |
UIAutomationProvider | UI 树、焦点元素、元素搜索 | 通过 atspi 使用 AT-SPI2 |
WindowProvider | 窗口列表/焦点/移动/关闭 | hyprctl IPC 套接字(相较 ultrawin 为新增) |
VisionProvider | OCR、图标查找 | ort(ONNX Runtime;CPU、OpenVINO、CUDA、ROCm EP) |
BrowserProvider | Web 查询、DOM 访问 | 127.0.0.1:9222 上的 CDP 桥接 |
OverlayProvider | screen_highlight 叠加层 | zwlr_layer_shell_v1(仅限 Wayland) |
ClipboardProvider | 剪贴板读写 | wl-copy/wl-paste(Wayland)、xclip/xsel(X11/XWayland) |
**后端优先级阶梯。**启动时,服务会通过 XDG_CURRENT_DESKTOP 和合成器特征
(HYPRLAND_INSTANCE_SIGNATURE、SWAYSOCK、WAYFIRE_SOCKET、
KDE_SESSION_VERSION 等)检测会话,判断其使用 Hyprland、sway、Wayfire、river、KDE、
GNOME 或 Other,然后将每个提供程序绑定到可用的最佳后端:
- wlroots 原生——进程内 Wayland 协议(Hyprland、sway、 Wayfire、river 以及大多数未知的 wlroots 合成器;无需 root)
grim/slurp(捕获)+uinput/evdev(输入)——白名单 辅助二进制程序和内核级输入,适用于非 wlroots 会话- XDG Desktop Portal——通过
zbus使用Screenshot和RemoteDesktop(通用回退方案,需获得门户授权;KDE/GNOME Wayland 上的唯一途径,因为它们 均未实现 wlr-screencopy 或 wlr 虚拟输入协议)
窗口管理使用可用的合成器 IPC:Hyprland 上使用 hyprctl,sway 上使用
sway 的 i3 风格 IPC($SWAYSOCK,v1.2.0 发布);Wayfire 上使用 Wayfire 的
ipc/ipc-rules 插件($WAYFIRE_SOCKET,v1.4.0);river 上使用
riverctl + zwlr_foreign_toplevel_manager_v1
(riverctl 用于关闭焦点视图以及按相对增量
移动/调整大小;foreign-toplevel 会枚举窗口,并将其标识为
wlr-toplevel-N,以便执行 focus/close/min/max/fullscreen);未知 wlroots 会话
(niri、labwc 等)上使用 wlr-toplevel 作为共享的 wlroots 回退层——这是此类会话中
唯一的窗口管理层;KDE 上使用 kdotool(KWin
脚本,可用于 Wayland 和 X11);GNOME 上通过 D-Bus 使用 “Window Calls” Shell 扩展
(v1.4.0,需要安装该扩展——特意不使用 org.gnome.Shell.Eval);其他 X11 会话上使用
wmctrl。
在 X11 会话中,v1.1.0 发布的 X11 原生层会改为处理相应功能:
使用 scrot 捕获屏幕,使用 xdotool 输入(两者的优先级仍高于门户/uinput),并在
非 Hyprland X11 会话中使用 wmctrl 管理窗口。
graph TB
subgraph "Client Layer"
AI[AI Assistant / Agent]
MCP[MCP Client]
end
subgraph "Transport Layer"
STDIO[STDIO<br/>never requires auth]
HTTP[Streamable HTTP :3010<br/>uxcp_* API key]
end
subgraph "Security Layer"
AUTH[API Key Auth]
RATE[Rate Limiter<br/>10 req/s token bucket]
SAN[Input Sanitization<br/>command + path whitelists]
end
subgraph "Core (rmcp + tokio)"
SERVER[ultranix-mcp server]
TOOLS[40 tools - 6 categories]
end
subgraph "Providers - Option<Arc<dyn Trait>>"
CAP[CaptureProvider]
INP[InputProvider]
UIA[UIAutomationProvider]
WIN[WindowProvider]
VIS[VisionProvider]
BRW[BrowserProvider]
CLIP[ClipboardProvider]
end
subgraph "Backends - priority order"
WLR[wlroots-native<br/>screencopy - virtual-pointer - virtual-keyboard]
UIN[uinput / evdev]
PORTAL[XDG Desktop Portal<br/>zbus]
HYPR[hyprctl IPC]
SWAY[sway IPC - SWAYSOCK]
WF[Wayfire IPC - WAYFIRE_SOCKET]
RIV[riverctl + foreign-toplevel - river composite]
WTOP[wlr-foreign-toplevel - shared wlroots rung]
GS[gnome-shell - Window Calls ext]
KDOT[kdotool - KDE]
ATSPI[AT-SPI2 bus]
ORT[ONNX Runtime - ort]
CDP[CDP 127.0.0.1:9222]
WLC[wl-clipboard - xclip/xsel]
end
AI --> MCP
MCP --> STDIO
MCP --> HTTP
STDIO --> SERVER
HTTP --> AUTH --> RATE --> SAN --> SERVER
SERVER --> TOOLS
TOOLS --> CAP
TOOLS --> INP
TOOLS --> UIA
TOOLS --> WIN
TOOLS --> VIS
TOOLS --> BRW
TOOLS --> CLIP
CAP --> WLR
INP --> WLR --> UIN --> PORTAL
WIN --> HYPR
WIN --> SWAY
WIN --> WF
WIN --> RIV
WIN --> GS
WIN --> KDOT
UIA --> ATSPI
VIS --> ORT
BRW --> CDP
CLIP --> WLC
**Token 效率。**工具定义会占用上下文窗口。ultranix-mcp
支持使用 --category= 过滤,只暴露所需的工具:
# Serve only mouse + keyboard tools
# (`--stdio` is an alias for `--transport stdio`)
ultranix-mcp --transport stdio --category=mouse,keyboard
类别:mouse、keyboard、vision(捕获/OCR/UI 树/录制)、
automation(杂项)、admin(窗口/历史记录/指标/插件)、clipboard。
默认:全部。
为什么选择 ultranix-mcp?
| 能力 | ultranix-mcp | hypruse | Peekaboo | 基于 xdotool 的 MCP 服务 | 特定桌面环境方案(GNOME/KDE) |
|---|---|---|---|---|---|
| Linux 原生自动化(鼠标/键盘/窗口) | 优先支持 Wayland | (仅限 Hyprland) | -(仅限 macOS) | 仅限 X11 | 单一桌面环境 |
| 合成器协议输入(无需 root) | wlr virtual-pointer + virtual-keyboard | wlr protocols | 不适用 | - | 部分支持(portal RemoteDesktop) |
| 平稳的后端回退(native -> uinput -> portal) | -(仅限 Hyprland,无 uinput/portal 层级) | - | - | - | |
| 通过合成器 IPC 管理窗口 | hyprctl - sway IPC - Wayfire IPC - riverctl - GNOME Window Calls - kdotool | hyprctl | 部分支持(wmctrl) | 部分支持(KWin 脚本 / Shell) | |
| 辅助功能树 | AT-SPI2 | 通过 busctl 使用 AT-SPI(包括 click_ui) | macOS AX | - | 部分支持 |
| OCR + 视觉 / 图标查找(本地 ONNX) | 部分支持 | 部分支持 | - | - | |
| 审计日志(JSONL) | - | - | - | - | |
| 速率限制 | - | - | - | - | |
| 输入清理 / 路径白名单 | - | - | - | - | |
| AES-256-GCM 加密的操作历史记录 | - | - | - | - | |
| API 密钥身份验证 | - | - | - | - | |
| 单个静态二进制文件 | -(Python/uvx) | - | - | - | |
| 开源 | (ISC) | 因项目而异 | 因项目而异 | ||
| *跨合成器回退阶梯、完整治理能力以及三操作系统 | |||||
| 同级项目契约*的 Linux 桌面 MCP。hypruse是最接近的现有方案——通过相同的合成器协议原生控制 | |||||
| Wayland 上的 Hyprland——但它不提供治理能力、回退阶梯或同级项目契约。需要治理、可信度和会话可移植性时,请选择 ultranix-mcp。 |
安装
选项 1:AUR(已提供打包文件,等待提交)
面向 Arch 系的 PKGBUILD(ultranix-mcp、ultranix-mcp-git 和
预编译二进制版本 ultranix-mcp-bin)已放在
packaging/ 中——AUR 提交进度可在
ROADMAP.md 中跟踪。crate
发布后即可使用 cargo install ultranix-mcp 安装;关于构建时
ort 网络获取的注意事项,请参阅 docs/PACKAGING.md 第 2 节。
选项 1b:OCI 镜像(v1.4.0)
每次创建 v* 标签时,.github/workflows/oci.yml 都会发布
ghcr.io/jxoesneon/ultranix-mcp——该镜像面向无头环境/CI 使用(挂载
$XDG_RUNTIME_DIR、会话总线和 /dev/uinput,以访问真实
提供程序;请参阅 docs/HEADLESS.md)。
选项 2:从源代码构建
前提条件:
- 使用 Wayland 会话的 Linux——已在 CachyOS (Arch) + Hyprland 上验证
- Rust 1.98+(2024 版;已在 1.98.1 上验证)
- 运行时使用的会话工具:
hyprctl、grim、slurp - 可选:
xdg-desktop-portal-hyprland(门户回退路径)、AT-SPI2 无障碍总线(UI 检查)、带有--remote-debugging-port=9222的 Chromium/Chrome(浏览器工具)、wl-clipboard(Wayland 上的剪贴板工具:wl-copy/wl-paste)、xclip+xsel(X11/XWayland 上的剪贴板工具)、kdotool(KDE 上的窗口工具)、riverctl(river 聚焦视图几何信息;若有通告,则通过 wlroots foreign-toplevel 获取窗口枚举和单窗口控制)、GNOME "Window Calls" Shell 扩展(GNOME 上的窗口工具)
步骤:
-
克隆仓库:
git clone https://github.com/jxoesneon/ultranix-mcp.git cd ultranix-mcp -
构建项目:
cargo build --release -
启动服务:
# Stdio 传输(推荐用于本地 MCP 客户端) # (`--stdio` 可作为 `--transport stdio` 的别名) ./target/release/ultranix-mcp --transport stdio # 在 :3010 上使用 Streamable HTTP 传输(需要 ULTRANIX_MCP_API_KEY) ./target/release/ultranix-mcp --transport http --bind 127.0.0.1:3010 # 筛选部分工具类别(减少上下文开销) ./target/release/ultranix-mcp --transport stdio --category=mouse,keyboard -
运行测试(模拟提供程序——无需 Wayland 会话):
cargo test
**Cargo 功能(v1.2.0)。**每组后端都是一个功能,默认全部启用,因此 cargo install 的行为不变:
| 功能 | 默认 | 控制内容 |
|---|---|---|
wayland | 开启 | 原生 Wayland 提供程序:wlr-screencopy 捕获、virtual-pointer/keyboard 输入、layer-shell 覆盖层 |
uinput | 开启 | /dev/uinput evdev 回退输入提供程序 |
a11y | 开启 | AT-SPI2 UI 自动化 + D-Bus 门户提供程序 |
pipewire | 开启 | 门户捕获路径中的 PipeWire 流消费(需要 a11y) |
vision | 开启 | ONNX 视觉后端(ort + 模型获取 + 分词器 + 结果缓存) |
browser | 开启 | CDP 浏览器桥接 |
sentry | 开启 | 可选的 Sentry 错误报告(ULTRANIX_MCP_SENTRY_DSN) |
vision-cuda | 关闭 | CUDA 执行提供程序(隐含 ort/load-dynamic;将 ORT_DYLIB_PATH 指向匹配的 ONNX Runtime 构建) |
vision-openvino | 关闭 | OpenVINO 执行提供程序(同样需注意 load-dynamic) |
vision-rocm | 关闭 | ROCm 执行提供程序(同样需注意 load-dynamic) |
选项 3:Nix flake(未经验证)
仓库根目录提供了 flake.nix:nix build 会生成软件包,nix develop 会进入包含 Rust 工具链和原生依赖项的 devShell(pipewire、libxkbcommon、用于 bindgen 的 libclang、会话辅助二进制文件),nix run 会启动服务。**注意:**该 flake 是经审查后编写的,尚未在我们的工具链中评估——请将其视为未经验证;欢迎提交修复和验证结果。
MCP 客户端配置
将 MCP 客户端指向通过 stdio 运行的二进制文件。Claude
Desktop / Cursor 的示例(claude_desktop_config.json / mcp.json):
{
"mcpServers": {
"ultranix": {
"command": "ultranix-mcp",
"args": ["--transport=stdio"]
}
}
}
(--stdio 可作为 --transport stdio 的简写别名。)
节省令牌的变体——仅公开 mouse、keyboard 和 vision 类别:
{
"mcpServers": {
"ultranix": {
"command": "ultranix-mcp",
"args": ["--transport=stdio", "--category=mouse,keyboard,vision"]
}
}
}
配置
ultranix-mcp 开箱即用,支持通过 stdio 使用(无需身份验证)。HTTP 传输和生产环境支持以下变量:
| 变量 | 用途 | 默认值 | 生产环境必需 |
|---|---|---|---|
ULTRANIX_MCP_API_KEY | 用于 HTTP 客户端身份验证的 API 密钥(uxcp_*;规范形式为 X-API-Key 标头,也接受 Authorization: Bearer)。**默认拒绝:**未设置时,HTTP 传输会拒绝经过身份验证的请求,不会生成开发密钥。 | 未设置 — HTTP 默认拒绝请求 | 是(HTTP) |
ULTRANIX_MCP_API_KEY_FILE | 存放 API 密钥的文件路径(优先于内联环境变量,避免密钥出现在进程环境中)。 | 无 | 否 |
ULTRANIX_MCP_API_KEY_EXPIRES | 可选的密钥过期元数据:以逗号分隔的 RFC 3339 时间列表,按位置与 ULTRANIX_MCP_API_KEY 对应(密钥文件使用每行末尾的 expires= 后缀)。过期密钥仍会加载,但身份验证会失败,并生成独立的 auth.expired_key 审计事件。 | 无 — 密钥永不过期 | 否 |
ULTRANIX_MCP_HISTORY_SECRET | 用于加密 history.json 的 AES-256-GCM 密钥。 | 每次安装时在 ~/.ultranix-mcp/ 下生成(模式为 0700);开发环境回退方案会发出醒目警告 | 否 |
ULTRANIX_MCP_DISABLE_AUTH | 应急选项:禁用 HTTP 身份验证(仅限开发环境;stdio 始终无需身份验证)。 | false | 否 |
ULTRANIX_MCP_LOG_LEVEL | tracing 日志详细程度(error、warn、info、debug、trace)。 | info | 否 |
ULTRANIX_MCP_BIND | 流式 HTTP 服务的绑定地址(等同于 --bind 标志)。 | 127.0.0.1:3010 | 否 |
ULTRANIX_MCP_SENTRY_DSN | 用于 Sentry 错误跟踪的 DSN — 可选启用;仅当 DSN 解析成功时才会附加 sentry-tracing 层(未设置、为空或格式错误时均禁用;格式错误时会发出警告)。 | 未设置 — 已禁用 | 否 |
**密钥目录回退方案。**如果既未设置 ULTRANIX_MCP_API_KEY,也未设置
ULTRANIX_MCP_API_KEY_FILE,服务端会扫描
~/.ultranix-mcp/api-keys/*.json — 每个密钥对应一个密钥记录文件(JSON
记录或行格式,并强制将每个文件的模式设为 0600)— 完整的来源优先级规则请参阅
docs/API_KEY_MANAGEMENT.md §3。
**数据目录。**运行时状态存储在 ~/.ultranix-mcp/ 下:
| 路径 | 内容 |
|---|---|
~/.ultranix-mcp/logs/ | JSONL 审计日志 — 记录每次工具调用(key_id、args_hash — 绝不记录原始参数 — 持续时间、结果),通过 prev_hash 链接,保留 30 天并轮换 |
~/.ultranix-mcp/history.json | 操作历史记录,静态存储时使用 AES-256-GCM 加密 |
会话要求与安全性
Wayland 自动化使用合成器能力取代 macOS 风格的权限提示。ultranix-mcp 会选择满足要求且权限最低的后端:
- 原生 wlroots(Hyprland)-
zwlr_virtual_pointer_v1、virtual-keyboard-unstable-v1和wlr-screencopy-unstable-v1会向 普通客户端开放。无需 root、无需 udev 规则、无需征求同意 对话框。 - uinput/evdev- 需要通过打包的 udev 规则获得对
/dev/uinput的写入权限(GROUP="ultranix-input"——专用组中 仅包含服务用户;绝不能使用权限过于宽泛的input组,该组会授予对所有 evdev 节点的读取权限,足以实施键盘记录)。设置为自选操作,文档见 packaging/README-uinput.md。 - XDG Desktop Portal- 通过
zbus使用Screenshot/RemoteDesktop;portal 会通过xdg-desktop-portal-hyprland调解每个应用的同意对话框。
**安全提示:**ultranix-mcp 内置了防注入攻击的保护措施——受参数约束且固定为绝对路径的命令 白名单(
grim、slurp、scrot、hyprctl,但不包括dispatch exec/exec-once;仅限 X11 会话中的xdotool/wmctrl)、路径 白名单($XDG_RUNTIME_DIR、/tmp、~/.ultranix-mcp/**)、严格的输入 验证、速率限制、HTTP 上默认拒绝的 API 密钥身份验证、破坏性工具的同意 门控(-32015 ConsentRequired-> 使用consent_token重试;--allow-destructive可绕过),以及加密的操作 历史记录。请阅读完整的 SECURITY.md 和威胁模型。
工具参考
概要索引——docs/TOOLS.md 是规范的工具 目录(包含完整架构、各工具错误和同意语义)。
鼠标(--category=mouse)
mouse_click、mouse_double_click、mouse_move、mouse_get_position、
mouse_scroll、mouse_drag、mouse_button_control
键盘(--category=keyboard)
type_text、key_control
视觉(--category=vision)
screenshot、screen_info、screen_highlight、color_at、
set_spatial_focus、get_ui_tree、get_focused_element、find_element、
find_text_on_screen、find_icon、wait_for_ui_element、invoke_element、
screen_record、screen_stream
自动化(--category=automation)
sleep、mouse_move_path、system_command、web_query
管理(--category=admin)
window_control、get_windows、get_active_window、metrics、
get_action_history、replay_action、clear_action_history、
plugin_list、plugin_run、plugin_reload
剪贴板(--category=clipboard)
clipboard_get、clipboard_set、clipboard_clear
路线图
交付计划见 ROADMAP.md——截至 v1.0.0,阶段 0-5 的全部内容
(脚手架 -> Hyprland I/O -> AT-SPI2 -> 视觉/CDP -> 企业功能 ->
可移植性/打包)均已交付;v1.1.0 版本新增了 layer-shell
screen_highlight 覆盖层、原生 X11 提供程序、PipeWire
portal 捕获、可选的 Sentry、OCR 结果缓存以及另外四项
Prometheus 指标;v1.2.0 版本新增了剪贴板工具、插件
工具宏、有界 screen_record、带 sway 窗口提供程序的
sway/Wayfire/river/KDE/GNOME 会话检测、各后端的 cargo 功能,以及带帧的 v2 操作历史格式;v1.3.0 版本新增了运行时
策略层(TOML 角色、按键作用域、--readonly 和工具
允许/拒绝标志)、各后端调用指标以及可选的
HMAC 签名审计记录;v1.4.0 版本补齐了窗口提供程序
覆盖范围(Wayfire IPC、river riverctl、GNOME Window Calls),交付了实时 screen_stream 滚动捕获和由插件公开的动态工具,
并新增了 OCI 镜像和 ultranix-mcp-bin 分发构件——
发行说明见 CHANGELOG.md。
文档
设计和治理文档位于 docs/ 中,其中包括 docs/adr/ 下的架构决策记录。开发工作流请从
CONTRIBUTING.md 开始。
贡献
欢迎贡献!请阅读 CONTRIBUTING.md,了解 mock-provider 测试模式、ADR 流程和拉取请求规范;阅读 CODE_OF_CONDUCT.md,了解社区行为准则。
许可证
本项目采用 ISC License 许可。
© 2026 ultranix-mcp 作者。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。