Подключить помощника
DumbMonit имеет встроенный сервер MCP: протокол контекста модели, способ, которым помощники, такие как Claude, ChatGPT, Cursor или агент VS Code вызывают внешние инструменты. Подключите один, затем спросите его о вещах вроде:
- “Все ли в порядке?”
- “Заглушить NAS на два часа, я меняю диск.”
- “Что произошло вчера ночью?”
- “Насколько заполнен сервер резервного копирования, и становится ли хуже?”
- “Опубликовать обновление на странице статуса: почтовый сервер вернулся.”
Помощник видит то, что видит интерфейс — мониторы, оповещения, историю, метрики, агентов, страницы статуса — и использует те же слова: сообщаемые, недоступные, ожидание, совет, предупреждение, подавлено родителем. Он работает внутри сервера: ничего не устанавливать рядом с DumbMonit, и инструменты вызывают тот же код, что и веб-интерфейс.
1. Создать маркер
Заголовок раздела «1. Создать маркер»Параметры → 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 (мониторы, правила, каналы), учетные записи, маркеры и резервные копии
исключены.
2. Вставить фрагмент
Заголовок раздела «2. Вставить фрагмент»На странице параметров заполняются адрес сервера и новый
маркер. Ниже https://monit.example.lan означает ваш сервер.
Claude Code
Заголовок раздела «Claude Code»claude mcp add --transport http dumbmonit https://monit.example.lan/api/mcp \ --header "Authorization: Bearer dmt_…"Добавьте --scope user, чтобы он был в каждом проекте, а не только в текущем.
Claude Desktop
Заголовок раздела «Claude Desktop»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.
VS Code
Заголовок раздела «VS Code».vscode/mcp.json в рабочей области (или команда MCP: Add Server → HTTP):
{ "servers": { "dumbmonit": { "type": "http", "url": "https://monit.example.lan/api/mcp", "headers": { "Authorization": "Bearer dmt_…" } } }}Cursor и другие клиенты
Заголовок раздела «Cursor и другие клиенты».cursor/mcp.json, и та же форма для большинства клиентов, которые поддерживают
потоковые HTTP-серверы с пользовательскими заголовками:
{ "mcpServers": { "dumbmonit": { "url": "https://monit.example.lan/api/mcp", "headers": { "Authorization": "Bearer dmt_…" } } }}Клиент, который может только запускать локальные серверы (stdio), может использовать мост mcp-remote,
показанный для Claude Desktop.
ChatGPT
Заголовок раздела «ChatGPT»Параметры → Соединители → Создать (режим разработчика). 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:
| HTTP | JSON-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"" | Маркер только для чтения, или его создатель больше не администратор. Создайте маркер написания, если вы хотите, чтобы помощник действовал. |
429 | 120 вызовов за минуту: помощник, вероятно, зацикливается. Подождите Retry-After, затем задайте более узкий вопрос. |
| “Неподдерживаемая версия протокола” | Клиент говорит версию, которую DumbMonit не поддерживает; обновите клиент. |
| Claude Desktop показывает сервер как сбойный | Node.js должен быть установлен для npx; по простому HTTP --allow-http должен быть в args. |
| ChatGPT не может подключиться | Требуется общедоступный URL-адрес HTTPS; адрес локальной сети или простой HTTP не работает с серверов OpenAI. |