deepseek-subagent-mcp
deepseek-subagent-mcp
Claude Code, Codex 또는 다른 MCP 클라이언트에 자체 하위 에이전트에게 작업을 위임하는 것처럼 작업을 위임할 수 있는 DeepSeek Harness 에이전트를 제공합니다.
MCP(Model Context Protocol)는 코딩 에이전트가 외부 도구를 로드하는 표준입니다. DeepSeek Harness는 DeepSeek의 오픈소스 에이전트 런타임으로, 파일 및 셸 도구를 사용하는 루프 내의 모델이며 2026년 8월 MIT 라이선스로 출시되었습니다. 이 서버는 그 사이에 위치합니다: 별도 프로세스에서 Harness 에이전트를 실행하고 시작, 모니터링, 계속 실행 및 중지를 위한 여섯 가지 도구를 제공합니다.
하위 에이전트는 자체 컨텍스트 창을 가지고 있습니다. 이것이 핵심입니다 — 자체 포함된 작업을 전달하면 파일을 처리하면서 자체 토큰을 소모하고, 결과를 반환합니다(전체 기록이 아닌).
요구 사항
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-mcpClaude 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" }도구
도구 | 기능 |
| 작업에 대한 새 하위 에이전트를 시작합니다. 즉시 |
| 실행이 완료될 때까지 차단합니다; 결과를 반환합니다. |
| 기존 에이전트에 원래 세션에서 추가 작업을 보냅니다. |
| 이 서버가 소유한 모든 에이전트(상태, 비용, 실행 기록 포함)를 표시합니다. |
| 에이전트를 중지하고 프로세스를 해제합니다. |
| 에이전트가 실제로 수행한 작업 — 도구 호출, 메시지, 턴 종료 및 원시 응답. |
실행은 기본적으로 비동기식입니다. 코딩 작업은 수 분이 걸릴 수 있고 MCP 클라이언트는 개별 도구 호출에 타임아웃을 적용하기 때문입니다. dsh_delegate는 작업이 대기열에 추가되는 즉시 반환됩니다; dsh_await는 대기하면서 진행 상황을 보고합니다. 짧은 작업의 경우 dsh_delegate에 wait_seconds를 전달하고 두 번째 호출을 건너뜁니다.
각 dsh_delegate는 하나의 에이전트를 생성하며, 하나의 런타임 프로세스와 하나의 지속 세션을 유지합니다. dsh_continue는 해당 세션에 다시 진입하므로 하위 에이전트는 이전 턴을 컨텍스트에 계속 유지합니다.
모든 위임은 검증 방법을 명시합니다
dsh_delegate는 verification 인수를 필수로 요구합니다: 작업 완료를 증명하는 명령어입니다.
dsh_delegate(task="Fix the failing date parser", verification="pytest -q tests/test_dates.py")서버는 하위 에이전트가 완료된 후 에이전트의 작업 공간에서 해당 명령어를 직접 실행합니다. 하위 에이전트가 자체 테스트 결과를 보고하는 것은 주장일 뿐입니다; 종료 코드는 사실이며, 에이전트가 조기에 승리를 선언하는 것은 잘 문서화된 실패 모드입니다.
결과 | 상태 |
명령어가 0으로 종료됨 |
|
명령어 실패, 타임아웃 또는 제공되지 않음 |
|
명령어는 실행 전 하위 에이전트 자체 호출을 제한하는 동일한 정책으로 분류됩니다 — 호출자는 다른 에이전트이며 프롬프트 인젝션될 수 있으므로 "호출자가 요청했다"는 인증이 아닙니다. 진정으로 확인할 것이 없을 때는 verification="true"를 전달하세요; 명시적인 거짓말이 조용한 기본값보다 낫습니다.
반환되는 내용
전체 기록을 반환하는 하위 에이전트는 그 목적을 상실합니다. 하위 에이전트의 답변이 DSA_SUMMARY_TOKENS보다 큰 경우, 동일한 세션에서 한 번의 추가 턴으로 이를 7개 섹션(목표, 제약 조건 및 선호 사항, 진행 상황, 주요 결정, 다음 단계, 관련 파일, 중요 컨텍스트)의 핸드오프 요약으로 대체하도록 요청받습니다. 이것이 MCP 경계를 넘는 내용입니다.
이미 한도 미만인 답변은 그대로 반환되며 추가 턴이 필요하지 않습니다. 원시 응답은 항상 보관됩니다: dsh_transcript(run_id, raw=True).
감독 실행
하위 에이전트의 도구 호출은 실행 전에 게이트됩니다. 런타임 내부의 PreToolUse 훅은 각 제안된 호출을 이 서버에 전달하며, 서버는 허용 또는 거부를 응답합니다; 거부된 호출은 차단된 도구 결과로 모델에 반환되며 이유를 포함하고 모델은 적응합니다.
결정론적 분류기가 먼저 결정하며, 대부분의 호출을 결정합니다. 파일 읽기, ls, grep, 버전 관리 읽기, 작업 공간 자체 코드 및 테스트 실행은 모델 개입 없이 허용됩니다. 권한 있는 명령어, 작업 공간 외부의 삭제, 셸로 파이프된 fetch, SSH 키나 .env 파일에 접근하는 모든 것은 무조건 거부됩니다 — 무해해 보이는 동사도 포함됩니다. cat ~/.ssh/id_rsa는 비밀에 적용된 읽기 전용 도구이기 때문입니다. 분류기가 분류할 수 없는 것만 에스컬레이션됩니다.
에스컬레이션은 클라이언트가 지원하는 최상위 계층에서 실행되며, 시작 시 해결되고 dsh_list에 의해 보고됩니다:
계층 | 결정 주체 | 요구 사항 |
| 사용자가 구성한 검토자 프로세스 |
|
| MCP 클라이언트의 모델 | 클라이언트가 |
| 사용자(클라이언트 내에서) | 클라이언트가 |
| 없음 — 에스컬레이션 거부 | 항상 사용 가능 |
무인 실행. 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 임시 루트와 동일하다"고 추론하여 허용했습니다. 쓰기 작업은 작업 공간 외부에 이루어졌습니다. 이러한 유형의 호출은 이제 검토자가 보기 전에 규칙에 의해 거부됩니다 — 이것이 올바른 역할 분담입니다: 규칙이 경계를 유지하고, 검토자가 그 안의 회색 영역을 처리합니다.
모든 계층은 실패 시 차단됩니다. 연결할 수 없는 감독자, 타임아웃, 잘못된 요청 또는 두 기능을 모두 지원하지 않는 클라이언트는 모두 승인이 아닌 거부를 생성합니다.
계층은 한 번 선택되는 것이 아니라 순차적으로 시도됩니다: 오류가 발생한 계층은 다음 계층으로 넘어갑니다. 따라서 샘플링을 중단한 클라이언트(2026-07-28 사양 개정에서 폐기됨, 현재도 작동 중)는 모든 것을 거부하는 대신 사용자에게 질문하는 방식으로 저하됩니다. 타임아웃된 계층은 넘어가지 않습니다; 응답하지 않은 질문은 '아니오'이며, 다른 채널에서 다시 질문하면 대기 시간만 두 배가 됩니다.
게이트를 완전히 비활성화하려면 DSA_SUPERVISOR=off로 설정합니다.
감독자에게 표시되는 것은 구조화된 사실이며, 하위 에이전트의 산문이 아닙니다: 도구, 각 파이프라인 세그먼트의 프로그램, 명령어가 명명하는 각 경로(작업 공간 내부/외부 플래그 포함). 하위 에이전트는 명령어와 그에 대한 정당성을 모두 작성하며, 자신의 사례를 주장할 수 있는 하위 에이전트는 그렇게 할 것입니다. 정적으로 확인할 수 없는 경로 — $TMPDIR/out.txt —는 추측되지 않고 확인 불가능으로 보고되며 외부로 간주됩니다.
examples/claude_supervisor.py는 sampling을 자체적으로 광고하지 않는 클라이언트를 위해 실제 Claude에 대해 전체 패턴을 실행합니다:
DEEPSEEK_API_KEY=sk-... uv run python examples/claude_supervisor.py상한 및 비용
위임된 에이전트는 루프에서 비용을 소모하므로, 네 가지 독립적인 상한이 이를 제한하며 각 실행은 사용된 내용을 보고합니다.
상한 | 설정 | 적용 주체 |
실행당 실제 시간 |
| 런타임 종료 |
실행당 총 토큰 |
| 런타임 종료 |
실행당 모델 호출 수 |
| 런타임 종료 |
동일한 반복 도구 호출 |
| 런타임 종료 |
와이어 상에서 중간 턴 취소는 없으므로 모든 중지는 프로세스 종료입니다. 상한에 의한 종료는 항상 실행 자체가 보고한 내용보다 우선합니다: 종료된 프로세스의 출력은 성공으로 간주되지 않습니다.
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가 모델로 에스컬레이션되는 것을 발견했습니다 — 읽기 전용 목록이 이미 알고 있는 것을 알기 위해 11초와 모델 호출 — 이제는 3분의 1밀리초 만에 정책으로 해결됩니다.
구성
모든 설정은 서버 프로세스의 환경 변수입니다.
Variable | Default | 의미 |
| — | 필수. 하위 런타임에 전달됩니다. |
| DeepSeek 공개 API | 프록시 또는 자체 호스팅 엔드포인트를 가리킵니다. |
|
| 위임된 작업을 위한 모델 ID. |
| 서버의 작업 디렉토리 | 하위 프로세스가 읽고 쓰는 디렉토리. |
|
| 동시에 허용되는 활성 에이전트 수. 각각 프로세스를 보유합니다. |
|
| 세션 로그가 기록되는 위치. |
| 제공자 기본값 | 하위 프로세스에 대한 요청별 출력 상한. |
| 설정되지 않음 | 실행이 종료되기 전까지 소비할 수 있는 총 토큰 수. |
|
| 실행이 종료되기 전까지 호출할 수 있는 모델 호출 수. |
|
| 동일한 도구 호출이 반복되어 실행이 무한 루프로 간주되어 종료되기까지의 횟수. |
|
| 실행이 종료되고 실패로 보고될 때까지의 시간(초). |
|
| 유휴 에이전트가 회수 및 제거될 때까지의 시간(초). |
|
| 에이전트 회수 후에도 읽을 수 있는 완료된 실행 수. |
|
| 결과 크기가 이 값을 초과하면 하위 프로세스에 요약을 요청합니다. |
|
| 해당 상한에 사용되는 변환 계수. 이 워크로드에서 3.54로 측정됨. |
|
| 검증 명령이 실행될 수 있는 시간(초), 실행의 남은 마감 시간에 의해 제한됩니다. |
|
|
|
|
|
|
|
| 거부하기 전까지 판결을 기다리는 시간(초). |
|
|
|
|
|
|
|
| 작업 예산 압축이 측정되는 기준. |
|
| 단일 bash 호출에 대한 실행자 수준 제한. |
| 없음 | 하나의 런타임 요청을 기다리는 시간(초). |
|
| 실행당 유지되는 활동 라인 수. |
|
| 서버 로그 수준. stderr로만 기록됩니다. |
|
| 결정 및 실행 추적. |
| 패키지된 구성 | 경로 또는 |
|
| 구성에 의해 등록된 제공자 경로. |
이를 사용하기 전에 알아야 할 제한 사항
이는 Harness SDK 와이어 프로토콜에서 비롯된 것이지, 여기서 선택한 사항에서 비롯된 것이 아닙니다.
파일시스템 샌드박스는 bash를 포함하지 않습니다.
dsh-fs-sandbox는 모델의write/edit도구를 작업 공간으로 제한하지만,dsh-bash-sandbox는 번들 런타임 실행 파일에 포함되어 있지 않으므로 bash 자체는 제한되지 않습니다. 감독자(Supervisor)가 이를 보완합니다. 즉, 실행 전에 모든 도구(포함 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 toolsCLAUDE.md에는 아키텍처와 업스트림 제약 사항이 포함되어 있습니다. wiki/에는 결정 기록과 측정된 내용이 포함되어 있습니다.
라이선스
MIT.
Available Tools
6 toolsdsh_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.
| Name | Required | Description | Default |
|---|---|---|---|
| run_id | Yes | ||
| wait_seconds | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| agent_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| message | Yes | ||
| agent_id | Yes | ||
| verification | No | ||
| wait_seconds | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| task | Yes | ||
| model | No | ||
| workspace | No | ||
| instructions | No | ||
| verification | Yes | ||
| wait_seconds | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| raw | No | ||
| limit | No | ||
| run_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
6 tool updates
v0.2.0- First observed
dsh_await - First observed
dsh_cancel - First observed
dsh_continue - First observed
dsh_delegate - First observed
dsh_list - First observed
dsh_transcript
TDQS
Scored across 6 tools
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.
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.
Six tools cover the full lifecycle of subagent management without redundancy. This is well-scoped for the server's purpose.
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
Related MCP Connectors
AI-powered spec-to-task decomposition and execution orchestration for coding agents.
Hand tasks, bugs and finished work to AI coding agents, and get back a write-up with evidence.
- ParleyOAuthdev.weldra
Coordination hub for AI coding agents: message teammates, ask humans, audit every event.
Shared control plane for AI coding agents — tasks, memory, decisions, file locks. 12 tools.
Related MCP Servers
- AlicenseAqualityBmaintenanceEnables Claude Code to delegate tasks to OpenCode subagents asynchronously, with tools for starting tasks, polling status, and fetching results.775 npm3MIT
- AlicenseNot gradedqualityAmaintenanceEnables dispatching work to DeepSeek Harness agents from Claude Code/Codex, with native progress UI, tier policy, and vision/image generation through MCP tools.699 npm158MIT
- AlicenseAqualityBmaintenanceEnables Codex to delegate routine repository exploration, implementation, refactors, tests, and fixes to DeepSeek Harness in isolated Git worktrees, returning compact results and patches for review while keeping the main workspace protected.511 npmMIT
- AlicenseAqualityBmaintenanceEnables Codex and Claude Code to delegate implementation, research, debugging, and long-log work to DeepSeek Harness, then observe, continue, or cancel those sessions without leaving the primary workflow.151MIT