mcpField
U
ultranix-mcp

ultranix-mcp

本地服务
github.com其他16 周前更新

关于 ultranix-mcp

ultranix-mcp 是面向 Agent 和 MCP 客户端的 Rust MCP 服务,用于控制 Linux 桌面。它结合了以 Wayland 为主的输入与界面检查、多个合成器后端、备用提供方和安全控制。

主要功能

  1. 01鼠标与键盘输入
  2. 02屏幕截图、OCR 和图标查找
  3. 03无障碍界面树检查
  4. 04窗口与剪贴板管理
  5. 05屏幕录制与实时捕获
  6. 06审计日志与加密操作历史

适用场景

  1. 01自动执行 Wayland 桌面操作
  2. 02通过 OCR 或无障碍数据查找界面元素
  3. 03由 Agent 管理窗口和剪贴板
  4. 04录制或监控桌面活动

MCP 相关

通过 stdio 或可流式传输的 HTTP 向 MCP 客户端提供 Linux 桌面自动化工具。可按工具类别筛选可用能力。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"jxoesneon-ultranix": {
"command": "docker",
"args": [
"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.0"
],
"env": {
"ULTRANIX_MCP_API_KEY": "<ULTRANIX_MCP_API_KEY>",
"ULTRANIX_MCP_API_KEY_FILE": "<ULTRANIX_MCP_API_KEY_FILE>",
"ULTRANIX_MCP_API_KEY_EXPIRES": "<ULTRANIX_MCP_API_KEY_EXPIRES>",
"ULTRANIX_MCP_HISTORY_SECRET": "<ULTRANIX_MCP_HISTORY_SECRET>",
"ULTRANIX_MCP_SENTRY_DSN": "<ULTRANIX_MCP_SENTRY_DSN>",
"ULTRANIX_MCP_AUDIT_SECRET": "<ULTRANIX_MCP_AUDIT_SECRET>"
}
}
}
}
启动命令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.0
需要配置的环境变量
ULTRANIX_MCP_API_KEY密钥API key(s) (uxcp_*) for HTTP transport auth - required for --transport http (fail-closed), unused on stdio
ULTRANIX_MCP_API_KEY_FILE密钥Path to a 0600 file holding uxcp_* keys, one per line
ULTRANIX_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+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
ocighcr.io/jxoesneon/ultranix-mcp:1.4.0

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

ultranix-mcp

Version License: ISC Platform Rust MCP SDK Status

**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(ort crate)和 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 的 hyprctl IPC 套接字(hyprctl -j JSON: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(atspi crate)完整访问无障碍树:转储 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
UIAutomationProviderUI 树、焦点元素、元素搜索通过 atspi 使用 AT-SPI2
WindowProvider窗口列表/焦点/移动/关闭hyprctl IPC 套接字(相较 ultrawin 为新增)
VisionProviderOCR、图标查找ort(ONNX Runtime;CPU、OpenVINO、CUDA、ROCm EP)
BrowserProviderWeb 查询、DOM 访问127.0.0.1:9222 上的 CDP 桥接
OverlayProviderscreen_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,然后将每个提供程序绑定到可用的最佳后端:

  1. wlroots 原生——进程内 Wayland 协议(Hyprland、sway、 Wayfire、river 以及大多数未知的 wlroots 合成器;无需 root)
  2. grim/slurp(捕获)+ uinput/evdev(输入)——白名单 辅助二进制程序和内核级输入,适用于非 wlroots 会话
  3. 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&lt;Arc&lt;dyn Trait&gt;&gt;"
        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-mcphyprusePeekaboo基于 xdotool 的 MCP 服务特定桌面环境方案(GNOME/KDE)
Linux 原生自动化(鼠标/键盘/窗口)优先支持 Wayland(仅限 Hyprland)-(仅限 macOS)仅限 X11单一桌面环境
合成器协议输入(无需 root)wlr virtual-pointer + virtual-keyboardwlr protocols不适用-部分支持(portal RemoteDesktop)
平稳的后端回退(native -> uinput -> portal)-(仅限 Hyprland,无 uinput/portal 层级)---
通过合成器 IPC 管理窗口hyprctl - sway IPC - Wayfire IPC - riverctl - GNOME Window Calls - kdotoolhyprctl部分支持(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 上的窗口工具)

步骤:

  1. 克隆仓库:

    git clone https://github.com/jxoesneon/ultranix-mcp.git
    cd ultranix-mcp
    
  2. 构建项目:

    cargo build --release
    
  3. 启动服务:

    # 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
    
  4. 运行测试(模拟提供程序——无需 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_LEVELtracing 日志详细程度(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 会选择满足要求且权限最低的后端:

  1. 原生 wlroots(Hyprland)- zwlr_virtual_pointer_v1、 virtual-keyboard-unstable-v1 和 wlr-screencopy-unstable-v1 会向 普通客户端开放。无需 root、无需 udev 规则、无需征求同意 对话框。
  2. uinput/evdev- 需要通过打包的 udev 规则获得对 /dev/uinput 的写入权限(GROUP="ultranix-input"——专用组中 仅包含服务用户;绝不能使用权限过于宽泛的 input 组,该组会授予对所有 evdev 节点的读取权限,足以实施键盘记录)。设置为自选操作,文档见 packaging/README-uinput.md。
  3. 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 作者。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。