🌐 Nornir MCP サーバー
NornirとNAPALMを活用したネットワーク自動化ツールを提供するFastMCPサーバー。
このサーバーはブリッジとして機能し、Nornir/NAPALM ネットワーク操作を MCP (大規模同時処理) ツールとして公開し、互換性のある MCP クライアント (FastMCP Web UI など) から簡単にアクセスできるようにします。
✨ 主な特徴
Nornir を活用して、ネットワーク デバイスに対する在庫管理と同時タスク実行を行います。
複数ベンダーのデバイス間の相互作用(情報収集、コマンド実行)に NAPALM を使用します。
さまざまなトランスポート (この構成では SSE) を使用して MCP クライアントとシームレスに統合できるように FastMCP を使用して構築されています。
セットアップとデプロイメントを簡単にするために、Docker 🐳 でコンテナ化されています。
コンテナ内の高速な Python 依存関係管理には
uvを使用します⚡。
Related MCP server: Cloudflare API MCP Server
🔧 前提条件
始める前に、以下がインストールされていることを確認してください。
Docker Compose (通常、Docker Desktop に含まれています)
⚙️ 構成
サーバーを実行する前に、ネットワーク インベントリとデバイスの資格情報を構成する必要があります。
プロジェクト内の
conf/ディレクトリに移動します。hosts.yaml。ネットワークデバイスを定義します。管理IP/ホスト名、プラットフォーム(例:ios、junos、eos)、認証情報(デフォルトを使用しない場合)を指定し、必要に応じてグループに割り当てます。groups.yaml: プラットフォームや接続オプションなどの共通プロパティを持つデバイスグループを定義します。ここでの設定はデフォルトを上書きできます。defaults.yaml。デフォルトの資格情報 (username、password) と接続オプション (有効なパスワードの NAPALMsecretやデフォルトのplatformなど) を設定します。⚠️ 重要なセキュリティ上の注意:ファイルに直接保存することを避けるため、Nornirの組み込みシークレット管理機能(環境変数、HashiCorp Vaultプラグインなど)の使用を強く検討してください。シークレットプロバイダーを実装する場合は、
nornir_ops.pyと設定を変更してください。
config.yaml。インベントリファイルのパス (host_file、group_file、defaults_file)conf/ディレクトリ内のファイルを正しく指していることを確認します (デフォルトでは正しく指しているはずです)。必要に応じて、ランナーオプション (num_workers) を調整します。
▶️ サーバーの実行
設定が完了したら、Docker Compose を使用してサーバーを簡単に実行できます。
上記の説明に従って
conf/ディレクトリが設定されていることを確認してください。プロジェクトのルート ディレクトリ (
Dockerfileおよびdocker-compose.ymlファイルと同じディレクトリ) でターミナルまたはコマンド プロンプトを開きます。次のコマンドを実行します。
docker-compose up --build -d--buildフラグは、初めてDockerfileに基づいてイメージをビルドするか、プロジェクト ファイル (.pyファイルやpyproject.tomlなど) が変更された場合に Docker Compose に指示します。このコマンドは、Docker コンテナ内で Nornir MCP サーバーを起動します。
サーバーログはターミナルに表示されます。デフォルトでは、ホストマシン(localhost)のポート
8000でアクセスできるはずです。サーバーを停止するには、
docker-compose実行中のターミナルでCtrl+Cを押します。その後コンテナを削除するには、docker-compose downを実行します。
🔌 MCPクライアントへの追加
このサーバーが提供するツールを MCP クライアント (公式のFastMCP Web UIやその他の互換性のあるクライアントなど) で使用するには:
Nornir MCP サーバーが実行されていることを確認します (
docker-compose upを使用)。MCP クライアント アプリケーションを開きます。
MCP サーバー接続を追加または管理するためのオプションを見つけます。
次の詳細を含む新しい接続を追加します。
サーバー URL : このサーバーは SSE (Server-Sent Events) トランスポートを使用し、デフォルトでポート 8000 で実行されるため、URL は次のようになります。
sse://localhost:8000(Docker ホストにクライアントからアクセスできる別の IP アドレスがある場合は、
接続名:
Nornir Lab Serverなどのわかりやすい名前を付けます。
保存して、新しく追加されたサーバーに接続します。
MCPクライアントは
Nornir_MCPサービスを検出し、利用可能なツール(get_facts、send_commandなど)をすべてリストします。これで、クライアントインターフェースからこれらのツールを使用できるようになりました!🎉
🛠️ 利用可能なツールとリソース
MCP クライアント経由で接続すると、通常、次のツール (「Nornir_MCP」サービス名の下) が利用できるようになります。
在庫:
list_all_hosts: Nornir インベントリ (conf/hosts.yaml) に設定されているデバイスを一覧表示します。
ナパームゲッター: (情報を取得)
get_factsget_interfacesget_interfaces_ipget_interfaces_countersget_config(retrieveオプション: 実行中、起動中、候補)get_arp_tableget_mac_address_tableget_usersget_vlansget_snmp_informationget_bgp_neighbors(利用可能かどうかはデバイス プラットフォームと NAPALM ドライバーのサポートによって異なります)
実行:
send_command: 単一の読み取り専用コマンドをデバイスに送信し、出力を取得します。
ストリーミングリソース:
sse://updates: シンプルなハートビート イベント ストリームを提供します。(SSE リソースをサポートするクライアントがサブスクライブできます)。
📄 ライセンス
このプロジェクトは MIT ライセンスに基づいてライセンスされています。
🙌 貢献
貢献、問題、機能リクエストを歓迎します。プロジェクトのリポジトリからお気軽にご提出ください。