brand-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| BRAND_DRY_RUN | No | Log every actuation, change nothing | |
| BRAND_DISABLE_PLUGIN | No | Skip the native plugin path; race wlrctl + legacy only | |
| BRAND_MOCK_COMPOSITOR | No | Talk to the in-repo mock instead of a real compositor |
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 | {
"listChanged": false
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| computerB | brand compatibility tool for Hyprland background Computer Use, including browser/Chromium control through Hyprland. Prefer app plus get_app_state/screenshot coordinates; target/x/y global coordinates are only the low-level fallback. Do not use Browser MCP when the user explicitly asks for brand. Do not use the obsolete hyprcum namespace. |
| list_appsA | List running Hyprland apps/windows available to brand. Start here before choosing a target app unless the user explicitly asks to launch a new app/window. |
| launch_appA | Open or launch an app through Hyprland and return a window selector. By default this reuses an already running matching window; set reuse_existing=false only when the user explicitly asks for a new instance/window. For browser tasks, use this instead of Browser MCP only when an app launch/open is requested. |
| open_appB | Compatibility alias for launch_app. |
| get_app_stateA | Get a target app/window screenshot, accessibility tree, and uiHints. Call this before action tools, then use element_index or screenshot/window-relative coordinates. uiHints separates AT-SPI menu entries from tab/ribbon/toolbar controls; do not substitute a same-named menu for a requested tab. |
| read_app_stateC | Compatibility alias for get_app_state. |
| screenshotB | Capture an unoccluded screenshot for an app/window, or the visible compositor if no app is passed. Prefer app over low-level target. |
| get_screenshotD | Compatibility alias for screenshot. |
| get_cursor_positionB | Return the current cursor position in monitor, screenshot, or window-relative coordinates. |
| list_windowsA | Compatibility alias for list_apps. |
| clickB | Click a visible element by index, accessible name/text, or screenshot/window-relative coordinates. Element clicks use the native pointer path so the visible agent cursor overlay appears. |
| perform_secondary_actionC | Invoke a secondary AT-SPI action exposed by an element. |
| activate_menu_itemA | Activate a global app-menu item from get_app_state. Uses DBusMenu/GMenu when the app exposes a menu model; this is independent of AT-SPI menu roles. |
| scrollC | Scroll an element or coordinate in a direction by pages. |
| dragB | Drag from one screenshot/window-relative coordinate to another. |
| left_clickB | Compatibility alias for click with the left button. |
| right_clickC | Compatibility alias for click with the right button. |
| middle_clickB | Compatibility alias for click with the middle button. |
| double_clickC | Compatibility alias for a double left click. |
| triple_clickC | Compatibility alias for a triple left click. |
| hoverB | Compatibility alias: move the background pointer to an element or coordinate without clicking. |
| move_mouseC | Compatibility alias for hover. |
| left_click_dragC | Compatibility alias for drag using start_coordinate and coordinate. |
| type_textA | Type literal text into the target app. Use paste_text for multiline, tabular, CSV/TSV, Unicode-heavy, or long text. method=auto prefers a focused AT-SPI editable control, then uses isolated background key/paste input; method=atspi explicitly requests accessibility text insertion. |
| typeC | Compatibility alias for type_text. |
| paste_textA | Paste text through the clipboard into the target app. Prefer this for multiline, tabular, CSV/TSV, Unicode-heavy, or long text because it is much faster than key-by-key typing. |
| press_keyB | Press a key or key-combination, using xdotool-style syntax such as ctrl+v, Return, alt+left, or super+c. |
| keyA | Compatibility alias for press_key. Accepts key, keys, modifiers, keycode, or text. |
| set_valueC | Set the value of a settable accessibility element. |
| waitC | Compatibility alias: wait for a short duration. |
| wait_for_windowA | Wait for a Hyprland window or same-process related popup/dialog to appear, then return its app state. Use after actions expected to open dialogs or new windows. |
| wait_for_closeB | Wait for a target window/dialog to close. If related_to is provided, return the surviving related/root app state. |
| security_statusA | Return the active desktop-control security policy and readiness diagnostics without exposing secrets. |
| request_confirmationA | Create a pending challenge bound to an exact high-risk call. A person must approve it from an independent local TTY before it can authorize the action. |
| panicA | Immediately cancel active background operations. panic latches writes off; cancel is one-shot; resume clears the latch; status is read-only. |
| audit_replayC | Preflight the redacted audit journal and optionally replay only entries that remain safe after identity and policy validation. |
| ocrA | Run a local OCR backend on a newly captured, privacy-filtered target screenshot. Returns normalized confidence 0..1, screenshot pixel boxes, and an opaque short-lived ocr_id. |
| click_textB | Click OCR text from an opaque current ocr_id. The server revalidates screenshot hash, process identity, and geometry before input. |
| get_marksC | Render a non-destructive numbered Set-of-Marks overlay for a bound target screenshot and return an opaque marks_id mapping. |
| click_markB | Click one bound Set-of-Marks id after live identity, geometry, and screenshot-hash validation. |
| type_intoC | Atomically resolve and verify an editable target, focus it, refresh state, then input text using auto/AT-SPI/paste/keys. |
| sequenceB | Run an ordered action sequence. Every step re-enters the ordinary single-tool policy, confirmation, confinement, lease, and audit gateway; nested sequences are rejected. |
| manage_windowC | Targeted, verified Hyprland window management: focus/close/move/resize/minimize/maximize/fullscreen/floating/pin/move_to_workspace. |
| list_workspacesB | List Hyprland workspaces; special workspaces are included by default and explicitly identified by Hyprland. |
| manage_workspaceC | Verified Hyprland workspace switch/create-or-activate/rename and targeted window move. special: selectors retain Hyprland special-workspace semantics. |
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 45 tools
Roughly a third of the surface is explicit duplicate aliases (open_app=launch_app, read_app_state=get_app_state, get_screenshot=screenshot, list_windows=list_apps, key=press_key, left/right/middle/double/triple_click=click, hover/move_mouse, type=type_text, left_click_drag=drag), so an agent frequently has two or more tools that do the identical thing. Overlaps also exist among non-alias tools: type_text vs type_into vs paste_text vs set_value, and screenshot vs get_app_state. The 'Compatibility alias for X' phrasing helps, but boundaries remain murky.
All names are snake_case with no camelCase mixing, which is good, but verb conventions are inconsistent: verb_noun (get_app_state, list_apps, click_text, manage_window) coexists with bare verbs (click, scroll, drag, hover, panic, wait, sequence) and bare nouns (computer, ocr, screenshot). The name 'computer' for a compatibility tool is especially uninformative and breaks any pattern.
45 tools is far beyond a comfortable set and is inflated by ~14 pure aliases that add no capability. Even discounting aliases, the 30 real tools cover a lot of ground, but the alias bloat makes the surface heavy and hard to scan.
For a Hyprland desktop-control agent the lifecycle is well covered: discovery (list_apps, list_windows), state capture (get_app_state, screenshot, ocr, get_marks), input (click, type_text, paste_text, press_key, scroll, drag, set_value), window/workspace management, and safety (security_status, request_confirmation, panic, audit_replay, sequence). Minor gaps only, e.g. no explicit clipboard read/copy-back or multi-monitor enumeration beyond cursor coordinates.