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 года под лицензией MIT. Этот сервер находится между ними: он запускает агента Harness в отдельном процессе и предоставляет шесть инструментов для запуска, наблюдения, продолжения и остановки.

Дочерний агент имеет собственное контекстное окно. В этом и заключается смысл — вы передаете ему самодостаточную задачу, он тратит свои собственные токены на работу с файлами, а вы получаете результат вместо расшифровки.

Требования

  • Python 3.11 или новее

  • Ключ API DeepSeek с platform.deepseek.com

  • macOS 14+ на Apple Silicon, или Linux на x86-64 или arm64

Установка 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 выполняет ожидание и сообщает о прогрессе. Для коротких задач передайте wait_seconds в dsh_delegate и пропустите второй вызов.

Каждый dsh_delegate создает одного агента, удерживая один процесс выполнения и одну сохраненную сессию. 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, его просят — в той же сессии, как один дополнительный ход — заменить его сводкой передачи дел из семи разделов: Цель, Ограничения и предпочтения, Прогресс, Ключевые решения, Следующие шаги, Соответствующие файлы, Критический контекст. Это то, что пересекает границу MCP.

Ответ, уже не превышающий лимит, возвращается дословно и не требует дополнительного хода. Сырой ответ всегда сохраняется: dsh_transcript(run_id, raw=True).

Контролируемое выполнение

Вызовы инструментов дочернего агента блокируются перед выполнением. Хук PreToolUse внутри среды выполнения передает каждый предложенный вызов этому серверу, который отвечает разрешением или запретом; запрещенный вызов возвращается модели как заблокированный результат инструмента с указанием причины, и модель адаптируется.

Детерминированный классификатор принимает решение первым, и он решает большинство вызовов. Чтение файлов, ls, grep, чтение системы контроля версий, запуск собственного кода и тестов рабочей области разрешаются без участия модели. Привилегированные команды, удаление за пределами рабочей области, передача вывода fetch в оболочку и все, что касается ключей 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 в первой строке. Все остальное — это DENY. Это стоит подпроцесса и примерно восьми секунд на эскалацию и тратит токены с той учетной записи, в которую выполнен вход в этом CLI.

Рецензент — это суждение, а не граница. Для cp note.txt $TMPDIR/copy.txt, когда факты правильно сообщают, что место назначения не может быть разрешено, рецензент Claude рассудил, что $TMPDIR «является тем же корнем временной папки ОС, в которой находится рабочая область», и разрешил это. Запись попала за пределы рабочей области. Этот класс вызовов теперь отклоняется по правилу до того, как любой рецензент его увидит — это правильное разделение труда: правила удерживают границу, рецензент обрабатывает серую зону внутри нее.

Каждый уровень отказывает в закрытом режиме. Недостижимый супервизор, тайм-аут, некорректный запрос или клиент, не поддерживающий ни одну из возможностей, приводят к запрету, а не к одобрению.

Лестница проходится, а не выбирается один раз: уровень, который выдает ошибку, переходит к следующему, поэтому клиент, который отбрасывает выборку (устаревшую в редакции спецификации от 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

Ограничения и стоимость

Делегированный агент тратит ваши деньги в цикле, поэтому четыре независимых ограничения сдерживают его, и каждый запуск сообщает, что было использовано.

Ограничение

Параметр

Принудительно

Астрономическое время на запуск

DSA_RUN_TIMEOUT

убийством выполнения

Всего токенов на запуск

DSA_TURN_TOKEN_BUDGET

убийством выполнения

Вызовов модели на запуск

DSA_MAX_STEPS

убийством выполнения

Идентичных повторяющихся вызовов инструментов

DSA_LOOP_STRIKES

убийством выполнения

Нет отмены во время хода по сети, поэтому каждая остановка — это убийство процесса. Убийство из-за ограничения всегда имеет приоритет над тем, что сообщил сам запуск: вывод убитого процесса никогда не читается как успех.

dsh_delegate, dsh_await и dsh_list все сообщают об использовании токенов — ввод, вывод, чтение и запись кэша, а также количество шагов — суммированное из того, что сообщил провайдер. Ввод на шаг суммируется намеренно: каждый запрос выставляет счет за весь повторно отправленный префикс, поэтому общая сумма — это то, что делегирование на самом деле стоило.

Трассировки и что с ними делать

Каждое делегирование оставляет две записи.

Среда выполнения дочернего агента записывает свой собственный долговечный журнал — каждый вызов инструмента с аргументами, каждый вызов хука с кодом выхода, продолжительностью и текстом вердикта, использование токенов на шаг — в <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 эскалируется до модели — одиннадцать секунд и вызов модели, чтобы узнать то, что уже знал список только для чтения — что теперь решается политикой за треть миллисекунды.

Конфигурация

Каждый параметр — это переменная окружения в процессе сервера.

Переменная

По умолчанию

Значение

DEEPSEEK_API_KEY

—

Обязательно. Передается дочерней среде выполнения.

DEEPSEEK_BASE_URL

Публичный API DeepSeek

Укажите прокси или самостоятельно размещенную конечную точку.

DSA_MODEL

deepseek-v4-pro

Идентификатор модели для делегированной работы. deepseek-v4-flash дешевле.

DSA_WORKSPACE

Рабочая директория сервера

Директория, которую дочерний процесс читает и в которую пишет.

DSA_MAX_AGENTS

4

Максимальное количество активных агентов одновременно. Каждый занимает процесс.

DSA_SESSION_ROOT

<workspace>/.dsh-sessions

Куда записываются журналы сессий.

DSA_MAX_TOKENS

По умолчанию провайдера

Лимит вывода на один запрос для дочернего процесса.

DSA_TURN_TOKEN_BUDGET

не задано

Общее количество токенов, которое может потратить один запуск до завершения.

DSA_MAX_STEPS

40

Количество вызовов модели в одном запуске до его завершения.

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. Читает подсказку из stdin.

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

Ограничение на уровне исполнителя для одного вызова bash.

DSA_REQUEST_TIMEOUT

нет

Время в секундах ожидания одного запроса среды выполнения.

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; два кандидата в релизы вышли за неделю. Ожидайте изменений в проводной связи.

Разработка

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