Explored agent-sh/computer-use-linux (Rust MCP server, AT-SPI + portals + ydotool). Good fit for Hyprland but heavy (GNOME-first, needs ydotoold privilege daemon, AT-SPI bridge). Decided to build a slim version instead.
Built /home/dini/.local/bin/desktop-mcp: Python stdlib-only, raw JSON-RPC stdio, 12 tools (list_windows, focus_window, window_info, screenshot, ocr_screen, ocr_window, move, click, scroll, type_text, key). Registered as desktop in opencode.json (backup .n kept). ydotoold started as user service.
Vision = grim + tesseract OCR (model has no image input).
Verified: list/focus/type/enter/OCR end-to-end (scratch kitty test; user confirmed "zzninja42" landed).
Opened abc.net.au tab in Chrome — via google-chrome-stable --new-tab URL CLI after input injection proved unreliable.