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.

A
license - permissive license
Not graded
quality - not tested
B
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

  • 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
    D
    maintenance
    Enables read-only querying and diagnostics of Fortigate firewalls via SSH, providing security analysis, traffic monitoring, and configuration inspection through natural language.
    MIT

View all related MCP servers

Related MCP Connectors

  • Let AI operate servers without SSH. Choose actions, approve risky changes, and audit every step.

  • Threat modeling, code/cloud/pipeline scanning, shadow-AI discovery, compliance checks and fixes.

  • Connect AI assistants to GitHub - manage repos, issues, PRs, and workflows through natural language.

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/Serrinho02/fortigate-mcp-server'

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