MCP-сервер

Обзор

MCP-сервер Zabbix — это процесс, который позволяет ИИ-агентам работать с Zabbix с использованием протокола контекста модели (MCP). MCP-сервер взаимодействует с MCP-клиентами и API Zabbix.

С помощью MCP-сервера ИИ-агент может:

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

Для авторизации используются токены API Zabbix; токены отправляются с каждым запросом. Доступ ограничен разрешениями владельца токена: видимы только данные из групп узлов сети, доступных этому пользователю, а действия, которые пользователю запрещено выполнять, отклоняются.

MCP-сервер не сохраняет состояние: между запросами сеанс не сохраняется.

Хотя MCP-сервер Zabbix может работать со старыми или более новыми версиями Zabbix, официально поддерживается только совместимость с той же версией Zabbix, что и версия самого MCP-сервера.

См. также:

Установка

Официальный пакет zabbix-mcp-server доступен в репозитории Zabbix.

Чтобы установить сервер Zabbix MCP из исходного кода, соберите его с помощью make.

Чтобы настроить сервер Zabbix MCP, измените параметры файла конфигурации сервера MCP. Необходимо задать как минимум параметры FrontendURL и AllowedIP.

Файл конфигурации по умолчанию (zabbix_mcp_server.conf) находится в /etc/zabbix/; в нем запрещены инструменты, которые чаще всего раскрывают конфиденциальные данные. Чтобы включить инструмент, удалите соответствующую строку DenyTool.

См. также: Рекомендации по обеспечению безопасности

Запуск

Чтобы запустить MCP-сервер, выполните:

zabbix_mcp_server -c /etc/zabbix/zabbix_mcp_server.conf

Чтобы проверить файл конфигурации и завершить работу без запуска сервера, используйте параметр -T:

zabbix_mcp_server -c /etc/zabbix/zabbix_mcp_server.conf -T

Поддерживаются следующие параметры командной строки:

Параметр Описание
-c <file> Путь к файлу конфигурации.
По умолчанию используется /etc/zabbix/zabbix_mcp_server.conf.
-T Проверить файл конфигурации и завершить работу.
-h Отобразить справочную информацию.
-V Отобразить номер версии.

Если MCP-сервер установлен из исходного кода, файл модуля systemd необходимо создать вручную, например:

[Unit]
Description=Zabbix MCP server
After=network-online.target

[Service]
User=zabbix
ExecStart=/usr/local/sbin/zabbix_mcp_server -c /etc/zabbix/zabbix_mcp_server.conf
Restart=on-failure

[Install]
WantedBy=multi-user.target

Подключение клиента MCP

К серверу MCP можно подключить любой клиент MCP, поддерживающий транспорт Streamable HTTP. Требуются следующие настройки:

Настройка Значение
Транспорт Streamable HTTP
URL https://<host>:<ListenPort>/mcp
Заголовок Authorization: Bearer <Zabbix API token>, отправляется с каждым запросом

Каждый пользователь должен настроить собственный API-токен.

Чтобы проверить настройку, отправьте один запрос к серверу MCP:

curl -sS https://mcp.example.com:8443/mcp \
  -H "Authorization: Bearer $ZABBIX_API_TOKEN" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'

Код состояния HTTP 200 и список доступных инструментов в ответе подтверждают, что сервер MCP доступен и принимает токен; список показывает, какие инструменты предоставляются. Другие коды состояния указывают на следующие проблемы:

  • 400 - заголовок Accept не содержит оба типа мультимедиа, требуемых транспортом;
  • 401 - отсутствует заголовок Authorization с токеном;
  • 403 - адрес клиента не указан в параметре AllowedIP.

Подтверждение и доступ к инструментам

Если MCP-клиент поддерживает получение данных через формы, каждое изменение должно быть подтверждено пользователем до его отправки в Zabbix. MCP-клиент показывает пользователю, что будет изменено, и изменение применяется только после подтверждения пользователя; если пользователь отклоняет или закрывает запрос, в Zabbix ничего не изменяется. Подтверждение действительно в течение пяти минут и только для точно показанного изменения; в течение этого времени подтверждение можно использовать повторно.

Если MCP-клиент не поддерживает получение данных через формы (включая клиенты, поддерживающие только получение данных через URL), изменения применяются немедленно, без подтверждения. В этом случае ограничьте инструменты записи и разрешения API Zabbix.

Подтверждение особенно важно, поскольку вывод инструментов может содержать ненадежный текст из отслеживаемых систем, который способен повлиять на агента.

Используйте AllowTool, DenyTool, AllowToolRegexp и DenyToolRegexp, чтобы управлять инструментами, доступными MCP-серверу. Запрещенные инструменты нельзя вызывать или просматривать, а связанные с ними ресурсы недоступны.

Правила AllowTool, DenyTool, AllowToolRegexp и DenyToolRegexp ограничивают доступ к MCP, но не изменяют разрешения токена Zabbix. Если адрес веб-интерфейса доступен агенту с искусственным интеллектом, агент может попытаться отправить прямые вызовы API. Не предоставляйте агенту доступ к расположению веб-интерфейса Zabbix и конфигурации MCP-сервера, чтобы запросы обязательно проходили через MCP-сервер и его средства защиты.

Рекомендации по обеспечению безопасности

Токены API

Аутентификация и авторизация полностью выполняются Zabbix. Клиент MCP отправляет токен API Zabbix с каждым запросом; MCP-сервер передаёт его без сохранения или записи в журнал, а Zabbix проверяет токен, применяет разрешения и записывает действия в журнал аудита.

Используйте отдельный токен с минимальными привилегиями и сроком действия для каждого агента и пользователя. Храните токены в безопасном месте и регулярно выполняйте их ротацию.

Шифрование TLS

Чтобы токены не передавались в открытом виде, установите TLSAccept=cert и укажите сертификат и ключ (TLSCertFile и TLSKeyFile) либо запустите MCP-сервер за доверенным обратным прокси, завершающим TLS, и установите TLSAccept=unencrypted. Нешифрованный HTTP допустим только в доверенной сети.

Ограничения доступа

Ограничьте параметр AllowedIP адресами доверенных клиентов MCP и используйте разрешения Zabbix, чтобы ограничить возможности токенов API.

MCP-сервер не ограничивает частоту запросов. Каждый запрос MCP обычно приводит к одному вызову API Zabbix, однако агент, работающий в цикле, всё равно может создавать значительную нагрузку.

Защита конфиденциальных данных

Ключи элементов данных могут содержать учетные данные (например, в элементах данных SSH, JMX, ODBC и HTTP agent), значения макросов могут содержать пароли и строки сообществ, интерфейсы раскрывают внутренние адреса, а значения элементов данных журнала или текста могут содержать любые данные. По этой причине инструменты item_get, lld_get, interface_get, macro_get и history_get по умолчанию запрещены в поставляемом файле конфигурации.

Чтобы избежать раскрытия конфиденциальных значений макросов поставщику LLM подключенного агента, используйте секретные макросы; их значения никогда не возвращаются API.