Skip to main content
Glama
gaztrabisme

deepseek-subagent-mcp

by gaztrabisme

deepseek-subagent-mcp

Claude Code、Codex、またはその他のMCPクライアントに、独自のサブエージェントにタスクを委任するのと同じ方法で、DeepSeek Harnessエージェントを委任できるようにします。

MCP(Model Context Protocol)は、コーディングエージェントが外部ツールを読み込むための標準規格です。DeepSeek HarnessはDeepSeekのオープンソースエージェントランタイムであり、ファイルツールとシェルツールを備えたループ内のモデルで、2026年8月にMITライセンスでリリースされました。このサーバーはその間に位置し、別のプロセスでHarnessエージェントを実行し、開始、監視、継続、停止のための6つのツールを公開します。

子エージェントは独自のコンテキストウィンドウを持っています。それがポイントです——自己完結型のタスクを渡すと、ファイルを処理しながら独自のトークンを消費し、結果が返ってきます(トランスクリプトではなく)。

要件

  • Python 3.11以降

  • platform.deepseek.com のDeepSeek APIキー

  • Apple Silicon搭載のmacOS 14以上、またはx86-64またはarm64のLinux

Node.jsのインストールは不要です。Harnessランタイムは、deepseek-harness-sdk ホイール内に自己完結型の実行可能ファイルとして同梱されています。そのホイールがプラットフォームの制限にもなっています——macosx_14_0_arm64、manylinux_2_28_x86_64、manylinux_2_28_aarch64 のみを公開し、それ以外はありません。そのため、Windows、Intel Mac、macOS 13ではまったくインストールできません。

Related MCP server: dsh-crew

インストール

uvx --from git+https://github.com/gaztrabisme/deepseek-subagent-mcp deepseek-subagent-mcp

Claude Code

プロジェクト内の .mcp.json、または全プロジェクト用の ~/.claude.json に追加します:

{
  "mcpServers": {
    "deepseek-subagent": {
      "command": "uvx",
      "args": [
        "--from", "git+https://github.com/gaztrabisme/deepseek-subagent-mcp",
        "deepseek-subagent-mcp"
      ],
      "env": {
        "DEEPSEEK_API_KEY": "sk-...",
        "DSA_WORKSPACE": "/path/to/your/project"
      }
    }
  }
}

Codex

~/.codex/config.toml に追加します:

[mcp_servers.deepseek-subagent]
command = "uvx"
args = ["--from", "git+https://github.com/gaztrabisme/deepseek-subagent-mcp", "deepseek-subagent-mcp"]
env = { DEEPSEEK_API_KEY = "sk-...", DSA_WORKSPACE = "/path/to/your/project" }

ツール

ツール

機能

dsh_delegate

新しいサブエージェントをタスクで開始します。agent_id と run_id を即座に返します。

dsh_await

実行が完了するまでブロックし、結果を返します。

dsh_continue

既存のエージェントに、元のセッション内で追加の作業を送信します。

dsh_list

このサーバーが所有する全エージェントを、状態、コスト、実行履歴とともに表示します。

dsh_cancel

エージェントを停止し、そのプロセスを解放します。

dsh_transcript

エージェントが実際に行ったこと——ツール呼び出し、メッセージ、ターンの終了、生の応答。

実行はデフォルトで非同期です。コーディングタスクには数分かかることがあり、MCPクライアントは個々のツール呼び出しにタイムアウトを設定するためです。dsh_delegate は作業がキューに入れられるとすぐに戻ります。dsh_await が待機を行い、その間の進捗を報告します。短いタスクの場合は、dsh_delegate に wait_seconds を渡して2回目の呼び出しを省略できます。

各 dsh_delegate は1つのエージェントを作成し、1つのランタイムプロセスと1つの永続化されたセッションを保持します。dsh_continue はそのセッションに再入するため、子エージェントは以前のターンをコンテキストに保持したままになります。

すべての委任は、どのようにチェックされるかを明示する

dsh_delegate は verification 引数を必要とします。これはタスクが完了したことを証明するコマンドです。

dsh_delegate(task="Fix the failing date parser", verification="pytest -q tests/test_dates.py")

サーバーはそのコマンド自体を、子エージェントが終了した後、エージェントのワークスペースで実行します。子エージェントが自身のテスト結果を報告することは主張であり、終了コードは事実です。エージェントが時期尚早に勝利を宣言することは、よく文書化された障害モードです。

結果

状態

コマンドが0で終了

completed

コマンドが失敗、タイムアウト、または未指定

completed_unverified、出力付き

コマンドは、子エージェント自身の呼び出しを実行前にゲートするのと同じポリシーによって分類されます。呼び出し元は別のエージェントであり、プロンプトインジェクションを受ける可能性があるため、「呼び出し元が要求したから」は許可とはなりません。チェックするものが本当にない場合は verification="true" を渡します。明示的な嘘は、暗黙のデフォルトよりも優れています。

返されるもの

完全なトランスクリプトを返すサブエージェントは、自身の目的を無効にします。子エージェントの回答が DSA_SUMMARY_TOKENS より大きい場合、同じセッション内でさらに1ターンとして、7つのセクションからなる引き継ぎサマリーに置き換えるように求められます:目標、制約と優先事項、進捗、主要な決定、次のステップ、関連ファイル、クリティカルコンテキスト。それがMCPの境界を越えるものです。

すでに上限以下の回答はそのまま返され、余分なターンは消費されません。生の応答は常に保持されます:dsh_transcript(run_id, raw=True)。

監視付き実行

子エージェントのツール呼び出しは、実行前にゲートされます。ランタイム内の PreToolUse フックが、提案された各呼び出しをこのサーバーに渡し、許可または拒否を回答します。拒否された呼び出しは、理由を伴うブロックされたツール結果としてモデルに返され、モデルは適応します。

決定論的分類器が最初に判断し、ほとんどの呼び出しを処理します。ファイルの読み取り、ls、grep、バージョン管理の読み取り、ワークスペースの独自コードとテストの実行は、モデルを介さずに許可されます。特権コマンド、ワークスペース外の削除、フェッチからシェルへのパイプ、SSHキーや .env に触れるものはすべて即座に拒否されます——無害に見える動詞でも同様です。なぜなら cat ~/.ssh/id_rsa は秘密に適用される読み取り専用ツールだからです。分類器が分類できないものだけがエスカレーションされます。

エスカレーションは、クライアントがサポートする最良の階層で実行され、起動時に解決され、dsh_list によって報告されます:

階層

決定者

要件

agent

設定するレビュアープロセス

DSA_SUPERVISOR=agent

sampling

MCPクライアントのモデル

クライアントが sampling をアドバタイズ

elicitation

クライアント内のあなた

クライアントが elicitation をアドバタイズ

deterministic

なし——エスカレーションは拒否

常に利用可能

無人での実行。 Claude Codeは elicitation をアドバタイズし、sampling はアドバタイズしません。そのため、デフォルトではすべてのエスカレーションが人を中断します——あなたが他のことをしている間に動作することを意図したエージェントには間違っています。DSA_SUPERVISOR=agent を設定すると、代わりにローカルレビュアーがその席に配置されます:

DSA_SUPERVISOR=agent                        # nothing prompts a human
DSA_SUPERVISOR_CMD="claude -p --model sonnet"   # any CLI reading a prompt on stdin

レビュアーは同じ構造化された事実を受け取り、最初の行で ALLOW または DENY を回答します。それ以外はすべて拒否です。これにはサブプロセスとエスカレーションあたり約8秒のコストがかかり、そのCLIがログインしている任意のアカウントのトークンを消費します。

レビュアーは判断であり、境界ではありません。 cp note.txt $TMPDIR/copy.txt というコマンドがあり、事実が宛先を解決不能と正しく報告している場合、Claudeのレビュアーは $TMPDIR が「ワークスペースが存在するのと同じOSテンポラリルートである」と推論して許可しました。書き込みはワークスペースの外側に到達しました。その種の呼び出しは、現在ではレビュアーが見る前にルールによって拒否されます——これは適切な役割分担です。ルールが境界を守り、レビュアーはその内部のグレーゾーンを処理します。

すべての階層はクローズドフェイル(閉じた状態で失敗)です。到達不能なスーパーバイザー、タイムアウト、不正なリクエスト、またはどちらの機能もサポートしないクライアントは、すべて拒否を生成し、承認は決して行われません。

ラダーは一度選択されるのではなく、順に試行されます。エラーを起こす階層は次の階層にフォールスルーします。そのため、sampling をドロップするクライアント(2026-07-28仕様改訂で非推奨、現在も動作中)は、すべてを拒否する代わりにあなたに尋ねるようにダウングレードされます。タイムアウトする階層はフォールスルーしません。未回答の質問は「ノー」であり、別のチャネルで再度尋ねても待機時間が倍になるだけです。

DSA_SUPERVISOR=off を設定すると、ゲートを完全に無効にできます。

スーパーバイザーに表示されるのは構造化された事実であり、子エージェントの散文ではありません。ツール、各パイプラインセグメントのプログラム、コマンドが名前を付けるすべてのパスにワークスペースの内側か外側かのフラグが付いています。子エージェントはコマンドとその正当性の両方を記述し、自身の主張を主張できる子エージェントはそうします。静的に解決できないパス($TMPDIR/out.txt など)は、推測されるのではなく未解決として報告され、外側としてカウントされます。

examples/claude_supervisor.py は、実際のClaudeに対してこのパターン全体を実行します。sampling を自分でアドバタイズしないクライアント向けです:

DEEPSEEK_API_KEY=sk-... uv run python examples/claude_supervisor.py

上限とコスト

委任されたエージェントはループ内であなたの資金を消費するため、4つの独立した上限がそれを制限し、すべての実行は使用量を報告します。

上限

調整項目

強制方法

実行あたりの経過時間

DSA_RUN_TIMEOUT

ランタイムを強制終了

実行あたりの総トークン数

DSA_TURN_TOKEN_BUDGET

ランタイムを強制終了

実行あたりのモデル呼び出し回数

DSA_MAX_STEPS

ランタイムを強制終了

同一の繰り返しツール呼び出し

DSA_LOOP_STRIKES

ランタイムを強制終了

ワイヤ上でのターン途中のキャンセルはないため、すべての停止はプロセス強制終了です。上限による強制終了は、実行自体が報告した内容よりも常に優先されます。強制終了されたプロセスの出力が成功として読まれることはありません。

dsh_delegate、dsh_await、dsh_list はすべてトークン使用量——入力、出力、キャッシュ読み取りと書き込み、ステップ数——を、プロバイダーが報告したものから合計して報告します。ステップごとの入力は意図的に合計されます。各リクエストは再送信されたプレフィックス全体に課金されるため、合計が委任の実際のコストです。

トレースとその活用方法

すべての委任は2つのレコードを残します。

子エージェントのランタイムは、自身の永続ログ——すべてのツール呼び出しとその引数、すべてのフック呼び出しとその終了コード、期間、判定テキスト、ステップごとのトークン使用量——を <session root>/<workspace>/<session>/session.jsonl.zstd に書き込みます。

このサーバーは自身の側を <session root>/trace.jsonl に追記します。各判定とその階層、レイテンシ、スーパーバイザーに表示された事実、各完了実行とその検証結果と使用量、各蒸留ターンが実際に生成した文字数対トークン数の比率。長さのみで、テキストは含まれません。トレースは測定用であり、ソースのコピーを保持するためのものではありません。DSA_TRACE を設定して移動するか、DSA_TRACE=off で無効にします。

uv run python scripts/trace_report.py            # reads .dsh-sessions/trace.jsonl

このレポートは、デフォルトが推測された質問に答えます。分類器がどの程度の頻度でエスカレーションし、何に対してエスカレーションするか、DSA_CHARS_PER_TOKEN が観測値と一致するかどうか、DSA_MAX_STEPS と DSA_TURN_TOKEN_BUDGET が実際の使用状況に対してどの位置にあるか。このプロジェクトでの最初の実行では、pwd && ls がモデルにエスカレーションされていることが判明しました——読み取り専用リストがすでに知っていることを知らされるために11秒とモデル呼び出し1回——これは現在、ポリシーによって3分の1ミリ秒で解決されています。

設定

すべての設定はサーバープロセスの環境変数です。

変数

デフォルト

意味

DEEPSEEK_API_KEY

—

必須。子ランタイムに渡されます。

DEEPSEEK_BASE_URL

DeepSeekの公開API

プロキシやセルフホストエンドポイントを指定します。

DSA_MODEL

deepseek-v4-pro

委任作業用のモデルID。deepseek-v4-flash はより安価です。

DSA_WORKSPACE

サーバーの作業ディレクトリ

子プロセスが読み書きするディレクトリ。

DSA_MAX_AGENTS

4

同時に許可されるアクティブエージェント数。各エージェントはプロセスを保持します。

DSA_SESSION_ROOT

<workspace>/.dsh-sessions

セッションログが書き込まれる場所。

DSA_MAX_TOKENS

プロバイダのデフォルト

子プロセスへのリクエストごとの出力上限。

DSA_TURN_TOKEN_BUDGET

未設定

1回の実行が強制終了されるまでに消費できるトークンの総数。

DSA_MAX_STEPS

40

1回の実行が強制終了されるまでに行えるモデル呼び出し回数。

DSA_LOOP_STRIKES

3

同一のツール呼び出しが行われた場合、暴走として実行が強制終了される回数。

DSA_RUN_TIMEOUT

1800

実行が強制終了され、失敗と報告されるまでの秒数。

DSA_IDLE_TIMEOUT

900

アイドル状態のエージェントが回収され、追い出されるまでの秒数。

DSA_RUN_ARCHIVE

200

エージェントが回収された後も読み取り可能な状態で保持される完了済み実行数。

DSA_SUMMARY_TOKENS

2000

このサイズを超える結果は、子プロセスに要約が要求されます。

DSA_CHARS_PER_TOKEN

3.5

その上限に使用される変換率。このワークロードでは3.54と測定されています。

DSA_VERIFY_TIMEOUT

300

検証コマンドが実行可能な秒数。実行の残り期限によって上限が決まります。

DSA_SUPERVISOR

auto

auto / agent / sampling / elicitation / allow-escalations / off。

DSA_SUPERVISOR_CMD

claude -p --model sonnet

DSA_SUPERVISOR=agent の場合のレビューア。標準入力からプロンプトを読み取ります。

DSA_SUPERVISOR_TIMEOUT

120

判定を待つ秒数。超過すると拒否されます。

DSA_SANDBOX_MODE

workspace-write

read-only、workspace-write、または danger-full-access。

DSA_REASONING_EFFORT

low

off / low / high / max。コストに大きく影響します。

DSA_CONTEXT_WINDOW

200000

作業予算の圧縮はこれに対して測定されます。

DSA_BASH_TIMEOUT_MS

60000

1回のbash呼び出しに対するエグゼキュータレベルの制限。

DSA_REQUEST_TIMEOUT

なし

1回のランタイムリクエストを待機する秒数。

DSA_TRANSCRIPT_LIMIT

400

実行ごとに保持されるアクティビティ行数。

DSA_LOG_LEVEL

info

サーバーのログレベル。stderrのみに書き込まれます。

DSA_TRACE

<session root>/trace.jsonl

決定と実行のトレース。off で無効化。

DSA_CORDIS

バンドルされた構成

パス、または上流の最小構成の場合は bundled。

DSA_PROVIDER

deepseek-official

構成によって登録されるプロバイダルート。

これに依存する前に知っておくべき制限事項

これらはHarness SDKのワイヤプロトコルに由来するものであり、ここでの選択によるものではありません。

  • ファイルシステムのサンドボックスはbashをカバーしません。 dsh-fs-sandbox はモデルの write/edit ツールを作業ディレクトリに制限しますが、dsh-bash-sandbox はバンドルされたランタイム実行可能ファイルに含まれていないため、bash自体は制限されません。スーパーバイザーがこれをカバーします。スーパーバイザーは実行の上流で、bashを含むすべてのツールをゲートします。DSA_SUPERVISOR=off の場合、bashにはまったく境界がありません。ブランチやスクラッチディレクトリを指定してください。

  • サンドボックスはファイルへの影響のみを制限します — ネットワーク、プロセス、システムコールは制限しません。また、workspace-write は作業ディレクトリのルートに加えて /tmp も許可します。

  • キャンセルはプロセスを強制終了します。 ワイヤ上にターン途中のキャンセルはないため、dsh_cancel はランタイムを終了します。すでに書き込まれた編集はディスクに残り、セッションはその後再開できません。

  • 回収されたエージェントのセッションは消えますが、その結果は消えません。 DSA_IDLE_TIMEOUT の後、プロセスは解放されます。dsh_await と dsh_transcript はその完了済み実行に対して引き続き機能しますが、dsh_continue は機能しません。

  • セッションはプロセスが存続する限り存続します。 セッションごとのクローズはないため、エージェントの履歴とともにメモリが増加します。使い終わったエージェントはキャンセルしてください。

  • 上流は開発者プレビューです。 deepseek-harness-sdk は ==0.1.0rc7 に固定されています。1週間のうちに2つのリリース候補が出荷されました。ワイヤが変更されることを想定してください。

開発

uv sync
uv run pytest                  # 153 tests, no API key, no network
uv run ruff check .
uv run deepseek-subagent-mcp   # starts on stdio; a client drives it

ライブテストには実際のキーとトークンコストが必要です。pytestでは収集されません。

DEEPSEEK_API_KEY=sk-... uv run python tests/smoke_task.py        # the product works
DEEPSEEK_API_KEY=sk-... uv run python tests/smoke_result.py      # distillation and the archive
DEEPSEEK_API_KEY=sk-... uv run python tests/smoke_supervisor.py  # the gate works
DEEPSEEK_API_KEY=sk-... uv run python tests/smoke_escalation.py  # both escalation tiers
DEEPSEEK_API_KEY=sk-... uv run python tests/smoke_limits.py      # reaper and deadline
DEEPSEEK_API_KEY=sk-... uv run python tests/smoke_mcp.py         # all six tools

CLAUDE.md にはアーキテクチャと上流の制約が記載されています。wiki/ には決定記録と測定結果が記載されています。

ライセンス

MIT.

Available Tools

6 tools
dsh_awaitA

Wait for a run to finish and return its result.

Safe to call repeatedly. If the run is still going when wait_seconds elapses, this returns the current state rather than an error. Runs whose agent has since been reaped are still readable — their results are archived.

Args: run_id: The run to wait on, from dsh_delegate or dsh_continue. wait_seconds: Maximum time to block. Use a longer value for big tasks.

ParametersJSON Schema
NameRequiredDescriptionDefault
run_idYes
wait_secondsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations present, the description carries the transparency burden and does well by disclosing that repeated calls are safe, that timeout returns current state rather than error, and that archived results from reaped agents remain readable. These are non-obvious runtime behaviors that help the agent decide when and how to call the tool.

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

Conciseness5/5

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

The description is tightly structured: one purpose sentence, then behavioral notes, then parameter explanations. Every sentence adds meaningful information without repetition or fluff. The format uses clear separation and remains easy to scan.

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?

The description covers the most important contextual aspects: repeatability, timeout behavior, run provenance, and archived result accessibility. Since an output schema is present, the description does not need to explain return values in depth. Minor gaps like error cases for unknown run_id are not critical for this tool.

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

Parameters4/5

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

Schema description coverage is 0%, so the description is the only source of parameter meaning. It adds useful semantics: run_id is tied to dsh_delegate/dsh_continue, and wait_seconds is 'Maximum time to block' with tuning guidance for large tasks. This largely compensates for the missing schema descriptions.

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 opens with a clear, specific action: 'Wait for a run to finish and return its result.' It identifies the tool's resource (a delegated/continued run) and distinguishes it from siblings like dsh_list, dsh_cancel, and dsh_transcript by directly stating what this wait operation does.

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

Usage Guidelines4/5

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

The description provides clear context for when to use this tool, such as waiting on a run identified from dsh_delegate or dsh_continue, and gives practical guidance to use a longer wait_seconds for big tasks. It does not explicitly mention exclusions or alternatives, but the usage context is unambiguous.

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

dsh_cancelA

Stop a subagent and release its runtime process.

The harness protocol has no mid-turn cancel, so this kills the child process. Any in-flight run is reported as cancelled, and file edits it already made stay on disk. Cancelling ends the session: its context cannot be resumed, so start a new agent rather than continuing this one.

Args: agent_id: Agent to stop.

ParametersJSON Schema
NameRequiredDescriptionDefault
agent_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior5/5

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

With no annotations provided, the description carries the full burden, and it excels. It discloses the side effects: 'kills the child process,' 'in-flight run is reported as cancelled,' 'file edits it already made stay on disk,' and the session becomes non-resumable. This level of detail about runtime and session consequences is exemplary.

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 compact and well-organized, leading with the core action, followed by necessary behavioral caveats. Every sentence contributes meaningful information without redundancy. The Args section is minimal and to the point.

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

Completeness4/5

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

For a tool with a single parameter, no nested objects, and an existing output schema, the description covers all essential aspects: what it does, side effects, and parameter purpose. It could optionally mention expected return behavior or error handling, but those are likely captured by the output schema and are not critical for this simple cancellation operation.

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

Parameters3/5

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

The schema provides zero description for 'agent_id' (coverage 0%), so the description must compensate. It does offer 'agent_id: Agent to stop,' which accurately identifies the parameter's purpose. However, it adds minimal detail beyond the parameter name and does not mention expected format, validation rules, or how to obtain a valid agent_id. It is functional but not enriching.

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 and resource: 'Stop a subagent and release its runtime process.' It clearly differentiates from sibling tools like dsh_list, dsh_await, or dsh_continue by focusing on termination and process cleanup. The scope is unmistakable.

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

Usage Guidelines4/5

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

The description explains the critical usage constraint: 'The harness protocol has no mid-turn cancel, so this kills the child process' and warns that 'Cancelling ends the session: its context cannot be resumed.' This provides clear context for when to use the tool, though it does not explicitly name alternative tools or state when not to use it beyond the session-ending implication.

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

dsh_continueA

Send follow-up work to an existing subagent, in its original session.

The child keeps the full context of its earlier turns, so refer to prior work directly ("the migration you just wrote"). Work is queued: if the agent is mid-run, this message runs after it.

Args: agent_id: Agent to continue, from dsh_delegate or dsh_list. message: The follow-up instruction. verification: Command proving this follow-up is done. Omit to skip verification for this turn; the run then reports completed_unverified. wait_seconds: Block up to this long for the run to finish. 0 returns at once.

ParametersJSON Schema
NameRequiredDescriptionDefault
messageYes
agent_idYes
verificationNo
wait_secondsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior4/5

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

With no annotations provided, the description must carry the burden of behavioral disclosure. It explains queuing behavior, the preservation of context, the optional verification parameter with its consequence (completed_unverified), and the wait_seconds blocking behavior. This adequately covers the tool's operational nuances, though it does not mention potential error conditions or authorization requirements, which are not critical for a follow-up tool.

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

Conciseness5/5

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

The description is efficient and well-structured. It opens with a one-sentence purpose, follows with a brief contextual note about queuing and context preservation, and then presents a clean, labeled Args list. Every sentence adds value; there is no fluff or repetition. The front-loaded purpose ensures agents quickly identify applicability.

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

Completeness5/5

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

Given the tool's moderate complexity (4 parameters, optional verification, wait semantics), the description is complete. It covers the intended use case, operational behavior, and parameter meanings. Since an output schema exists, the description does not need to explain return values. It also implicitly addresses prerequisites by referencing dsh_delegate/dsh_list for obtaining agent IDs.

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

Parameters5/5

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

Despite a schema description coverage of 0% (i.e., the schema provides no textual descriptions), the description includes an 'Args' section that explains each of the four parameters: agent_id (identifies the target agent), message (the follow-up instruction), verification (optional command to prove completion), and wait_seconds (blocking duration). This adds rich meaning beyond the schema's bare types and defaults, fully compensating for the schema's lack of documentation.

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 begins with a clear, specific verb-resource combination: 'Send follow-up work to an existing subagent, in its original session.' This explicitly distinguishes it from sibling tools like dsh_delegate (which presumably creates a new agent) and dsh_await (which waits on runs). The phrasing is precise and immediately conveys the tool's core function.

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

Usage Guidelines4/5

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

The description provides clear usage context by explaining that work is queued if the agent is mid-run and that the agent retains full context, enabling direct references to prior work. It also directs users to obtain agent IDs from dsh_delegate or dsh_list, indicating alternatives. However, it does not explicitly state when not to use this tool, such as when a fresh context is needed, so it stops short of full exclusion guidance.

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

dsh_delegateA

Start a new DeepSeek Harness subagent on a task.

Returns immediately with an agent_id and run_id unless wait_seconds is set. Each call creates a fresh agent with its own runtime process and session; use dsh_continue to give more work to an agent that already exists.

Args: task: What to do, with a clear definition of done. The child cannot ask you clarifying questions, so state the acceptance criteria. verification: The shell command that proves the task is done, run by this server in the workspace after the child finishes — e.g. "pytest -q" or "npm test && npm run lint". Its exit code decides whether the run is reported completed or completed_unverified. Pass "true" if there is genuinely nothing to check. workspace: Directory the child reads and writes. Relative paths resolve against the server's configured workspace. Defaults to that workspace. instructions: Optional standing guidance prepended to the task, e.g. coding conventions or files to leave alone. model: DeepSeek model id. Defaults to the server's configured model. name: Human label for this agent, shown in dsh_list. wait_seconds: Block up to this long for the run to finish. 0 returns at once.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNo
taskYes
modelNo
workspaceNo
instructionsNo
verificationYes
wait_secondsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A5/5.0
Behavior5/5

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

No annotations are provided, so the description fully discloses behavior: creates a fresh agent per call, returns immediately unless wait_seconds, child cannot ask clarifying questions (must include acceptance criteria), verification exit code decides unverified vs completed, workspace resolution, and defaults. This is thorough behavioral disclosure.

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 well-structured: a lead paragraph stating purpose and key behavior (fresh process, immediate return), then a clean Args section with one line per parameter. Each sentence adds value; no fluff. Front-loads the most important behavioral facts.

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

Completeness5/5

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

The description covers every parameter with meaning, explains control flow (wait_seconds), explains the verification command's role in determining completion status, and mentions the sibling tool dsh_continue. It is complete enough for an agent to correctly invoke this tool without further context.

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

Parameters5/5

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

Schema has no descriptions (0% coverage). The description compensates fully: it explains task (with acceptance criteria and inability to clarify), verification (shell command, exit code semantics), workspace (relative paths, default), instructions (prepended standing guidance), model (default), name (human label), and wait_seconds (blocking behavior). Every parameter is given meaningful semantics beyond the schema's type-only definition.

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

Purpose5/5

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

The description clearly states the verb (start) and resource (a new DeepSeek Harness subagent), explains the immediate-return behavior, and explicitly distinguishes this from 'dsh_continue' for giving more work to existing agents. This effectively differentiates it from siblings.

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

Usage Guidelines5/5

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

The description provides explicit guidance: states when to use dsh_continue for existing agents, explains the wait_seconds behavior, and describes the verification command's role in determining run status. This clearly orients the agent on when to invoke this vs. alternatives.

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

dsh_listA

List every subagent this server owns, with its state, cost, and run history.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior3/5

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

No annotations are provided, and the description does not explicitly state whether the operation is read-only, what side effects it might have, or any access requirements. It only lists what it returns.

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

Conciseness5/5

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

The description is a single, clear sentence that efficiently conveys the tool's purpose and output without any fluff.

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?

The description mentions the output attributes (state, cost, run history) and scope ('this server owns'), but does not discuss pagination, ordering, or other response details. Given an output schema is present, this is adequate.

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

Parameters4/5

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

The tool has no parameters, and the description correctly omits any parameter details. With zero parameters, this is a baseline score of 4.

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

Purpose5/5

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

The description clearly states the action (List) and the resource (subagents) with specific attributes (state, cost, run history), making it distinct from sibling tools.

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?

It is implied that this tool is for listing subagents, but there is no explicit guidance on when to use it versus alternatives like dsh_transcript or others.

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

dsh_transcriptA

Show what a subagent actually did during a run.

Returns the tail of its activity log — tool calls, assistant messages, turn endings. Use this to check progress on a long run, or to understand a failure. Returns live data while the run is still going.

Args: run_id: The run to inspect. limit: How many of the most recent activity lines to return. raw: Also return the child's full uncapped response. dsh_delegate returns a distilled version when the answer is large; this is where the original text lives.

ParametersJSON Schema
NameRequiredDescriptionDefault
rawNo
limitNo
run_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

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

Without annotations, the description carries the transparency burden. It explains that it returns the tail of the activity log, live data, and the effect of the 'raw' parameter. It implies read-only behavior by saying 'Show' and 'Returns', but doesn't explicitly state it has no side effects. This is adequate given the tool's nature.

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 well-structured with a clear overview and parameter explanations. It is slightly verbose but each sentence adds value. It is not overly long relative to the complexity of the tool.

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?

The description covers the tool's purpose, typical use cases, return behavior, and parameter semantics. It doesn't explain output schema (not required), but it provides enough context for an agent to decide when and how to use it. The mention of dsh_delegate relationship adds completeness.

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 description explains each parameter beyond the schema: run_id (which run), limit (how many recent lines), and raw (full uncapped response). It also connects raw to dsh_delegate, adding context. Since schema coverage is 100%, the baseline is 3, but the extra semantic detail raises it to 4.

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

Purpose5/5

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

The description clearly states the tool's function: 'Show what a subagent did during a run.' It specifies the content returned (tool calls, assistant messages, turn endings) and distinguishes it as a transcript tool for inspecting activity.

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

Usage Guidelines4/5

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

The description provides clear usage scenarios: 'Use this to check progress on a long run, or to understand a failure.' It also mentions live data during a run, but does not explicitly contrast with sibling tools like dsh_list or dsh_delegate, which would make the guidance stronger.

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. 6 tool updatesv0.2.0
    • First observeddsh_await
    • First observeddsh_cancel
    • First observeddsh_continue
    • First observeddsh_delegate
    • First observeddsh_list
    • First observeddsh_transcript

TDQS

A4.4/5.0

Scored across 6 tools

Disambiguation5/5

Each tool targets a distinct lifecycle operation: list, delegate, await, continue, cancel, and transcript. There is no overlap in purpose, and the descriptions clearly delineate when to use each.

Naming Consistency4/5

All tools use the 'dsh_' prefix with clear verb names (list, delegate, await, continue, cancel, transcript). The pattern is consistent, though 'dsh_transcript' is a noun rather than a verb, which is a minor deviation.

Tool Count5/5

Six tools cover the full lifecycle of subagent management without redundancy. This is well-scoped for the server's purpose.

Completeness5/5

The surface covers the complete lifecycle: create (delegate), monitor (await, transcript), extend (continue), and terminate (cancel), plus listing. No obvious gaps exist for managing subagents.

Maintenance

ActivitySlowing
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers