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.

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