Skip to main content
Glama
Serrinho02

FortiGate MCP Server

by Serrinho02

概要

これは、AI アシスタントが FortiGate ファイアウォールを管理できるようにする MCP (Model Context Protocol) サーバーです。単一のラボ用デバイスから、数十の顧客・サイト・クラスターからなるマルチテナント環境まで対応します。

このサーバーは、ほとんどの FortiGate 自動化ツールがすべてを同時には備えていない、次の 3 つの考え方に基づいて構築されています。

  1. プレビューなしに変更は行われません。 すべての create/update/delete 呼び出しは、即座に実行する代わりに diff と change_id を返します。実際に実行するのは別の change_apply 呼び出しで、実行前にライブ状態を再確認してドリフトを検出します。信頼できる自動化であっても、一発で「そのまま実行」するモードはありません。

  2. Claude は実際の認証情報を見ることはありません。 デバイスのパスワード/API トークンは、MCP ではないローカル CLI(fortinet-mcp-cred)を通じて、OS の認証情報ストア(Windows Credential Manager / macOS Keychain / Linux Secret Service)に直接プロビジョニングされます。MCP のツール面は不透明な credential_id のみを扱います。

  3. ポリシーの CRUD だけでなく、ライフサイクル全体をカバーします。 デバイスのブートストラップ(DNS/NTP/syslog/SNMP/admin/HA)、VDOM マルチテナンシー、インターフェース/ゾーン/DHCP、ルーティング、ファイアウォールポリシー、VPN(IPsec + SSL)、セキュリティ/コンプライアンス分析、ドキュメント生成はすべて第一級のツール名前空間です。完全な Tool Reference(115 ツール)を参照してください。

Related MCP server: FortiGate MCP Server

機能

ドメイン

内容

インベントリ & マルチテナンシー

ローカル SQLite ストア内の Customer -> Site -> Device -> VDOM 階層。デバイスは名前、サイト、顧客、または IP で解決します。プロンプトに IP を入力する必要はありません。

デバイスのブートストラップ

DNS、NTP、syslog、SNMP(sysinfo + v1/v2c コミュニティ)、グローバル設定(ホスト名/タイムゾーン/管理ポート)、ローカル管理者アカウント、HA -- デバイスを工場出荷時設定から本番運用可能な状態にするために必要なすべて。

VDOM ライフサイクル

VDOM の作成/削除、VDOM 間リンクの作成/削除。

ネットワークトポロジ

インターフェース(VLAN サブインターフェース、ループバック、vdom-link メンバー)、ゾーン、DHCP サーバー、静的ルート。

ファイアウォールと NAT

ポリシー、アドレス/サービスオブジェクト、仮想 IP -- 完全な CRUD。

VPN

ライブステータス付きの IPsec サイト間トンネル(phase1/phase2)、SSL VPN の可視性。

変更の安全性

READ_ONLY / SAFE / FULL の動作モード、すべての変更に対する preview -> apply -> rollback、適用時のドリフト検出。

分析とコンプライアンス

重複/シャドウ化/any-any ポリシー検出、未使用オブジェクト検出、サブネットの重複、ベストプラクティスチェック(ポリシー および システム設定)、ヒューリスティックな 0〜100 のセキュリティスコア、統合コンプライアンスレポート。

ドキュメント生成

トポロジ図(Mermaid/drawio/PlantUML)、ポリシー/ルーティング/VPN/システム設定の Markdown ドキュメント、統合エクスポート。

フリート運用

デバイスの比較、環境全体でのオブジェクト検索、オブジェクトの同期、設定の複製、フリート全体のレポート。

自然言語インテント

あいまいな名前を解決し、上記のプリミティブを合成する複合ツール(intent_create_policy、intent_explain_policy_failure、...)。

全 115 ツールの完全な生成済みリストについては、docs/TOOLS.md を参照してください。

クイックスタート

git clone https://github.com/Serrinho02/fortigate-mcp-server.git
cd fortigate-mcp-server
uv sync

最小限の config/config.json を作成します(後述のインベントリシステムを使用する場合、従来の単一ファイルのデバイスリストはオプションです -- Installation を参照)。

{ "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。

アーキテクチャ

7 つのレイヤー。依存関係は一方向のみです:

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 が唯一の拡張境界です。現在 FortiOSAdapter が唯一の実装ですが、別の Fortinet 製品を追加するには、同じ Protocol に対して新しいアダプターを 1 つ作成するだけです。そのレイヤーより上は何も変更されません。

動作モード

FORTINET_MCP_MODE で設定します(デフォルトは full):

モード

動作

read_only

変更のプレビューすら許可されません。

safe

削除操作は拒否されます。create/update は依然として preview -> apply が必要です。

full

すべての操作が許可されますが、それでも preview -> apply が必要です。どのモードでも一発で実行する高速パスはありません。

セキュリティモデル

  • デバイスの認証情報がツールの引数になることはなく、会話に登場することもありません。inventory_register_device_pending はメタデータ(ホスト、名前、顧客、サイト)のみを収集し、不透明な credential_id を発行します。実際のシークレットは、ローカルで fortinet-mcp-cred set <credential_id> により OS の認証情報ストアに直接 1 回だけ入力されます。

  • connection_connect およびライブセッションを必要とするツールは、その CLI 手順が完了するまで、明確な「credential not provisioned(認証情報がプロビジョニングされていません)」エラーで失敗します。シークレットが MCP を通じて流れるフォールバックパスはありません。

  • 文書化された例外が 2 つあり、どちらもツールの説明に直接明記されています。IPsec トンネルの PSK(vpn_create_ipsec_tunnel)とローカル管理者アカウントのパスワード(system_create_admin)は通常のツール引数です。なぜなら、FortiOS 自体が GET でこれらを返すことは決してないため、値が一度呼び出しを通過しなければプレビュー/差分を取る方法がないからです。

既知の制限事項

  • 宣言的な「この望ましい状態を適用する」ツールはありません。 設計上、このサーバーが Terraform/Ansible 風の適用エンジンを所有するのではなく、Claude 自身が粒度の細かいツールを組み立てます(パターンについては intent.* を参照)。

  • Docker + ヘッドレス Linux: 認証情報マネージャーは OS の keyring ライブラリをラップしています。Secret Service デーモンのないコンテナ/ヘッドレス Linux ホストでは、keyrings.cryptfile フォールバック(デフォルトでは有効化されていません)が必要です -- docs/INSTALLATION.md を参照してください。Windows/macOS/デスクトップ Linux へのネイティブインストールはそのまま動作します。

  • SNMP: v1/v2c コミュニティのみサポートされています。SNMPv3 ユーザーはまだありません。

  • FortiManager/FortiWeb/その他の Fortinet 製品アダプターはまだありません -- アダプター Protocol は対応していますが、FortiOS 以外の実装はありません。

  • モックされた FortiOS REST API に対して実際の HTTP トラフィックをキャプチャしてエンドツーエンドで検証済みです。実際のデバイスで問題が発生した場合は、FortiOS のバージョンとエンドポイントを添えて issue を開いてください。

テスト

uv run pytest

548 のテスト。外部依存関係は不要です(デバイスとのやり取りは、スイート全体で HTTP トランスポート層においてモックされています)。

貢献

Issue と PR を歓迎します。新しいリソースタイプを追加する場合は、VPN またはシステム設定ドメインがどのように追加されたかを参照してください(services/vpn_service.py、services/system_service.py、services/change_dispatch.py)。新しい変更リソースはすべて、同じ adapter -> change_dispatch -> service -> MCP tool パターンに従います。

作者

Nicola Serra によって構築・保守されています。

ライセンス

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