시맨틱 접근성 트리, 윈도우 타겟팅, 입력 합성 기술을 사용하여 AI agent가 Linux 데스크톱을 구조적으로 제어할 수 있도록 지원합니다.
다른 이름 agent-sh/computer-use-linux, @agent-sh/computer-use-linux
- 스타
- 871
- Tools
- 3
- 다운로드, 30일
- 11,606
- 최신 버전
- —
- 마지막 커밋
- 2026년 11월 13일
- 라이선스
- MIT
computer-use-linux MCP란?
computer-use-linux은(는) MCP server입니다. 시맨틱 접근성 트리, 윈도우 타겟팅, 입력 합성 기술을 사용하여 AI agent가 Linux 데스크톱을 구조적으로 제어할 수 있도록 지원합니다. 3개 도구를 제공합니다. 예: screenshot_after, screenshot_file_path, include_tree.
프로젝트 README에서 생성된 요약
computer-use-linux MCP server 정보
이 MCP server는 시맨틱 접근성 트리와 컴포지터 인식 윈도우 타겟팅을 통해 AI agent에게 Linux 데스크톱에 대한 구조적인 제어 권한을 부여합니다. Agent가 입력 합성 및 윈도우 관리 도구를 사용하여 GNOME, KDE Plasma, Hyprland, Sway와 같은 환경과 상호작용할 수 있는 방법을 제공합니다. 단순한 OCR이나 X11 전용 드라이버에 의존하는 기존 데스크톱 제어 server와 달리, 이 server는 wlr-layer-shell 및 /dev/uinput과 같은 프로토콜을 통해 Wayland를 지원합니다.
개발자는 Claude Code, Codex CLI, Pi Coding Agent, Hermes Agent를 포함한 다양한 클라이언트에 이를 통합할 수 있습니다. 이 server는 윈도우 목록 조회, 제한된 영역 스크린샷 촬영, 특정 UI 요소 클릭 또는 값 설정과 같은 시맨틱 동작을 수행하는 도구를 제공합니다. 또한 시스템 준비 상태를 검증하는 진단 doctor 도구와 접근성 브리지 또는 윈도우 타겟팅 확장을 활성화하는 설정 명령어를 포함합니다. 이를 통해 agent는 단순히 픽셀 좌표에 의존하는 대신 테스트 스위트가 실행 중인 터미널과 같은 특정 프로세스를 정확히 타겟팅할 수 있습니다.
활용 사례
- 1데스크톱 애플리케이션 워크플로 자동화Agent가 단순히 픽셀을 클릭하는 대신 role이나 name과 같은 시맨틱 셀렉터를 사용하여 소프트웨어와 상호작용할 수 있습니다.
- 2여러 개의 열린 윈도우 관리개발자가 AI에게 특정 애플리케이션이나 터미널 윈도우를 찾아 포커스하도록 작업할 수 있습니다.
- 3시스템 호환성 검증사용자는 명령어 하나로 자신의 Linux 설정이 AI 제어를 위한 준비가 되었는지 확인할 수 있습니다.
- 4정밀한 텍스트 입력 수행Agent가 Wayland 및 X11과 호환되는 다양한 입력 방식을 사용하여 특정 윈도우나 터미널에 텍스트를 입력할 수 있습니다.
프로젝트의 README를 바탕으로 작성되었습니다. 모든 활용 사례는 해당 내용의 인용문과 대조하여 확인합니다.
computer-use-linux MCP 설치 방법
형식 확인: 2026년 11월 10일Cursor에 추가Goose에 추가Claude Code에 computer-use-linux MCP 설치
$ claude mcp add computer-use-linux -- npx -y @agent-sh/computer-use-linuxCursor에 computer-use-linux MCP 설치
~/.cursor/mcp.json
{
"mcpServers": {
"computer-use-linux": {
"command": "npx",
"args": [
"-y",
"@agent-sh/computer-use-linux"
]
}
}
}VS Code에 computer-use-linux MCP 설치
.vscode/mcp.json
{
"servers": {
"computer-use-linux": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"@agent-sh/computer-use-linux"
]
}
}
}VS Code CLI에 computer-use-linux MCP 설치
$ code --add-mcp '{"name":"computer-use-linux","type":"stdio","command":"npx","args":["-y","@agent-sh/computer-use-linux"]}'Claude Desktop에 computer-use-linux MCP 설치
claude_desktop_config.json
{
"mcpServers": {
"computer-use-linux": {
"command": "npx",
"args": [
"-y",
"@agent-sh/computer-use-linux"
]
}
}
}Codex에 computer-use-linux MCP 설치
$ codex mcp add computer-use-linux -- npx -y @agent-sh/computer-use-linuxCodex config.toml에 computer-use-linux MCP 설치
~/.codex/config.toml
[mcp_servers.computer-use-linux] command = "npx" args = ["-y", "@agent-sh/computer-use-linux"]
Gemini CLI에 computer-use-linux MCP 설치
$ gemini mcp add -s user computer-use-linux npx -- -y @agent-sh/computer-use-linuxGemini settings.json에 computer-use-linux MCP 설치
~/.gemini/settings.json
{
"mcpServers": {
"computer-use-linux": {
"command": "npx",
"args": [
"-y",
"@agent-sh/computer-use-linux"
]
}
}
}computer-use-linux MCP 도구 3
README에서 감지됨screenshot_afterscreenshot_file_pathinclude_tree
| screenshot_after | — | |
| screenshot_file_path | — | |
| include_tree | — |
자동 검사
2026년 11월 12일에 실행됨전체 보고서 →자동 검사를 통과했습니다. 이는 보안 감사가 아닙니다. 코드를 직접 읽고 서버에 필요한 최소한의 권한만 부여하십시오. 검사 방식
- 소스 저장소 연결 및 접근 가능통과
- 오픈 소스 라이선스 (OSI)통과
- 최근 1년 내 커밋 또는 릴리스통과
- 패키지 이름이 인기 패키지와 유사하지 않음통과
- 원격 엔드포인트가 HTTPS 사용검사되지 않음
- 파괴적인 도구에 라벨 표시됨통과
- 모델에 대한 숨겨진 지침 없음통과
- 패키지 및 해당 종속성에 중요한 보안 권고 없음검사되지 않음
README
GitHub에서 보기Running open models for your company? Tiyuvta helps with model choice, deployment and optimization, and fine-tuning on your hardware or cloud account.
computer-use-linux gives AI agents real, structured control of a local Linux desktop: semantic AT-SPI accessibility trees, bounded screenshots, compositor-aware window targeting, Wayland/X11 input synthesis, and single-round-trip post-action verification across GNOME, KDE Plasma/KWin, Hyprland, niri, COSMIC, i3, Sway, labwc and other wlroots compositors, and X11/EWMH, plus a click-through on-screen activity indicator on GNOME and on Wayland compositors with wlr-layer-shell.
Quick start
Pick the setup that matches your agent or shell workflow:
| Host / workflow | Install command |
|---|---|
| Claude Code (plugin + skill) | claude plugin marketplace add agent-sh/computer-use-linux && claude plugin install computer-use-linux@computer-use-linux |
| Codex CLI (plugin + skill) | codex plugin marketplace add agent-sh/computer-use-linux && codex plugin add computer-use-linux@computer-use-linux |
| Pi Coding Agent (native lazy-loaded tools) | pi install npm:@agent-sh/computer-use-linux |
| Hermes Agent (CLI + skill + MCP server) | npm install -g @agent-sh/computer-use-linux && hermes skills tap add agent-sh/computer-use-linux && hermes skills install agent-sh/computer-use-linux/computer-use-linux && hermes mcp add computer-use-linux --command computer-use-linux --args mcp |
| CLI + any stdio MCP client (npm) | npm install -g @agent-sh/computer-use-linux |
| CLI + system setup from source | git clone https://github.com/agent-sh/computer-use-linux && cd computer-use-linux && ./install.sh |
Rust crate (crates.io) |
cargo install computer-use-linux |
Verify desktop readiness from the shell (after installing the CLI on PATH via npm install -g @agent-sh/computer-use-linux, ./install.sh, or cargo install computer-use-linux):
computer-use-linux doctor | jq .readiness
computer-use-linux setup # enable AT-SPI accessibility bridge if needed
computer-use-linux setup-window-targeting # install GNOME Wayland window-control extension if needed
Plugin-only or Pi-only installs: The Claude Code / Codex plugin launcher and
pi installmanage private cached binaries and do not addcomputer-use-linuxtoPATH. Either run the MCPdoctor/setup_accessibility/setup_window_targetingtools (orcomputer_use_linux_doctorin Pi) directly from your agent, or also install the CLI above when you want shell subcommands onPATH.
The Rust crate is published as computer-use-linux and the npm package as @agent-sh/computer-use-linux. Prebuilt x86_64 and aarch64 Linux binaries ship with the latest release. They need glibc 2.28 or newer: RHEL 8 and its rebuilds, Debian 10, Ubuntu 20.04, and anything later. On an older system, build from source with cargo install computer-use-linux.
Need an isolated desktop where the agent never touches your real mouse, keyboard, or focused window? Use the sibling project
agent-workspace-linuxalongside this one.
What this is
computer-use-linux is a Rust MCP server and CLI for Linux desktop control. It ships three binaries: the main computer-use-linux server/CLI, the computer-use-linux-cosmic Wayland toplevel helper for COSMIC, and the computer-use-linux-indicator click-through activity overlay. Any MCP host (Claude Code, Codex CLI, Codex Desktop's Linux build, Pi Coding Agent, Hermes Agent, Claude Desktop, or your own client) can spawn it to inspect accessibility trees, list and focus windows, take screenshots, click, drag, scroll, type, and invoke semantic accessibility actions.
Most computer-use MCP servers are macOS-only (they lean on AppKit, AXUIElement, CGEvent). The few that target Linux either drive xdotool against an X11 root window or shell out to OCR over screenshots. It differs in five ways:
- Wayland actually works. On Wayland, pointer actions use
/dev/uinputororg.freedesktop.portal.RemoteDesktop. ydotool sends only untargeted wheel events there, and a coordinate action with neither route is refused. Literal text prefers KDE clipboard integration on Plasma,wtypeon compatible Wayland compositors, and portal keysyms on other Wayland sessions, including GNOME with ydotool installed. Portal text startup or conversion errors fail the call without replaying text through ydotool. Raw ydotool text accepts printable ASCII, tab and newline only, and its physical US key positions can produce different text under the active layout. Screenshots use the GNOME Shell DBus screenshot method when present,org.freedesktop.portal.Screenshototherwise, then on a native X11 session a root-windowGetImage(device pixels, no toolkit scaling), and finally spawngnome-screenshotfor background/systemd contexts where the DBus paths are denied. - Window targeting is compositor-aware. The window registry tries GNOME Shell extension, GNOME Shell Introspect, COSMIC Wayland helper, KWin DBus scripting, Hyprland
hyprctl, the niri IPC socket, i3 IPC, labwc'slabwc.sock, wlr-foreign-toplevel-management, and generic X11/EWMH in order, then reports exactly which backend won or why each backend failed. Terminal windows are enriched with their controlling TTY and foreground process so agents can target "the terminal runningpytest" directly. Everywindow_idfits JavaScript's exact integer range (at most 2^53-1), so JSON clients can pass it back unchanged; a larger value is rejected with a prompt to re-runlist_windows. - Semantic selectors first, pixel coordinates when needed. Tools like
click,perform_action, andset_valueacceptrole/name/text/statesselectors orelement_indexvalues backed by AT-SPI, and every mutating tool can return a post-action screenshot and updated accessibility tree in the same round trip. Pixel coordinates remain available for rendering-only surfaces (canvas, games, X clients without ATK). - Visible to humans, invisible to screenshots. While an agent acts,
computer-use-linux-indicatorrenders a click-through overlay with a per-agent cursor glide, click ripple, keycaps/typing banner, screen-edge glow, and status pill, and hides automatically under a shared capture lock before any screenshot is read. - One JSON readiness report.
computer-use-linux doctorreturns a structured document covering platform, portals, AT-SPI, windowing, input, and areadinesssummary with explicit blockers and a recommended next step. MCP hosts can render or surface that to the user without parsing prose.
The crate was extracted from codex-desktop-linux (the Linux distribution of Codex Desktop), which bundles this backend for its native Computer Use feature. This standalone repo is the upstream.
MCP tools & features
| Category | Tool | What it does |
|---|---|---|
| Diagnostics & setup | doctor |
Single-shot JSON readiness report (platform, portals, accessibility, windowing, input, readiness summary, and capability map). |
setup_accessibility |
Enables and verifies GNOME's org.gnome.desktop.interface toolkit-accessibility setting so toolkit apps expose AT-SPI trees. |
|
setup_window_targeting |
Installs and enables the bundled GNOME Shell extension. GNOME Wayland needs it for exact window activation and move/resize; every GNOME session needs it for the on-screen indicator. | |
| Discovery & observation | get_app_state |
Combined screenshot + compacted AT-SPI accessibility tree with stable element_index handles. Scope with app_name_or_bundle_identifier or a window target (window_id, pid, app_id, wm_class, title). |
get_tree_page |
Page through the latest cached tree by node offset, for trees too large to return inline when the host cannot read the spill file. Pass snapshot_id to refuse a page from a tree a later snapshot replaced. |
|
screenshot |
Bounded PNG or JPEG capture of the full desktop (full_screen: true or no target) or a raised and cropped target window (window_id, pid, app_id, wm_class, title, raise_window). |
|
list_windows |
Compositor windows with window_id, title, app_id, wm_class, PID, focus state, client type (wayland/x11), bounds, and terminal TTY/process metadata. |
|
focused_window |
The window currently holding keyboard focus. | |
list_apps |
Running desktop applications visible to the AT-SPI registry. | |
| Input | click |
Click by element_index, semantic selector (role/name/text/states), or desktop/window-relative coordinates (left/right/middle, click_count). |
drag |
Desktop coordinate drag from (start_x, start_y) to (end_x, end_y). |
|
scroll |
Page-based vertical/horizontal scroll on an element, window, or pixel coordinate. | |
press_key |
Single keys or chords (Ctrl+L, Alt+F4, Return), optionally focusing a target window or terminal first. |
|
type_text |
Literal text entry, optionally targeted at a window or terminal (tty, terminal_pid, terminal_command, terminal_cwd). |
|
| Semantic actions | perform_action |
Invoke any AT-SPI action exposed by an element (Press, Activate, Toggle, Jump, …); defaults to the primary action. |
set_value |
Write directly to a settable accessibility element (text fields, sliders, spinners). | |
| Window management | activate_window |
Focus a window by window_id, pid, app_id, wm_class, title, or terminal selectors. |
move_window / resize_window |
Reposition or resize a window in desktop coordinates (GNOME Shell extension and X11/EWMH backends). | |
| Opt-in host tools | complete_interaction |
Parameter-free desktop completion notification (notify-send); registered only when COMPUTER_USE_LINUX_NOTIFY_ON_COMPLETE=1. |
run_shell |
Bounded non-login /bin/sh -c execution; registered only when COMPUTER_USE_LINUX_ENABLE_SHELL=1 (absent by default). |
Every tree result carries a snapshot_id: get_app_state, an include_tree observation, and get_tree_page. The server caches one tree, and each new tree replaces it. Pass the snapshot_id with an element_index (or a selector, except on scroll) to click, scroll, perform_action or set_value, and to get_tree_page: if a later tree replaced that snapshot, the call is refused before any window is raised or input is sent, since the index could name another element by then. A full capture-space x/y point does not come from the tree, so it is not checked. A coordinate_space: "atspi" click maps through its element, so it is checked. Without snapshot_id, the element resolves in the latest tree. An element_identifier names the AT-SPI object itself and is not checked against a snapshot. Ids differ between server processes, so an id from before a restart is refused.
click, scroll, perform_action, and set_value take an optional app target (pid, window_id, app_id, wm_class, window_title). With one, an element_index (or a selector, where the tool takes one) from another app's get_app_state snapshot is refused; call get_app_state for the target app first. When the window backend reports no pid for a target window (i3 without xprop, COSMIC, other wlroots compositors), the snapshot must have been taken for that window, or the call is refused. perform_action and set_value do not focus the target window. An element_identifier is refused when its owner on the accessibility bus is a different pid than the target; it is not checked when either pid is unknown.
Post-action observation in one round trip
All mutating tools (click, drag, scroll, press_key, type_text, perform_action, set_value, activate_window, move_window, and resize_window) accept optional post-action observation parameters so an action and its verification complete in a single MCP tool call:
screenshot_after: true | "screen" | "window" | false: capture after the action is dispatched and the indicator overlay is hidden (trueor"screen"for full desktop,"window"cropped to the action's target window or the focused window when untargeted)format,quality,scale,max_width,max_height,max_bytes: same screenshot payload controls asscreenshotandget_app_statescreenshot_file_path: save the post-action screenshot to this new file instead of returning it as image content (see Screenshot files)include_tree: true: include a fresh compacted AT-SPI accessibility tree and itssnapshot_id; it replaces the cached tree, so laterelement_indexvalues come from it
When post-action screenshot capture succeeds, the image is returned as the first MCP image content block alongside the JSON action summary and screenshot metadata. If the action succeeds (ok: true) and only the post-action screenshot or tree capture fails, ok remains true and the error is reported in screenshot_error / accessibility_error and appended to message.
Screenshot sizing & coordinate scaling
Screenshot payloads are size-bounded by default before they are returned to the MCP host: max 1920 px width/height and 2 MiB image bytes, with hard caps even when callers request more. Agents that need more detail can pass max_width, max_height, max_bytes, scale, format: "jpeg", or quality, preferably with a window target or crop. PNG remains the default; JPEG lets callers trade lossless pixels for a smaller payload before the byte cap forces further resizing. Returned screenshot metadata includes coordinate_width, coordinate_height, scale, format, and quality so callers can convert from a downscaled preview to desktop coordinate pixels.
Screenshot files
screenshot, get_app_state and the screenshot_after capture of mutating tools take screenshot_file_path. With it, the image is saved to that file and no MCP image content is returned, so a capture costs no image tokens until the agent reads the file. The metadata stays the same (width, height, coordinate_width, coordinate_height, scale, format, quality, bytes) plus file_path: in the screenshot caption, and in screenshot.file_path for the other tools.
- The path must be absolute, and its parent directory must exist. Directories are not created.
- The extension must match
format:.pngfor png (the default),.jpgor.jpegfor jpeg. - The path must end with the file name, so a trailing
/or/.is refused. - File output creates a new file and never replaces one. Any existing entry at the path is refused: a file, a directory or a symlink.
- The image is written to a temp file in the same directory, then moved into place with a step that fails if anything exists at the path (
renameat2withRENAME_NOREPLACE, orlinkwhere that is unsupported). A reader never sees a partial file, and an entry created meanwhile is neither followed nor replaced. The file is created with mode 0600. - A bad path is refused before anything is captured or any input is sent.
- A failed write is never answered with the image inline.
screenshotreturns an error,get_app_statesetsscreenshot_error, and a mutating tool setsscreenshot_errorand keeps the action'sok. - Over stdio the path is on the machine that runs the server. Over HTTP (
mcp --listen) the parameter is refused, so a remote client gets no way to write files on the host.
computer-use-linux MCP 질문
computer-use-linux MCP를 Claude Code에 추가하려면 어떻게 하나요?
터미널에서 claude mcp add computer-use-linux -- npx -y @agent-sh/computer-use-linux를 실행합니다. 모든 프로젝트에서 사용할 수 있게 하려면 --scope user를 추가합니다.
computer-use-linux MCP를 Cursor에 추가하려면 어떻게 하나요?
~/.cursor/mcp.json를 열고 mcpServers 아래에 서버를 추가합니다. 위 설치 섹션에 표시된 Cursor 구성을 사용합니다.
computer-use-linux MCP는 어떤 도구를 제공하나요?
3개 도구를 제공합니다. 예: screenshot_after, screenshot_file_path, include_tree.
Wayland에서도 작동하나요?
네, 포인터 동작을 위해 /dev/uinput 또는 org.freedesktop.portal.RemoteDesktop을 사용하며, 다양한 텍스트 입력 방식을 통해 Wayland를 지원합니다.
어떤 Linux 데스크톱 환경을 지원하나요?
GNOME, KDE Plasma/KWin, Hyprland, niri, COSMIC, i3, Sway, labwc 및 other wlroots 컴포지터와 X11을 지원합니다.
시스템 준비 상태를 어떻게 확인할 수 있나요?
computer-use-linux doctor 명령어를 실행하면 플랫폼, 포털, 접근성 상태를 포함한 구조화된 JSON 형식의 준비 보고서를 받을 수 있습니다.