Симптом: DeepSeek Harness запускается, но внешний инструмент не появляется или исчезает после разрыва соединения.
Самое быстрое решение: сначала подключите один только читающий MCP Server через stdio, проверьте обнаружение и вызов инструмента, затем переходите к записи и удалённому запуску.
Этот порядок подходит, если вы разрабатываете AI Agent, обслуживаете секреты и права доступа или собираетесь держать MCP-инструменты на удалённом Mac без зависимости от открытого терминала.
Последнее обновление: 18 августа 2026 года. Сведения сверены с официальным репозиторием DeepSeek Harness, каталогом MCP-пакетов и актуальной спецификацией транспорта MCP на эту дату.
Подготовка среды и границ доступа
DeepSeek Harness официально содержит MCP-клиентский мост: пакет mcp-client подключается к внешним MCP-серверам, получает список инструментов и регистрирует их в системе инструментов Harness. В текущем описании поддерживаются два транспорта — локальный stdio и удалённый streamable-http; проект всё ещё находится в режиме developer preview, поэтому конфигурацию нужно сверять с текущей веткой перед каждым обновлением. (официальный репозиторий DeepSeek Harness)
До запуска разделите инструменты на три класса:
- Только чтение — поиск по коду, получение схемы базы данных, чтение документации, просмотр статуса.
- Контролируемая запись — создание ветки, изменение тестовой записи, формирование артефакта в отдельном каталоге.
- Исполняемые действия — запуск shell-команд, миграций, публикаций, удаление файлов или вызов внешних API.
Заранее зафиксируйте минимальную задачу. Например:
- найти один файл по известному имени;
- вернуть одну строку из тестовой таблицы;
- получить список страниц из ограниченного набора;
- сформировать JSON-отчёт без изменения исходных данных.
Первый локальный MCP Server
Для первой интеграции выбирайте stdio. В этом режиме клиент сам запускает MCP Server как дочерний процесс, передаёт сообщения через стандартный ввод и получает ответы через стандартный вывод. Сервер не должен писать обычные диагностические сообщения в stdout, поскольку канал предназначен для MCP-сообщений; журналы следует направлять в stderr или отдельный файл. (официальная спецификация транспортов MCP)
В актуальной конфигурации MCP-клиента DeepSeek Harness один экземпляр плагина соответствует одному серверу. Базовые поля имеют следующую роль:
- id: mcp-readonly
name: '@deepseek-ai/dsh-mcp-client'
config:
serverName: readonly
transport: stdio
command: <исполняемый файл>
args: [<аргументы MCP Server>]
cwd: <рабочий каталог>
env:
<ИМЯ_ПЕРЕМЕННОЙ>: !!js process.env.<ИМЯ_ПЕРЕМЕННОЙ>
toolCallTimeoutMs: 60000
failOnStartupError: true
reconnect:
enabled: true
Не вставляйте в этот пример реальный ключ. Значение env должно ссылаться на переменную окружения или внешний механизм выдачи секрета, а не содержать секрет непосредственно в cordis.yml.
Проверьте подключение в таком порядке:
- Убедитесь, что команда MCP Server запускается вручную из того же каталога.
- Проверьте версию среды выполнения и наличие всех зависимостей.
- Запустите Harness с одним блоком конфигурации.
- Найдите в журнале факт успешной инициализации.
- Проверьте событие
tools/list. - Убедитесь, что инструмент зарегистрирован в виде
mcp__readonly__<имя-инструмента>. - Выполните одну безопасную операцию.
- Сохраните обезличенный лог, имя инструмента, схему параметров и итоговый артефакт.
serverName и исходного MCP-имени. В документации указано, что публичное имя нормализуется под ограничение DeepSeek на имена функций: до 64 символов и только допустимые латинские символы, цифры, дефис и нижнее подчёркивание. Если имя пришлось изменить или укоротить, добавляется детерминированный хеш, чтобы разные инструменты не слились в один. ([описание пакета MCP-клиента DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness/tree/master/packages/mcp/mcp-client))
Если соединение не устанавливается, не добавляйте сразу второй Server, HTTP-транспорт или запись в базу. Сначала отключите MCP-блок и подтвердите, что базовый DeepSeek Harness снова запускается. Это отделяет ошибку Harness от ошибки внешнего процесса.
Обнаружение инструментов и диагностика
После установки транспорта проверяйте не только наличие процесса, но и полный цикл обнаружения. DeepSeek Harness сначала подключается к серверу, вызывает listTools(), а затем регистрирует полученное поколение инструментов до начала первого хода агента. При ошибке регистрации по умолчанию плагин может активироваться без доступных инструментов, если не включён строгий отказ при ошибке запуска. Поэтому визуально работающий Harness ещё не означает, что MCP доступен.
Разделяйте неисправности по слоям:
- Ошибка MCP Server — команда завершается, зависимость не найдена, сервер возвращает некорректный ответ.
- Ошибка транспорта — процесс работает, но канал
stdioзакрыт или HTTP-адрес недоступен. - Ошибка обнаружения — соединение есть, но
tools/listне возвращает ожидаемый список. - Ошибка регистрации Harness — имя дублируется, схема инструмента конфликтует или
serverNameуже используется. - Ошибка вызова — инструмент виден, но параметры не проходят проверку либо операция превышает тайм-аут.
- совпадает ли публичное имя с ожидаемым;
- отображаются ли обязательные параметры;
- принимает ли инструмент пустой, минимальный и ошибочный ввод;
- возвращает ли он структурированные данные;
- сохраняется ли порядок текстовых и ресурсных блоков;
- понятна ли ошибка агенту без ручной расшифровки.
Если инструмент не появился, проверьте четыре частые причины:
- конфигурация загружена не из того рабочего каталога;
serverNameсодержит недопустимые символы или повторяется;- внешний процесс пишет отладку в
stdout; - сервер запустился, но не завершил инициализацию и список инструментов.
Секреты, запись и подтверждения
Секреты, конфигурация и разрешения должны иметь разные зоны ответственности:
- переменные окружения — значения ключей и токенов;
- конфигурация Harness — команда, транспорт, рабочий каталог, имя пространства и политика восстановления;
- политика MCP Server — доступные проекты, таблицы, каталоги и операции;
- журнал аудита — кто запустил задачу, какой инструмент вызван, какие параметры были переданы и какой результат получен.
process.env.<ИМЯ> показывает принцип, но не раскрывает содержимое.
Для записи задайте минимум три ограничения:
- Цель — конкретный проект, тестовая база, отдельная ветка или временный каталог.
- Действие подтверждения — ручное согласие перед вызовом, а не после него.
- Откат — резервная копия, транзакция, обратная миграция или удаление созданного артефакта.
Не смешивайте DeepSeek API и MCP Server. API отвечает за модельный запрос, а MCP Server предоставляет внешний инструмент. Ошибка авторизации модели не доказывает неисправность MCP, и наоборот.
Удалённый Mac и ответственность процессов
Локальная сессия часто скрывает три операционные проблемы: процесс запущен только в интерактивном терминале, рабочий каталог меняется между запусками, а секрет доступен пользователю, но не сервису. На удалённом Mac эти условия нужно определить заранее.
Разделите ответственность:
- DeepSeek Harness — кто запускает, где лежит конфигурация, кто собирает его журналы;
- MCP Server — кто устанавливает зависимости, обновляет версию и проверяет доступ;
- зависимый процесс — браузер, база, индексатор, локальный агент или вспомогательная служба;
- секреты — кто выдаёт, ротирует и отзывает ключи;
- восстановление — кто реагирует на остановку, тайм-аут или исчерпание попыток переподключения.
Если используется streamable-http, MCP Server становится самостоятельным сетевым процессом. Официальная спецификация рекомендует для локального запуска привязываться к 127.0.0.1, проверять Origin и применять аутентификацию; открывать MCP-порт или Web UI в публичную сеть без отдельного защищённого шлюза не следует. Для удалённой схемы безопаснее закрытая сеть, туннель с контролем доступа или внутренний прокси, чем прямой публичный адрес. (требования MCP к сетевому транспорту)
После отключения SSH или удалённого рабочего стола выполните отдельную проверку:
- процесс Harness всё ещё существует;
- MCP Server не зависит от закрытого терминала;
- рабочий каталог остался ожидаемым;
- секрет доступен сервисному процессу, но не записан в лог;
- инструмент сохраняется после переподключения;
- после остановки Server он появляется снова или корректно удаляется из списка;
- повторный вызов создаёт ожидаемый артефакт.
Несколько MCP Server в одном окружении
Несколько серверов можно держать в одном окружении, но не следует автоматически объединять их в один процесс. В одном Harness каждый Server должен иметь собственный экземпляр плагина и уникальный serverName. Это позволяет разделять рабочие каталоги, переменные окружения, лимиты и журналы.
Выбирайте общее окружение, если:
- серверы используют одну операционную систему и одинаковый жизненный цикл;
- им нужен один закрытый сетевой контур;
- вы готовы обновлять и перезапускать их совместно;
- отказ одного компонента не должен блокировать критическую задачу.
- один Server имеет запись, а другой только чтение;
- используются разные владельцы секретов;
- один процесс требует браузера или фонового индексатора;
- обновления происходят с разной частотой;
- команда должна независимо отключать инструмент;
- сбой или утечка одного сервера не должны затронуть остальные.
Условия выбора и возврата
Используйте следующую последовательность решений:
- Если вам нужно только проверить поиск, чтение схемы или просмотр данных, выбирайте один локальный
stdio-Server и не добавляйте запись. - Если процесс запускается только из открытого терминала, возвращайтесь к базовой конфигурации и сначала фиксируйте способ управления процессом.
- Если инструмент виден, но вызов завершается ошибкой схемы, исправляйте описание и обязательные параметры MCP Server, а не меняйте транспорт.
- Если нужен секрет, выносите его в переменную окружения или хранилище секретов; не добавляйте значение в YAML и сообщения агента.
- Если появляется запись во внешнюю систему, добавляйте тестовую цель, подтверждение до действия и проверяемый откат.
- Если требуется общий удалённый запуск, переносите Harness и MCP Server в независимую воспроизводимую среду.
- Если после остановки Server инструмент остаётся доступным, считайте тест непройденным до проверки обновления списка инструментов и поведения Host.
- Если несколько серверов имеют разные владельцы секретов или разные уровни риска, разделяйте их окружения.
- Если не удаётся доказать запуск после разрыва соединения, не переводите задачу в постоянную эксплуатацию.
Контрольные оценки перед переносом
Ниже — не универсальная гарантия совместимости, а рабочая шкала для приёмки. Оценка относится к конкретной версии DeepSeek Harness, MCP Server и конфигурации.
| Критерий | 0 баллов | 1 балл | 2 балла |
|---|---|---|---|
| Запуск процесса | только вручную | запускается, но без контроля | запускается воспроизводимо |
| Транспорт | нестабилен | работает только локально | проверен локально и удалённо |
| Обнаружение | список пуст | инструменты появляются после повторного запуска | список стабилен и записан |
| Параметры | нет проверки | проверяются только обязательные поля | проверены корректные и ошибочные вводы |
| Права | общий ключ | ограниченный ключ | отдельные права, подтверждение и отзыв |
| Восстановление | ручной запуск | частичное переподключение | проверены остановка, возврат и повторный вызов |
| Артефакт | только текст агента | лог без результата | лог, параметры и проверяемый результат |
- 0–6 баллов — не переносите задачу на постоянный удалённый запуск;
- 7–10 баллов — ограниченное использование, только чтение и ручной контроль;
- 11–14 баллов — можно переходить к контролируемому пилоту;
- 15 баллов — базовая приёмка пройдена, но обновления требуют повторного теста.
Сценарии подключения и цена ошибок
| Сценарий | Транспорт | Когда выбирать | Основной риск | Действие при сбое |
|---|---|---|---|---|
| Один локальный Server | stdio | разработка и первичная проверка | неверная команда или каталог | отключить MCP и повторить базовый запуск |
| Несколько локальных Server | stdio | единый удалённый Mac с разными инструментами | конфликт имён и секретов | отключить последний добавленный Server |
| Удалённый MCP Server | streamable-http | отдельный сервис или общий внутренний контур | сеть, аутентификация и публичная экспозиция | вернуть локальный stdio или закрытый туннель |
| Запись во внешнюю систему | любой | только после успешного чтения | необратимое изменение | тестовая цель, ручное подтверждение и откат |
| Долгоживущий AI Agent | любой | команда и повторяемые задачи | зависимость от терминала | supervisor, журнал состояния и проверка восстановления |
Передача в постоянную эксплуатацию
После локального теста оформите короткую карточку запуска:
- точная версия DeepSeek Harness;
- версия MCP Server;
- команда запуска и
cwd; - транспорт;
- уникальный
serverName; - список разрешённых инструментов;
- источник секретов без раскрытия значения;
- тайм-аут вызова;
- политика переподключения;
- владелец процесса;
- путь к журналам;
- базовая задача и ожидаемый артефакт;
- процедура отключения MCP;
- условия повторной проверки после обновления.
Windows или обычный Linux-сервер могут подойти для короткой локальной проверки, но у такого варианта часто остаются три слабых места: процессы привязаны к личной сессии, окружение отличается от будущего рабочего места, а ответственность за перезапуск и секреты остаётся распределённой между разработчиком и администратором. Покупка отдельного Mac, напротив, оправдана при постоянной нагрузке, физическом доступе к устройствам и долгом сроке эксплуатации, но для первичной проверки MCP это означает лишние капитальные затраты и самостоятельное обслуживание.
Если вы уже подтвердили работу одного читающего Server и хотите проверить непрерывный запуск, восстановление после разрыва и передачу ответственности, аренда удалённого Mac через MACGPU обычно даёт более управляемый следующий шаг: вы получаете изолированную среду для пилота, не смешивая её с личным компьютером и не открывая MCP-порт без необходимости. Для длительной одинаковой нагрузки или обязательного физического оборудования аренда подходит не всегда; для временного тестирования, командного прототипа и проверки удалённого жизненного цикла она позволяет быстрее перейти от «инструмент виден» к доказанно работающему процессу.