Terminal MCP Server
Allows managing multiplexed terminal sessions via tmux, enabling spawning, sending input, reading output, and orchestrating multiple concurrent terminal sessions.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Terminal MCP Serverspawn a background session named 'server' running 'npm run dev'"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Terminal MCP Server
MCP server for managing multiplexed terminal sessions via tmux. Lets AI agents spawn, send input to, read output from, and orchestrate multiple concurrent terminal sessions.
Why
Claude Code (and other MCP clients) can run shell commands, but can't manage long-running processes, interactive sessions, or multiple concurrent terminals. This server bridges that gap using tmux as the multiplexer.
Key use case: multi-agent orchestration. Run multiple Claude Code sessions in tmux panes, then use terminal_send to type messages into any session — from the target's perspective, a human just typed. This enables Claude-to-Claude communication with full context and permissions.
Related MCP server: Agent Collaboration MCP Server
Install
Requires tmux installed and in PATH.
Add to your Claude Code MCP config (~/.claude/mcp.json or .mcp.json):
{
"mcpServers": {
"terminal": {
"command": "npx",
"args": ["@quantum-encoding-europe-limited/terminal-mcp"]
}
}
}Or run directly:
npx @quantum-encoding-europe-limited/terminal-mcpTools
Tool | Description |
| List all active sessions (name, PID, cwd, command) |
| Create a named session with optional cwd, startup command, and mode |
| Type text into a session (keystrokes via tmux send-keys) |
| Read last N lines from a session (ANSI-stripped) |
| Graceful close (Ctrl+C, Ctrl+D, then kill) |
| Send Ctrl+C/D/Z/L/\ to a session |
| Resize pane dimensions |
| Overview of ALL sessions — last 5 lines each |
| Poll until output matches a pattern (e.g. "Server ready") |
Spawn Modes
terminal_spawn supports a mode parameter for controlling how Claude sessions run:
Mode | Behaviour |
| (default) Normal foreground session with permission prompts. Best when you need to approve tool calls. |
| Auto-allows safe tools (Bash, Edit, Read, Write, Glob, Grep, Agent) but blocks destructive ops (git force push, git reset --hard, git branch -D, git clean -f, rm -rf). Best for autonomous work with guardrails. |
| Resume an existing Claude session by name, with the same background safety guardrails. |
terminal_spawn("scanner", cwd="/my/project", mode="background")
// Launches: claude --allowedTools "Bash(*) Edit Read Write Glob Grep Agent"
// --disallowedTools "Bash(git push --force*) Bash(git reset --hard*) ..."
terminal_spawn("scanner", mode="resume")
// Launches: claude --resume "scanner" --allowedTools ... --disallowedTools ...Note: Background mode never uses --dangerously-skip-permissions. It uses curated allow/deny lists so agents can work autonomously without being able to force-push, delete branches, or wipe files.
Examples
Run a dev server and wait for it
terminal_spawn("server", cwd="/my/project", command="npm run dev")
terminal_wait("server", pattern="ready on port 3000")Orchestrate multiple Claude sessions
# Spawn specialists in background mode (no permission prompts)
terminal_spawn("backend", cwd="/work/api", mode="background")
terminal_spawn("frontend", cwd="/work/app", mode="background")
# Wait for Claude to start, then send tasks
terminal_wait("backend", pattern="? for shortcuts")
terminal_send("backend", "add input validation to the POST /users endpoint")
terminal_wait("frontend", pattern="? for shortcuts")
terminal_send("frontend", "update the user form to match the new API validation")Monitor everything at once
terminal_snapshot() # see last 5 lines from every sessionConfiguration
Environment variables:
Variable | Default | Description |
| auto-detected / | tmux session name |
|
| Default line capture limit |
If running inside tmux, the current session is auto-detected. Otherwise falls back to TERMINAL_MCP_SESSION or creates mcp-terminals.
How it works
All terminal management goes through tmux:
terminal_spawn→tmux split-window+tmux select-pane -Tterminal_send→tmux send-keys(short input) ortmux load-buffer+paste-buffer(long input, avoids escaping issues)terminal_read→tmux capture-pane -pterminal_close→tmux kill-pane
Name matching is fuzzy — handles tmux title prefixes (like Claude's spinner characters ✳ ✽ ⏺) automatically.
License
MIT
Available Tools
9 toolsterminal_closeA
Close a terminal session by name. Sends SIGTERM to the process running in the pane.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Terminal name to close | |
| force | No | Force kill with SIGKILL if SIGTERM doesn't work (default: false) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden. It explicitly states that closing sends SIGTERM to the process in the pane, which reveals the mechanism and that this is a real process termination. It does not mention the force/SIGKILL fallback or post-close state, but the core destructive effect is clearly disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with no filler; the primary purpose is front-loaded, and the second sentence adds the signal detail. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple, has full schema coverage, and the core action and effect are described, so an agent can invoke it with the required name. However, there is no output schema, no error/return behavior, and no guidance on how this differs from terminal_send_signal, leaving some operational context missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents both parameters ('Terminal name to close', 'Force kill with SIGKILL...'). The description only reinforces the name parameter via 'by name' and adds no new semantics for force or default behavior, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('close'), names the resource ('terminal session'), and adds the 'by name' scoping plus the concrete effect (SIGTERM to the pane's process). This clearly separates it from siblings like terminal_spawn or terminal_send_signal.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for ending a named terminal session, but it never explicitly states when to prefer it over terminal_send_signal or how it differs from other terminal lifecycle tools. No selection criteria or alternatives are given, leaving usage to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
terminal_listA
List all active terminal sessions with their names, PIDs, working directories, and current commands.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must convey the tool's behavioral profile. 'List' implies a read-only operation, and the described output fields add useful specificity, but the description does not disclose potential limitations, session scoping, or whether the list is global to the workspace.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single efficient sentence with no filler. The main action and resource are front-loaded, followed by a compact list of the returned fields.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a parameterless list tool, the description provides sufficient context: it names the return contents and the target resource. There is no output schema, so slightly more detail about the response structure could help, but the core invocation needs are fully covered.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the baseline is 4 and parameter semantics are not a concern. The description adds value by clarifying what data is returned for each session, even though no input semantics are needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('List') and a clear resource ('all active terminal sessions'), and enumerates the returned fields: names, PIDs, working directories, and current commands. This differentiates the tool from mutating siblings like terminal_close and terminal_send.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for enumerating active terminal sessions, but it does not explicitly say when to use it versus alternatives such as terminal_snapshot or terminal_read. No exclusions or sibling comparisons are provided, so the usage context is only inferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
terminal_readA
Read the current visible output from a terminal session. Returns the last N lines of output with ANSI codes stripped.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Terminal name to read from | |
| lines | No | Number of lines to capture (default: 50, max: 500) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral disclosure burden. It reveals that output is limited to the last N lines and that ANSI codes are stripped, which is behavior beyond what the schema states. It does not mention side effects, but as a read operation this is an acceptable level of transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that front-loads the core action and resource, then adds the two most decision-relevant details (line limit and ANSI stripping). Every word contributes, with no repetition or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a low-complexity tool with no output schema, the description adequately explains what is returned ('last N lines', 'ANSI codes stripped'). It does not specify the exact return structure (e.g., array of strings vs joined string) or error behavior for a missing terminal, but these are minor gaps for an agent invoking this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters (name, lines) are already well documented. The description adds some context about how the 'lines' parameter relates to output but does not meaningfully go beyond the schema. A baseline score of 3 is appropriate when structured data handles parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Read'), identifies the resource ('current visible output from a terminal session'), and adds precise detail ('last N lines', 'ANSI codes stripped'). This clearly distinguishes it from sibling tools like terminal_send (write) or terminal_snapshot (full state capture).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to use this tool versus alternatives such as terminal_snapshot or terminal_wait. The description implicitly suggests it is for reading output, but it does not state exclusions, prerequisites, or conditions that would route an agent to a different sibling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
terminal_resizeA
Resize a terminal pane (useful before reading output from width-sensitive programs).
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Terminal name | |
| width | No | New width in columns | |
| height | No | New height in rows |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the resize action but does not disclose what happens if only 'name' is provided (width/height are optional per schema), whether the resize persists, how it affects pane contents, or failure behavior. For a mutating tool this is a noticeable gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence that front-loads the action and adds a brief rationale. Every word earns its place; there is no fluff, repetition, or boilerplate.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With three parameters, no output schema, and no annotations, the description is adequate for basic invocation but leaves ambiguity about optional-parameter behavior (e.g., resizing with only 'name') and the lack of a return value. It is functional but not thorough.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents the 'name', 'width', and 'height' parameters. The description adds no parameter-level detail beyond that, which meets the baseline of 3 but does not exceed it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Resize') with a clear resource ('a terminal pane'), immediately distinguishing it from siblings like terminal_close, terminal_list, terminal_send, terminal_read, terminal_snapshot, and terminal_wait. The parenthetical adds practical context without obscuring the core action.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a concrete usage context: 'useful before reading output from width-sensitive programs'. This implies when to use it, but it does not explicitly state when not to use it or name alternatives. Clear context with no exclusions earns a 4.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
terminal_sendB
Send input (keystrokes) to a named terminal session. Use this to type commands, answer prompts, or send signals.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Terminal name to send input to | |
| enter | No | Press Enter after the input (default: true) | |
| input | Yes | Text to type into the terminal |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description alone must disclose behavioral traits. It mentions keystokes and named sessions, but does not say that input is sent without reading output, whether failed sends produce errors, or what side effects occur. For a tool that can execute commands, this lack of behavioral disclosure is a material gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loaded, stating the action first and use cases second. Every sentence earns some place, but the 'or send signals' clause is redundant with the sibling terminal_send_signal and introduces ambiguity, so it is not perfectly tight.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple and has a fully documented schema, but there is no output schema and no annotations. The description does not clarify how to coordinate with terminal_read, how to handle the default Enter behavior in practice, or how sending signals via this tool differs from terminal_send_signal. It is adequate but not complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema coverage is 100%, so each parameter is already described in the schema. The description adds some semantic context by mentioning typing commands and answering prompts, which helps clarify the `input` parameter, but it does not add significant meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb-resource pair: 'Send input (keystrokes) to a named terminal session.' It clearly conveys the core action and distinguishes the tool from read, spawn, close, and resize siblings. However, the phrase 'or send signals' blurs the boundary with the sibling tool terminal_send_signal, preventing a full 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description offers use cases such as typing commands, answering prompts, or sending signals, which gives an agent some context for when to invoke it. It does not explicitly state when to choose terminal_send_signal instead, despite that sibling existing, so the guidance is incomplete and slightly misleading.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
terminal_send_signalA
Send a signal to a terminal session (Ctrl+C to interrupt, Ctrl+Z to suspend, Ctrl+D to EOF, etc).
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Terminal name | |
| signal | Yes | Signal to send: ctrl-c (interrupt), ctrl-d (EOF), ctrl-z (suspend), ctrl-l (clear), ctrl-\ (quit) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the burden of behavioral disclosure. It explains the immediate effects of signals (interrupt, suspend, EOF), which is useful, but it does not mention session state changes, error behavior, whether the session must already exist, or other side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, focused sentence that front-loads the core action and immediately supplies meaningful examples. There is no redundancy or unnecessary elaboration.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter tool with an enum and no output schema, the description is adequate but not fully complete. It does not mention how to obtain the terminal name, whether the terminal must be active, or what happens after a signal is sent, leaving some gaps for an agent to infer from sibling tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already provides 100% coverage for both parameters, including descriptions and an enum with signal meanings. The tool description adds examples but mostly duplicates what the schema already explains, so it does not significantly expand parameter understanding beyond the schema baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific action ('Send a signal to a terminal session') and provides concrete examples (Ctrl+C, Ctrl+Z, Ctrl+D) that make the tool's purpose identifiable. It is sufficiently distinguished from the sibling terminal_send by focusing on control signals rather than input, though it does not explicitly name the sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage by listing signal purposes such as interrupt, suspend, and EOF, giving an agent a sense of when the tool is appropriate. However, it does not explicitly state when to prefer this tool over alternatives like terminal_send or terminal_close, nor does it mention any exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
terminal_snapshotA
Take a snapshot of all terminals — names, commands, last few lines of output. Useful for getting an overview of what's happening across all sessions.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the burden of behavioral disclosure. 'Snapshot' implies a non-destructive read, but the text never explicitly states that it does not modify terminal state or consume output. It also doesn't mention potential performance cost of scanning all sessions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no wasted words. The action, scope, content, and use case are all delivered up front without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, no-output-schema tool, the description adequately covers what it does and what information it returns. It could be slightly stronger by explicitly noting the output format or confirming that no state changes occur, but these are minor gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the baseline is 4. The description adds no parameter details, but none are needed since the schema confirms there is nothing to configure.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('take a snapshot') naming a clear resource ('all terminals') and lists the captured contents (names, commands, last few lines of output). This clearly distinguishes the tool from siblings like terminal_read (single terminal) and terminal_list (likely just names/IDs).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'useful for getting an overview of what's happening across all sessions' gives clear context for when to use it. However, it does not explicitly state when not to use it or point to specific alternatives such as terminal_read for inspecting one terminal in detail.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
terminal_spawnA
Spawn a new named terminal session. Optionally start it in a specific directory and/or run a command immediately.
Use 'mode' to control how Claude sessions run:
"interactive" (default): Normal foreground session with permission prompts.
"background": Auto-allows safe tools (Bash, Edit, Read, Write, Glob, Grep, Agent) but blocks destructive git commands (force push, reset --hard, branch -D, clean -f) and rm -rf. Best when you want autonomous work with guardrails.
"resume": Resume an existing Claude session by name with the same background safety guardrails.
| Name | Required | Description | Default |
|---|---|---|---|
| cwd | No | Working directory to start in | |
| mode | No | Session mode: 'interactive' (default), 'background' (skip permissions), 'resume' (resume existing session) | |
| name | Yes | Name for this terminal (e.g. 'backend', 'tests', 'server') | |
| shell | No | Shell to use (default: $SHELL) | |
| command | No | Command to run immediately after spawning (e.g. 'npm run dev') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It adds meaningful behavioral detail: background mode auto-allows safe tools, blocks destructive git commands and rm -rf, and resume reuses existing sessions. It does not mention duplicate name handling or whether the command blocks, but the disclosed mode behavior is substantial.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core sentence is front-loaded, and the mode details are organized into a compact bulleted list. Each section earns its place, though the description is slightly longer than strictly necessary for a spawn operation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is strong on modes and parameter semantics, but gaps remain: it does not explain what happens if the session name already exists, whether the optional command runs asynchronously, or what the tool returns after spawning. With no output schema and no annotations, these are relevant gaps for an agent invoking a creation tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds value beyond the schema by explaining each mode's exact safety behavior and when to use it, especially for 'background' and 'resume'. This pushes parameter semantics above the schema-only baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a concrete action and resource: 'Spawn a new named terminal session.' It also states optional directory and immediate command execution, which makes the tool's purpose clear. It does not explicitly contrast with sibling tools, but 'new' and 'spawn' make it distinguishable from terminal_send, terminal_read, and terminal_close.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit mode-selection guidance: 'interactive' is default, 'background' is 'best when you want autonomous work with guardrails', and 'resume' resumes an existing session. It does not discuss when to use this tool versus the other terminal lifecycle tools, but for a spawn action the mode guidance is the key usage decision.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
terminal_waitA
Wait for a terminal to show specific output. Polls every second up to the timeout.
Also watches for permission prompts ("Do you want to proceed") and returns immediately with a "permission_needed" status so the conductor can approve without wasting the timeout.
Returns JSON-like status: "found" (pattern matched), "permission_needed" (prompt detected), or "timeout" (neither matched in time).
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Terminal name to watch | |
| pattern | Yes | Text pattern to wait for (substring match, case-insensitive) | |
| timeout | No | Max seconds to wait (default: 30, max: 120) | |
| interrupt_on | No | Additional patterns that trigger early return (default: permission prompts). Case-insensitive. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden — and it delivers. It discloses the polling cadence (every second), the timeout cap, the special early-return condition for permission prompts (with a concrete example string), and the full set of return statuses with their meanings. This is exactly the behavioral depth an agent needs to predict tool behavior without executing it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight paragraphs where every sentence earns its place: core purpose and polling behavior first, the special permission-prompt behavior second, and a compact enumeration of return statuses third. There is zero fluff, zero repetition of schema content, and the most decision-relevant information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no output schema and no annotations, the description must document return values — it does, enumerating found/permission_needed/timeout with meanings. Minor gaps remain: error behavior for an invalid terminal name or pattern is unaddressed, and the phrase 'JSON-like status' is imprecise about the exact response shape, which could cause parsing ambiguity for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%: every parameter (name, pattern, timeout, interrupt_on) already has a clear schema description including defaults, bounds, and matching semantics. The description adds minor linkage — e.g., how pattern relates to the 'found' status and how interrupt_on defaults to permission prompts — but the schema does the heavy lifting, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence states a specific verb and resource: 'Wait for a terminal to show specific output.' It adds the polling mechanism (every second up to timeout), which cleanly distinguishes it from sibling tools like terminal_read or terminal_snapshot — none of which block-and-wait. An agent can immediately know what this tool is for and what it is not.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The usage context is implied rather than stated: the permission_needed status and 'so the conductor can approve' hint at an orchestration flow, but the description never explicitly says when to use this versus alternatives like terminal_read or terminal_snapshot, nor does it mention a canonical flow such as 'send a command, then wait for its output.' No exclusions or when-not-to-use guidance is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
9 tool updates
v0.2.0- First observed
terminal_close - First observed
terminal_list - First observed
terminal_read - First observed
terminal_resize - First observed
terminal_send - First observed
terminal_send_signal - First observed
terminal_snapshot - First observed
terminal_spawn - First observed
terminal_wait
TDQS
Each tool targets a distinct terminal operation: lifecycle (spawn/list/close), I/O (read/send/signal), and inspection (snapshot/resize/wait). Snapshot differs from list and read by combining an overview of all sessions with recent output. There is no real ambiguity between tools.
All tool names follow a consistent terminal_verb pattern: spawn, list, read, send, send_signal, resize, snapshot, wait, close. Even the compound send_signal is clearly a verb_noun construction consistent with the rest. The naming is uniform and predictable.
Nine tools is well-scoped for a terminal management server. Each tool covers a meaningful part of the terminal lifecycle without unnecessary redundancy. The count feels complete and not bloated.
The surface covers the full terminal workflow: spawn, interact, read, signal, resize, wait for output, snapshot, and close. There are no obvious missing operations that would prevent an agent from driving a terminal session effectively. The inclusion of permission-prompt handling in terminal_wait rounds out practical needs.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Docs for agent-manager, the terminal UI that runs AI coding agents as live tmux sessions.
Operate Linux, macOS and Windows from your LLM. Every action runs through an auditable allowlist.
Build, validate, and deploy multi-agent AI solutions from any AI environment.
Develop, manage, and debug Railway projects, services, and deployments from within agents.
Related MCP Servers
- AlicenseAqualityDmaintenanceEnables AI assistants to manage local tmux sessions, including creating and controlling sessions, windows, and panes, sending commands, and capturing terminal output.1617Do What The F*ck You Want To Public
- AlicenseBqualityDmaintenanceEnables AI agents to orchestrate a team of sub-agents through tmux sessions for complex task delegation and parallel implementation. It provides tools for launching agents, monitoring their real-time status, and managing communication between them.61926MIT
- AlicenseAqualityDmaintenanceAllows AI assistants to create, manage, and interact with tmux sessions, windows, and panes programmatically.19MIT
- AlicenseNot gradedqualityBmaintenanceEnables AI agents to execute commands in a shared tmux session that is simultaneously visible to a human via a web-based terminal UI.1MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/quantum-encoding/terminal-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server