termcp
Provides tools for creating and managing stateful tmux sessions, enabling persistent working directory and environment across shell commands, and for destroying sessions when no longer needed.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@termcprun npm test and show me the output"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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 buildAdd 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 |
| Execute a shell command. Supports stdin and tmux sessions. |
| Execute multiple commands in sequence with variable capture ($PREV, $STEP{n}). |
| Read a file. |
| Write a file. Creates parent directories. |
| List files and directories. |
| Search file contents (ripgrep or grep). |
| Get OS, installed tools, and disk info. |
| Get the audit log with filtering. |
| Get version, uptime, workspace, active processes. |
| Start a long-running background process. |
| Poll output from a background process. |
| Kill a background process. |
| Create a stateful tmux session (persists cwd/env). |
| Kill a tmux session. |
| Read output from a byte offset (for truncated output). |
Configuration
All config is via environment variables. All optional.
Variable | Default | Description |
|
| Root directory for file operations. |
|
| Maximum command timeout in ms. |
|
| Default command timeout in ms. |
|
| 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, forcreate_session/destroy_sessiontools)ripgrep(optional, for fastersearch_files)
License
MIT
Available Tools
15 toolscreate_sessionA
Create a stateful tmux session with persistent cwd and environment.
| Name | Required | Description | Default |
|---|---|---|---|
| cwd | No | Starting working directory (default: home) |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | Yes | The session_id from create_session |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| tool | No | Filter by tool name | |
| count | No | Number of entries (default: 50, max: 200) | |
| since | No | ISO timestamp - only entries after this |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description 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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| signal | No | Signal to send (default: SIGTERM) | |
| process_id | Yes | The process_id from start_process |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | Directory path (default: home) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. 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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| since | No | Byte offset to start reading from (default: 0) | |
| process_id | Yes | The process_id from start_process |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | File path (relative to home or absolute) |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| offset | No | Byte offset to start reading from (default: 0) | |
| process_id | No | Background process_id |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden, 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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| cwd | No | Working directory (default: home) | |
| stdin | No | Optional string to pipe to command stdin | |
| command | Yes | The shell command to execute | |
| session_id | No | If provided, run inside this tmux session | |
| timeout_ms | No | Timeout in ms (default 30000, max 300000) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. 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.
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.
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.
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.
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.
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}).
| Name | Required | Description | Default |
|---|---|---|---|
| cwd | No | Working directory (default: home) | |
| commands | Yes | List of commands to execute in order | |
| timeout_ms | No | Per-command timeout in ms (default 30000) | |
| stop_on_error | No | If true (default), stops when a command fails. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| glob | No | File type filter (e.g. *.ts) | |
| path | No | Directory to search (default: home) | |
| pattern | Yes | Regex pattern to search for |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| cwd | No | Working directory (default: home) | |
| env | No | Additional environment variables | |
| command | Yes | The shell command to start |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It 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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | File path (relative to home or absolute) | |
| append | No | If true, append instead of overwrite (default: false) | |
| content | Yes | The content to write |
TDQS
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.
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.
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.
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.
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.
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.
15 tool updates
v1.0.0- First observed
create_session - First observed
destroy_session - First observed
get_audit_log - First observed
get_environment - First observed
get_server_info - First observed
kill_process - First observed
list_files - First observed
poll_output - First observed
read_file - First observed
read_output - First observed
run_command - First observed
run_sequence - First observed
search_files - First observed
start_process - First observed
write_file
TDQS
Scored across 15 tools
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.
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.
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.
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
Related MCP Connectors
Remote MCP server exposing your Node Command fleet (files, shell, processes, browser) to AI hosts.
Operate Linux, macOS and Windows from your LLM. Every action runs through an auditable allowlist.
Termalin's hosted MCP server. Claude, ChatGPT or any MCP client runs commands, moves files over SFTP, queries databases and reads server metrics and monitoring alerts on your servers, keylessly through Termalin Connectors: no SSH key is handed over and no inbound port is opened. Per-host command policy and an audit log. Needs a termal.in Pro or Team account (new accounts start with a 14-day Pro trial).
Work on your own computers from Claude or ChatGPT: run commands, edit and search files.
Related MCP Servers
- FlicenseNot gradedqualityNot gradedmaintenanceA secure and pluggable MCP server to run terminal commands on your local machine or cloud server — remotely, safely, and with LLMs or agentic clients.-
- AlicenseAqualityCmaintenanceMCP server that gives AI agents real interactive terminal sessions for running REPLs, SSH, database clients, and any interactive CLI with clean text output and smart completion detection.746 npm19MIT
- FlicenseNot gradedqualityAmaintenanceThe 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-
- AlicenseNot gradedqualityAmaintenanceEnables 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.57MIT