Skip to main content
Glama

tfbash-mcp

Agent システム向けの基本 MCP ツール群です。このプロジェクトは、さまざまな Agent に対して、コマンド実行、ファイルの読み書きと検索など、安定しており、組み合わせ可能で、認知的負荷の低い汎用能力を提供することを目指しています。具体的な能力については、成熟した実装の再利用を優先し、既存のソリューションが中核となる制約を満たせない場合にのみ、適合または自社開発を検討します。

現在のステータス:Python プロジェクトのスケルトンと要件/アーキテクチャ RFC。リポジトリから空の stdio MCP Server を起動することはできますが、 RFC で定義されている Shell ツールはまだ提供されていません。

なぜこのプロジェクトを作るのか

Agent は、プレーンテキストでの推論だけに留まらず、実際のワークスペースを操作したり、ローカルプログラムを呼び出したりする必要が頻繁にあります。プログラマーは Shell を主要な作業インターフェースとして使用します。一方、プロダクト、オペレーション、リサーチなどの一般的な職種でも、Shell を介してスクリプトの呼び出し、ファイル変換、データのバッチ処理、環境の診断を行います。

既存の MCP ツールは、能力範囲と実行モデルが大きく異なります。ワンショットコマンドのみをサポートするもの、PTY や常駐デーモンに依存するもの、承認機能やサンドボックスを内蔵するもの、堅牢な長時間コマンド・増分出力・管理されたプロセスクリーンアップを欠くものなどがあります。tfbash-mcp は、まず実シナリオと検証可能な能力契約を定義し、その上で直接採用、ラッピングによる適合、あるいは自社開発を決定します。

Related MCP server: MCP Terminal Tool Server

設計原則

  • シナリオ優先、選定は後:特定の言語・フレームワーク・既存プロジェクトへの習熟度から要件を逆算しない。

  • 再利用優先:選定の順序は Adopt → Wrap → Build。再利用は、重要な動作を満たすことを前提とする。

  • 小さく直交:基本ツールは明確な境界を保ち、Agent のオーケストレーション、ビジネスワークフロー、UI をツール層に押し込まない。

  • 明示的な状態:長時間タスク、永続 Shell、出力カーソル、終了ステータス、リソースのライフサイクルはすべて観測可能であること。cwd/env の保持が必要な Shell は、明示的に作成し、アドレス指定しなければならない。

  • プロトコルは実装言語から独立:ツール契約は Python、pexpect、Computer、クライアントの内部概念を公開しない。V1 では Python + pexpect と stdio トランスポートを使用する。

  • デプロイ環境を信頼:第一段階では approval、sandbox、コマンドポリシー、ディレクトリ境界を内蔵しない。

  • リソースの制御:メモリ、ディスク、セッション、プロセス、一時ファイルには明確な上限・所有権・クリーンアップルールが必要。

第一段階:Bash ツール

第一段階は、Unix 環境(Linux、macOS)向けの独立した汎用 Bash MCP Server に焦点を当てます。対象は以下を同時にカバーします:

  • プログラマーによるビルド、テスト、コード検索、サービス起動、ログ観察;

  • 一般的な職種がインストール済み CLI やスクリプトを介して行うファイル処理、データ変換、環境診断;

  • それぞれが cwd、環境、アクティベート状態を保持する、複数のアドレス指定可能な永続 Command Shell。各コマンドに対して正確な終了ステータスを返す;

  • pexpect PTY の stdout/stderr を combined output として返し、実行ごとに有界な増分出力を維持する;

  • 短いコマンドは shell_exec で一度に返す。長いコマンドが yield_ms を超えた場合は running を返し、元の Shell で実行を継続する;

  • 長いコマンドは shell_read で出力を増分読み取りし、shell_write で stdin に書き込み、shell_signal で中断または終了する;

  • 永続 Command Shell は、作成・実行・増分読み取り・書き込み・シグナル・列挙・クローズをサポートし、独立したバックグラウンド Job と Terminal のツールグループは公開しない;

  • Shell と Execution は MCP サービスプロセスに帰属し、ツール呼び出しをまたいで保持されるが、サービス再起動をまたいだ復旧は保証しない;

  • 1 つの tfrobot-client Computer は、SDK が管理する 1 つの MCP プロセスに対応し、クライアントは有効化スイッチと実行状態のみを保持する。

第一段階の永続 Shell では PTY を使用しますが、コマンド指向のテキストストリームのみを提供し、フルスクリーン TUI の画面モデル、生のターミナル Session、resize は提供しません。今後、xterm.js、REPL、フルスクリーン TUI の明確な統合先が現れた場合は、同じ Shell リソースモデル上に Terminal mode を追加します。また、コマンド承認、プロセスサンドボックス、サービス再起動をまたいだ復旧、MCP Tasks との強結合は含みません。

関連ドキュメント:

計画中の基本機能

現在のロードマップは探索の順序を示すものであり、自社開発を決定したことを意味するものではありません:

  1. 永続 Shell と長時間コマンド Execution;

  2. ファイルの読み取り、書き込み、パッチ形式での変更;

  3. ファイルの発見とテキスト検索;

  4. 実際の Agent ワークフローに基づいて追加される、その他の小型基本ツール。

各機能は、まず独立した要件と候補調査をまとめ、Adopt・Wrap・Build のいずれかの判断根拠を記録する必要があります。機能ごとに採用元が異なっても構いません。ただし、Agent に公開されるエラーモデル、ライフサイクル、結果構造は一貫している必要があります。

リポジトリ構成

.
├── .github/workflows/tests.yml  # Python 3.10–3.12 CI
├── pyproject.toml               # 包元数据、依赖与工具配置
├── src/tfbash_mcp/              # MCP Server 包与入口
├── tests/                       # 自动化测试
├── README.md
├── docs/
│   └── bash-tool-requirements.md
└── reference/
    ├── ide4ai/                   # pexpect 持久 Shell 基线
    ├── codex/                    # 进程生命周期参考
    ├── pi/                       # Agent Shell 参考
    └── deepseek-harness/         # Agent Runtime 参考

reference/ はローカル調査用のチェックアウトディレクトリで、規模が大きく複数のサードパーティ Git リポジトリを含むため、 tfbash-mcp のバージョン管理や配布パッケージには含めません。

ローカル開発

このプロジェクトは Python 3.10–3.12 をサポートし、環境管理には uv を使用します:

uv sync --all-groups
uv run ruff check .
uv run ruff format --check .
uv run mypy
uv run pytest --cov

現在の stdio Server スケルトンを起動します:

uv run tfbash-mcp

このプロセスは現在 Shell ツールを登録せず、パッケージ・エントリポイント・MCP stdio のライフサイクルを検証するためだけに使用します。

意思決定への参加

要件ドキュメントは現在、V1 の複数 Shell + Execution ツールモデルと Python/pexpect 実装ベースラインを確定していますが、まだ実装待ち・受け入れ待ちの RFC です。開発に入る前に、少なくとも以下が必要です:

  1. ドキュメント内の必須条件と未決事項を整合させる;

  2. 選定した pexpect ベースラインに対して最小限の実現可能性実験を実施する;

  3. ide4ai のコード抽出について、ライセンス保持方法、適合コスト、長期メンテナンス範囲、撤退戦略を確認する;

  4. 実験結果と最終実装の乖離を RFC に反映してから、コーディングと受け入れに進む。

Available Tools

7 tools
shell_closeA

Close a persistent shell and its managed process tree.

ParametersJSON Schema
NameRequiredDescriptionDefault
shell_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
statusYes
shell_idYes
cleanup_completeYes

TDQS

A3.6/5.0
Behavior4/5

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

With no annotations, the description carries the full burden of disclosing behavior. It transparently communicates a critical side effect: closing the shell also closes its managed process tree, which is substantive context beyond the schema. It does not address idempotency or whether the operation is reversible, but the core destructive behavior is clear.

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

Conciseness5/5

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

The description is a single efficient sentence that front-loads the verb and resource, then states the important side-effect scope. There is no wasted text or repetition of schema content.

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 has an output schema, so the description need not explain return values. However, it omits practical context such as the relationship to shell_open, how shell_close differs from shell_signal, and what happens when an invalid or already-closed shell_id is provided. It is adequate but not fully complete.

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

Parameters2/5

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

Schema description coverage is 0%, and the description does not explain shell_id, where it comes from, or how it should be obtained. The parameter name is self-explanatory to a degree, but the description adds no semantic value beyond the schema's property name and constraints.

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

Purpose5/5

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

The description uses a specific verb ('Close') and a clear resource ('persistent shell') while also naming the scope of the side effect ('managed process tree'). This clearly distinguishes it from sibling tools such as shell_open, shell_exec, and shell_signal, which have different actions.

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

Usage Guidelines2/5

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

The description provides no guidance on when to invoke this tool versus alternatives like shell_signal, nor does it mention prerequisites such as first opening a shell with shell_open. The usage context is only implied by the resource name.

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

shell_execC

Execute one bash command in a persistent shell.

ParametersJSON Schema
NameRequiredDescriptionDefault
commandYes
shell_idYes
yield_msNo
timeout_msNo
max_output_bytesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.8/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 does not disclose that commands may mutate state, that the shell persists between calls, how output is returned, or that errors can occur mid-command. 'Execute one bash command' only states the action, not the behavioral consequences.

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?

The description is a single concise sentence with no fluff or redundant detail, and it is front-loaded with the core action. It is under-specified overall, but as far as conciseness alone it earns high marks.

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

Completeness2/5

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

Given that this is a shell execution tool with potentially destructive side effects, no annotations, and five parameters, the description is too thin. It omits prerequisites (an existing shell), behavioral guarantees, and guidance around the timeout/output parameters. The presence of an output schema reduces the need to describe return values, but not these other aspects.

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

Parameters1/5

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

Schema description coverage is 0%, and the description adds no parameter-level meaning beyond the raw property names. It does not clarify shell_id's relationship to an existing session, or the meaning of yield_ms, timeout_ms, or max_output_bytes. With zero schema coverage, this is insufficient.

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

Purpose5/5

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

The description uses a specific verb 'Execute' and names both the resource ('one bash command') and the context ('persistent shell'). This clearly distinguishes it from sibling tools like shell_open, shell_write, and shell_read, which have different purposes.

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 guidance on when to use this tool versus shell_write or shell_read, and no mention that shell_id must already exist (e.g., from shell_open). Usage context is only implied by the word 'Execute.'

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

shell_listA

List shells with authoritative runtime and redacted host context.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
hostYes
shellsYes
runtimeYes

TDQS

A4/5.0
Behavior3/5

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

No annotations are present, so the description must disclose behavior itself. It adds useful context by saying the runtime is authoritative and host context is redacted, but it does not explicitly state that the operation is read-only or describe side effects.

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

Conciseness5/5

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

A single sentence with no filler, front-loading the action and resource before qualifiers. Every word earns its place and the structure is immediately scannable.

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 simple parameterless list tool with an output schema, the description conveys the key behavioral nuance (authoritative, redacted). It could add a hint about what 'host context' includes, but the output schema likely defines the return shape, so the description is largely complete.

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

Parameters4/5

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

There are zero parameters, so the schema already fully covers this dimension. Per the baseline for parameterless tools, a 4 is appropriate; the description needs no parameter-specific details.

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

Purpose5/5

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

The description uses a specific verb 'List' and identifies the resource 'shells', adding qualifiers 'authoritative runtime' and 'redacted host context' that clarify the tool's scope. It is easily distinguished from siblings like shell_read, shell_write, or shell_exec, which imply different actions.

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 through the verb 'List' – an agent will know to call it for enumeration before operating on a shell – but the description does not explicitly state when to prefer it over siblings or mention any exclusions or alternative tools.

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

shell_openC

Open a persistent bash command shell.

ParametersJSON Schema
NameRequiredDescriptionDefault
cwdNo/app
envNo
startup_commandNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
cwdYes
statusYes
dialectYes
shell_idYes

TDQS

C2.6/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 burden of behavioral disclosure. It states persistence but does not disclose that opening a shell creates a stateful resource, starts a process, may need to be closed via shell_close, or how startup_command and env affect the session.

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

Conciseness3/5

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

The description is a single front-loaded sentence with no redundancy, so it is concise. However, it is so terse that it omits important context about lifecycle and usage; it is under-specified rather than efficiently complete.

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?

An output schema exists, so return-value details are likely covered elsewhere, but that does not compensate for missing lifecycle, parameter, and sibling-relationship context. With zero annotations and 0% schema description coverage, the description is inadequate for an agent to use this tool confidently.

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

Parameters2/5

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

Schema description coverage is 0%, so the description should compensate for the undocumented cwd, env, and startup_command parameters. It does not: the parameter meanings are left entirely to inference from their names and schema titles.

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 uses a specific verb ('Open') and resource ('persistent bash command shell'), making the core action clear. The 'persistent' qualifier helps distinguish it from one-off command execution, though it does not explicitly name a sibling alternative.

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

Usage Guidelines2/5

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

No guidance is provided on when to use shell_open versus shell_exec or the other sibling tools. It does not mention that a persistent shell should be opened before shell_read/shell_write, or that shell_exec is for non-persistent commands.

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

shell_readC

Read incremental output from an execution cursor.

ParametersJSON Schema
NameRequiredDescriptionDefault
cursorYes
exec_idYes
wait_msNo
shell_idYes
max_bytesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

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 burden of explaining behavior. It discloses that output is incremental and tied to a cursor, but does not state whether reading advances the cursor, whether reads are idempotent, how wait_ms affects blocking, or what happens when output exceeds max_bytes.

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

Conciseness3/5

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

The single sentence is terse and free of filler, and it front-loads the core operation. However, at one sentence with no parameter or behavioral context, it is under-sized relative to the tool's complexity.

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?

With five parameters, no annotations, and only this description, the definition lacks important operational context—how a cursor is obtained, how incremental advancement works, and how wait_ms/max_bytes shape the read. The presence of an output schema may define the return shape, but it does not fill the input/usage gaps.

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

Parameters1/5

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

Schema description coverage is 0%, yet the description names none of the five parameters and does not explain cursor, shell_id, exec_id, wait_ms, or max_bytes beyond their raw schema constraints. This leaves the agent without semantic guidance for the parameters.

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

Purpose5/5

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

The description uses a specific verb ('Read') and a precise resource ('incremental output from an execution cursor'), clearly distinguishing this from sibling tools like shell_exec, shell_write, or shell_signal. It tells an agent exactly what operation this tool performs.

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 'execution cursor' implies this tool is used after an execution has been started, but there is no explicit 'use this when...' guidance or mention of alternatives. No exclusions or conditions are given, so an agent must infer the context.

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

shell_signalC

Send a portable control intent to the active execution.

ParametersJSON Schema
NameRequiredDescriptionDefault
signalYes
exec_idYes
shell_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
signalYes
statusYes
exec_idYes
shell_idYes

TDQS

C2.6/5.0
Behavior2/5

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

No annotations are available, so the description carries the full burden of behavioral disclosure. It merely says 'Send a portable control intent' and does not explain the effects of interrupt, terminate, or kill, nor the impact on the shell/exec, reversibility, or any side effects. The schema enum hints at behavior, but the description itself adds little.

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

Conciseness3/5

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

The description is appropriately short with no wasted words, but its brevity sacrifices precision. 'Portable control intent' is unclear terminology, so the single sentence does not earn its place as effectively as it could.

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?

With no annotations and only a one-sentence description, the tool lacks the operational context needed to safely signal an execution: what each signal does, whether shell_id and exec_id must reference existing handles, and any preconditions. The schema enum provides structure but not the behavioral semantics, and the output schema does not compensate for missing input and context guidance.

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

Parameters2/5

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

Schema description coverage is 0%, and the description provides essentially no per-parameter meaning. It does not define shell_id, exec_id, or signal; only 'active execution' loosely suggests exec_id and 'control intent' loosely maps to signal, leaving shell_id entirely unexplained.

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 clear verb ('Send') and resource ('control intent to the active execution'), and the action is distinct from sibling tools like shell_open, shell_exec, shell_read, and shell_close. However, 'portable control intent' is vague jargon and does not explicitly name the signals that the schema enum lists (interrupt, terminate, kill).

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

Usage Guidelines2/5

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

No guidance is provided about when to use this tool versus siblings such as shell_exec or shell_read, no conditions, prerequisites, or exclusions are mentioned. The agent is left to infer the intended use case from the name and the signal enum.

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

shell_writeC

Write UTF-8 text to the active execution.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYes
exec_idYes
shell_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
statusYes
exec_idYes
shell_idYes
accepted_bytesYes

TDQS

C2.8/5.0
Behavior2/5

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

With no annotations provided, the description bears the full behavioral-disclosure burden, but it only adds an unspecified 'active' qualifier and UTF-8 encoding. It does not disclose whether the write blocks, whether it appends to the process stdin, whether newline termination is required, what happens if the execution is not active, or any buffering semantics.

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

Conciseness5/5

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

The description is a single front-loaded sentence ('Write...') with zero filler; every word earns its place. The imprecision of 'active' is a substance problem, not an organization problem.

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?

Although an output schema exists (relieving the return-value burden), the input side is underserved: 3 required parameters at 0% schema coverage, an undefined lifecycle state ('active'), and no guidance on where this fits among 6 sibling tools. An agent cannot confidently invoke or route to this tool based on the description alone.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate, but it only loosely maps 'text' as the UTF-8 content to write. It never explains the distinct roles of shell_id vs exec_id, how they relate (execution belongs to shell), or any constraints on which combinations are valid, so the agent must guess at the IDs' semantics.

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 ('Write'), a resource ('the active execution'), and a scope ('UTF-8 text'), and the write verb clearly distinguishes it from siblings like shell_read and shell_signal. However, 'active execution' is ambiguous: it reads like a singleton selection, while the schema requires an explicit shell_id and exec_id, leaving the execution-lifecycle meaning unexplained.

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 when-to-use guidance, prerequisites, or exclusions. Among 6 siblings (shell_open, shell_exec, shell_read, shell_signal, shell_list, shell_close), an agent gets no help deciding that this tool is for sending input after shell_exec, nor why it is preferable to shell_signal for process interaction.

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. 2 tool updatesv0.2.0
    • Changedshell_list5 fields changed
      • changedOutput schema / $defs / DialectName / enum
        Previous value: -[
        -  "bash",
        -  "pwsh"
        -]New value: +[
        +  "bash",
        +  "zsh",
        +  "pwsh"
        +]
      • removedOutput schema / $defs / EnvironmentKind
        Removed value: -{
        -  "enum": [
        -    "none",
        -    "python-venv",
        -    "conda",
        -    "custom"
        -  ],
        -  "title": "EnvironmentKind",
        -  "type": "string",
        -  "x-validUtf8": true
        -}
      • removedOutput schema / $defs / EnvironmentSummary
        Removed value: -{
        -  "additionalProperties": false,
        -  "properties": {
        -    "kind": {
        -      "$ref": "#/$defs/EnvironmentKind"
        -    },
        -    "name": {
        -      "pattern": "^[^\\x00]*$",
        -      "title": "Name",
        -      "type": "string",
        -      "x-validUtf8": true
        -    }
        -  },
        -  "required": [
        -    "kind"
        -  ],
        -  "title": "EnvironmentSummary",
        -  "type": "object"
        -}
      • removedOutput schema / $defs / HostContext / properties / environment
        Removed value: -{
        -  "$ref": "#/$defs/EnvironmentSummary"
        -}
      • changedOutput schema / $defs / HostContext / required
        Previous value: -[
        -  "mode",
        -  "workspace_root",
        -  "environment"
        -]New value: +[
        +  "mode",
        +  "workspace_root"
        +]
    • Changedshell_open2 fields changed
      • removedInput schema / properties / shell
        Removed value: -{
        -  "pattern": "(?=^/)^[^\\x00]*$",
        -  "title": "Shell",
        -  "type": "string",
        -  "x-nativeAbsolutePath": "linux",
        -  "x-platform": "linux",
        -  "x-validUtf8": true
        -}
      • changedOutput schema / $defs / DialectName / enum
        Previous value: -[
        -  "bash",
        -  "pwsh"
        -]New value: +[
        +  "bash",
        +  "zsh",
        +  "pwsh"
        +]
  2. 7 tool updatesv0.1.0
    • First observedshell_close
    • First observedshell_exec
    • First observedshell_list
    • First observedshell_open
    • First observedshell_read
    • First observedshell_signal
    • First observedshell_write

TDQS

A3.5/5.0

Scored across 7 tools

Disambiguation5/5

Each tool maps to a distinct operation in the shell lifecycle: creating, executing, reading, writing, signaling, listing, and closing. There is no meaningful overlap between the tool purposes, and the descriptions make the boundaries clear.

Naming Consistency5/5

All tool names follow the exact same shell_verb pattern, making the API highly predictable. The verb choice is consistent and matches the corresponding action with no style mixing.

Tool Count5/5

Seven tools is well-scoped for a persistent bash shell server. Each tool covers a necessary aspect of shell interaction without redundancy or bloat.

Completeness5/5

The toolset covers the full lifecycle of a persistent shell: open, execute, read output, write input, send signals, list shells, and close. There are no obvious dead ends or missing operations for the stated domain.

Maintenance

ActivitySlowing
ResponsivenessWithin a week

Related MCP Connectors

Related MCP Servers

  • F
    license
    B
    quality
    D
    maintenance
    An MCP server that enables users to execute arbitrary shell commands on their local machine and receive the output. It provides a terminal tool for running system commands through MCP-compatible clients using the Python SDK.
    1
    -
  • A
    license
    B
    quality
    A
    maintenance
    A secure MCP server for shell operations, terminal management, and process control, enabling AI assistants to safely execute commands and manage interactive sessions.
    13
    172 npm
    6
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    A PTY-based MCP server providing persistent, interactive shell sessions with strong Windows support, enabling AI agents to run commands, handle interactive tools, and manage large output across MCP-compatible clients.
    99 npm
    12
    MIT