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