FortiGate MCP Server
Обзор
Это MCP-сервер (Model Context Protocol), который позволяет ИИ-ассистенту управлять межсетевыми экранами FortiGate — от одного лабораторного устройства до мультитенантного парка из десятков клиентов, площадок и кластеров.
Он построен вокруг трёх идей, которых у большинства инструментов автоматизации FortiGate нет одновременно:
Никакие изменения не применяются без предпросмотра. Каждый вызов create/update/delete возвращает diff и
change_idвместо немедленного выполнения. Отдельный вызовchange_apply— это то, что фактически выполняет изменение, и перед этим он повторно проверяет живое состояние на предмет расхождений. Не существует режима «просто сделай это» в один шаг, даже для доверенной автоматизации.Claude никогда не видит настоящие учётные данные. Пароли/API-токены устройств подготавливаются через локальный, не-MCP CLI (
fortinet-mcp-cred) прямо в хранилище учётных данных вашей ОС (Windows Credential Manager / macOS Keychain / Linux Secret Service). Поверхность MCP-инструментов работает только с непрозрачнымcredential_id.Он охватывает весь жизненный цикл, а не только 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/системной конфигурации, объединённый экспорт. |
Операции с парком | Сравнение устройств, поиск объекта по всему парку, синхронизация объектов, репликация конфигурации, отчёты по всему парку. |
Интенты на естественном языке | Композитные инструменты ( |
См. 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.-> InfraFortinetProductAdapter — единственная граница расширяемости: сегодня FortiOSAdapter — единственная реализация, но добавление другого продукта Fortinet означает написание одного нового адаптера против того же Protocol — ничего выше этого слоя не меняется.
Режимы работы
Задаётся через FORTINET_MCP_MODE (по умолчанию 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 pytest548 тестов, внешних зависимостей не требуется (взаимодействие с устройством мокируется на уровне HTTP-транспорта для всего набора).
Вклад
Приветствуются issues и PR. Если вы добавляете новый тип ресурса, посмотрите, как были добавлены домены VPN или системной конфигурации (services/vpn_service.py, services/system_service.py, services/change_dispatch.py) — каждый новый мутирующий ресурс следует одному и тому же паттерну adapter -> change_dispatch -> service -> MCP tool.
Автор
Создано и поддерживается Николой Серрой.
Лицензия
MIT — см. LICENSE.
This server cannot be deployed
Maintenance
Related MCP Connectors
AI pentesting: run scans, triage vulnerabilities, review PRs, manage schedules and assets.
Manage ConfigDirector feature flags, remote configs, and targeting rules from AI assistants.
- FullmaktOAuthai.fullmakt
Credential broker for AI agents: scoped, revocable API access with policy enforcement and audit.
- emisarOAuthdev.emisar
Let AI operate servers without SSH. Choose actions, approve risky changes, and audit every step.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables programmatic management of FortiGate firewall devices through MCP, supporting firewall policies, network objects, virtual IPs, routing, and interface management with Cursor IDE integration.MIT
- AlicenseNot gradedqualityCmaintenanceA production-ready MCP server for managing FortiGate firewalls, enabling AI assistants to manage firewall policies, network objects, routing, and device configurations.37MIT
- AlicenseBqualityAmaintenanceEnables AI assistants to interact with FortiManager for centralized firewall policy management, device provisioning, and network configuration through the FortiManager JSON-RPC API.1007MIT
- AlicenseNot gradedqualityBmaintenanceProvides 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