herdr-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| HERDR_SESSION | No | Target a named Herdr session instead of the default one. | |
| HERDR_BIN_PATH | No | Path to the `herdr` binary. Default: first `herdr` on `PATH`. | |
| HERDR_MCP_MACHINE | No | Run every command against a saved SSH machine profile (`herdr --machine`). Live events are disabled in this mode because there is no local socket for that machine. | |
| HERDR_SOCKET_PATH | No | Low-level override of the socket path (CLI and event tap). | |
| HERDR_MCP_LOG_LEVEL | No | Log level written to stderr. Default `INFO`. | INFO |
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
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| herdr_statusA | Check that Herdr is reachable and report server version plus event tap state. |
| session_snapshotA | Full live snapshot: workspaces, tabs, panes, agents, layouts and focus. Large; prefer the list tools for routine checks. |
| workspace_listA | List workspaces with their labels, tab/pane counts and aggregate agent status. |
| workspace_getB | Get one workspace by id (for example "w1"). |
| workspace_createA | Create a workspace with one tab and one shell pane. Returns the new workspace, tab and root_pane ids. |
| workspace_focusC | Switch the user's view to a workspace. |
| workspace_renameC | Rename a workspace. |
| workspace_closeA | Close a workspace and every pane process in it. Only close workspaces you created or the user named. |
| tab_listA | List tabs, optionally within one workspace. |
| tab_createC | Create a tab with one shell pane. Returns the new tab and root_pane ids. |
| tab_focusB | Switch the user's view to a tab (for example "w1:t2"). |
| tab_renameC | Rename a tab. |
| tab_closeA | Close a tab and every pane process in it. Only close tabs you created or the user named. |
| pane_listA | List panes with cwd, title, hosted agent and agent status, optionally within one workspace. |
| pane_getB | Get one pane by id (for example "w1:p3"). |
| pane_layoutB | Geometry of the tab containing a pane: rects and split tree. Use it to pick a split direction. |
| pane_process_infoB | Foreground process and shell information for a pane. |
| pane_readB | Read terminal output from a pane. recent-unwrapped joins soft wraps and suits logs; visible is the rendered viewport. |
| pane_splitA | Split a pane to create a new shell pane beside it. Returns the new pane under result.pane. Split wide panes right and tall panes down. |
| pane_runB | Type a shell command into a pane and press Enter. The pane must be at an interactive shell prompt. |
| pane_send_textB | Send raw text to a pane without pressing Enter. |
| pane_send_keysC | Send logical key presses to a pane, for example ["ctrl+c"] or ["esc"] or ["enter"]. |
| pane_wait_outputC | Block until pane output contains a literal substring (match) or a Rust regex (regex). Output that already exists matches immediately. |
| pane_renameB | Set a pane's label, or clear it when label is omitted. |
| pane_closeA | Close a pane and kill its process. Only close panes you created or the user named. |
| agent_listA | List recognized coding agents: kind, name, pane, cwd, status and terminal title. |
| agent_getA | Get one agent by unique name or hosting pane id. |
| agent_explainB | Explain how Herdr detected an agent and why it reports its current state. |
| agent_readA | Read an agent's terminal output. Use after agent_prompt to see the response; use source=detection for the raw bottom-of-screen text. |
| agent_promptA | Submit a prompt to an agent. With wait=true, block until the agent settles (idle, done or blocked by default, or any state in until). Rejected with agent_blocked if the agent is already waiting at a dialog. |
| agent_waitB | Wait until an agent reaches a settled state (idle, done or blocked by default, or any state in until). |
| agent_send_keysB | Send logical key presses to an agent's UI, for example ["esc"], ["ctrl+c"], ["enter"], ["y"]. |
| agent_startA | Start a coding agent (kind such as claude, codex, grok, opencode, pi) in an existing idle shell pane and name it. Extra args go to the agent's own CLI. |
| agent_renameA | Give an agent a unique name, or clear it when name is omitted. |
| agent_focusB | Switch the user's view to an agent's pane and mark its completion as seen. |
| worktree_listB | List git worktrees known to a workspace or repository. |
| worktree_createC | Create a git worktree and open it as a linked workspace. |
| notification_showC | Show a toast inside the Herdr terminal UI. |
| events_statusA | State of the live event tap: connection, buffer bounds (oldest_seq, latest_seq), and last known agent status per pane. |
| events_recentB | Buffered Herdr events after since_seq, newest last. Kinds include pane_agent_status_changed, pane_agent_detected, pane_created, pane_closed, pane_exited, tab_created, tab_closed, workspace_created, workspace_closed, layout_updated, tap_connected, tap_disconnected. Returns latest_seq to use as the next cursor. |
| events_waitA | Block until a matching event arrives after since_seq, or until timeout_ms. Typical: kinds=["pane_agent_status_changed"], agent_status=["done","blocked"]. Returns timed_out=true with no events when nothing matched. |
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 41 tools
The set is strongly segmented by resource prefix (workspace_, tab_, pane_, agent_, events_, worktree_), and repeated actions such as list/get/create/close target explicit resources. The closest overlaps are pane_read vs agent_read and pane_send_keys vs agent_send_keys, plus the several input tools, but descriptions make the intended conditions clear.
All names use snake_case with a resource/domain prefix, and nearly all are resource_action forms like workspace_list, pane_read, and agent_prompt. Exceptions such as herdr_status, session_snapshot, and events_status are readable status/snapshot nouns and do not break the overall convention.
41 tools is heavy for any single MCP server; even though the terminal/workspace/agent domain is broad, many fine-grained pane/agent input, read, and wait variants could be consolidated or parameterized. The count exceeds the reasonable 3-15 range and sits in the 'too many' band.
Core lifecycle is covered: workspaces, tabs, and panes can be created, listed, renamed, focused, and closed; agents can be started, prompted, waited on, and read; events and worktrees have support. Gaps remain for pane_focus/resize, agent_stop, tab_get, and worktree_remove, though terminal access and close operations provide workarounds.