Koskamo

hypruse MCP

hypruse is an open-source Model Context Protocol server designed for the Hyprland Wayland compositor. It enables AI agents to interact natively with the desktop environment by providing tools for semantic desktop state retrieval, window management, screenshot capture, and native input simulation (mouse and keyboard) without requiring root access, X11, or external daemons like ydotool. It leverages Hyprland's IPC and Wayland protocols to allow agents to work alongside human users.

Package and access

Local package with source-attributed installation metadata. Koskamo does not execute packages during review.

hypruse MCP logo, by IlyasKhalloukiCommunity listingLocal stdioSource reviewed; not executedPublished by IlyasKhallouki
Vendor documentation

What you can do with it

  • Retrieve semantic desktop state including monitors, workspaces, and windows
  • Capture screenshots of monitors, specific windows, or zoomed regions
  • Simulate native mouse clicks and scrolls via Wayland protocols
  • Send keyboard input and shortcuts using virtual keyboard and accessibility tree

Source and maintenance

Community listingRegistry 0.13.0
Maintenance checked

Packages and installation

Source-provided package data. Koskamo has not executed or live-probed this package.

hypruse 0.13.0

pypiuvx
hypruse package definition
{
  "version": "0.13.0",
  "transport": "stdio",
  "identifier": "hypruse",
  "runtimeHint": "uvx",
  "registryType": "pypi",
  "registryBaseUrl": "https://pypi.org",
  "environmentVariables": [
    {
      "name": "HYPRUSE_SCREENSHOT_MODE",
      "choices": [
        "file",
        "image"
      ],
      "default": "file",
      "description": "How captures are returned: 'file' writes to XDG_RUNTIME_DIR and returns the path, 'image' returns the image inline. Use 'image' for clients that render MCP images but cannot read files, such as Claude Desktop."
    },
    {
      "name": "HYPRUSE_READONLY",
      "default": "0",
      "description": "Set to 1 to expose only the observation tools (desktop, screenshot, zoom, ui, marks, binds, wait_for). The agent can see and narrate but cannot click, type, or launch."
    },
    {
      "name": "HYPRUSE_CONFINE",
      "description": "Restrict input to a scope of windows and refuse everything outside it: 'launched' (only windows hypruse opened this session), 'class:firefox,kitty', or 'workspace:3,special:notes'. Unset means no confinement.",
      "placeholder": "launched"
    },
    {
      "name": "HYPRUSE_AUTH_GUARD",
      "choices": [
        "1",
        "strict",
        "0"
      ],
      "default": "1",
      "description": "Refuse to click or type into system authentication dialogs (polkit, keyring prompts). On by default; 'strict' also refuses password fields in ordinary windows; 0 disables it."
    },
    {
      "name": "HYPRUSE_STRICT",
      "default": "0",
      "description": "Set to 1 to refuse to act when the cursor or focused window moved since hypruse's last action, so the agent must re-read the desktop before retrying."
    },
    {
      "name": "HYPRUSE_MARK",
      "default": "0",
      "description": "Set to 1 to make the agent's presence legible: tag every window it opens 'hypruse-owned' and flash an on-screen notice when it opens a window or captures the screen."
    },
    {
      "name": "HYPRUSE_CLIPBOARD",
      "default": "0",
      "description": "Set to 1 to register the opt-in clipboard tool (never in read-only mode). Off by default because clipboards hold passwords."
    },
    {
      "name": "HYPRUSE_JOURNAL",
      "default": "0",
      "description": "Record every tool call, refusals included, as one NDJSON line: 1 writes to XDG_STATE_HOME/hypruse/journal.ndjson, or give a path. Read it back with 'hypruse journal'. Off by default."
    },
    {
      "name": "HYPRUSE_JOURNAL_MAX_BYTES",
      "default": "8388608",
      "description": "Rotate the journal once it reaches this size, keeping one previous generation alongside it. Set 0 to never rotate."
    },
    {
      "name": "HYPRUSE_JOURNAL_TEXT",
      "default": "0",
      "description": "Set to 1 to record typed and copied text in the journal verbatim instead of as a length plus digest. Off by default because keystrokes are passwords; needed only to replay typing."
    },
    {
      "name": "HYPRUSE_DRYRUN",
      "default": "0",
      "description": "Set to 1 for a rehearsal: every acting tool validates its arguments and runs every trust guard, then reports what it would have done and delivers no input."
    }
  ]
}

Tools

Reported by the attributed source; not independently observed by Koskamo.

No tool definitions available.

Connect from your client

Each snippet configures the same source-provided package; replace placeholders before use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Cursor

Merge this local stdio configuration, replace every placeholder environment value, and restart Cursor. Koskamo has not executed this package.
Cursor configuration
{
  "mcpServers": {
    "hypruse-mcp": {
      "command": "uvx",
      "args": [
        "hypruse==0.13.0"
      ],
      "env": {
        "HYPRUSE_SCREENSHOT_MODE": "<YOUR_HYPRUSE_SCREENSHOT_MODE>",
        "HYPRUSE_READONLY": "<YOUR_HYPRUSE_READONLY>",
        "HYPRUSE_CONFINE": "<YOUR_HYPRUSE_CONFINE>",
        "HYPRUSE_AUTH_GUARD": "<YOUR_HYPRUSE_AUTH_GUARD>",
        "HYPRUSE_STRICT": "<YOUR_HYPRUSE_STRICT>",
        "HYPRUSE_MARK": "<YOUR_HYPRUSE_MARK>",
        "HYPRUSE_CLIPBOARD": "<YOUR_HYPRUSE_CLIPBOARD>",
        "HYPRUSE_JOURNAL": "<YOUR_HYPRUSE_JOURNAL>",
        "HYPRUSE_JOURNAL_MAX_BYTES": "<YOUR_HYPRUSE_JOURNAL_MAX_BYTES>",
        "HYPRUSE_JOURNAL_TEXT": "<YOUR_HYPRUSE_JOURNAL_TEXT>",
        "HYPRUSE_DRYRUN": "<YOUR_HYPRUSE_DRYRUN>"
      }
    }
  }
}

Cline

Merge this local stdio configuration, replace every placeholder environment value, and restart Cline. Koskamo has not executed this package.
Cline configuration
{
  "mcpServers": {
    "hypruse-mcp": {
      "command": "uvx",
      "args": [
        "hypruse==0.13.0"
      ],
      "env": {
        "HYPRUSE_SCREENSHOT_MODE": "<YOUR_HYPRUSE_SCREENSHOT_MODE>",
        "HYPRUSE_READONLY": "<YOUR_HYPRUSE_READONLY>",
        "HYPRUSE_CONFINE": "<YOUR_HYPRUSE_CONFINE>",
        "HYPRUSE_AUTH_GUARD": "<YOUR_HYPRUSE_AUTH_GUARD>",
        "HYPRUSE_STRICT": "<YOUR_HYPRUSE_STRICT>",
        "HYPRUSE_MARK": "<YOUR_HYPRUSE_MARK>",
        "HYPRUSE_CLIPBOARD": "<YOUR_HYPRUSE_CLIPBOARD>",
        "HYPRUSE_JOURNAL": "<YOUR_HYPRUSE_JOURNAL>",
        "HYPRUSE_JOURNAL_MAX_BYTES": "<YOUR_HYPRUSE_JOURNAL_MAX_BYTES>",
        "HYPRUSE_JOURNAL_TEXT": "<YOUR_HYPRUSE_JOURNAL_TEXT>",
        "HYPRUSE_DRYRUN": "<YOUR_HYPRUSE_DRYRUN>"
      }
    }
  }
}

VS Code

Merge this local stdio configuration, replace every placeholder environment value, and restart VS Code. Koskamo has not executed this package.
VS Code configuration
{
  "servers": {
    "hypruse-mcp": {
      "type": "stdio",
      "command": "uvx",
      "args": [
        "hypruse==0.13.0"
      ],
      "env": {
        "HYPRUSE_SCREENSHOT_MODE": "<YOUR_HYPRUSE_SCREENSHOT_MODE>",
        "HYPRUSE_READONLY": "<YOUR_HYPRUSE_READONLY>",
        "HYPRUSE_CONFINE": "<YOUR_HYPRUSE_CONFINE>",
        "HYPRUSE_AUTH_GUARD": "<YOUR_HYPRUSE_AUTH_GUARD>",
        "HYPRUSE_STRICT": "<YOUR_HYPRUSE_STRICT>",
        "HYPRUSE_MARK": "<YOUR_HYPRUSE_MARK>",
        "HYPRUSE_CLIPBOARD": "<YOUR_HYPRUSE_CLIPBOARD>",
        "HYPRUSE_JOURNAL": "<YOUR_HYPRUSE_JOURNAL>",
        "HYPRUSE_JOURNAL_MAX_BYTES": "<YOUR_HYPRUSE_JOURNAL_MAX_BYTES>",
        "HYPRUSE_JOURNAL_TEXT": "<YOUR_HYPRUSE_JOURNAL_TEXT>",
        "HYPRUSE_DRYRUN": "<YOUR_HYPRUSE_DRYRUN>"
      }
    }
  }
}

Claude Desktop

Merge this local stdio configuration, replace every placeholder environment value, and restart Claude Desktop. Koskamo has not executed this package.
Claude Desktop configuration
{
  "mcpServers": {
    "hypruse-mcp": {
      "command": "uvx",
      "args": [
        "hypruse==0.13.0"
      ],
      "env": {
        "HYPRUSE_SCREENSHOT_MODE": "<YOUR_HYPRUSE_SCREENSHOT_MODE>",
        "HYPRUSE_READONLY": "<YOUR_HYPRUSE_READONLY>",
        "HYPRUSE_CONFINE": "<YOUR_HYPRUSE_CONFINE>",
        "HYPRUSE_AUTH_GUARD": "<YOUR_HYPRUSE_AUTH_GUARD>",
        "HYPRUSE_STRICT": "<YOUR_HYPRUSE_STRICT>",
        "HYPRUSE_MARK": "<YOUR_HYPRUSE_MARK>",
        "HYPRUSE_CLIPBOARD": "<YOUR_HYPRUSE_CLIPBOARD>",
        "HYPRUSE_JOURNAL": "<YOUR_HYPRUSE_JOURNAL>",
        "HYPRUSE_JOURNAL_MAX_BYTES": "<YOUR_HYPRUSE_JOURNAL_MAX_BYTES>",
        "HYPRUSE_JOURNAL_TEXT": "<YOUR_HYPRUSE_JOURNAL_TEXT>",
        "HYPRUSE_DRYRUN": "<YOUR_HYPRUSE_DRYRUN>"
      }
    }
  }
}

Let your agent find its tools

Find servers like hypruse MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.