FortiGate MCP Server
Überblick
Dies ist ein MCP-Server (Model Context Protocol), der es einem KI-Assistenten ermöglicht, FortiGate-Firewalls zu verwalten – vom einzelnen Laborgerät bis zu einer Mandantenfähigen Umgebung mit dutzenden Sicherheitsrichtlinien, Standorten und Clustern.
Er basiert auf drei Ideen, die die meisten FortiGate-Automatisierungstools nicht alle drei vereinen:
Keine Änderung ohne Vorschau. Jeder Erstellungs-/Aktualisierungs-/Lösch-Aufruf gibt einen Diff und eine
change_idzurück, anstatt sofort auszuführen. Ein separaterchange_apply-Aufruf führt die Änderung aus und überprüft den Live-Zustand vorher auf Abweichungen. Es gibt keinen, auch keinen reinen "just do it"-Modus, selbst für vertrauenswürdige Automatisierung.Claude sieht niemals echte Zugangsdaten. Geräte-Passwörter/API-Tokens werden über eine lokale, nicht MCP-gebundene CLI (
fortinet-mcp-cred) direkt in den OS-Sselkopf des Betriebssystems geschrieben (Windows Credential Manager / macOS Keychain / Linux Secret Service). Das MCP-Tool-Oberfläche greift nur auf eine opakecredential_idzu.Es deckt den gesamten Lebenszyklus ab, nicht nur Policy-CRUD. Geräte-Bootstrap (DNS/NTP/syslog/SNMP/Admin/HA), VDOM-Mandantenfähigkeit, Schnittstellen/Zonen/DHCP, Routing, Firewall-Policy, VPN (IPsec + SSL), Sicherheits-/Compliance-Analyse und Dokumentationsgenerierung sind eigenständige Tool-Namensräume – siehe die vollständige Tool-Referenz (115 Tools).
Related MCP server: FortiGate MCP Server
Funktionen
Domäne | Was Sie erhalten |
Inventar & Mandantenfähigkeit | Kunde -> Standort -> Geräte -> VDOM drei Hierarchie in einem lokalen Sqlite-Speicher. Ein Gerät nach Name, Standort, Kunde oder IP auflösen – nie durch Tippen einer IP in einen Prompt. |
Geräte-Bootstrap | DNS, NTP, Syslog, SNMP (sysinfo + v1/v2c-Communities), globale Einstellungen (Hostname/Zeitzone/Admin-Ports), lokale Administration-Fensterben, HA – alles, um ein Gerät von Werksauslieferung in einen produktionsreifen Zustand zu bringen. |
VDOM-Lebenszyklus | VDOMs erstellen/ löschen, Inter-VDOM-Links erstellen/löschen. |
Netzwerk-Topologie | Interfaces (VLAN-Subinterfaces, Loopbacks, VDOM-Link-Member), Zonen, DHCP-Server, statische Routen. |
Firewall & NAT | Richtlinien, Addresse-/Dienstobjekte, virtuelle IPs – vollständiges CRUD. |
VPN | IPsec-Standorte-zu-Standort-Tunnel (Phase1/Phase2) mit Live-Status; SSL VPN Sichtbarkeit. |
Änderungssicherheit | READ_ONLY / SAFE / FULL-Operationsmodes, Vorschau -> Anwendung -> Rollback für jede Mutation, Drift-Erkennung bei der Anwendung gleichzeitig. |
Analyse & Compliance | Erkennung von doppelten/sachatten/any-any-Policies, Erkennung ungenutzter Objekte, Subnetz-Overlap, Best-Practice-Checks (Policy und Systemkonfiguration), ein heuristischer 0-100-Sicherheitsscore, ein kombinierter Compliance-Bericht. |
Dokumentationsgenerierung | Topologie-Diagramme (Mermaid/drawio/PlantUML), Policy-/Routing-/VPN-/Systemkonfigurations-Markdown-Docs, kombinierbarer Export. |
Flottenbetrieb | Geräte vergleichen, Objekt über den gesamten Bestand suchen, Objektsynchronisierung, Konfiguration replizieren, flottenübergreiffende Berichte. |
Natürlichsprachliche Intents | Kompositwerkzeuge ( |
Siehe docs/TOOLS.md für die vollständige, generierte Liste aller 115 Tools.
Schnellstart
git clone https://github.com/Serrinho02/fortigate-mcp-server.git
cd fortigate-mcp-server
uv syncErstellen Sie eine minimale config/config.json (die veraltete Einzeldatei-Gerätliste ist optional sobald Sie das Inventarsystem unten verwenden – siehe Installation):
{ "fortigate": { "devices": {} } }Richten Sie Ihren MCP-Client (z. B. Claude Desktop) auf den Server:
{
"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"
}
}
}
}Registrieren Sie danach ein Gerät über Claude (inventory_register_device_pending), hinterlegen Sie die validen Zugangsdaten lokal overwith fortinet-mcp-cred set <credential_id> und rufen Sie get_device_status auf. Vollständige Anleitung, Windows-Pfade und Docker-Anweisungen: docs/INSTALLATION.md. Konzeptanleitung und Praxisbeispiele: docs/USAGE.md.
Architektur
Sieben Schichten, Abhängigkeiten fließen nur in eine Richtung:
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 ist die einzige Erweiterungsgrenzfläche: Derzeit ist FortiOSAdapter die einzige Implementierung, aber das Hinzufügen eines weiteren Fortinet-Produkts erfordert, einen neuen Adapter gegen dasselbe Protokoll zu schreiben – Nichts über dieser Schicht ändert sich.
Betriebsmodi
Eingestellt über FORTINET_MCP_MODE (Standard full):
Modus | Verhalten |
| Mutätionsoperationen dürfen nicht einmal als Vorschau angeführt werden. |
| Löschvorgänge werden abgelehnt; Create/Update erfordern dennoch Vorschau ohne Ausführung. |
| Jeder Vorgang ist erlaubt, aber dennoch wird eine Vorschau – ohne sofortiges Ausführen – verlangt; es gibt in keinem Modus einen Single-Shot-Schnellweg. |
Sicherheitsmodell
Anmeldedaten für Geräte sind nie ein Tool-Argument und tauchen nie in einem Gespräch auf.
inventory_register_device_pendingerfasst nur Metadaten (Host, Name, Kunde, Standort) und gibt eine opakecredential_idaus; das eigentliche Geheimnis wird einmal lokal überfortinet-mcp-cred set <credential_id>eingegeben, direkt im OS-Schlüsselspeicher.connection_connect/ jedes Tool, das eine Live-Sitzung benötigt, schlägt mit einem klaren Fehler "credential not provisioned" fehl, bis der CLI-Schritt ausgeführt wurde – es existiert keinen Rückwehr, der ein Geheimnis durch MCP fließen lässt.Zwei dokumentierte Ausnahmen, die in ihrer Tool-Beschreibung ausdrücklich erwähnt sind: das PSK eines IPsec-Tunnels (
vpn_create_ipsec_tunnel) und das Passwort eines lokalen Admin-Kontos (system_create_admin) sind normale Tool-Argumente, denn FortiOS selbst gibt sie bei GET nie zurück – es gibt keine Möglichkeit, sie zu präsentieren/diffen, ohne dass der Wert einmal durch den Aufruf läuft.
Bekannte Einschränkungen
Kein deklaratives "Desired-State"-Werkzeug. Das ist beabsichtigt: Claude compose die Granotools selbst (siehe
intent.*), statt dass dieser Server à la Ansible oder Terraform eine eigene, dedizierte Apply-Engine besitzt.Docker + Headless-Linux: Der Credential Manager nutzt die OS-
keyring-Bibliothek. Auf einem Container/headless-Linux-Host wie ohne vorhandenen Secret-Service-Dämon muss derkeyrings.cryptfile-Fallback verwendet werden (nicht standardmäßig eingerichtet) – siehe docs/INSTALLATION.md. Die native Installation mit Windows/macOS/Desktop-Linux funktioniert out of the box.SNMP: Es werden nur v1/v2c-Communities unterstützt; noch keine SNMPv3-Benutzer.
Noch kein FortiManager/FortiWeb/andere Fortinet-Produkt-Adapter – das Protokoll der Adapter unterstützt dies, aber es ist nichts jenseits von FortiOS implementiert.
Ende-zu-Ende verifiziert mit realem HTTP-Verfall, die gegen eine gemockte FortiOS-REST-API aufgezeichnet wurde; falls Sie auf eine echte Geräteeigenheit stoßen, öffnen Sie bitte ein Issue mit Ihrer FortiOS-Version und zum Endpunkt.
Testen
uv run pytest548 Tests, keine externen Abhängigkeiten erforderlich (eine Geräteinteraktion ist für die gesamte Suite per HTTP transport gedruckt).
Mitwirkung
Issues und Pull-Requests sind willkommen. Wenn Sie einen neuen Ressourcentyp hinzufügen, schauen Sie sich an, wie die VPN- oder Systemkonfigurations-Domänen angelegt wurden (services/vpn_service.py, services/system_service.py, services/change_dispatch.py) – jede neue mutierende Ressource folgt demselben Muster: Adapter -> change_dispatch -> Service -> MCP-Tool.
Autor
Entwickelt und gepflegt von Nicola Serra (Nicola Serra).
Lizenz
MIT – siehe 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