Симптом: 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)

До запуска разделите инструменты на три класса:

  1. Только чтение — поиск по коду, получение схемы базы данных, чтение документации, просмотр статуса.
  2. Контролируемая запись — создание ветки, изменение тестовой записи, формирование артефакта в отдельном каталоге.
  3. Исполняемые действия — запуск shell-команд, миграций, публикаций, удаление файлов или вызов внешних API.
Первый тест должен использовать только первый класс. MCP описывает инструменты через имя, описание и входную схему, а модель может самостоятельно выбирать и вызывать их. Поэтому ошибочная схема или чрезмерно широкое описание способны привести не только к ошибке соединения, но и к неправильному выбору операции агентом. В официальной спецификации отдельно подчёркивается необходимость сохранять возможность ручного отказа от вызова. ([спецификация MCP для инструментов](https://modelcontextprotocol.io/specification/draft/server/tools))

Заранее зафиксируйте минимальную задачу. Например:

  • найти один файл по известному имени;
  • вернуть одну строку из тестовой таблицы;
  • получить список страниц из ограниченного набора;
  • сформировать 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.

Проверьте подключение в таком порядке:

  1. Убедитесь, что команда MCP Server запускается вручную из того же каталога.
  2. Проверьте версию среды выполнения и наличие всех зависимостей.
  3. Запустите Harness с одним блоком конфигурации.
  4. Найдите в журнале факт успешной инициализации.
  5. Проверьте событие tools/list.
  6. Убедитесь, что инструмент зарегистрирован в виде mcp__readonly__<имя-инструмента>.
  7. Выполните одну безопасную операцию.
  8. Сохраните обезличенный лог, имя инструмента, схему параметров и итоговый артефакт.
Квалифицированное имя инструмента формируется из 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 уже используется.
  • Ошибка вызова — инструмент виден, но параметры не проходят проверку либо операция превышает тайм-аут.
Для результата используйте безвредный запрос с явно заданной схемой. Например, если MCP Server умеет искать код, передайте существующий идентификатор проекта и ограниченный шаблон поиска. Проверьте:
  • совпадает ли публичное имя с ожидаемым;
  • отображаются ли обязательные параметры;
  • принимает ли инструмент пустой, минимальный и ошибочный ввод;
  • возвращает ли он структурированные данные;
  • сохраняется ли порядок текстовых и ресурсных блоков;
  • понятна ли ошибка агенту без ручной расшифровки.
Тайм-аут вызова в текущем клиенте по умолчанию составляет 60 000 миллисекунд. Для локального поиска этого обычно достаточно, а для браузерной операции, медленного запроса или удалённого API значение нужно задавать осознанно: слишком короткий предел создаёт ложные сбои, слишком длинный удерживает рабочий цикл агента и затрудняет восстановление.

Если инструмент не появился, проверьте четыре частые причины:

  • конфигурация загружена не из того рабочего каталога;
  • serverName содержит недопустимые символы или повторяется;
  • внешний процесс пишет отладку в stdout;
  • сервер запустился, но не завершил инициализацию и список инструментов.
После исправления повторите проверку с одним Server. Только когда базовый сценарий проходит стабильно, добавляйте следующий источник.

Секреты, запись и подтверждения

Секреты, конфигурация и разрешения должны иметь разные зоны ответственности:

  • переменные окружения — значения ключей и токенов;
  • конфигурация Harness — команда, транспорт, рабочий каталог, имя пространства и политика восстановления;
  • политика MCP Server — доступные проекты, таблицы, каталоги и операции;
  • журнал аудита — кто запустил задачу, какой инструмент вызван, какие параметры были переданы и какой результат получен.
На удалённом Mac не храните ключ в тексте задания, истории shell или открытом файле проекта. Передавайте секрет через менеджер секретов, защищённую переменную окружения или другой механизм, который выдаёт значение только процессу. В примере выше ссылка вида process.env.<ИМЯ> показывает принцип, но не раскрывает содержимое.

Для записи задайте минимум три ограничения:

  1. Цель — конкретный проект, тестовая база, отдельная ветка или временный каталог.
  2. Действие подтверждения — ручное согласие перед вызовом, а не после него.
  3. Откат — резервная копия, транзакция, обратная миграция или удаление созданного артефакта.
Входные данные из браузера, webhook, формы или внешнего тикета нельзя считать доверенными только потому, что они пришли через MCP. Если такой ввод может привести к записи или команде, агент должен сначала показать нормализованные параметры, затем получить подтверждение и после действия проверить фактическое состояние.

Не смешивайте DeepSeek API и MCP Server. API отвечает за модельный запрос, а MCP Server предоставляет внешний инструмент. Ошибка авторизации модели не доказывает неисправность MCP, и наоборот.

Удалённый Mac и ответственность процессов

Локальная сессия часто скрывает три операционные проблемы: процесс запущен только в интерактивном терминале, рабочий каталог меняется между запусками, а секрет доступен пользователю, но не сервису. На удалённом Mac эти условия нужно определить заранее.

Разделите ответственность:

  • DeepSeek Harness — кто запускает, где лежит конфигурация, кто собирает его журналы;
  • MCP Server — кто устанавливает зависимости, обновляет версию и проверяет доступ;
  • зависимый процесс — браузер, база, индексатор, локальный агент или вспомогательная служба;
  • секреты — кто выдаёт, ротирует и отзывает ключи;
  • восстановление — кто реагирует на остановку, тайм-аут или исчерпание попыток переподключения.
Официальный MCP-клиент DeepSeek Harness по умолчанию включает переподключение. Начальная задержка составляет 500 миллисекунд, она увеличивается после повторных ошибок до предела 30 000 миллисекунд, а после 10 последовательных неудачных попыток клиент прекращает дальнейшее восстановление до перезагрузки Host или HMR. Эти значения следует считать рабочими значениями текущей реализации, а не вечным контрактом: при обновлении проверяйте описание пакета.

Если используется streamable-http, MCP Server становится самостоятельным сетевым процессом. Официальная спецификация рекомендует для локального запуска привязываться к 127.0.0.1, проверять Origin и применять аутентификацию; открывать MCP-порт или Web UI в публичную сеть без отдельного защищённого шлюза не следует. Для удалённой схемы безопаснее закрытая сеть, туннель с контролем доступа или внутренний прокси, чем прямой публичный адрес. (требования MCP к сетевому транспорту)

После отключения SSH или удалённого рабочего стола выполните отдельную проверку:

  1. процесс Harness всё ещё существует;
  2. MCP Server не зависит от закрытого терминала;
  3. рабочий каталог остался ожидаемым;
  4. секрет доступен сервисному процессу, но не записан в лог;
  5. инструмент сохраняется после переподключения;
  6. после остановки Server он появляется снова или корректно удаляется из списка;
  7. повторный вызов создаёт ожидаемый артефакт.

Несколько MCP Server в одном окружении

Несколько серверов можно держать в одном окружении, но не следует автоматически объединять их в один процесс. В одном Harness каждый Server должен иметь собственный экземпляр плагина и уникальный serverName. Это позволяет разделять рабочие каталоги, переменные окружения, лимиты и журналы.

Выбирайте общее окружение, если:

  • серверы используют одну операционную систему и одинаковый жизненный цикл;
  • им нужен один закрытый сетевой контур;
  • вы готовы обновлять и перезапускать их совместно;
  • отказ одного компонента не должен блокировать критическую задачу.
Разделяйте окружения, если:
  • один Server имеет запись, а другой только чтение;
  • используются разные владельцы секретов;
  • один процесс требует браузера или фонового индексатора;
  • обновления происходят с разной частотой;
  • команда должна независимо отключать инструмент;
  • сбой или утечка одного сервера не должны затронуть остальные.
Практически для первого удалённого запуска разумно оставить один читающий Server. Когда базовый тест проходит, добавляйте второй, но снова выполняйте обнаружение, проверку прав и контрольный вызов. Не переносите все локальные плагины на удалённый Mac одним пакетом: это затрудняет поиск причины и расширяет область доступа без подтверждённой необходимости.

Условия выбора и возврата

Используйте следующую последовательность решений:

  • Если вам нужно только проверить поиск, чтение схемы или просмотр данных, выбирайте один локальный stdio-Server и не добавляйте запись.
  • Если процесс запускается только из открытого терминала, возвращайтесь к базовой конфигурации и сначала фиксируйте способ управления процессом.
  • Если инструмент виден, но вызов завершается ошибкой схемы, исправляйте описание и обязательные параметры MCP Server, а не меняйте транспорт.
  • Если нужен секрет, выносите его в переменную окружения или хранилище секретов; не добавляйте значение в YAML и сообщения агента.
  • Если появляется запись во внешнюю систему, добавляйте тестовую цель, подтверждение до действия и проверяемый откат.
  • Если требуется общий удалённый запуск, переносите Harness и MCP Server в независимую воспроизводимую среду.
  • Если после остановки Server инструмент остаётся доступным, считайте тест непройденным до проверки обновления списка инструментов и поведения Host.
  • Если несколько серверов имеют разные владельцы секретов или разные уровни риска, разделяйте их окружения.
  • Если не удаётся доказать запуск после разрыва соединения, не переводите задачу в постоянную эксплуатацию.

Контрольные оценки перед переносом

Ниже — не универсальная гарантия совместимости, а рабочая шкала для приёмки. Оценка относится к конкретной версии DeepSeek Harness, MCP Server и конфигурации.

<
Критерий0 баллов1 балл2 балла
Запуск процессатолько вручнуюзапускается, но без контролязапускается воспроизводимо
Транспортнестабиленработает только локальнопроверен локально и удалённо
Обнаружениесписок пустинструменты появляются после повторного запускасписок стабилен и записан
Параметрынет проверкипроверяются только обязательные поляпроверены корректные и ошибочные вводы
Праваобщий ключограниченный ключотдельные права, подтверждение и отзыв
Восстановлениеручной запускчастичное переподключениепроверены остановка, возврат и повторный вызов
Артефакттолько текст агенталог без результаталог, параметры и проверяемый результат
Интерпретируйте сумму так:
  • 0–6 баллов — не переносите задачу на постоянный удалённый запуск;
  • 7–10 баллов — ограниченное использование, только чтение и ручной контроль;
  • 11–14 баллов — можно переходить к контролируемому пилоту;
  • 15 баллов — базовая приёмка пройдена, но обновления требуют повторного теста.

Сценарии подключения и цена ошибок

<
СценарийТранспортКогда выбиратьОсновной рискДействие при сбое
Один локальный Serverstdioразработка и первичная проверканеверная команда или каталоготключить MCP и повторить базовый запуск
Несколько локальных Serverstdioединый удалённый Mac с разными инструментамиконфликт имён и секретовотключить последний добавленный Server
Удалённый MCP Serverstreamable-httpотдельный сервис или общий внутренний контурсеть, аутентификация и публичная экспозициявернуть локальный stdio или закрытый туннель
Запись во внешнюю системулюбойтолько после успешного чтениянеобратимое изменениетестовая цель, ручное подтверждение и откат
Долгоживущий AI Agentлюбойкоманда и повторяемые задачизависимость от терминалаsupervisor, журнал состояния и проверка восстановления
Цена ошибки здесь — не только простой. Неправильное рабочее окружение может отправить запрос не в ту базу, раскрыть секрет в журнале, оставить инструменты зарегистрированными после потери соединения или создать ложное ощущение, что агент проверил результат. Поэтому минимальный тест должен подтверждать не только «MCP отвечает», но и «агент вызвал именно тот инструмент, с теми параметрами и получил проверяемый результат».

Передача в постоянную эксплуатацию

После локального теста оформите короткую карточку запуска:

  • точная версия DeepSeek Harness;
  • версия MCP Server;
  • команда запуска и cwd;
  • транспорт;
  • уникальный serverName;
  • список разрешённых инструментов;
  • источник секретов без раскрытия значения;
  • тайм-аут вызова;
  • политика переподключения;
  • владелец процесса;
  • путь к журналам;
  • базовая задача и ожидаемый артефакт;
  • процедура отключения MCP;
  • условия повторной проверки после обновления.
В качестве связанного материала можно использовать [руководство по работе с M4](https://macgpu.com/ru/m4-rukovodstvo.html), если вы выбираете Mac под локальную разработку и тестирование, а для расчёта бюджета — [страницу аренды M4](https://macgpu.com/ru/m4-tseny-arendy.html). Если задача уже перешла в удалённый режим, начните с [главной страницы MACGPU](https://macgpu.com/ru/index.html), чтобы сопоставить временный тестовый стенд с постоянной рабочей средой.

Windows или обычный Linux-сервер могут подойти для короткой локальной проверки, но у такого варианта часто остаются три слабых места: процессы привязаны к личной сессии, окружение отличается от будущего рабочего места, а ответственность за перезапуск и секреты остаётся распределённой между разработчиком и администратором. Покупка отдельного Mac, напротив, оправдана при постоянной нагрузке, физическом доступе к устройствам и долгом сроке эксплуатации, но для первичной проверки MCP это означает лишние капитальные затраты и самостоятельное обслуживание.

Если вы уже подтвердили работу одного читающего Server и хотите проверить непрерывный запуск, восстановление после разрыва и передачу ответственности, аренда удалённого Mac через MACGPU обычно даёт более управляемый следующий шаг: вы получаете изолированную среду для пилота, не смешивая её с личным компьютером и не открывая MCP-порт без необходимости. Для длительной одинаковой нагрузки или обязательного физического оборудования аренда подходит не всегда; для временного тестирования, командного прототипа и проверки удалённого жизненного цикла она позволяет быстрее перейти от «инструмент виден» к доказанно работающему процессу.