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 installed
Maintenance
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
- 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.33MIT
- AlicenseBqualityAmaintenanceEnables AI assistants to interact with FortiManager for centralized firewall policy management, device provisioning, and network configuration through the FortiManager JSON-RPC API.1004MIT
- AlicenseNot gradedqualityDmaintenanceEnables read-only querying and diagnostics of Fortigate firewalls via SSH, providing security analysis, traffic monitoring, and configuration inspection through natural language.MIT
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.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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