Skip to main content
Glama

termcp

A local terminal MCP server for AI agents. stdio-based, zero-config, just run commands.

termcp gives any MCP-compatible AI agent (Claude, etc.) a full terminal on your machine - shell commands, file operations, background processes, search, and stateful sessions - all through the standard Model Context Protocol over stdio. No server to deploy, no tokens to manage, no cloud.

Quick start

git clone https://github.com/dbalchunas2-pixel/termcp.git
cd termcp
npm install
npm run build

Add to your MCP client config (e.g. Claude Desktop):

{
  "mcpServers": {
    "termcp": {
      "command": "node",
      "args": ["/path/to/termcp/dist/index.js"]
    }
  }
}

That's it. Your AI agent now has a terminal.

Related MCP server: mcp-interactive-terminal

Tools

Tool

Description

run_command

Execute a shell command. Supports stdin and tmux sessions.

run_sequence

Execute multiple commands in sequence with variable capture ($PREV, $STEP{n}).

read_file

Read a file.

write_file

Write a file. Creates parent directories.

list_files

List files and directories.

search_files

Search file contents (ripgrep or grep).

get_environment

Get OS, installed tools, and disk info.

get_audit_log

Get the audit log with filtering.

get_server_info

Get version, uptime, workspace, active processes.

start_process

Start a long-running background process.

poll_output

Poll output from a background process.

kill_process

Kill a background process.

create_session

Create a stateful tmux session (persists cwd/env).

destroy_session

Kill a tmux session.

read_output

Read output from a byte offset (for truncated output).

Configuration

All config is via environment variables. All optional.

Variable

Default

Description

TERMCP_WORKSPACE

$HOME

Root directory for file operations.

MAX_TIMEOUT_MS

300000

Maximum command timeout in ms.

DEFAULT_TIMEOUT_MS

30000

Default command timeout in ms.

MAX_OUTPUT_CHUNK

50000

Output chunk size before truncation.

Denylist

termcp ships with a configurable denylist for accident protection (not a security boundary). Create a denylist.json file:

{
  "patterns": ["rm -rf /", "mkfs", "dd if=", "shutdown", "reboot"]
}

Place it in the project root, ~/.termcp/denylist.json, or set TERMCP_WORKSPACE to its directory. Patterns use simple substring matching.

Audit log

termcp maintains a durable JSONL audit log at ~/.termcp/audit.jsonl. Every command is logged with timestamp, tool, input, exit code, and duration. Secrets are redacted at write time (API keys, Bearer tokens, password assignments).

Requirements

  • Node.js 18+

  • tmux (optional, for create_session/destroy_session tools)

  • ripgrep (optional, for faster search_files)

License

MIT

Available Tools

15 tools
create_sessionA

Create a stateful tmux session with persistent cwd and environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
cwdNoStarting working directory (default: home)

TDQS

A3.5/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 behavioral burden, and it does disclose two real traits: the session is stateful and both cwd and environment persist. It omits other important behavior, such as whether it returns a session identifier, whether multiple sessions may coexist, resource limits, or how the session is later torn down.

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?

A single compact sentence with the action verb front-loaded and the key behavioral traits (stateful, persistent cwd/environment) packed into the same clause. No filler.

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?

For a session-creation tool with no output schema, the description should explain what the caller receives back, since sibling tools like run_command and destroy_session almost certainly need a session handle. That return-value information is missing, leaving a meaningful gap despite the adequate coverage of the creation semantics.

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 single parameter (cwd) is already fully documented in the schema, including its default of home. The description's phrase 'persistent cwd' loosely reinforces that parameter's role but adds no format or edge-case detail beyond the schema, so the baseline 3 applies.

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 gives a specific verb and resource ('Create a stateful tmux session') plus a scope qualifier ('persistent cwd and environment'), which clearly separates it from destroy_session. It does not, however, distinguish itself from siblings like start_process, which could also be read as creating a session-like execution context.

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?

Usage is implied rather than stated: the mention of statefulness and persistence hints that this is the tool to call first when state must survive across commands. There is no explicit when-to-use, no prerequisite statement, and no guidance on choosing between this and start_process.

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

destroy_sessionC

Kill a tmux session.

ParametersJSON Schema
NameRequiredDescriptionDefault
session_idYesThe session_id from create_session

TDQS

C2.9/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 behavioral burden. "Kill" implies an irreversible mutation, but the description says nothing about whether processes inside the session are terminated, whether the operation is idempotent, what errors occur for a missing session, or what permissions are needed.

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

Conciseness4/5

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

A single four-word sentence with zero filler, and the action is front-loaded. It is terse to the point of being thin, but there is no wasted structure to penalize.

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?

This is a destructive operation with no annotations, no output schema, and no stated side effects or failure modes. For a kill-style tool, an agent needs to know what is destroyed and what happens on an invalid session_id, none of which is covered.

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% and the single session_id parameter is already documented in the schema as coming from create_session. The description adds no parameter meaning beyond that, so the baseline of 3 applies.

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?

States a specific verb ("Kill") and resource ("tmux session"), which is enough to separate it from siblings like kill_process or create_session. It does not explicitly name those siblings or clarify the boundary, so it falls short of a 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?

There is no statement of when to use this versus alternatives such as kill_process, nor any prerequisite (e.g., session must exist, must have been created by create_session). Usage is only inferable from the tool name and the schema's reference to create_session.

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

get_audit_logB

Get the audit log of commands executed. Supports filtering.

ParametersJSON Schema
NameRequiredDescriptionDefault
toolNoFilter by tool name
countNoNumber of entries (default: 50, max: 200)
sinceNoISO timestamp - only entries after this

TDQS

B3.2/5.0
Behavior2/5

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

With no annotations, the description carries the full behavioral disclosure burden, yet it only states what is fetched and that filtering exists. It does not mention read-only safety, default/max result counts, pagination, ordering, or timestamp format requirements, leaving 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.

Conciseness4/5

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

Two short sentences, front-loaded with the primary action. The second sentence is brief but somewhat redundant with the schema's filter parameters, so it does not fully earn its place.

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?

The tool is simple and the schema is fully documented, but with no annotations and no output schema, the description should provide more context about return format, pagination, or safety. It is minimally adequate but leaves clear gaps.

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 tool, count, and since parameters. The description adds only the generic phrase 'Supports filtering' and provides no additional syntax, format, or constraint details beyond the schema.

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?

States a specific verb and resource: 'Get the audit log of commands executed.' This clearly distinguishes it from sibling tools like run_command or read_file, which do not retrieve historical audit records. However, it does not explicitly name or contrast itself with any alternative, so it stops short of a 5.

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 only usage signal is 'Supports filtering,' which implies the tool is for retrieving filtered audit entries. There is no explicit when-to-use, when-not-to-use, or alternative tool comparison, leaving usage largely inferred.

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

get_environmentA

Get info about the local environment: OS, installed tools, disk usage.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.5/5.0
Behavior3/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. 'Get info' implicitly signals a safe read operation and it discloses the concrete response categories (OS, installed tools, disk usage), which is useful, but it says nothing about permission requirements, execution cost, or latency for what may be an expensive environment scan.

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?

A single front-loaded sentence that names the action and its scope with zero filler. Nothing is repeated from the schema and nothing could be trimmed without losing 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 zero-parameter read tool with no output schema, the description does the essential job of telling the agent what the response will contain. The only meaningful gap is the lack of sibling disambiguation against get_server_info.

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 takes zero parameters, so there is nothing for the description to disambiguate; baseline for a parameterless tool applies.

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?

States a specific verb ('Get') and resource ('local environment') and enumerates the returned categories (OS, installed tools, disk usage). It is clear on its own, but it never distinguishes itself from the similarly named sibling get_server_info, so an agent must guess which one covers local vs. server context.

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 gives no explicit when-to-use condition, prerequisites, or named alternatives. Given the presence of get_server_info among siblings, some routing guidance ('use this for the local machine, get_server_info for remote servers') would have been valuable but is absent.

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

get_server_infoA

Get server info: version, uptime, workspace, active processes.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.5/5.0
Behavior3/5

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

No annotations are supplied, so the description must carry the behavioral burden. It implies a safe read operation and usefully discloses the returned content (version, uptime, workspace, active processes), but says nothing about permissions, caching, or whether this is a live or snapshot query.

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?

A single tight sentence with the key resource front-loaded and the return payload enumerated immediately after the colon. Every token earns its place.

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 zero-parameter read-only tool with no output schema, naming the returned fields (version, uptime, workspace, active processes) is exactly the right compensation. The only minor gap is the absence of any note on freshness or access requirements.

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 takes zero parameters, so by the rubric baseline this is 4. The description cannot add parameter semantics beyond the empty schema, and none are needed.

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 states a specific verb ('Get') and resource ('server info') and enumerates the returned fields (version, uptime, workspace, active processes), so the agent knows exactly what it retrieves. It does not, however, distinguish itself from the sibling get_environment, which an agent could reasonably confuse it with.

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?

There is no statement of when to use this tool versus alternatives; the closest sibling, get_environment, is never mentioned, nor is get_audit_log or list_files. Usage is only weakly implied by the read-only 'Get' framing, leaving the agent to guess the selection criteria.

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

kill_processC

Kill a background process by process_id.

ParametersJSON Schema
NameRequiredDescriptionDefault
signalNoSignal to send (default: SIGTERM)
process_idYesThe process_id from start_process

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations, the description carries the full behavioral burden and largely fails it: it does not say whether the kill is graceful or forceful beyond the schema's SIGTERM default, whether a non-existent process_id errors or is a no-op, or what happens to buffered output after the process dies (relevant given poll_output/read_output siblings). Only the minimal act of killing is disclosed.

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

Conciseness4/5

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

One short sentence, front-loaded with the action and resource, with zero filler. It is appropriately terse for a single-purpose tool, though the terseness comes at the cost of the behavioral detail noted elsewhere.

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?

For a destructive operation with no annotations and no output schema, the description omits the post-kill semantics an agent needs: whether the process is terminated immediately, whether exit status is retrievable, and whether errors are raised for unknown or already-dead processes. Parameter coverage is complete, but the behavioral picture is not.

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 both process_id and signal are already documented in the schema, including the SIGTERM default. The description adds no semantics beyond restating process_id as the key, so the baseline 3 applies.

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 gives a specific verb (kill) and resource (a background process) plus the keying parameter (process_id), so the agent immediately knows what operation this is. It does not, however, explicitly distinguish itself from siblings like start_process or destroy_session, which is the only thing keeping it from a 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?

There is no when-to-use guidance, no stated precondition (e.g. the process must have been created by start_process and still be running), and no mention of alternatives such as destroy_session for cleaning up a whole session. The agent must infer all routing from the name alone.

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

list_filesB

List files and directories in a path.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNoDirectory path (default: home)

TDQS

B3.1/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 says nothing about whether listing is recursive, whether hidden files are included, whether output is paginated, or what metadata accompanies each entry. For a filesystem read tool this is a notable gap.

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?

A single short sentence with the verb and scope front-loaded and zero filler. Nothing could be removed without losing meaning.

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?

For a one-parameter read tool with no output schema and no annotations, the description is minimally sufficient, but it omits recursion behavior, hidden-file handling, and result shape — details an agent needs to interpret the listing correctly.

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 coverage is 100% and the single 'path' parameter already documents its default of 'home'. The description's 'in a path' adds no syntax or format detail beyond the schema, so the baseline of 3 applies.

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?

States a specific verb ('List') and resource ('files and directories') scoped to a path, so the core operation is unambiguous. However, it does nothing to distinguish itself from the sibling 'search_files', which an agent could easily confuse with plain listing.

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 offers no guidance on when to use this versus 'search_files' or 'read_file', nor any prerequisites. Usage must be inferred entirely from the name and resource.

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

poll_outputC

Poll output from a background process.

ParametersJSON Schema
NameRequiredDescriptionDefault
sinceNoByte offset to start reading from (default: 0)
process_idYesThe process_id from start_process

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations, the description carries the full behavioral burden and largely fails it. It does not disclose whether polling blocks, what happens once the process exits, how much output is returned per call, or the read-only nature of the operation.

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

Conciseness4/5

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

A single short sentence with no padding, and the verb+resource are front-loaded. It is efficient, though arguably terse to the point of under-specification rather than optimized conciseness.

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?

There is no output schema and no annotations, so the description should explain what a poll returns (a chunk of stdout/stderr? current status? offset behavior when using since). None of that is present, leaving the agent unable to predict the call's result.

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 both process_id and the since byte offset are already documented by the schema. The description adds no syntax, defaults, or interpretation beyond that, which matches the baseline 3 for a fully-covered schema.

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?

States a specific verb (poll) and resource (output from a background process), so the basic action is unambiguous. However, it does not differentiate from the sibling read_output or connect itself to start_process, leaving the agent to infer which of the two output-reading tools applies.

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?

There is no explicit when-to-use guidance, no stated prerequisites (must a process be running first?), and no mention of the closely related read_output alternative. The word 'poll' implies repeated checking, but the agent must infer that from the name alone.

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

read_fileC

Read the contents of a text file.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesFile path (relative to home or absolute)

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations, the description carries the full behavioral burden but discloses almost nothing: no error behavior for missing/unreadable paths, no encoding assumptions, no size or binary-file limits, and no statement of whether access is read-only (though 'Read' implies it).

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

Conciseness4/5

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

A single compact sentence that is front-loaded and wastes no words. It is well-sized for a simple tool, though it is so terse that it omits potentially useful context.

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?

For a one-parameter read tool with a fully documented schema and no output schema, the description is minimally adequate. It omits error handling and file-type caveats, which would matter for correct invocation and failure interpretation.

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 coverage is 100% and the single 'path' parameter already documents that it's relative to home or absolute. The description adds no meaning beyond the schema, so the baseline 3 applies.

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?

States a specific verb (Read) and resource (contents of a text file), so the agent knows exactly what it does. It does not differentiate from siblings like read_output or search_files, which also involve reading, so it falls short of a 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?

No guidance on when to use this versus alternatives such as list_files, search_files, or read_output. The only implicit cue is that it targets a single text file, which the agent must infer.

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

read_outputA

Read output from a specific byte offset. Used for truncated output.

ParametersJSON Schema
NameRequiredDescriptionDefault
offsetNoByte offset to start reading from (default: 0)
process_idNoBackground process_id

TDQS

A3.5/5.0
Behavior3/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, and it does disclose the offset-based read model (output is addressable and re-readable rather than consumed). It omits whether repeated reads are safe, what happens when process_id is omitted, and whether output is buffered or lost.

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 short sentences, no filler, and the core mechanic (byte offset) is front-loaded ahead of the use case. Nothing could be removed without losing signal.

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?

For a 2-parameter tool with no output schema or annotations, the description should clarify how this fits the process-output workflow (start_process → poll_output → read_output) and what a truncated read returns. That relationship, which is the main thing an agent needs, is absent.

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 both parameters are already documented in the schema, and the description only echoes 'byte offset' without adding format or default semantics. The 3 baseline applies when the schema does the heavy lifting.

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?

States a specific verb and resource ('Read output') plus its signature constraint ('from a specific byte offset'), which is more precise than a generic read. However it never distinguishes itself from the sibling poll_output, which an agent will see in the same list and must disambiguate by inference.

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?

'Used for truncated output' gives an implied trigger condition, so the when is partially conveyed. It does not state when NOT to use it or name the alternative (poll_output) for live/new output, leaving the choice between the two output tools to guesswork.

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

run_commandB

Execute a shell command locally. Returns stdout, stderr, and exit code.

ParametersJSON Schema
NameRequiredDescriptionDefault
cwdNoWorking directory (default: home)
stdinNoOptional string to pipe to command stdin
commandYesThe shell command to execute
session_idNoIf provided, run inside this tmux session
timeout_msNoTimeout in ms (default 30000, max 300000)

TDQS

B3.1/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 discloses local execution and the return shape (stdout, stderr, exit code), but says nothing about side effects, permissions, sandboxing, or the fact that arbitrary commands can mutate or destroy the host — a substantial omission for a shell-execution 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?

Two sentences, front-loaded with the action and followed by the return contract. Nothing is wasted and there is no filler.

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?

The description compensates for the missing output schema by naming the return values, which is helpful. But for a no-annotation, arbitrary-shell tool it omits the risk profile and execution semantics that an agent needs to invoke it safely.

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 five parameters including cwd, stdin, session_id and the timeout bounds. The description adds no parameter meaning beyond that, so the baseline 3 applies.

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?

States a specific verb (Execute) and resource (shell command) plus the scope 'locally', and names the return values. It does not distinguish itself from sibling run_sequence, which likely also runs commands, so it stops short of a 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?

There is no when-to-use guidance and no mention of alternatives. An agent cannot tell from the description whether to prefer run_sequence for multiple commands, start_process for long-running work, or create_session before using session_id.

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

run_sequenceB

Execute multiple shell commands in sequence. Supports variable capture ($PREV, $STEP{n}).

ParametersJSON Schema
NameRequiredDescriptionDefault
cwdNoWorking directory (default: home)
commandsYesList of commands to execute in order
timeout_msNoPer-command timeout in ms (default 30000)
stop_on_errorNoIf true (default), stops when a command fails.

TDQS

B3.3/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 behavioral burden. It usefully discloses the $PREV / $STEP{n} variable-capture mechanism, but for an arbitrary shell-execution tool it omits side effects, permissions, sandboxing, and how stop_on_error interacts with subsequent steps, leaving most behavioral traits undisclosed.

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 short sentences with zero filler; the core action is front-loaded and the variable-capture note is a compact, relevant addendum.

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?

With no output schema and no annotations, the description should cover more: what the result contains (per-command output, captured variables, exit status) and the error semantics of stop_on_error. For a four-parameter execution tool it is adequate but leaves meaningful gaps.

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 each of the four parameters is already documented in the schema and the baseline is 3. The description adds only the variable-capture syntax for commands, which is slightly beyond the schema but not a rich supplement.

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?

States a specific verb and resource ('Execute multiple shell commands in sequence') with the added scope of sequence execution, which inherently separates it from the single-command sibling run_command. It stops short of explicitly naming that sibling, so an agent must infer the boundary rather than read it.

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 phrase 'multiple shell commands in sequence' implies when this is preferable to run_command, and the mention of variable capture hints at the chaining use case. There is no explicit when-to-use/when-not statement or named alternative, so the guidance is only implied.

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

search_filesB

Search for a pattern in files. Uses ripgrep if available, falls back to grep.

ParametersJSON Schema
NameRequiredDescriptionDefault
globNoFile type filter (e.g. *.ts)
pathNoDirectory to search (default: home)
patternYesRegex pattern to search for

TDQS

B3.1/5.0
Behavior2/5

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

With no annotations, the description carries the full behavioral burden, yet it only discloses the implementation fallback (ripgrep vs grep). It says nothing about whether the operation is read-only, whether the search is recursive, how results or errors are returned, or how many matches are returned. The ripgrep/grep note is genuinely useful (regex dialect and performance differ between them) but is the only behavioral detail offered.

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 short sentences with zero filler, and the core purpose is front-loaded before the implementation detail.

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?

For a search tool with no annotations and no output schema, the description is minimally adequate: an agent knows it searches for a regex in files but not what a result looks like, whether the search recurses, or how matches are limited. The 100% schema coverage offsets some of this, but the return contract remains undocumented.

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 all three parameters (glob, path, pattern) are already documented in the schema with examples. The description adds no additional meaning such as default path behavior or regex syntax, so the baseline of 3 applies.

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 gives a specific verb and resource ('Search for a pattern in files'), which clearly separates it from read_file and list_files. It stops short of explicitly naming those siblings as alternatives, so it is clear but not fully differentiated.

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?

There is no guidance on when to use this versus list_files, read_file, or run_command for ad-hoc searching, and no preconditions or exclusions are stated. The usage is only implied by the verb 'search'.

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

start_processA

Start a long-running background process. Returns process_id and pid.

ParametersJSON Schema
NameRequiredDescriptionDefault
cwdNoWorking directory (default: home)
envNoAdditional environment variables
commandYesThe shell command to start

TDQS

A3.5/5.0
Behavior3/5

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

With no annotations, the description carries the full behavioral burden. It usefully discloses that the call returns process_id and pid (the handles needed for poll_output/kill_process), but says nothing about the process lifecycle, whether it survives session teardown, how output is retrieved, or concurrency/resource 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?

Two sentences, zero filler, and the essential capability plus return values are front-loaded. Nothing needs trimming and nothing is buried.

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?

For a spawn tool with no annotations and no output schema, the description covers the bare essentials by naming the returned handles. It omits the follow-up workflow (read_output / poll_output / kill_process) that an agent needs to actually use the started process, leaving a real gap.

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 cwd, env, and command. The description adds nothing beyond the schema (no mention of shell semantics, env merging behavior, or cwd defaulting), so the baseline 3 applies.

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 states a specific verb ('Start') and resource ('long-running background process'), and the 'background' qualifier implicitly separates it from the synchronous sibling run_command. It stops short of explicitly naming that alternative, so an agent must infer the boundary rather than read it.

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?

Usage is only implied by the phrase 'long-running background': an agent can guess this is for work that must not block or outlive a single call, but there is no explicit when-to-use, no when-not-to-use, and no mention of run_command or run_sequence as the alternative.

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

write_fileA

Write content to a file. Creates parent directories if needed.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesFile path (relative to home or absolute)
appendNoIf true, append instead of overwrite (default: false)
contentYesThe content to write

TDQS

A3.5/5.0
Behavior3/5

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

With no annotations, the description carries the full behavioral burden and does add one genuinely useful trait: it creates parent directories automatically. However, it omits the most important behavioral fact for a write tool — that it overwrites existing file content by default (destructive), plus any permission/auth or error-return 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?

Two short, front-loaded sentences with zero filler; the core action comes first and the directory-creation side effect follows. Nothing is wasted.

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?

With no annotations and no output schema, the description should do more to cover behavior around overwriting and the result of the call. What is present is accurate but leaves meaningful gaps for a default-destructive file mutation.

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 path, content, and the append-vs-overwrite semantics. The description adds no parameter meaning beyond that, which is the expected baseline when the schema does the heavy lifting.

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 gives a clear verb+resource pair ('Write content to a file') that an agent can immediately map to the write_file tool as distinct from read_file/list_files. It does not explicitly name sibling alternatives, but the operation is unambiguous.

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?

Usage is only implied — the agent can infer you call this when you need to persist content, but there is no guidance on when to prefer it over run_command or how it relates to the read/write siblings. No conditions or exclusions are stated.

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.

  1. 15 tool updatesv1.0.0
    • First observedcreate_session
    • First observeddestroy_session
    • First observedget_audit_log
    • First observedget_environment
    • First observedget_server_info
    • First observedkill_process
    • First observedlist_files
    • First observedpoll_output
    • First observedread_file
    • First observedread_output
    • First observedrun_command
    • First observedrun_sequence
    • First observedsearch_files
    • First observedstart_process
    • First observedwrite_file

TDQS

A3.5/5.0

Scored across 15 tools

Disambiguation4/5

Most tools have clearly distinct purposes (file ops vs command execution vs process lifecycle vs sessions). Some overlap exists between run_command and run_sequence, and between poll_output and read_output, but descriptions provide enough differentiation to avoid major confusion.

Naming Consistency5/5

All tool names follow a consistent verb_noun snake_case pattern (run_command, read_file, start_process, etc.). No mixing of conventions or vague verbs.

Tool Count4/5

15 tools is within the reasonable range for a terminal/shell server covering command execution, file operations, process management, and sessions. Slightly at the upper bound, but each tool appears to earn its place.

Completeness4/5

Core workflows are covered: sync/async command execution, file read/write/list/search, process lifecycle, session management, and environment info. Minor gaps exist such as no file delete/move/copy operations and no explicit way to send input to a running process or session.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    Not graded
    maintenance
    A secure and pluggable MCP server to run terminal commands on your local machine or cloud server — remotely, safely, and with LLMs or agentic clients.
    -
  • F
    license
    Not graded
    quality
    A
    maintenance
    The terminal AI agents can drive: a cross-platform desktop terminal (macOS/Linux/Windows, MIT) that runs a local MCP server. Spawn tabs/panes, run commands with structured output, read screens and full scrollback, take scrolling screenshots, record sessions with secret redaction, switch identity profiles. Auto-registers with Claude Code / Codex / Gemini CLI on install.
    14
    -
  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables AI agents to interact with real terminal sessions across local and remote hosts, driving multi-turn interactive programs like TUIs, REPLs, and SSH prompts through MCP.
    57
    MIT