Skip to main content
Glama
Serrinho02

FortiGate MCP Server

by Serrinho02

Обзор

Это MCP-сервер (Model Context Protocol), который позволяет ИИ-ассистенту управлять межсетевыми экранами FortiGate — от одного лабораторного устройства до мультитенантного парка из десятков клиентов, площадок и кластеров.

Он построен вокруг трёх идей, которых у большинства инструментов автоматизации FortiGate нет одновременно:

  1. Никакие изменения не применяются без предпросмотра. Каждый вызов create/update/delete возвращает diff и change_id вместо немедленного выполнения. Отдельный вызов change_apply — это то, что фактически выполняет изменение, и перед этим он повторно проверяет живое состояние на предмет расхождений. Не существует режима «просто сделай это» в один шаг, даже для доверенной автоматизации.

  2. Claude никогда не видит настоящие учётные данные. Пароли/API-токены устройств подготавливаются через локальный, не-MCP CLI (fortinet-mcp-cred) прямо в хранилище учётных данных вашей ОС (Windows Credential Manager / macOS Keychain / Linux Secret Service). Поверхность MCP-инструментов работает только с непрозрачным credential_id.

  3. Он охватывает весь жизненный цикл, а не только CRUD политик. Загрузка устройства (DNS/NTP/syslog/SNMP/admin/HA), мультитенантность VDOM, интерфейсы/зоны/DHCP, маршрутизация, политики межсетевого экрана, VPN (IPsec + SSL), анализ безопасности/соответствия и генерация документации — всё это полноценные пространства имён инструментов — см. полный Справочник инструментов (115 инструментов).

Related MCP server: FortiGate MCP Server

Возможности

Домен

Что вы получаете

Инвентаризация и мультитенантность

Иерархия Клиент -> Сайт -> Устройство -> VDOM в локальном хранилище SQLite. Разрешайте устройство по имени, сайту, клиенту или IP — никогда не вводя IP в промпт.

Настройка устройства

DNS, NTP, syslog, SNMP (sysinfo + v1/v2c communities), глобальные настройки (hostname/timezone/admin ports), локальные учётные записи администратора, HA — всё необходимое, чтобы перевести устройство из заводских настроек в производственную готовность.

Жизненный цикл VDOM

Создание/удаление VDOM, создание/удаление меж-VDOM-связей.

Сетевая топология

Интерфейсы (VLAN-субинтерфейсы, loopback, участники vdom-link), зоны, DHCP-серверы, статические маршруты.

Межсетевой экран и NAT

Политики, объекты адресов/сервисов, виртуальные IP — полный CRUD.

VPN

IPsec-туннели site-to-site (phase1/phase2) с живым статусом; видимость SSL VPN.

Безопасность изменений

Режимы работы READ_ONLY / SAFE / FULL, предпросмотр -> применение -> откат для каждой мутации, обнаружение расхождений при применении.

Анализ и соответствие

Обнаружение дублирующих/затенённых/any-any политик, обнаружение неиспользуемых объектов, перекрытие подсетей, проверки лучших практик (политика и системная конфигурация), эвристическая оценка безопасности 0-100, объединённый отчёт о соответствии.

Генерация документации

Диаграммы топологии (Mermaid/drawio/PlantUML), Markdown-документы политик/маршрутизации/VPN/системной конфигурации, объединённый экспорт.

Операции с парком

Сравнение устройств, поиск объекта по всему парку, синхронизация объектов, репликация конфигурации, отчёты по всему парку.

Интенты на естественном языке

Композитные инструменты (intent_create_policy, intent_explain_policy_failure, ...), которые разрешают нечёткие имена и составляют примитивы выше.

См. docs/TOOLS.md для полного, сгенерированного списка всех 115 инструментов.

Быстрый старт

git clone https://github.com/Serrinho02/fortigate-mcp-server.git
cd fortigate-mcp-server
uv sync

Создайте минимальный config/config.json (устаревший однофайловый список устройств необязателен, если вы используете систему инвентаризации ниже — см. Установка):

{ "fortigate": { "devices": {} } }

Укажите вашему MCP-клиенту (например, Claude Desktop) на сервер:

{
  "mcpServers": {
    "fortigate": {
      "command": "/absolute/path/to/fortigate-mcp-server/.venv/bin/python",
      "args": ["-m", "src.fortigate_mcp.server"],
      "env": {
        "FORTIGATE_MCP_CONFIG": "/absolute/path/to/fortigate-mcp-server/config/config.json",
        "FORTINET_MCP_MODE": "full"
      }
    }
  }
}

Затем, из Claude: зарегистрируйте устройство (inventory_register_device_pending), подготовьте его учётные данные локально с помощью fortinet-mcp-cred set <credential_id>, и вызовите get_device_status. Полное пошаговое руководство, пути Windows и инструкции для Docker: docs/INSTALLATION.md. Концептуальное руководство и рабочие примеры: docs/USAGE.md.

Архитектура

Семь слоёв, зависимости идут только в одном направлении:

flowchart TB
    Transport["MCP Tool Layer -- inventory.*, connection.*, policy/network/routing/vip.*, vpn.*, system.*, vdom.*, analysis.*, doc.*, fleet.*, intent.*, change.*"]
    Services["Service Layer -- one Service per capability, mode enforcement, error translation"]
    Domain["Domain / Analysis Engines -- pure functions: DiffEngine, policy analyzers, scoring"]
    Repo["Repository Layer -- inventory/change/snapshot persistence"]
    Adapters["Vendor Adapter Layer -- FortinetProductAdapter Protocol (the plugin boundary)"]
    Clients["Vendor API Client -- FortiOSRestClient (httpx, persistent per-device connection)"]
    Infra["Infra -- ConnectionManager, CredentialManager (keyring), SQLite/SQLAlchemy"]

    Transport --> Services
    Services --> Domain
    Services --> Repo
    Domain --> Repo
    Repo --> Adapters
    Adapters --> Clients
    Services -.uses.-> Infra

FortinetProductAdapter — единственная граница расширяемости: сегодня FortiOSAdapter — единственная реализация, но добавление другого продукта Fortinet означает написание одного нового адаптера против того же Protocol — ничего выше этого слоя не меняется.

Режимы работы

Задаётся через FORTINET_MCP_MODE (по умолчанию full):

Режим

Поведение

read_only

Никакая мутация не может быть даже предпросмотрена.

safe

Операции удаления отклоняются; создание/обновление по-прежнему требуют предпросмотра -> применения.

full

Каждая операция разрешена, но всё равно требует предпросмотра -> применения — в любом режиме нет быстрого пути в один шаг.

Модель безопасности

  • Учётные данные устройства никогда не являются аргументом инструмента и никогда не появляются в разговоре. inventory_register_device_pending собирает только метаданные (host, name, customer, site) и выдаёт непрозрачный credential_id; фактический секрет вводится один раз, локально, через fortinet-mcp-cred set <credential_id>, прямо в хранилище учётных данных ОС.

  • connection_connect / любой инструмент, требующий живого сеанса, завершится ошибкой «учётные данные не подготовлены» до тех пор, пока этот шаг CLI не будет выполнен — нет запасного пути, который позволил бы секрету пройти через MCP.

  • Два документированных исключения, оба отмечены прямо в описаниях инструментов: PSK туннеля IPsec (vpn_create_ipsec_tunnel) и пароль локальной учётной записи администратора (system_create_admin) являются обычными аргументами инструментов, потому что FortiOS сам никогда не возвращает их на GET — нет способа предпросмотреть/сравнить их без того, чтобы значение прошло через вызов один раз.

Известные ограничения

  • Нет декларативного инструмента «применить это желаемое состояние». По замыслу — Claude сам составляет гранулярные инструменты (см. паттерн intent.*), а не этот сервер владеет движком применения в стиле Terraform/Ansible.

  • Docker + headless Linux: менеджер учётных данных оборачивает библиотеку keyring ОС. На контейнерном/headless Linux-хосте без демона Secret Service вам нужен запасной вариант keyrings.cryptfile (не подключён по умолчанию) — см. docs/INSTALLATION.md. Нативная установка на Windows/macOS/desktop Linux работает из коробки.

  • SNMP: поддерживаются только v1/v2c communities; пользователей SNMPv3 пока нет.

  • Нет адаптеров FortiManager/FortiWeb/других продуктов Fortinet пока — протокол адаптера это поддерживает, но ничего, кроме FortiOS, не реализовано.

  • Проверено end-to-end с реальным HTTP-трафиком, захваченным против мок-API FortiOS REST; если вы столкнётесь с особенностью реального устройства, пожалуйста, откройте issue с версией FortiOS и конечной точкой.

Тестирование

uv run pytest

548 тестов, внешних зависимостей не требуется (взаимодействие с устройством мокируется на уровне HTTP-транспорта для всего набора).

Вклад

Приветствуются issues и PR. Если вы добавляете новый тип ресурса, посмотрите, как были добавлены домены VPN или системной конфигурации (services/vpn_service.py, services/system_service.py, services/change_dispatch.py) — каждый новый мутирующий ресурс следует одному и тому же паттерну adapter -> change_dispatch -> service -> MCP tool.

Автор

Создано и поддерживается Николой Серрой.

Лицензия

MIT — см. LICENSE.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables programmatic management of FortiGate firewall devices through MCP, supporting firewall policies, network objects, virtual IPs, routing, and interface management with Cursor IDE integration.
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Provides programmatic access to FortiGate devices for managing firewall policies, routing, virtual IPs, and device operations, enabling integration with MCP-compatible clients like Claude Desktop.
    MIT