Skip to main content
Glama
Serrinho02

FortiGate MCP Server

by Serrinho02

Ü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:

  1. Keine Änderung ohne Vorschau. Jeder Erstellungs-/Aktualisierungs-/Lösch-Aufruf gibt einen Diff und eine change_id zurück, anstatt sofort auszuführen. Ein separater change_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.

  2. 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 opake credential_id zu.

  3. 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 (intent_create_policy, intent_explain_policy_failure, ...), die Fuzzy-Namen auflösen und die obigen Operationen kombinieren.

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 sync

Erstellen 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.-> Infra

FortinetProductAdapter 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

read_only

Mutätionsoperationen dürfen nicht einmal als Vorschau angeführt werden.

safe

Löschvorgänge werden abgelehnt; Create/Update erfordern dennoch Vorschau ohne Ausführung.

full

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_pending erfasst nur Metadaten (Host, Name, Kunde, Standort) und gibt eine opake credential_id aus; das eigentliche Geheimnis wird einmal lokal über fortinet-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 der keyrings.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 pytest

548 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.

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