webroot-mcp
webroot-mcp
MCP-сервер для Webroot (OpenText endpoint security / SecureAnywhere, управление через консоль Global Site Manager "GSM"). Предоставляет сайты, конечные точки, группы, политики, историю угроз, статус агентов в реальном времени и методы DNS Protection (DNSP) консоли GSM из Webroot Unity API в виде MCP-инструментов.
Обзор
Stateless HTTP-сервис. Учетные данные нигде не сохраняются — каждый запрос передает свои собственные учетные данные через заголовки, которые используются только в течение времени выполнения этого единственного запроса.
Поддерживает конкурентные запросы; изоляция учетных данных на уровне запроса реализована через Python
contextvars, а не через глобальный/общий экземпляр клиента.Точки входа:
POST /mcp(протокол MCP) иGET /health(проверка работоспособности).Порт по умолчанию:
8080(настраивается черезMCP_HTTP_PORT).
Related MCP server: mcp-connectwise-psa
Аутентификация
Webroot Unity API реализует стандартный OAuth2 с использованием предоставления пароля:
POST https://unityapi.webrootcloudav.com/auth/token
grant_type=password&username=...&password=...&client_id=...&client_secret=...
&scope=Console.GSM SkyStatus.GSM
-> {"access_token": "...", "expires_in": 299, "refresh_token": "...", ...}Токен доступа действителен всего ~5 минут, поэтому этот сервер заново аутентифицируется при каждом вызове инструмента, а не кэширует его между MCP-запросами — ничего не кэшируется и не сохраняется. Каждый реальный вызов API затем отправляет Authorization: Bearer <access_token>.
Параметры заголовков
Заголовок | Тип | Обязательный | Значение по умолчанию | Допустимые значения | Описание поля | Пример |
| string | да | нет | нет | Электронная почта учетной записи GSM |
|
| string | да | нет | нет | Соответствующий пароль |
|
| string | да | нет | нет | Unity API Client ID (необходимо запросить у Webroot) |
|
| string | да | нет | нет | Unity API Client Secret |
|
| string | да | нет | нет | Parent Key Code консоли GSM |
|
Отсутствие любого заголовка возвращает 401:
{
"error": "Missing credentials",
"message": "This server requires the X-Webroot-Username, X-Webroot-Password, X-Webroot-Client-Id, X-Webroot-Client-Secret, X-Webroot-Parent-Keycode headers",
"required_headers": ["X-Webroot-Username", "X-Webroot-Password", "X-Webroot-Client-Id", "X-Webroot-Client-Secret", "X-Webroot-Parent-Keycode"],
"optional_headers": []
}Неверные учетные данные отображаются как структурированная ошибка уровня инструмента (см. «Обработка ошибок» ниже) на этапе внутреннего входа в систему, а не как ошибка HTTP-уровня этого сервера.
Переменные окружения
Переменная | Тип | Обязательная | Значение по умолчанию | Описание |
| int | нет |
| Порт прослушивания HTTP |
| string | нет |
| Адрес прослушивания HTTP |
| string | нет |
| Базовый URL Webroot Unity API |
Конечная точка MCP
POST /mcp— протокол MCP (потоковый HTTP-транспорт)GET /health— проверка работоспособности, возвращает{"status": "ok"}(чисто локальная проверка, не зависит от Webroot API)
Список инструментов
Все 10 инструментов доступны только для чтения (readOnlyHint=True); в этом сервисе нет инструментов записи/удаления.
Инструмент | Функция | Параметры |
| Вывести список всех сайтов (учетных записей клиентов) в этой консоли GSM | нет |
| Вывести список защищенных конечных устройств на указанном сайте |
|
| Вывести список групп конечных устройств на указанном сайте |
|
| Вывести список политик безопасности для этой консоли GSM | нет |
| Получить историю обнаружения угроз для сайта за период (не более 3 месяцев) |
|
| Получить записи заблокированного трафика DNS Protection для сайта (требуется включенный DNSP) |
|
| Вывести список категорий контентной фильтрации DNS Protection (требуется включенный DNSP) | нет |
| Вывести список кодов причин блокировки DNS Protection (требуется включенный DNSP) | нет |
| Получить сводную статистику трафика DNS Protection (требуется включенный DNSP) |
|
| Получить статус агента конечного устройства в реальном времени / информацию об авторизации |
|
Ограничения page_size/batch_size: в публичной справочной документации API поставщика не указан максимум для этих параметров ни для одной из вышеуказанных конечных точек, поэтому этот сервер применяет собственное значение по умолчанию (50) и жесткий максимум (200), а не передает неограниченное значение.
Ответы представляют собой JSON поставщика, сериализованный компактно (без форматирования, ensure_ascii=False) и ограниченный 20 000 символов — слишком большое поле списка обрезается с помощью маркеров truncated/original_count, а не возвращается неограниченный блок данных.
Обработка ошибок
Ошибки возвращаются в виде встроенного JSON-конверта (обычная строка результата инструмента, а не ошибка протокола MCP):
{"error": {"code": "not_found", "message": "...", "retryable": false}}code — одно из фиксированного набора: not_configured, unauthorized, not_found, invalid_argument, rate_limited, upstream_error. retryable сообщает вызывающей стороне, может ли повторная попытка того же вызова увенчаться успехом (true для rate_limited/upstream_error, false в противном случае). Пустой набор результатов (например, сайт без конечных точек) — это обычный успешный результат, а не ошибка not_found.
Исходящие вызовы Webroot API используют таймаут подключения 5 с / таймаут чтения 30 с и повторяют ответы 429/5xx до 3 раз с экспоненциальной задержкой (с учетом Retry-After, максимум 20 с), используя единый пул HTTP-соединений на время жизни процесса.
Примеры тестирования
# 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-Webroot-Username: admin@example.com" \
-H "X-Webroot-Password: <your-password>" \
-H "X-Webroot-Client-Id: <your-client-id>" \
-H "X-Webroot-Client-Secret: <your-client-secret>" \
-H "X-Webroot-Parent-Keycode: <your-parent-keycode>" \
-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": "webroot_get_sites",
"arguments": {}
}
}'Проверено вживую (2026-07-30) на реальной консоли GSM: все 10 инструментов вызывались сквозным образом через этот запущенный сервер с реальными учетными данными: webroot_get_sites вернул 92 реальных сайта (например, "Pinnacle Technologies", "Hohimer Wealth Management"); webroot_get_policies вернул 11 реальных политик; webroot_get_agent_status вернул реальные данные о статусе каждого устройства; webroot_get_endpoints и webroot_get_groups (с использованием реального идентификатора сайта) оба вернули реальные данные (6 конечных точек, 1 группа с 46 устройствами); webroot_get_threat_history вернул допустимый (пустой) результат для реального диапазона в 2 месяца. Все 4 инструмента DNS Protection (webroot_get_dnsp_categories/_block_reasons/_traffic_summary/_blocked_traffic) корректно обращались к API и возвращали собственную ошибку поставщика dnsp_not_enabled — что доказывает корректность конвейера запросов/аутентификации; DNS Protection просто не включен для консоли GSM этой конкретной тестовой учетной записи (см. «Известные ограничения»).
Справочник по API
Публичный, без входа в систему: https://unityapi.webrootcloudav.com/Docs/en/APIDoc (Руководство полностью описывает OAuth2-аутентификацию; Справочник по API охватывает параметры и структуру ответов каждого метода)
Известные ограничения
Область действия ограничена 10 настроенными конечными точками MSPbots, а не полным API поставщика — Unity API также охватывает ECom (заказ/управление лицензиями), уведомления, отправку команд агенту, создание/редактирование сайтов и платформенный API OpenText Secure Cloud; все это выходит за рамки данного проекта.
4 инструмента DNS Protection (DNSP) не удалось проверить на реальных данных — DNS Protection является дополнительным продуктом, который не включен для консоли GSM тестовой учетной записи (ошибка
dnsp_not_enabled, подтверждено вживую). Остальные 6 инструментов успешно работали с реальными данными, используя тот же самый токен доступа, что подтверждает, что это ограничение учетной записи, а не ошибка реализации.webroot_get_endpoints/webroot_get_groups/webroot_get_threat_historyтребуютsite_id, к которому у аутентифицированного пользователя GSM действительно есть доступ — доступ Webroot GSM осуществляется по сайтам; попытка вызова этих методов для сайта, к которому у пользователя нет доступа, возвращает понятную ошибку"User does not have access to this console"(наблюдалось вживую для одного из 92 сайтов во время тестирования), а не ошибку этого сервера.webroot_get_threat_historyотклоняет диапазоны дат более 3 месяцев (Invalid data entered - Date Range Over 3 Months, подтверждено вживую) — этот сервер не применяет и не разбивает диапазон автоматически; он передаетstart_date/end_dateкак есть.
This server cannot be deployed
Maintenance
Related MCP Connectors
MCP Server for agents to onboard, pay, and provision services autonomously with InFlow
Managed MCP gateway with OAuth, per-agent permissions, shared accounts and activity logs.
An MCP server that provides an API to LLMs to manage their JumpCloud resources.
A paid remote MCP for Unity-MCP, built to return verdicts, receipts, usage logs, and audit-ready JSO
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceMCP server for Kaseya VSA — endpoints, patches, procedures, alarms, and tickets. Enables AI assistants to manage and monitor devices via the Kaseya VSA RMM platform.Apache 2.0
- AlicenseNot gradedqualityBmaintenanceMCP server for ConnectWise PSA (Manage) enabling ticket management, time entry, and read-only lookups of companies, contacts, and configurations with role-based access control and bring-your-own-API-keys support.65 npm6MIT
- FlicenseNot gradedqualityCmaintenanceMCP server that exposes Acronis Cyber Protect Cloud APIs as 14 read-only tools for managing alerts, tasks, agents, resources, policies, and tenants.-
- FlicenseNot gradedqualityCmaintenanceMCP server for Check Point Harmony Endpoint that exposes policy, asset, vulnerability, quarantine, and remediation API methods as MCP tools, with per-request credential isolation and automatic two-step authentication.-