hypruse
Computer use for Hyprland: semantic desktop state over IPC, plus vision and native input
Connector by IlyasKhallouki · GitHub account verified by the MCP Registry
Install
Works with Claude Code, Codex, VS Code, Cursor, Windsurf, Claude Desktop. Read the repository before you give any tool access to your data.
npx agentmarket install connector/ilyaskhallouki-hypruse
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Use cases: workflow-automation
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this server can do and what it asks for, from its tool list, install config and code. Checked Oct 25, 2026.
- Tools
- 7 read · 0 write · 0 deleteRead-only
- Secrets
- 1 (API keys, tokens or passwords)
- Install scripts
- None found
- Runs as
- Python package
Tools by what they do 7
Read from the source code; the running server may list different tools.
Read 7 · Look things up without changing anything.
bindsdesktopmarksscreenshotuiwait_forzoom
Secrets and settings it asks for
Secrets: values you paste in that let it act as you.
HYPRUSE_AUTH_GUARD
Other settings (environment variables or headers).
HYPRUSE_CLIPBOARDHYPRUSE_CONFINEHYPRUSE_DRYRUNHYPRUSE_JOURNALHYPRUSE_JOURNAL_MAX_BYTESHYPRUSE_JOURNAL_TEXTHYPRUSE_MARKHYPRUSE_READONLYHYPRUSE_SCREENSHOT_MODEHYPRUSE_STRICT
Network hosts it talks to 1
github.com· found in code
Files it touches
~/.claude/skills- Your home directory (~)
~/.agents/skills~/.codex/skills~/.config/opencode/skills~/.copilot/skills~/.cursor/skills~/.gemini/antigravity/skills~/.gemini/config/skills~/.gemini/skills~/.hermes/profiles~/.hermes/skills~/.openclaw/skills~/.pi/agent/skills
Tools (7)
Read from the source code; the running server may differ. Descriptions are the server’s own words; hidden characters are shown as [U+…].
bindsread-onlyThe user's own Hyprland keybinds: combo, action, arg, and a description when the config provides one. This is how the desktop's owner drives it: to perform one of these workflows, call `use_bind` with the combo (it runs the bound action). An action of `lua` means the bind is a closure in a Lua Hyprland config, which nothing can run from outside: read its description and do the same thing with `hypr` or `launch`. NOTE: the `keyboard` tool canNOT trigger these compositor binds (synthetic keys reach apps, not Hyprland's bind matcher), so do not try to press them.
desktopread-onlySemantic desktop snapshot: monitors, workspaces, windows (address, class, title, `at` + `size` in global coords), active window, cursor, and `layers`: launchers (wofi/rofi), bars, notification popups, and on-screen keyboards are NOT windows and appear only there, with a best-effort `kind` and global geometry you can screenshot by region or click into. A listed layer is one the compositor tracks, not one you can see: it may be transparent or dormant, so screenshot when visibility matters. Call first; act on the addresses it returns.
marksread-onlySet-of-Marks capture: a screenshot of the window WITH its accessible controls drawn as numbered red marks, plus a JSON legend mapping each number to the control's role, name, current value, and exact global click point. One glance replaces the estimate-zoom-estimate loop for every control the accessibility tree knows: read the number off the image and call `click_ui(mark=N)` (or `pointer` at the legend's x,y). `window` is an address from desktop (default: focused); `name` filters the marked controls. Falls back to the plain legend when ImageMagick is not installed, and to a fall-back-to-vision…
screenshotread-onlyCapture the focused monitor, a window (`window`: "active" or an address from desktop, cheapest for reading one app), or a `region` "x,y,WxH". Returns the image (or a file path to read) + JSON metadata with geometry/scale for pixel→global mapping. A window on a hidden workspace or under another window is still captured as itself (metadata `source` "window"; without grim -T a shown window is cropped from the screen, `source` "screen", and a hidden one is refused); `visible` says whether the compositor draws it, and a hidden one may show how it last looked (many apps stop drawing while hidden). W…
uiread-onlyRead a window's accessibility tree (AT-SPI) and return its elements with GLOBAL click points, so you can target a control by NAME with no screenshot and no pixel guessing. `window` is an address from desktop (default: the focused window). `name` filters to elements whose accessible name contains it (case-insensitive); `actionable` (default) keeps only interactive roles (buttons, entries, menu items, ...); with a `name` that matches none of those, it keeps named elements in other roles that have an accessibility action (a web app's list row), with the action's name as `action`. Returns [{role, …
wait_forread-onlyBlock until a desktop event happens (real compositor events, not polling). event: 'window_open' | 'window_close' | 'workspace' | 'title_change' | 'layer_open' | 'layer_close' (layer-shell surfaces: launchers, notification popups; match on the namespace, e.g. 'wofi') | 'urgent' (a window demands attention) | 'screencast' (screen sharing started/stopped). match: optional case-insensitive substring filter over the event's fields (class/title/workspace name/address/namespace). timeout_s 1-60, default 10. Returns the event payload, or a timeout note; a filtered wait whose condition ALREADY holds (t…
zoomread-onlyNative-resolution re-capture around a point: the precision step of the coarse-to-fine loop. Screenshot first, estimate the target's global x,y, zoom there, re-estimate on the zoomed image (scale ~1.0, so global = geometry[:2] + image_pixel), then click. `size` "WxH" in logical pixels (default 480x360) is clamped to the screen; `window` (an address from desktop, on screen) clamps to that window instead. The metadata echoes the requested point back as `point`; `stable=true` waits for the frame to settle first; `lossless=true` returns PNG.
Signals
- Stars
- 37
- Forks
- 7
- Open issues
- 0
- Contributors
- 3
- Weekly downloads
- 400
- Last commit
- Oct 19, 2026 (9 days ago)
- Last release
- Oct 18, 2026 (10 days ago)
- Last package publish
- Oct 18, 2026 (10 days ago)
From GitHub (fetched Oct 24, 2026) and the package registry.
Details
- Registry name
io.github.IlyasKhallouki/hypruse- Version
- 0.13.0
- Auth
- No auth
- Packages
- pypi hypruse
- License
- MIT
- Repository
- github.com/IlyasKhallouki/hypruse
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
Cite this page
hypruse MCP server. Agent Mart. https://agentmart.dev/connectors/ilyaskhallouki-hypruse (last updated 2026-10-24)