hyperpanes-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| HYPERPANES_BIN | No | Path to the hyperpanes executable (for launch_workspace). | |
| HYPERPANES_PANE_ID | No | The pane this bridge runs inside. | |
| HYPERPANES_USER_DATA | No | Override just the userData dir; <dir>/control.json is used. | |
| HYPERPANES_ALLOW_INPUT | No | Set to '1' or 'true' to permit send_input on this bridge (off by default). | |
| HYPERPANES_LAUNCH_ARGS | No | Whitespace-separated leading args for the launcher (e.g. a dev runner). | |
| HYPERPANES_CONTROL_FILE | No | Override the path to the app's control.json. | |
| HYPERPANES_CONTROL_PORT | No | Port for a child pane control. | |
| HYPERPANES_CONTROL_TOKEN | No | A scoped control token for a child pane. | |
| HYPERPANES_INPUT_ALLOWLIST | No | Comma-separated pane ids or labels allowed to receive input. |
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": true
} |
| resources | {
"subscribe": true,
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| list_layoutsA | List the tab layouts hyperpanes supports (auto, single, columns, rows, grid, main-stack) with descriptions. Use these ids for a group/tab |
| validate_workspaceA | Validate a workspace spec against the hyperpanes schema without launching anything. Returns { valid, errors?, summary } where summary counts windows/tabs/panes. Accepts the nested windows[]->groups[]->panes[] shape or the legacy single-window panes[]/groups[] shape. |
| build_workspaceA | Validate a workspace spec and return canonical workspace JSON. Optionally write it to |
| launch_workspaceA | Launch hyperpanes with a workspace. Provide either |
| control_statusA | Check whether the hyperpanes control API is reachable and whether input is allowed. Reports the app pid/version, the bridge-side send_input gate, and the control.json path. Call this first if other control tools fail. |
| list_panesA | List all panes across all windows/tabs of the running hyperpanes instance, with status, activity (busy/idle/exited liveness heuristic), any org metadata (role/parent/agentType/task), tab/window context, and the resource URI for streaming each pane's output. |
| read_paneA | Read a pane's terminal output. |
| open_paneA | Open a new pane in the active tab of a window (defaults to the first window). Returns the new paneId. |
| spawn_workersA | Spawn a pool of queue workers in one call (#6). Opens pane(s) running the native |
| open_tabA | Attach one or more new tabs to an existing window (defaults to the first window), each with fresh shells — the programmatic equivalent of |
| list_projectsA | List the projects (remembered directories) the running hyperpanes instance tracks — its sidebar rail — newest-opened first. Each has an id, absolute path, name, frame color, and lastOpenedAt. Use an id (or name) with rename_project/recolor_project/remove_project, or as open_pane's |
| add_projectA | Remember a directory as a project (the programmatic equivalent of the sidebar PROJECTS + button). The path must exist and be a directory; a git repo is NOT required. Adding an already-known directory is a no-op — returns added:false with the existing entry. Returns the project (id/path/name/color). |
| rename_projectA | Rename a remembered project by id (find ids with list_projects). The new name shows in the sidebar rail. |
| recolor_projectA | Set a remembered project's frame/dot color by id (find ids with list_projects). Pass a hex color like "#a855f7"; the app retints open panes inside that project too. |
| remove_projectA | Forget a remembered project by id (find ids with list_projects). Removes it from the sidebar rail; does NOT delete the directory on disk. |
| set_metaA | Attach or update free-form metadata on a pane (merged: a string value sets/overwrites a key, an explicit null DELETES that key, untouched keys are kept). Reserved keys role/parent/agentType/task describe an agent org; the rest is open. Returns the TRUE merged metadata read back from the app (not your raw input). This is how an orchestrator records the org chart as data. |
| set_layoutA | Set the tiling layout of a tab. |
| focus_paneC | Focus a pane (and its tab/window). |
| close_paneB | Close a pane, terminating its shell. |
| restart_paneA | Kill and respawn a pane's shell. With resume:true, the pane's live Claude conversation (per its session marker) is resumed in its own cwd after the respawn — an agent may target its OWN pane to restart itself. |
| queue_promptA | Durably queue a message for a Claude conversation (by session id). It is typed into the owning pane the next time that session is ready — including after a pane restart, an app relaunch, or a reboot. Deliver-once; survives every process involved. |
| restart_appA | Restart the hyperpanes app itself (root token only). scope:"gui" relaunches the GUI — panes and their processes survive via the session daemon and re-attach. scope:"full" is the phoenix: a final workspace snapshot is flushed, GUI AND daemon exit (every pane dies), and the relaunched app restores the workspace, auto-resuming every pane's Claude conversation in its own cwd. Optional sessionId+prompt pre-queues a speak-first message for one resurrected conversation (e.g. the caller's own — self-restart across the apocalypse). |
| rename_paneA | Change a pane's label (title) and, optionally, its subtitle — applied live to the pane header. Pass subtitle:"" to clear it; omit subtitle to leave it unchanged. |
| recolor_paneA | Change a pane's frame color, applied live. Accepts any CSS color string (e.g. "#e5484d"). |
| send_inputA | Type text into a live shell. With |
| send_keysA | Send a sequence of named keys to a live pane as the right terminal bytes: enter, escape, tab, shift+tab, up/down/left/right, home/end, pageup/pagedown, backspace, delete, space, and ctrl+ (e.g. ctrl+c). For menus, y/n and trust prompts, and cancelling — things a text string can't express. Same triple gate as send_input (it IS input): app toggle + HYPERPANES_ALLOW_INPUT=1 + confirm=true. |
| prompt_paneA | Drive one full turn of a TUI agent (e.g. a live |
| set_talkA | Turn per-pane talk on/off: while enabled, the pane speaks NEW Claude assistant replies aloud via local TTS. Off by default. Returns the resolved talk state and TTS backend (plus a warning if the backend has a problem, e.g. missing binary). |
| set_speechA | Set global speech (TTS) settings: |
| stop_speechA | Immediately kill any in-flight speech utterance and clear the speech backlog (global one-shot). |
| whoamiA | Identify the pane this MCP bridge is running inside (from HYPERPANES_PANE_ID) and report its org metadata (role/parent/agentType/task) + window/tab context. The recursion enabler: a manager-agent-in-a-pane calls this to learn who it is before driving its sub-workers. Optionally pass paneId to describe a specific pane instead. |
| read_messagesA | Read a pane's durable message inbox (agent-orchestration E). |
| send_messageA | Enqueue a structured message to a pane's durable inbox (agent-orchestration E). Delivered at-least-once; the target reads it via read_messages or its messages resource. |
| send_to_parentA | Message this pane's org parent — resolved from its meta.parent (agent-orchestration E). Requires HYPERPANES_PANE_ID (this bridge runs inside a pane), or pass |
| broadcast_subtreeA | Send a message to every pane in an org subtree — all panes whose meta.parent chain leads back to |
| mint_tokenA | Mint a subtree-scoped control token (agent-orchestration F). The new token can only reach the named windows/tabs/panes, and only within the minting token's own authority (no escalation). Hand it to a child via open_pane env: { HYPERPANES_CONTROL_TOKEN: token, HYPERPANES_CONTROL_PORT: port } — the child then controls only its subtree and never sees the master token. Optional ttlMs expires it. |
| lock_paneA | Take an advisory write lock on a pane (agent-orchestration H) so only this owner can send_input until it expires or is released. Advisory: an unlocked pane is writable by anyone. Renew by acquiring again as the same owner. Pass the same |
| unlock_paneB | Release an advisory write lock you hold on a pane (agent-orchestration H). |
| list_queuesA | List every work queue and its depth (pending/claimed/etc. counts). Scope-filtered to the token. The work queue is the durable job queue behind the control server; use it to fan work out to competing workers. |
| enqueue_taskA | Append a task to a work queue (created on first use). |
| claim_taskA | Claim the next task(s) off a queue for |
| ack_taskA | Mark a claimed task done. Must carry the |
| nack_taskA | Report a claimed task as failed. By default it is re-queued until maxAttempts is exhausted (then it lands in |
| extend_taskA | Heartbeat a long-running task: extend its lease by |
| get_taskA | Fetch one task by id (state, payload, attempts, lease, timestamps). Returns task:null if it does not exist. |
| list_tasksA | List/inspect tasks in a queue. Optional |
| purge_queueA | Drop TERMINAL tasks (done/failed/dead) from a queue for retention/cleanup. In-flight (queued/claimed) tasks are kept. Returns how many were removed. |
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 47 tools
Most tools are clearly distinct, but there is some potential overlap between messaging/input tools like send_message, queue_prompt, prompt_pane, and send_input, which all involve sending text to a pane. Descriptions are detailed enough to separate them, but the boundaries are not perfectly obvious at a glance.
The naming convention is predominantly verb_noun in snake_case (e.g., launch_workspace, lock_pane, enqueue_task), which is consistent. Minor deviations like whoami and send_to_parent break the pattern slightly, but overall the convention is predictable and readable.
With 47 tools, this server is far above the typical well-scoped range of 3-15. While the tool count reflects a broad feature set (panes, workspaces, queues, messaging, projects, speech), it exceeds the threshold where usability suffers, making it feel bloated and harder to navigate.
The tool set covers the domain comprehensively: pane lifecycle, workspace management, queue operations, project management, messaging, and app control. Minor gaps exist (e.g., no explicit window/tab listing tool, no move/resize pane), but agents can work around them using existing tools, so the surface is largely complete.