Перейти к содержимому

Подключить помощника

DumbMonit имеет встроенный сервер MCP: протокол контекста модели, способ, которым помощники, такие как Claude, ChatGPT, Cursor или агент VS Code вызывают внешние инструменты. Подключите один, затем спросите его о вещах вроде:

  • “Все ли в порядке?”
  • “Заглушить NAS на два часа, я меняю диск.”
  • “Что произошло вчера ночью?”
  • “Насколько заполнен сервер резервного копирования, и становится ли хуже?”
  • “Опубликовать обновление на странице статуса: почтовый сервер вернулся.”

Помощник видит то, что видит интерфейс — мониторы, оповещения, историю, метрики, агентов, страницы статуса — и использует те же слова: сообщаемые, недоступные, ожидание, совет, предупреждение, подавлено родителем. Он работает внутри сервера: ничего не устанавливать рядом с DumbMonit, и инструменты вызывают тот же код, что и веб-интерфейс.

Параметры → API и помощники (/settings#assistant). Назовите маркер после помощника или машины, на которой он работает (“Claude на моем ноутбуке”), затем выберите:

ПараметрВыборы
ОбластьПрочитать: посмотреть — статус, мониторы, оповещения, историю, метрики, правила, агентов, страницы статуса. Это никогда не может ничего изменить. Прочитать и написать: также действовать — заглушить, подтвердить, проверить, добавить монитор, перезагрузить контейнер, опубликовать инцидент… (инструменты write).
Истекает30 дней, 90 дней (по умолчанию), 1 год или никогда. Истекший маркер перестает работать; создайте новый.
Разрешенные сетиНеобязательно. Адреса или диапазоны CIDR, с которых может использоваться маркер (192.168.1.0/24, 10.8.0.5). Пусто: везде.

Маркер выглядит как dmt_, за которым следует 32 шестнадцатеричных символа. Он показывается один раз, сразу после создания; DumbMonit хранит только хеш. Потеряйте его, отзовите его и создайте новый.

Предпочитайте маркер чтения, если вы не хотите, чтобы помощник действовал.

Тот же маркер также открывает REST API для сценариев и панелей мониторинга — curl -H "Authorization: Bearer dmt_…" https://monit.example.lan/api/targets — где read видит то, что видит зритель и write делает то, что может администратор через REST API (мониторы, правила, каналы), учетные записи, маркеры и резервные копии исключены.

На странице параметров заполняются адрес сервера и новый маркер. Ниже https://monit.example.lan означает ваш сервер.

Окно терминала
claude mcp add --transport http dumbmonit https://monit.example.lan/api/mcp \
--header "Authorization: Bearer dmt_…"

Добавьте --scope user, чтобы он был в каждом проекте, а не только в текущем.

Claude Desktop запускает локальные серверы из своего файла конфигурации; mcp-remote соединяет его с конечной точкой HTTP DumbMonit (требуется Node.js). DumbMonit аутентифицируется с заголовком носителя, а не OAuth, поэтому добавьте его через этот файл вместо экрана Соединители. Параметры → Разработчик → Редактировать конфиг, затем добавьте в claude_desktop_config.json и перезагрузите Claude Desktop:

{
"mcpServers": {
"dumbmonit": {
"command": "npx",
"args": [
"-y", "mcp-remote", "https://monit.example.lan/api/mcp",
"--header", "Authorization:${DUMBMONIT_AUTH}"
],
"env": { "DUMBMONIT_AUTH": "Bearer dmt_…" }
}
}
}

Заголовок проходит через переменную окружения без пространства после двоеточия, потому что некоторые платформы разделяют аргументы по пространствам. Для сервера, достигаемого по простому HTTP в вашей сети, добавьте "--allow-http" в args — страница параметров делает это для вас, когда она сама обслуживается по HTTP.

.vscode/mcp.json в рабочей области (или команда MCP: Add Server → HTTP):

{
"servers": {
"dumbmonit": {
"type": "http",
"url": "https://monit.example.lan/api/mcp",
"headers": { "Authorization": "Bearer dmt_…" }
}
}
}

.cursor/mcp.json, и та же форма для большинства клиентов, которые поддерживают потоковые HTTP-серверы с пользовательскими заголовками:

{
"mcpServers": {
"dumbmonit": {
"url": "https://monit.example.lan/api/mcp",
"headers": { "Authorization": "Bearer dmt_…" }
}
}
}

Клиент, который может только запускать локальные серверы (stdio), может использовать мост mcp-remote, показанный для Claude Desktop.

Параметры → Соединители → Создать (режим разработчика). URL-адрес сервера MCP: https://monit.example.lan/api/mcp, заголовок авторизации: Bearer dmt_….

ChatGPT подключается с серверов OpenAI, а не из вашего браузера: DumbMonit должен быть доступен из Интернета через HTTPS. Перед этим см. примечания безопасности.

Что клиент должен знать: конечная точка — это https://<server>/api/mcp, транспорт — это Streamable HTTP, и каждый запрос несет Authorization: Bearer dmt_…. Необработанный вызов для проверки маркера и пути сети из терминала:

Окно терминала
curl -s https://monit.example.lan/api/mcp \
-H 'Authorization: Bearer dmt_…' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-H 'MCP-Protocol-Version: 2026-07-28' \
-H 'Mcp-Method: tools/call' -H 'Mcp-Name: get_status' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"get_status","arguments":{},
"_meta":{"io.modelcontextprotocol/protocolVersion":"2026-07-28",
"io.modelcontextprotocol/clientCapabilities":{}}}}'

Двадцать семь инструментов. Каждый из них имеет название, описание, схему ввода, схему вывода и аннотации (readOnlyHint, destructiveHint, idempotentHint), поэтому клиент может сказать, какие только смотрят и спросить вас перед запуском других.

ИнструментОбластьДелает
get_statusпрочитатьБюллетень, ответ на “все ли в порядке?”: подсчеты мониторов, срабатывающие и наращивающиеся оповещения, одно предложение (“2 рекомендации, 1 недоступное.”).
list_devicesпрочитатьМониторы и сервисы с состоянием, родителем и тегами; фильтр по подстроке или состоянию.
get_deviceпрочитатьОдин монитор: конфигурация, состояние, активные оповещения, сводка ЦПУ / памяти / полного диска за 24 часа (доступность и задержка для проверки сервиса).
list_alertsпрочитатьАктивные оповещения со словами серьезности, с тех пор, значение, подавление, подтверждение.
alert_historyпрочитатьПереходы оповещений, новейшее сначала (since или hours, необязательный монитор, предел).
query_metricsпрочитатьЗапрос диапазона MetricsQL, максимум 60 точек за серию.
list_silencesпрочитатьОкна обслуживания и активны ли они сейчас.
list_rulesпрочитатьПравила оповещений с типом, серьезностью, порогом, включено.
list_device_typesпрочитатьТипы мониторов, которые этот сервер может мониторить, с опциями и учетными данными, которые ожидает каждый — что нужно add_device.
list_agentsпрочитатьМашины, работающие с агентом: ОС, версия агента, режим реле, сайт, переданные мониторы, последний контакт, привязка.
list_containersпрочитатьDocker контейнеры машины, работающей с агентом: состояние, здоровье, перезагрузки, доступное обновление, последняя команда.
list_heartbeatsпрочитатьМониторы пульса: ожидаемый интервал, последний вызов, вердикт (ожидание, вовремя, пропущено, сообщено вниз). URL-адрес секрета никогда не показывается.
list_status_pagesпрочитатьСтраницы статуса, опубликованные или нет, с их общедоступным путем (/s/<slug>), мониторами, которые они показывают, и открытыми инцидентами.
list_channelsпрочитатьКаналы уведомлений: тип, включено, последняя ошибка, последнее отправленное сообщение. Никогда их секреты.
list_packsпрочитатьУстановленные пакеты интеграции: версия, тип монитора, включено, мониторы, использующие его, ошибки.
silence_deviceнаписатьОкно одноразового обслуживания на мониторе, начиная сейчас (по умолчанию 1 час, максимум неделя).
remove_silenceнаписатьУдаляет окно обслуживания.
schedule_maintenanceнаписатьОкно одноразового обслуживания в определенную дату, на одном мониторе или всем экземпляром, максимум неделя.
acknowledge_alertнаписатьПодтверждает одно оповещение по отпечатку на количество часов (по умолчанию 4): напоминания паузируются, разрешение все еще уведомляется. hours: 0 снимает.
probe_deviceнаписатьПроверяет монитор немедленно и сообщает, что было измерено.
set_device_enabledнаписатьВключает или отключает мониторинг монитора.
set_rule_enabledнаписатьВключает или отключает правило оповещения.
add_deviceнаписатьДобавляет монитор: имя, тип, адрес, интервал, родитель, опции, учетные данные, агент реле.
discover_networkнаписатьСканирует сеть (CIDR, максимум 4096 адресов) для устройств SNMP и предлагает профиль для каждого.
restart_containerнаписатьПросит агента машины перезагрузить один из его контейнеров.
test_channelнаписатьОтправляет тестовое сообщение через канал уведомлений.
post_incidentнаписатьОткрывает инцидент на странице статуса, или публикует обновление существующему.

Маркер чтения, вызывающий инструмент написания, получает четкий отказ как результат инструмента (isError: true); помощник объясняет и ничего не меняется. То же происходит с чем-либо, что инструмент не может сделать — неизвестный монитор, неоднозначное имя, окно дольше недели: сообщение говорит, что исправить.

POST /api/mcp реализует MCP над транспортом Streamable HTTP: JSON-RPC 2.0, один запрос за POST, ответ с простым JSON (без событий, отправляемых сервером). Это без состояния: Mcp-Session-Id не выдается, один, который отправляет клиент, игнорируется, и GET или DELETE на конечной точке отвечают 405. Предлагается только возможность tools — нет ресурсов, подсказок, выборки или OAuth.

Два поколения протокола обслуживаются на одной конечной точке:

ВерсииКак клиент говорит
2026-07-28Без состояния. Каждый запрос несет io.modelcontextprotocol/protocolVersion и io.modelcontextprotocol/clientCapabilities в params._meta, и заголовки MCP-Protocol-Version, Mcp-Method и для tools/call, Mcp-Name, которые должны совпадать с телом. Методы: server/discover, tools/list, tools/call. Результаты несут resultType: "complete" и личность сервера в _meta (io.modelcontextprotocol/serverInfo); tools/list также несет ttlMs и cacheScope.
2025-11-25, 2025-06-18, 2025-03-26Подтверждение initialize выбирает версию (неизвестная получает новейшую из этих трех); notifications/initialized подтверждается 202; затем ping, tools/list, tools/call.

Ошибки, кроме 401, 403 и 429 из проверок маркера, которые наступают перед любым JSON-RPC:

HTTPJSON-RPC кодКогда
400-32020 (несоответствие заголовка)Запрос 2026-07-28 без MCP-Protocol-Version, Mcp-Method или Mcp-Name, или со значениями, которые отличаются от тела.
400-32022 (неподдерживаемая версия протокола)Версия, которую этот сервер не говорит; error.data перечисляет supported и requested.
400-32602 (недействительные параметры)Запрос 2026-07-28 с отсутствующими требуемыми полями _meta.
404-32601 (метод не найден)Запрос 2026-07-28 для метода, который этот сервер не реализует.
200-32602Неизвестный инструмент, или arguments, который не является объектом.
-32700, -32600Нечитаемый JSON; не запрос JSON-RPC 2.0 (пакеты не поддерживаются).
202—Уведомление: принято, без тела.

Инструмент, который работает но терпит неудачу — отсутствующая область, неизвестный монитор — это не протокольная ошибка: он отвечает нормально с isError: true и предложением, которое помощник может передать.

  • Маркер - это пароль. Любой, кто его держит, читает все, что показывает интерфейс — и с маркером написания, изменяет что-либо администратор может через REST API (мониторы, правила, каналы), учетные записи, маркеры и резервные копии исключены. Держите его подальше от общих чатов, снимков экрана и репозиториев. Отзовите маркер, в котором вы не уверены; создайте новый через минуту.
  • Предпочитайте прочитать. Большинство вопросов (“все ли в порядке?”) не требуют области написания. Создайте маркер написания только для помощника, которого вы действительно хотите действовать, и назовите его так, чтобы вы распознавали его в списке. Большинство клиентов спрашивают перед запуском инструмента, который не отмечен как только для чтения; оставьте это подтверждение включено.
  • Дайте ему срок действия и сеть. Маркер, который истекает за 90 дней и работает только из вашей локальной сети или VPN (192.168.1.0/24), стоит мало для кого-либо, кто его найдет. За обратным прокси, объявите прокси в DUMBMONIT_TRUSTED_PROXIES, иначе каждый вызов кажется поступившим из прокси и ограничение сети отказывает им всем.
  • Привязан к его создателю. Маркер перестает работать, когда учетная запись, которая его создала, отключена, теряет свою силу написания, когда эта учетная запись больше не администратор, и отзывается, когда эта учетная запись удалена.
  • Никакие секреты не возвращаются. Инструменты никогда не возвращают учетные данные монитора (только их тип), секреты канала, URL-адреса пульса или маркеры. add_device принимает учетные данные: они проходят через беседу вашего помощника, и так через его провайдера. Для монитора с чувствительными учетными данными предпочитайте веб-интерфейс.
  • Браузеры и Origin. Запрос, который несет заголовок Origin (браузер-клиент), отказывается с 403, если только эта источник — собственный сервер или разрешен DUMBMONIT_API_CORS_ORIGINS (по умолчанию любой источник, так как маркер требуется в любом случае). Перечислите ваши источники там, чтобы сузить; см. запросы между источниками.
  • Лимит скорости. Каждый маркер ограничен 120 вызовами за минуту, REST и MCP вместе: помощник, застрявший в цикле, получает 429 с Retry-After, а не полное внимание вашего сервера.
  • HTTPS перед Интернетом. Соединители ChatGPT нуждаются в общедоступном URL-адресе. Поместите DumbMonit позади обратного прокси с TLS (Caddy, Traefik, nginx…) и установите DUMBMONIT_COOKIE_SECURE=1. Никогда не раскрывайте простой HTTP порт. Claude Desktop, Claude Code, VS Code и Cursor работают на вашей машине и могут достичь адреса локальной сети напрямую, поэтому им не нужно никакого раскрытия вообще.
  • Посмотреть “последнее использование”. Список маркеров показывает, когда каждый маркер был в последний раз использован и с какого адреса. Маркер, используемый в время, когда вы не говорили с вашим помощником, или с адреса, который вы не знаете, заслуживает отзыва.
  • Журналы. Каждый вызов инструмента записывается на уровне info с именем маркера и инструментом, никогда аргументами; каждая запись через REST API с именем маркера, методом, путем и состоянием, никогда телом. Создание и отзыв маркеров находятся в журнале аудита (Параметры → Безопасность).
СимптомПричина и исправление
401 / “Требуется действительный маркер API.”Заголовок отсутствует или содержит ошибку (Authorization: Bearer dmt_…, один пробел после Bearer), или маркер был отозван. Создайте новый.
401 / “Маркер API ”…” истек на …”Создайте новый маркер; выберите более длительный срок действия, если он был слишком коротким.
403 / “не может использоваться с …”Маркер ограничен другими сетями. Адрес в сообщении - это то, что видит сервер: за обратным прокси объявите прокси в DUMBMONIT_TRUSTED_PROXIES.
403 для каждого вызова от браузер-клиентаЕго Origin не разрешен: добавьте его в DUMBMONIT_API_CORS_ORIGINS.
Инструмент отвечает “требуется маркер с областью “write""Маркер только для чтения, или его создатель больше не администратор. Создайте маркер написания, если вы хотите, чтобы помощник действовал.
429120 вызовов за минуту: помощник, вероятно, зацикливается. Подождите Retry-After, затем задайте более узкий вопрос.
“Неподдерживаемая версия протокола”Клиент говорит версию, которую DumbMonit не поддерживает; обновите клиент.
Claude Desktop показывает сервер как сбойныйNode.js должен быть установлен для npx; по простому HTTP --allow-http должен быть в args.
ChatGPT не может подключитьсяТребуется общедоступный URL-адрес HTTPS; адрес локальной сети или простой HTTP не работает с серверов OpenAI.