Skip to main content
Glama

tui-mcp

What Chrome DevTools MCP is for the browser, tui-mcp is for the terminal.

Launch any terminal app in a managed pty, take screenshots, read text, send keystrokes. The app thinks it's running in a real terminal. Works with any TUI framework or no framework at all - vim, htop, bubbletea, textual, ink, inquirer, trend, ncurses, whatever.

How is this different from a bash tool?

A bash tool runs discrete commands - each invocation is fire-and-forget. The process exits, the output comes back. tui-mcp maintains a persistent, interactive session. The pty stays alive between calls. This matters when:

  • The tool has state - you're in a mysql shell, you've USEd a database, you're in a transaction. A bash tool can't hold that session open between calls.

  • The tool has UI - htop, vim, k9s, lazygit. A bash tool gets garbage back because these apps paint full-screen interfaces with ANSI escape codes. tui-mcp renders them into a readable screenshot or text snapshot through xterm emulation.

  • The interaction is multi-step - SSH prompts for a password, then a 2FA code, then you're in. An interactive installer asks questions. git rebase -i drops you into an editor. These are conversational flows that a stateless bash tool can't handle.

  • You need to watch something - tail a log, monitor a build, wait for a deploy to finish. The session stays open, the agent can snapshot whenever it wants to check progress.

  • The tool requires a TTY - some CLIs behave differently (or refuse to run) without a real terminal. node-pty gives them a real pty with xterm-256color, so everything works as expected.

A bash tool is exec(). tui-mcp is "sit down at a terminal and use it like a human." One runs commands, the other operates software.

Some example outputs of the screenshot tool:

trend dashboard lore htop

Related MCP server: mcp-server-terminal

Setup

claude mcp add --scope user tui-mcp -- npx tui-mcp

Tools

Tool

Description

launch

Spawn a TUI app in a managed pty

kill

Terminate a session

list_sessions

List sessions, including recently exited ones

status

Get one session's state and exit code

resize

Resize the terminal

screenshot

Capture terminal as PNG

snapshot

Capture terminal as plain text

scrollback

Read the buffer including scrolled-off history

output

Read the raw pty byte stream (escape sequences included)

read_region

Read a rectangular area of the buffer

cursor

Get cursor position

send_keys

Send a keystroke or combo (Enter, Ctrl+C, Ctrl+Up, q)

send_text

Type a string of characters

send_mouse

Send mouse events

wait_for_text

Wait for a regex pattern to appear

wait_for_idle

Wait until the terminal stops changing

wait_for_exit

Wait for the process to exit and get its exit code

Interesting use cases

  • remote ops: agent SSHs into a production box, tails logs, greps for errors, restarts a service, watches it come back up. it's reading the same terminal output a human SRE would see. no custom APIs needed.

  • legacy system interaction: ncurses admin panels, mysql cli, redis-cli, psql - the agent can drive all of these. stuff that will never get a REST API.

  • multi-session orchestration: agent launches 3-4 sessions simultaneously. one running a dev server, one running tests, one tailing logs, one in a debugger. it's basically pair programming with an extra set of hands.

  • interactive debuggers: gdb, lldb, pdb, node --inspect. the agent can set breakpoints, step through code, inspect variables.

  • infrastructure as conversation: kubectl, terraform, docker, aws cli. agent doesn't need the kubernetes MCP server or the AWS MCP server. it just uses the CLIs directly, same as a human would.

Most MCP servers wrap one specific tool or API. tui-mcp wraps the terminal itself, which is the universal interface that all tools already speak. It's MCP's eval().

Monitor

Watch and control all active sessions from your terminal:

npx tui-mcp monitor

Session list on the left, live ANSI-rendered terminal preview on the right. The monitor discovers every running tui-mcp server on the machine and aggregates their sessions.

Keys:

  • j/k or arrows to move through servers and their sessions, g/G for top/bottom, mouse click and scroll also work

  • enter on a session attaches - everything you type passes through to its pty, ctrl+\ detaches

  • enter on a server opens the launch panel targeting it

  • s fetches the session's full scrollback into a scrollable view, esc returns to live

  • l launches a new session on the selected row's server (ctrl+s cycles the target)

  • x twice within 3 seconds kills the selected session

  • q quits

Attach, launch, kill, and scrollback need the server to be 1.2 or newer; sessions on older servers are marked ro (read-only) and can still be watched.

How it works

your app  <-->  node-pty  <-->  xterm-headless  <-->  MCP tools
                (pty)        (terminal emulator)    (screenshot, send_keys, etc.)

The app runs in a real pseudo-terminal via node-pty. Its output is parsed by xterm-headless (the same terminal emulator that powers VS Code's terminal, but without a DOM). The MCP tools read and interact with that parsed buffer.

Available Tools

13 tools
cursorGet CursorC

Get the current cursor position in the terminal.

ParametersJSON Schema
NameRequiredDescriptionDefault
sessionIdYesSession ID

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It states what the tool does but lacks details on permissions, rate limits, side effects, or response format. For a tool that likely interacts with terminal sessions, this is insufficient to inform safe and effective use.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, clear sentence that directly states the tool's purpose without unnecessary words. It's front-loaded and efficiently conveys the core functionality, making it easy for an agent to parse quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the lack of annotations and output schema, the description is incomplete. It doesn't explain what the cursor position returns (e.g., coordinates, format), error conditions, or dependencies on other tools like 'launch'. For a tool in a terminal management context, this leaves significant gaps in understanding.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage, with the single parameter 'sessionId' documented in the schema. The description doesn't add any parameter-specific information beyond what the schema provides, so it meets the baseline score without compensating for gaps.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose with a specific verb ('Get') and resource ('current cursor position in the terminal'), making it immediately understandable. However, it doesn't explicitly differentiate from sibling tools like 'send_mouse' or 'read_region', which might also involve cursor or terminal interactions, so it doesn't reach the highest score.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites, context (e.g., after launching a session), or comparisons to siblings like 'read_region' that might retrieve terminal data. This leaves the agent with minimal usage direction.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

killKill SessionB

Terminate a TUI session and its underlying process.

ParametersJSON Schema
NameRequiredDescriptionDefault
sessionIdYesSession ID to kill

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions termination but lacks details on permissions needed, whether the action is reversible, potential side effects (e.g., data loss), or error handling. This is a significant gap for a destructive operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence with zero waste—it directly states the tool's action and target without unnecessary words. It is appropriately sized and front-loaded for quick understanding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's destructive nature and lack of annotations or output schema, the description is incomplete. It fails to address critical context like what 'terminate' entails (e.g., irreversible shutdown), response behavior, or error cases, leaving gaps for safe agent use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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 'sessionId' parameter fully. The description adds no additional meaning beyond what the schema provides, such as format examples or constraints, meeting the baseline for high schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the specific action ('Terminate') and target ('a TUI session and its underlying process'), distinguishing it from sibling tools like 'list_sessions' (which lists) or 'resize' (which modifies). It goes beyond a tautology by specifying what gets terminated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives like 'cursor' or 'send_keys', nor does it mention prerequisites (e.g., needing an active session) or exclusions. It merely states what the tool does without contextual usage advice.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

launchLaunch TUIA

Launch a TUI application in a managed pseudo-terminal. Returns a session ID for subsequent interactions.

ParametersJSON Schema
NameRequiredDescriptionDefault
commandYesCommand to run (e.g. "node app.js", "vim file.txt", "htop")
colsNoTerminal width in columns (default: 80)
rowsNoTerminal height in rows (default: 24)
cwdNoWorking directory for the process

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden for behavioral disclosure. It mentions the session ID return but lacks critical details: whether the process runs in background/foreground, timeout behavior, error handling, resource limits, or how the pseudo-terminal is managed. For a tool that launches processes, this leaves significant behavioral gaps.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences with zero waste: the first states the core functionality, the second states the return value. Every word earns its place, and the most important information (what it does and what it returns) is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no annotations and no output schema, the description provides minimal but essential context: it launches TUI apps and returns a session ID. However, for a tool that creates managed processes, it lacks information about lifecycle management, error conditions, or interaction patterns. The context is complete enough to understand the basic purpose but insufficient for robust usage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema fully documents all 4 parameters. The description adds no parameter-specific information beyond what's in the schema. The baseline score of 3 reflects adequate coverage through schema alone, with no additional value from the description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the specific action ('Launch a TUI application'), the resource ('in a managed pseudo-terminal'), and the outcome ('Returns a session ID for subsequent interactions'). It distinguishes this from sibling tools like 'cursor', 'kill', or 'list_sessions' by focusing on initial session creation rather than interaction or management.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for starting TUI applications with session management, but provides no explicit guidance on when to use this versus alternatives like direct command execution or other session tools. It doesn't mention prerequisites, limitations, or typical use cases beyond the basic functionality.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_sessionsList SessionsB

List all active TUI sessions with their IDs, commands, and dimensions.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden but only states what the tool returns, not behavioral aspects like whether it's read-only, if it requires specific permissions, how it handles inactive sessions, or potential rate limits. It lacks disclosure of traits beyond basic functionality.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that front-loads the core action and details without waste. Every word contributes to understanding the tool's function, making it appropriately sized and well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (0 parameters, no output schema, no annotations), the description is adequate but minimal. It explains what the tool does but doesn't address behavioral context or usage guidelines, leaving gaps for an agent to infer how to integrate it with sibling tools effectively.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has 0 parameters with 100% schema description coverage, so the schema fully documents the lack of inputs. The description appropriately doesn't add parameter details, maintaining focus on the tool's purpose without redundancy. Baseline is high for zero-parameter tools.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('List') and resource ('all active TUI sessions'), specifying what information is returned (IDs, commands, dimensions). It distinguishes from siblings like 'cursor' or 'kill' by focusing on listing rather than manipulation. However, it doesn't explicitly differentiate from similar listing tools if any existed.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives. The description doesn't mention prerequisites, timing considerations, or comparisons with other tools like 'snapshot' or 'wait_for_idle' that might provide session-related information. Usage context is implied but not stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

read_regionRead RegionC

Read a rectangular region of the terminal buffer as text.

ParametersJSON Schema
NameRequiredDescriptionDefault
sessionIdYesSession ID
rowYesStarting row (0-based)
colYesStarting column (0-based)
widthYesWidth in columns
heightYesHeight in rows

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions reading text but doesn't cover critical aspects like whether this requires specific permissions, if it's a read-only operation (implied but not stated), error handling (e.g., invalid coordinates), or performance characteristics. This leaves significant gaps for an agent to understand how to use it safely and effectively.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that directly states the tool's function without any fluff. It's front-loaded with the core action and resource, making it easy to parse quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity of a terminal interaction tool with 5 required parameters and no output schema, the description is insufficient. It lacks information about return values (e.g., format of the text, error responses), behavioral context (as noted in transparency), and usage guidelines. This makes it incomplete for an agent to reliably invoke the tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema fully documents all 5 parameters (sessionId, row, col, width, height). The description adds no additional meaning beyond implying a rectangular region, which is already clear from the parameter names. This meets the baseline for high schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Read') and resource ('rectangular region of the terminal buffer as text'), making the purpose immediately understandable. It doesn't explicitly differentiate from siblings like 'screenshot' or 'wait_for_text', but the specificity of reading text from a defined region is reasonably distinct.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives like 'screenshot' (which might capture visual output) or 'wait_for_text' (which monitors for text). The description only states what it does, not when it's appropriate or what prerequisites might exist (e.g., needing an active session).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

resizeResize TerminalB

Resize the terminal dimensions of a session. The TUI app will receive a SIGWINCH signal.

ParametersJSON Schema
NameRequiredDescriptionDefault
sessionIdYesSession ID
colsYesNew width in columns
rowsYesNew height in rows

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden. It discloses that resizing sends a SIGWINCH signal to the TUI app, which is useful behavioral context beyond basic functionality. However, it lacks details on permissions, error conditions (e.g., invalid sessionId), or side effects, leaving gaps for a mutation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise—two sentences that directly state the action and a key behavioral effect. Every word earns its place, with no redundancy or fluff, making it easy to parse quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's moderate complexity (mutation with 3 params) and no annotations or output schema, the description is minimally adequate. It covers the core action and a signal effect but misses details like return values, error handling, or dependencies on other tools (e.g., 'list_sessions'). It relies on the schema for param docs.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema fully documents parameters (sessionId, cols, rows). The description adds no additional parameter semantics beyond what's in the schema, such as unit explanations or constraints. This meets the baseline for high schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Resize') and the target ('terminal dimensions of a session'), making the purpose immediately understandable. It distinguishes itself from siblings like 'cursor' or 'send_keys' by focusing on terminal resizing. However, it doesn't explicitly differentiate from potential similar tools (none present in siblings), keeping it at 4 rather than 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., needing an active session), exclusions, or related tools like 'launch' for starting sessions. Without such context, users must infer usage from the purpose alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

screenshotScreenshotB

Capture the terminal as a PNG image. Shows exactly what a user would see - colors, styling, layout.

ParametersJSON Schema
NameRequiredDescriptionDefault
sessionIdYesSession ID

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It mentions the output format (PNG) and visual fidelity, but fails to disclose critical behavioral traits such as whether this requires an active session, permissions needed, file storage location, error conditions, or rate limits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core purpose in the first sentence, and the second sentence adds valuable context without redundancy. Both sentences earn their place, making it appropriately sized and efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (capturing visual output) and lack of annotations or output schema, the description is incomplete. It omits details on behavioral aspects like error handling, file output specifics, or dependencies on session state, which are crucial for effective use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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 single parameter 'sessionId'. The description does not add any meaning beyond what the schema provides, such as explaining what a sessionId is or where to obtain it, but the baseline of 3 is appropriate given high schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the specific action ('Capture') and resource ('terminal as a PNG image'), and distinguishes it from siblings like 'snapshot' by specifying the output format and visual fidelity ('Shows exactly what a user would see - colors, styling, layout').

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance on when to use this tool versus alternatives like 'snapshot' or 'read_region' is provided. The description implies usage for capturing visual terminal state but lacks context on prerequisites, exclusions, or comparisons to sibling tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

send_keysSend KeysA

Send keystrokes to the TUI app. Use this for special keys and shortcuts, not for typing text (use send_text for that). Accepts a single key descriptor string or an array of key descriptors to send in sequence. Supports named keys (Enter, Tab, Escape, Up, Down, Left, Right, Backspace, Delete, Home, End, PageUp, PageDown, F1-F12, Space) and modifiers (Ctrl+, Alt+, Shift+). Examples: "Enter", "Ctrl+C", ["Down", "Down", "Down", "Enter"], ["Escape", ":wq", "Enter"].

ParametersJSON Schema
NameRequiredDescriptionDefault
sessionIdYesSession ID
keysYesKey descriptor or array of key descriptors (e.g. "Enter", "Ctrl+C", ["Down", "Down", "Enter"])

TDQS

A4.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden for behavioral disclosure. It describes what the tool does (sends keystrokes) and provides examples of supported keys and modifiers, but doesn't mention error conditions, timing considerations, or what happens if the session doesn't exist. It adds some context but lacks comprehensive behavioral details.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is efficiently structured with zero waste: first sentence states purpose and usage guidelines, second explains parameter semantics with examples. Every sentence earns its place and information is front-loaded appropriately.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 2 parameters, 100% schema coverage, and no output schema, the description provides good contextual completeness. It explains the tool's purpose, when to use it, and adds valuable parameter semantics. The main gap is lack of behavioral details like error handling or performance characteristics, but overall it's quite complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

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 both parameters. The description adds significant value by explaining the semantics of the 'keys' parameter: it clarifies that it accepts a single key descriptor OR an array, provides a comprehensive list of supported named keys and modifiers, and gives concrete examples. This goes well beyond what the schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb ('Send keystrokes') and resource ('to the TUI app'), and explicitly distinguishes it from sibling tool 'send_text' by specifying 'not for typing text (use send_text for that)'. This provides specific differentiation from alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit guidance on when to use this tool ('for special keys and shortcuts') and when not to use it ('not for typing text'), and names the alternative tool ('use send_text for that'). This gives clear context for selection among sibling tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

send_mouseSend Mouse EventB

Send a mouse event to the TUI app (if the app has mouse support enabled).

ParametersJSON Schema
NameRequiredDescriptionDefault
sessionIdYesSession ID
actionYesMouse action type
xYesColumn position (0-based)
yYesRow position (0-based)
buttonNoMouse button: "left", "middle", "right" for press/release; "up", "down" for scroll (default: "left")

TDQS

B3.2/5.0
Behavior2/5

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 mentions the prerequisite of mouse support but doesn't cover other critical aspects like whether this is a read-only or destructive operation, error handling, rate limits, or what happens if the app lacks mouse support. This leaves significant gaps for a tool that interacts with an application.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that directly states the tool's purpose and a key usage condition. It is front-loaded with the core action and contains no redundant or unnecessary information, making it highly concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity of sending input events to an application, no annotations, and no output schema, the description is incomplete. It lacks details on behavioral traits (e.g., side effects, error responses), output format, or integration with sibling tools, leaving the agent with insufficient context for reliable use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema fully documents all parameters. The description adds no additional parameter information beyond what's in the schema, such as clarifying the interaction between 'action' and 'button' or providing examples. This meets the baseline for high schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('send a mouse event') and target ('to the TUI app'), which is specific and unambiguous. However, it doesn't distinguish this tool from sibling tools like 'send_keys' or 'send_text' that also send input events, missing full differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides some contextual guidance by mentioning 'if the app has mouse support enabled', which implies a prerequisite condition for usage. However, it doesn't explicitly state when to use this tool versus alternatives like 'send_keys' or 'send_text', nor does it provide exclusions or clear comparative guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

send_textSend TextA

Type a string of characters into the TUI app. The text is sent exactly as provided - MCP JSON handles escaping, so do not double-escape. To type a literal backslash, send one backslash. Include a trailing newline (\n) if you want to press Enter after the text. Use send_keys instead for special keys like Ctrl+C or arrow keys.

ParametersJSON Schema
NameRequiredDescriptionDefault
sessionIdYesSession ID
textYesText to type. Include \n for Enter/newline.

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden and does well by explaining key behavioral aspects: text is sent exactly as provided, MCP handles escaping (so no double-escaping needed), how to type literal backslashes, and that newlines require explicit inclusion. It doesn't mention error conditions or performance characteristics, but covers the essential operational behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is efficiently structured with four focused sentences that each provide essential information: purpose, escaping behavior, literal backslash handling, newline guidance, and sibling tool differentiation. There's no wasted text and key information is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 2 parameters, 100% schema coverage, no output schema, and no annotations, the description provides comprehensive context about how to use the tool effectively. It covers purpose, behavioral characteristics, parameter usage guidance, and sibling differentiation. The only minor gap is lack of information about what happens after text is sent or potential error conditions.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 100% schema description coverage, the baseline is 3, but the description adds valuable semantic context beyond the schema: it explains that text should include '\n' for Enter/newline (reinforcing the schema's parameter description), clarifies escaping behavior, and provides the literal backslash example. This enhances understanding of how to properly use the 'text' parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the specific action ('Type a string of characters into the TUI app') and resource (text input to TUI). It explicitly distinguishes from sibling 'send_keys' for special keys, making the purpose unambiguous and differentiated from alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit guidance on when to use this tool ('to type a string of characters') versus when to use the alternative ('Use send_keys instead for special keys like Ctrl+C or arrow keys'). It also includes important usage notes about escaping and newline handling.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

snapshotText SnapshotA

Capture the terminal buffer as plain text. Faster and cheaper than a screenshot - use this when you only need the text content.

ParametersJSON Schema
NameRequiredDescriptionDefault
sessionIdYesSession ID

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively communicates key behavioral traits: it's a capture operation (implying read-only), it returns plain text (not images), and it has performance characteristics ('faster and cheaper'). However, it doesn't mention error conditions, rate limits, or authentication requirements.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is perfectly concise with two sentences that each earn their place: the first defines the core functionality, the second provides crucial usage guidance. There's zero wasted text and it's front-loaded with the essential information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter tool with no annotations and no output schema, the description does an excellent job covering purpose, usage context, and behavioral characteristics. The main gap is the lack of information about return format (though 'plain text' gives some indication) and error handling, which prevents a perfect score.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema description coverage is 100%, so the schema already fully documents the single 'sessionId' parameter. The description doesn't add any parameter-specific information beyond what the schema provides, which is appropriate given the high schema coverage. This meets the baseline expectation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the specific action ('capture the terminal buffer as plain text'), identifies the resource ('terminal buffer'), and distinguishes it from a sibling tool ('faster and cheaper than a screenshot'). It provides a precise verb+resource combination with explicit sibling differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states when to use this tool ('use this when you only need the text content') and provides a clear alternative ('faster and cheaper than a screenshot'), which directly references the sibling 'screenshot' tool. This gives perfect guidance on tool selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

wait_for_idleWait For IdleA

Wait until the terminal buffer stops changing. Useful after sending keys to wait for the app to finish rendering.

ParametersJSON Schema
NameRequiredDescriptionDefault
sessionIdYesSession ID
timeoutNoMax wait time in milliseconds (default: 3000)
debounceNoHow long the buffer must be stable before considered idle, in ms (default: 300)

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It explains the core behavior (waiting for buffer stability) and provides a use case, but doesn't disclose potential side effects, error conditions, or what happens when timeout is reached. The description doesn't contradict any annotations since none exist.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is perfectly concise with two sentences that each earn their place. The first states the core functionality, the second provides practical usage context. No wasted words or redundant information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 3 parameters, 100% schema coverage, and no output schema, the description provides adequate context about what the tool does and when to use it. However, without annotations or output schema, it could benefit from more behavioral details about timeout handling or return values.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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 all three parameters thoroughly. The description doesn't add any parameter-specific information beyond what's in the schema, maintaining the baseline score of 3 for high schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose with a specific verb ('wait until') and resource ('terminal buffer stops changing'). It distinguishes from siblings by focusing on idle detection rather than text matching (wait_for_text) or other terminal operations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for when to use this tool ('useful after sending keys to wait for the app to finish rendering'), which helps differentiate it from wait_for_text. However, it doesn't explicitly state when NOT to use it or mention specific alternatives among siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

wait_for_textWait For TextA

Wait until a regex pattern appears in the terminal buffer. Useful for waiting for prompts, loading states, or specific output.

ParametersJSON Schema
NameRequiredDescriptionDefault
sessionIdYesSession ID
patternYesRegex pattern to search for in the terminal text
timeoutNoTimeout in milliseconds (default: 5000)

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It explains the waiting behavior and timeout (implied by the parameter), but doesn't detail what happens on success/failure (e.g., returns text, throws error), rate limits, or side effects. It adds some context but leaves gaps for a tool that interacts with terminal sessions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is appropriately sized with two sentences: the first states the core functionality, and the second provides usage examples. Every sentence earns its place by adding value without redundancy, making it front-loaded and efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no annotations and no output schema, the description is moderately complete for a tool with 3 parameters and 100% schema coverage. It covers the purpose and usage context well but lacks details on return values, error handling, or deeper behavioral traits, which could be important for a waiting operation in terminal sessions.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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 all three parameters. The description mentions 'regex pattern' and implies timeout usage but doesn't add significant meaning beyond what the schema provides, such as regex format examples or timeout behavior specifics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose with a specific verb ('Wait until'), resource ('regex pattern'), and location ('in the terminal buffer'). It distinguishes itself from siblings like 'read_region' or 'send_text' by focusing on waiting behavior rather than reading or sending.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for when to use this tool ('Useful for waiting for prompts, loading states, or specific output'), giving practical examples. However, it doesn't explicitly state when not to use it or mention alternatives among siblings, such as 'wait_for_idle' which might serve a similar waiting purpose.

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.

  1. 13 tool updatesv1.0.0
    • First observedcursor
    • First observedkill
    • First observedlaunch
    • First observedlist_sessions
    • First observedread_region
    • First observedresize
    • First observedscreenshot
    • First observedsend_keys
    • First observedsend_mouse
    • First observedsend_text
    • First observedsnapshot
    • First observedwait_for_idle
    • First observedwait_for_text

TDQS

A3.8/5.0
Disambiguation5/5

Each tool has a clearly distinct purpose with no overlap: cursor gets position, kill terminates, launch starts apps, list_sessions enumerates, read_region extracts text areas, resize changes dimensions, screenshot captures visual output, send_keys handles special keys, send_mouse sends mouse events, send_text types characters, snapshot captures text buffer, wait_for_idle waits for rendering, and wait_for_text waits for patterns. The descriptions explicitly differentiate similar tools like send_keys vs send_text and screenshot vs snapshot.

Naming Consistency5/5

All tools follow a consistent verb_noun or verb_preposition_noun pattern (e.g., list_sessions, read_region, send_keys, wait_for_text). There are no deviations in style (all snake_case) or verb usage, making the naming predictable and readable throughout the set.

Tool Count5/5

With 13 tools, the count is well-scoped for managing TUI applications, covering core operations like launching, interacting (keys, text, mouse), monitoring (cursor, sessions), capturing output (screenshot, snapshot, read_region), and waiting (idle, text). Each tool earns its place without redundancy or bloat for the domain.

Completeness5/5

The tool surface provides complete lifecycle coverage for TUI management: launch sessions, interact via keys/text/mouse, resize terminals, monitor state with cursor and sessions, capture output in multiple formats, and wait for conditions. There are no obvious gaps; agents can perform all typical TUI operations without dead ends.

Maintenance

ActivitySlowing
ResponsivenessUnresponsive

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

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    MCP server enabling AI agents to interact with terminal applications through structured Terminal State Tree representation. Works with any AI assistant that supports the Model Context Protocol.
    86
    19
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Terminal MCP server for AI coding agents with persistent PTY sessions, ring-buffer incremental reads, headless xterm screen capture, multi-agent orchestration, and a real-time web dashboard.
    24
    23
    MIT

Latest Blog Posts

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/nvms/tui-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server