hypr-tools
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| HYPR_TOOLS_VENV | No | Path to the Python virtual environment used by the optional voice_* helpers. Default is ./voice-venv. | |
| HYPR_LED_ADDRESS | No | MAC address of your BLE LED strip (LEDDMX / ELK-BLEDOM family). Optional — if unset, the strip is found by name. Requires `pip install bleak` for the led_* tools. | |
| FIREFOX_BRIDGE_URL | No | URL of the local Firefox bridge extension used by the wa_* (WhatsApp) tools. Default is http://localhost:7866. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| get_volumeA | Get current audio output volume percentage and mute state |
| set_volumeA | Set audio output volume to a specific percentage (0-150) |
| increase_volumeA | Increase audio output volume by N percent (default 5) |
| decrease_volumeA | Decrease audio output volume by N percent (default 5) |
| toggle_muteA | Toggle audio output mute on/off |
| get_mic_volumeA | Get microphone input volume percentage and mute state |
| set_mic_volumeB | Set microphone input volume to a specific percentage (0-100) |
| toggle_mic_muteA | Toggle microphone mute on/off |
| list_audio_sinksA | List all audio output devices (speakers, headphones, etc.) |
| set_default_sinkA | Set the default audio output device by name or ID |
| list_audio_sourcesA | List all audio input devices (microphones) |
| set_default_sourceA | Set the default audio input device by name or ID |
| get_brightnessA | Get current screen brightness as a percentage |
| set_brightnessA | Set screen brightness to a specific percentage (1-100) |
| increase_brightnessA | Increase screen brightness by N percent (default 5) |
| decrease_brightnessA | Decrease screen brightness by N percent (default 5) |
| get_clipboardA | Get current clipboard text content |
| set_clipboardC | Copy text to the clipboard |
| list_clipboard_historyC | List recent clipboard history entries |
| paste_from_historyA | Copy a specific clipboard history entry to the active clipboard by its ID |
| delete_clipboard_entryB | Delete a specific entry from clipboard history by ID |
| clear_clipboard_historyA | Wipe the entire clipboard history |
| screenshot_fullA | Take a screenshot of all monitors and save to ~/Pictures/Screenshots/ |
| screenshot_monitorA | Take a screenshot of the currently focused monitor |
| screenshot_regionA | Take a screenshot of a user-selected region (opens slurp selector) |
| screenshot_windowB | Take a screenshot of the currently focused window |
| screenshot_to_clipboardA | Take a screenshot of a region and copy directly to clipboard (no file saved) |
| start_recordingA | Start recording the screen to a video file in ~/Videos/Recordings/ |
| stop_recordingB | Stop the current screen recording |
| is_recordingA | Check if a screen recording is currently in progress |
| start_recording_gifB | Start recording the screen as a GIF file |
| get_wallpaperA | Get the file path of the currently active wallpaper |
| set_wallpaperC | Set wallpaper to a specific image file path |
| next_wallpaperA | Switch to the next wallpaper in the current theme rotation |
| prev_wallpaperA | Switch to the previous wallpaper in the current theme rotation |
| list_wallpapersA | List all wallpaper files in the current theme directory |
| list_theme_wallpapersA | List all wallpaper files for a specific theme |
| get_wallpaper_colorsA | Get the extracted color palette from the current wallpaper (wallbash colors) |
| get_current_themeA | Get the currently active HyDE theme name |
| set_themeA | Switch to a specific HyDE theme by name |
| next_themeB | Cycle to the next HyDE theme |
| prev_themeB | Cycle to the previous HyDE theme |
| list_themesB | List all installed HyDE themes |
| get_wallbash_modeA | Get current wallbash color mode (theme/auto/dark/light) |
| set_wallbash_modeC | Set wallbash color mode |
| get_rofi_styleA | Get the current rofi launcher style number |
| set_rofi_styleB | Set rofi launcher style by number (1-12) |
| send_notificationC | Send a desktop notification with title, body, and optional urgency/icon |
| list_notification_historyA | Get recent notification history from dunst |
| close_all_notificationsA | Dismiss all currently visible notifications |
| toggle_dndB | Toggle Do Not Disturb mode for notifications |
| get_dnd_statusB | Check if Do Not Disturb mode is enabled |
| set_notification_pausedB | Pause or unpause notification display |
| list_windowsA | List all open windows with title, class, workspace, position, and size |
| get_focused_windowB | Get details of the currently focused/active window |
| focus_windowC | Focus a window by its class name or title substring |
| close_windowA | Gracefully close the focused window (or by address) |
| kill_windowB | Force kill a window by address (use as last resort) |
| toggle_floatA | Toggle floating mode on the focused window |
| toggle_fullscreenB | Toggle fullscreen on the focused window |
| pin_windowA | Toggle always-on-top pin on the focused window |
| move_window_to_workspaceB | Move the focused window to a specific workspace number |
| resize_windowA | Resize the focused window by a pixel delta |
| move_windowB | Move a floating window by a pixel delta |
| toggle_splitA | Toggle horizontal/vertical split direction for the focused window |
| group_windowB | Toggle window grouping (tabbed mode) on the focused window |
| move_to_scratchpadA | Move the focused window to the special scratchpad workspace |
| list_workspacesA | List all active workspaces with their IDs, names, and window counts |
| get_active_workspaceB | Get information about the currently active workspace |
| switch_workspaceB | Switch to a specific workspace by number |
| move_workspace_to_monitorA | Move a workspace to a different monitor |
| create_workspaceB | Switch to the first empty workspace (effectively creates a new workspace) |
| next_workspaceB | Switch to the next workspace |
| prev_workspaceB | Switch to the previous workspace |
| list_monitorsA | List all monitors with resolution, refresh rate, scale, and position |
| get_focused_monitorB | Get the currently focused monitor's details |
| set_monitor_dpmsB | Turn monitor display on or off (DPMS power management) |
| enable_monitorA | Enable a disabled monitor with its default settings |
| disable_monitorA | Disable a monitor (turns it off and removes from layout) |
| set_monitor_scaleC | Change a monitor's scaling factor |
| mirror_monitorC | Mirror one monitor to another |
| get_keyboard_layoutA | Get the current keyboard layout |
| switch_keyboard_layoutA | Cycle to the next keyboard layout |
| start_reading_modeC | Start key remapping for reading mode (evremap) |
| stop_reading_modeA | Stop key remapping for reading mode |
| get_media_statusA | Get currently playing track info: title, artist, album, player, status, position |
| media_play_pauseB | Toggle play/pause on the active media player |
| media_nextB | Skip to the next track |
| media_previousC | Go to the previous track |
| media_stopC | Stop media playback |
| media_seekB | Seek to a position in the current track (in seconds) |
| list_media_playersA | List all active MPRIS2 media players |
| get_network_statusA | Get current network connection status (WiFi SSID, IP, signal strength, device type) |
| list_wifi_networksA | Scan and list available WiFi networks with signal strength |
| connect_wifiC | Connect to a WiFi network by SSID |
| disconnect_wifiB | Disconnect from the current WiFi network |
| toggle_wifiB | Toggle WiFi radio on or off |
| get_ip_addressesB | Get all network interface IP addresses |
| get_bluetooth_statusA | Get bluetooth power state and currently connected devices |
| list_bluetooth_devicesA | List paired and nearby bluetooth devices |
| connect_bluetoothA | Connect to a paired bluetooth device by MAC address or name |
| disconnect_bluetoothB | Disconnect a bluetooth device by MAC address |
| toggle_bluetoothA | Toggle bluetooth power on or off |
| get_cpu_infoA | Get CPU model, usage percentage, temperature, and frequency |
| get_gpu_infoA | Get GPU model, usage, temperature, and VRAM usage |
| get_memory_infoA | Get RAM usage: used, total, available, swap |
| get_disk_infoA | Get disk usage per mount point |
| get_battery_infoA | Get battery percentage, charging state, and time remaining |
| get_uptimeA | Get system uptime and load averages |
| get_system_infoA | Get OS, kernel version, hostname, Hyprland version, and shell |
| list_processesA | List running processes, optionally filtered and sorted by CPU or memory usage |
| check_updatesA | Check for available system updates (pacman official + AUR) |
| search_packageA | Search for a package by name in official repos and AUR |
| list_installed_packagesB | List explicitly installed packages, optionally filtered by name |
| launch_appA | Launch an application by name or command (runs detached via hyprctl dispatch exec) |
| list_desktop_appsA | List all installed .desktop applications (filterable by name) |
| kill_appB | Kill a running application by name or PID |
| list_running_appsA | List running GUI applications (from Hyprland's client list) |
| get_waybar_modeA | Get the currently active waybar layout mode (line number in config.ctl) |
| set_waybar_modeA | Switch to a specific waybar layout by config.ctl line number |
| next_waybar_modeA | Cycle to the next waybar layout mode |
| prev_waybar_modeA | Cycle to the previous waybar layout mode |
| toggle_waybarA | Show or hide waybar (toggle visibility) |
| hypr_reloadA | Reload the Hyprland configuration |
| get_hypr_optionA | Get a Hyprland config option's current value (e.g. 'general:border_size', 'decoration:rounding') |
| set_hypr_optionA | Set a runtime Hyprland config option via keyword (non-persistent, resets on reload) |
| get_hypr_bindsB | List all active Hyprland keybindings |
| toggle_animationsA | Toggle Hyprland animations on or off |
| lock_screenA | Lock the screen using the configured screen locker (swaylock/hyprlock) |
| toggle_idle_inhibitorB | Prevent or allow the screen from timing out / going idle |
| toggle_gamemodeA | Toggle gamemode: disables animations, blur, and other effects for performance |
| get_gamemode_statusB | Check if gamemode (performance mode) is currently active |
| suspend_systemA | Suspend the system to RAM (sleep). WARNING: This will suspend your machine immediately. |
| pick_colorA | Open an on-screen color picker and return the selected hex color |
| pick_color_to_clipboardA | Pick a color from the screen and copy the hex value to clipboard |
| read_fileA | Read the contents of a file (sandboxed to home directory). Use for configs, logs, scripts. |
| write_fileA | Write content to a file (sandboxed to home directory). Creates parent directories if needed. |
| list_directoryA | List files and directories at a path (sandboxed to home directory) |
| file_infoB | Get metadata about a file: size, type, modification time |
| wa_send_messageA | Send a WhatsApp message via Firefox Bridge. Requires Firefox with WhatsApp Web open and the bridge extension active. |
| wa_list_chatsA | List visible WhatsApp chat names from the sidebar via Firefox Bridge |
| wa_read_messagesB | Read the last N messages from a WhatsApp chat via Firefox Bridge |
| led_set_colorA | Set LED strip to a specific RGB color (0-255 each) or a named color (red, green, blue, white, purple, cyan, yellow, orange, pink, warm, magenta) |
| led_set_brightnessB | Set LED strip brightness (0-100%) |
| led_powerC | Turn LED strip on or off |
| led_set_patternB | Set LED strip to a built-in animation pattern by index (0-210) or name. Examples: rainbow, strobe, wave, breathing, etc. |
| led_effectA | Run a LED animation effect: rainbow (color cycle), pulse (brightness breathing), or wave (smooth color transition) |
| led_scanA | Scan for BLE LED strips nearby |
| set_timerA | Set a countdown timer. Sends a desktop notification when it fires. |
| list_timersA | List all active timers with their remaining time |
| cancel_timerB | Cancel an active timer by its ID |
| cancel_all_timersB | Cancel all active timers |
| open_urlB | Open a URL in the default browser |
| open_file_managerC | Open the file manager at a given path |
| open_terminalC | Open a new terminal window, optionally with a command or working directory |
| trash_fileA | Move a file to trash (recoverable, NOT permanent delete). Uses gio trash. |
| show_desktopB | Minimize all windows to show the desktop |
| get_power_profileA | Get the current power profile (performance, balanced, power-saver) |
| set_power_profileC | Set the power profile |
| get_screen_timeoutA | Get the current screen idle timeout and lock timeout |
| get_thermal_infoA | Get CPU and GPU temperatures |
| run_macroB | Run a named macro (predefined chain of tools). Macros are defined in ~/.config/hypr/macros.json |
| list_macrosA | List all available macros with their descriptions and steps |
| get_macroB | Get full details of a specific macro |
| create_macroA | Create a new macro or overwrite an existing one. Steps are an array of {tool, params?} objects. |
| delete_macroC | Delete a macro by name |
| projector_setupA | Configure projector connection. Sets IP address, ADB port, Fully Kiosk Browser password and the dashboard URL. Run this first before using other projector tools. |
| projector_statusA | Check projector connection status. Tests ADB and Fully Kiosk Browser connectivity. |
| projector_open_urlC | Open a URL on the projector browser. |
| projector_show_dashboardA | Open the configured dashboard URL on the projector in fullscreen. |
| projector_wakeA | Wake up the projector screen (turn on display). |
| projector_sleepA | Put the projector screen to sleep (turn off display). |
| projector_fullscreenA | Enable fullscreen immersive mode on the projector (hide status bar and navigation). |
| projector_brightnessC | Set the projector screen brightness (0-255). |
| projector_reloadA | Reload the current page on the projector browser. |
| projector_screenshotC | Take a screenshot of the projector screen and save it locally. |
| projector_speakC | Make the projector speak text using text-to-speech. |
| projector_scanA | Scan the local network for Android devices that could be projectors. Uses nmap to find devices on port 5555. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 178 tools
Most tools target distinct resources and actions, but the 178-tool surface creates several overlapping areas: list_windows vs list_running_apps, close_window/kill_window vs kill_app, get_network_status vs get_ip_addresses, and led_set_pattern vs led_effect. Descriptions usually clarify the boundaries, but an agent could still misselect in these clusters.
The dominant pattern is action_resource (get_, set_, list_, toggle_, start_, stop_), but there are many mixed conventions such as hypr_reload, media_play_pause, media_next, screenshot_full, wa_send_message, led_set_color, and projector_setup. The names remain readable, but the convention is not predictable across the whole set.
178 tools is an extreme mismatch for a single MCP server, even for a broad Hyprland desktop-automation domain. The surface is far too large to navigate reliably and bundles many unrelated subsystems into one toolset.
The server covers an unusually broad set of desktop workflows: audio, brightness, clipboard, screenshots, recording, wallpapers/themes, windows, workspaces, monitors, media, network, Bluetooth, system info, packages, Waybar, Hyprland config, files, macros, LEDs, timers, and projector control. Minor lifecycle gaps exist (e.g., workspace deletion, richer window/workspace management), but most domains have workable coverage.