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

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

Требования

  • Python 3.11 или новее

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

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

Установка Node.js не требуется: рантайм Harness поставляется как самодостаточный исполняемый файл внутри wheel-пакета deepseek-harness-sdk. Этот wheel-пакет также является ограничением платформы — он публикует macosx_14_0_arm64, manylinux_2_28_x86_64 и manylinux_2_28_aarch64 и ничего больше, так что Windows, Intel Mac и macOS 13 вообще не могут установить это.

Установка

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, переданный по конвейеру в shell, и всё, что касается SSH-ключей или .env, категорически запрещены — в том числе через безобидно выглядящий глагол, потому что cat ~/.ssh/id_rsa — это инструмент только для чтения, применённый к секрету. Эскалируется только то, что классификатор не может классифицировать.

Эскалация выполняется на лучшем уровне, который поддерживает клиент, определяется при запуске и сообщается через dsh_list:

Уровень

Кто решает

Требуется

sampling

модель MCP-клиента

клиент объявляет sampling

elicitation

вы, в вашем клиенте

клиент объявляет elicitation

deterministic

никто — эскалация запрещает

всегда доступен

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

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

Потолки и стоимость

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

Потолок

Регулятор

Обеспечивается

Время по часам на запуск

DSA_RUN_TIMEOUT

убийством рантайма

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

DSA_TURN_TOKEN_BUDGET

убийством рантайма

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

DSA_MAX_STEPS

убийством рантайма

Повторяющиеся одинаковые вызовы инструментов

DSA_LOOP_STRIKES

убийством рантайма

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

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

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

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

Переменная

По умолчанию

Значение

DEEPSEEK_API_KEY

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

DEEPSEEK_BASE_URL

DeepSeek's public API

Указывает на прокси или собственный эндпоинт.

DSA_MODEL

deepseek-v4-pro

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

DSA_WORKSPACE

the server's working directory

Каталог, который читает и записывает дочерний процесс.

DSA_MAX_AGENTS

4

Одновременно разрешено активных агентов. Каждый занимает процесс.

DSA_SESSION_ROOT

<workspace>/.dsh-sessions

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

DSA_MAX_TOKENS

provider default

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

DSA_TURN_TOKEN_BUDGET

unset

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

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 / sampling / elicitation / off.

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

none

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

DSA_TRANSCRIPT_LIMIT

400

Строк активности, сохраняемых на один запуск.

DSA_LOG_LEVEL

info

Уровень журнала сервера. Записывает только в stderr.

DSA_CORDIS

the packaged composition

Путь или 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                  # 127 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.

-
license - not tested
-
quality - not tested
B
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

  • Durable agent-to-agent handoffs and shared scratchpad for multi-agent workflows.

  • Cross-agent artifact workspace with provenance across Claude Code, Codex, Cursor, LangGraph.

  • Human-as-a-Service for AI agents. Delegate tasks that need a real human, get results via API.

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/gaztrabisme/deepseek-subagent-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server