Skip to main content
Glama

prtg-mcp

MCP-сервер для PRTG Network Monitor (сетевой/инфраструктурный мониторинг Paessler). Предоставляет нативные HTTP API PRTG для датчиков, устройств и исторических данных датчиков в виде инструментов MCP.

Обзор

  • HTTP-сервис без состояния. Учётные данные никогда не сохраняются — каждый запрос передаёт свои собственные учётные данные через заголовки, которые используются только в течение жизни этого одного запроса.

  • Поддерживает конкурентные запросы; изоляция учётных данных на запрос выполняется через Python contextvars, а не через глобальный/общий экземпляр клиента.

  • Точки входа: POST /mcp (протокол MCP) и GET /health (проверка работоспособности).

  • Порт по умолчанию: 8080 (настраивается через MCP_HTTP_PORT).

Related MCP server: mcp-ntopng

Аутентификация

В отличие от большинства интеграций в этой программе, PRTG не имеет отдельного входа или обмена токенами: имя пользователя и «passhash» (генерируется в интерфейсе PRTG в разделе My Account -> API Key, а не буквальный пароль учётной записи) отправляются как обычные параметры запроса при каждом вызове. Поэтому кэшировать нечего — каждый вызов уже полностью самодостаточен и не имеет состояния по замыслу самого вендора.

Параметры авторизации в заголовках

Заголовок

Тип

Обязательный

По умолчанию

Допустимые значения

Описание

Пример

X-PRTG-Server-Url

string

да

нет

нет

Имя хоста основного сервера PRTG (без префикса протокола)

prtg.example.com

X-PRTG-Username

string

да

нет

нет

Имя пользователя API PRTG

api_user

X-PRTG-Passhash

string

да

нет

нет

«passhash» PRTG (генерируется на странице My Account -> API Key в интерфейсе PRTG, не является паролем учётной записи в открытом виде)

1234567890

Отсутствие любого заголовка возвращает 401:

{
  "error": "Missing credentials",
  "message": "This server requires the X-PRTG-Server-Url, X-PRTG-Username, and X-PRTG-Passhash headers",
  "required_headers": ["X-PRTG-Server-Url", "X-PRTG-Username", "X-PRTG-Passhash"],
  "optional_headers": []
}

Неверные учётные данные проявляются как ошибка на уровне инструмента (см. Конверт ошибки ниже), классифицируемая по HTTP-коду состояния PRTG — 401/403 соответствует unauthorized. При любом ответе, отличном от 2xx, этот сервер пытается извлечь поле message/error из JSON-тела и возвращается к необработанному тексту ответа, если тело не является JSON (PRTG для некоторых некорректных запросов может вернуть XML-тело <error> даже на конечной точке .json).

Переменные окружения

Переменная

Тип

Обязательная

По умолчанию

Описание

MCP_HTTP_PORT

int

нет

8080

HTTP-порт для прослушивания

MCP_HTTP_HOST

string

нет

0.0.0.0

HTTP-адрес для прослушивания

Конечная точка MCP

  • POST /mcp — протокол MCP (потоковый HTTP-транспорт)

  • GET /health — проверка работоспособности, возвращает {"status": "ok"} (чисто локальная проверка, не вызывает PRTG)

Список инструментов

Инструмент

Функция

Параметры

prtg_get_sensors

Список всех датчиков и их текущего состояния/значений

count (необязательный, по умолчанию 50, жёсткий предел 200)

prtg_get_devices

Список всех отслеживаемых устройств и их состояния/принадлежности к probe/group

count (необязательный, по умолчанию 50, жёсткий предел 200)

prtg_get_sensor_historic_data

Получение исторических данных мониторинга для указанного датчика за диапазон дат

sensor_id, start_date, end_date (все обязательные), avg (необязательный, по умолчанию 3600 секунд)

Все 3 инструмента доступны только для чтения (readOnlyHint=True, idempotentHint=True); в этом сервисе нет инструментов записи/удаления.

Для count нет задокументированного жёсткого максимума на стороне вендора для конечной точки table.json PRTG, поэтому этот сервер применяет собственный предел платформы вместо бесконтрольной передачи значений: по умолчанию 50, значения выше 200 молча ограничиваются до 200, а не отправляются в PRTG как есть.

Формат ответа

Обе конечные точки, которые вызывает этот сервер (table.json, historicdata.json), являются вариантами вендора с JSON-суффиксом, поэтому при успехе клиент всегда разбирает только JSON. HTTP API PRTG в принципе может возвращать XML для других конечных точек/параметров, поэтому клиент разбирает защитно: ответ, отличный от 2xx, классифицируется в структурированный конверт ошибки ниже, а если ответ 2xx не удаётся разобрать как JSON, его необработанный текст возвращается под ключом raw_response вместо возникновения исключения.

Конверт ошибки

Ошибки инструментов возвращаются как структурированная JSON-строка вместо возникшего исключения, чтобы вызывающий агент мог ветвиться по code и решать, стоит ли повторить попытку:

{"error": {"code": "upstream_error", "message": "...", "retryable": true}}

code — одно из: not_configured, unauthorized, not_found, invalid_argument, rate_limited, upstream_error. Пустые наборы результатов возвращаются как обычная (не ошибочная) пустая коллекция, а не как not_found.

Возвращаемые значения инструментов (как успешные, так и ошибочные) — это компактный JSON (ensure_ascii=False, без indent) с ограничением в 20 000 символов — слишком большой результат усекает своё самое большое поле списка и сообщает truncated/original_count вместо возврата неограниченного блоба.

Примеры тестирования

# Health check
curl -s http://localhost:8080/health

# Call a tool via the MCP protocol (streamable HTTP) — requires an
# initialize handshake first per the MCP spec; abbreviated example below
# shows the tool-call request body only:
curl -s -X POST http://localhost:8080/mcp \
  -H "X-PRTG-Server-Url: prtg.example.com" \
  -H "X-PRTG-Username: api_user" \
  -H "X-PRTG-Passhash: <your-passhash>" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -H "mcp-session-id: <session-id-from-initialize>" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
      "name": "prtg_get_sensors",
      "arguments": {}
    }
  }'

Проверено вживую (2026-07-30) на реальном основном сервере PRTG, все 3 инструмента вызваны сквозным образом через этот работающий сервер с реальными учётными данными: prtg_get_sensors и prtg_get_devices оба вернули 200 с реальной строкой prtg-version и допустимым (пустым) набором результатов — у этой конкретной тестовой учётной записи ноль датчиков/устройств, предоставленных в её видимой области, что подтверждено как подлинное состояние «нет данных» (не ошибка аутентификации) отдельным запросом content=probes, который вернул реальные данные (корневой probe PRTG плюс несколько реальных объектов планирования) с теми же самыми учётными данными. prtg_get_sensor_historic_data, вызванный с ID объекта, не являющегося датчиком (поскольку реального ID датчика не было), корректно достиг API и вернул собственную ошибку уровня контента вендора («The selected object cannot be used here»), что доказывает правильность конвейера запроса/аутентификации.

Справочник API

Известные пробелы

  • Область охвата — ровно 3 настроенные конечные точки MSPbots, а не полная поверхность API вендора — API PRTG также охватывает живое управление датчиками (пауза/возобновление/подтверждение), создание/удаление объектов, уведомления, отчёты и многое другое; это вне области охвата.

  • Данные датчиков/устройств не удалось продемонстрировать на реальных записях — предоставленная тестовая учётная запись (Dash_Display, вероятно, учётная запись отображения только для панели мониторинга) имеет ноль датчиков и ноль устройств, предоставленных в её видимой области на этом конкретном экземпляре PRTG. Живое тестирование подтвердило, что это подлинно пустой результат (не ошибка аутентификации или реализации) путём успешного запроса другого, всегда заполненного типа объекта (content=probes) с теми же учётными данными и получения реальных данных.

  • prtg_get_sensor_historic_data не удалось протестировать с реальным ID датчика по той же причине (нет датчиков для ссылки); вместо этого он был проверен подтверждением собственного ответа об ошибке уровня контента вендора для недопустимого ID объекта, что доказывает корректность формата запроса и аутентификации.

F
license - not found
Not graded
quality - not tested
C
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 Servers

View all related MCP servers

Related MCP Connectors

  • An MCP server giving access to Grafana dashboards, data and more.

  • MCP Server for JFrog, providing tools for development and artifact management.

  • MCP server for managing Prisma Postgres.

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/MSPbotsAI/prtg-mcp'

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