🚀 LibreNMS MCP Server
LibreNMS MCP Serverは、PythonベースのModel Context Protocol (MCP)サーバーです。LibreNMSのネットワーク監視データと管理機能に高度でプログラム可能なアクセスを提供します。デバイス、ポート、アラート、在庫、場所、ログなどのLibreNMSリソースを照会、自動化、統合するための最新のAPIを公開しています。このサーバーは読み取りと書き込みの両方の操作をサポートし、強力なセキュリティ機能を備えており、自動化ツール、ダッシュボード、およびカスタムネットワーク管理ワークフローとの統合に適しています。
🚀 クイックスタート
LibreNMS MCP Serverは、Pythonベースのサーバーで、LibreNMSのネットワーク監視データと管理機能にアクセスするためのAPIを提供します。以下のセクションでは、このサーバーの機能、インストール方法、設定方法、利用可能なツール、セキュリティ機能、コントリビューション方法、およびライセンスについて説明します。
✨ 主な機能
コア機能
- 柔軟なフィルタリングを使用して、LibreNMSのデバイス、ポート、在庫、場所、ログ、およびアラートを照会します。
- ネットワークトポロジ、デバイスの状態、およびパフォーマンスメトリックを取得します。
- アラート履歴、イベントログ、およびシステムの健全性にアクセスし、分析します。
- インターフェイス統計、ポートの状態、およびトラフィックデータを監視します。
- MACまたはIPアドレスでエンドポイントと接続されたデバイスを追跡します。
- デバイスグループ、ポートグループ、およびポーラーグループを取得し、管理します。
- ネットワークサービスとルーティングに関する詳細情報を取得します。
管理操作
- デバイス、ポート、およびグループを作成、更新、および削除します(有効になっている場合)。
- アラートルール、通知、およびデバイスメタデータを管理します。
- 安全な監視のために、すべての書き込み操作を制限する読み取り専用モードを構成します。
- デバイスとポートの一括操作をサポートします。
高度な機能
- レート制限とAPIのセキュリティ機能。
- リアルタイムのネットワーク監視と健全性の追跡。
- 包括的なロギングと監査トレイル。
- SSL/TLSサポートと構成可能なタイムアウト。
- カスタムミドルウェアとユーティリティで拡張可能。
📦 インストール
前提条件
- Python 3.11から3.14
- LibreNMSへのアクセス
- 適切な権限を持つ有効なLibreNMSトークン
PyPIからのクイックインストール
最も簡単な方法は、PyPIからインストールすることです。
# UVを使用することをお勧めします
uvx librenms-mcp
# またはpipを使用する
pip install librenms-mcp
サーバーを実行する前に、LibreNMSインスタンスの環境変数を設定することを忘れないでください。
# 環境設定を作成する
export LIBRENMS_URL=https://domain.tld:8443
export LIBRENMS_TOKEN=your-librenms-token
詳細については、こちらを参照してください。
ソースからのインストール
- リポジトリをクローンします。
git clone https://github.com/mhajder/librenms-mcp.git
cd librenms-mcp
- 依存関係をインストールします。
# UVを使用することをお勧めします
uv sync
# またはpipを使用する
pip install -e .
- 環境変数を設定します。
cp .env.example .env
# .envをLibreNMSのURLとトークンで編集する
- サーバーを実行します。
# UVを使用する
uv run python run_server.py
# または直接Pythonで実行する
python run_server.py
# またはインストールされたスクリプトを使用する
librenms-mcp
Dockerを使用する
GitHub PackagesにDockerイメージが用意されており、簡単にデプロイできます。
# 通常のSTDIOイメージ
docker pull ghcr.io/mhajder/librenms-mcp:latest
# Open WebUIで使用するMCPOイメージ
docker pull ghcr.io/mhajder/librenms-mcpo:latest
開発環境のセットアップ
追加のツールを使用した開発のためには、以下の手順を実行します。
# 開発用の依存関係を含めてクローンし、インストールする
git clone https://github.com/mhajder/librenms-mcp.git
cd librenms-mcp
uv sync --group dev
# テストを実行する
uv run pytest
# カバレッジを含めて実行する
uv run pytest --cov=src/
# リンティングとフォーマットを実行する
uv run ruff check .
uv run ruff format .
# 型チェックを実行する
uv run ty check .
# プリコミットフックを設定する
uv run prek install
📚 ドキュメント
環境変数
# LibreNMS接続詳細
LIBRENMS_URL=https://domain.tld:8443
LIBRENMS_TOKEN=your-librenms-token
# SSL設定
LIBRENMS_VERIFY_SSL=true
LIBRENMS_TIMEOUT=30
# 読み取り専用モード
# READ_ONLY_MODEをtrueに設定すると、すべての書き込み操作(put、post、delete)が無効になります
READ_ONLY_MODE=false
# 無効にするタグ
# ツールを無効にするタグのカンマ区切りリスト(デフォルトは空)
# 例: DISABLED_TAGS=alert,bills
DISABLED_TAGS=
# ロギング設定
LOG_LEVEL=INFO
# レート制限(1分あたりのリクエスト数)
# RATE_LIMIT_ENABLEDをtrueに設定すると、レート制限が有効になります
RATE_LIMIT_ENABLED=false
RATE_LIMIT_MAX_REQUESTS=100
RATE_LIMIT_WINDOW_MINUTES=1
# Sentryエラートラッキング(オプション)
# SENTRY_DSNを設定すると、エラートラッキングとパフォーマンス監視が有効になります
# SENTRY_DSN=https://your-key@o12345.ingest.us.sentry.io/6789
# オプションのSentry設定
# SENTRY_TRACES_SAMPLE_RATE=1.0
# SENTRY_SEND_DEFAULT_PII=true
# SENTRY_ENVIRONMENT=production
# SENTRY_RELEASE=1.2.3
# SENTRY_PROFILE_SESSION_SAMPLE_RATE=1.0
# SENTRY_PROFILE_LIFECYCLE=trace
# SENTRY_ENABLE_LOGS=true
# MCPトランスポート設定
# トランスポートタイプ: 'stdio'(デフォルト)、'sse'(Server-Sent Events)、または'http'(HTTP Streamable)
MCP_TRANSPORT=stdio
# HTTPトランスポート設定(MCP_TRANSPORT=sseまたはMCP_TRANSPORT=httpの場合に使用)
# HTTPサーバーをバインドするホスト(デフォルト: すべてのインターフェイスに対して0.0.0.0)
MCP_HTTP_HOST=0.0.0.0
# HTTPサーバーをバインドするポート(デフォルト: 8000)
MCP_HTTP_PORT=8000
# オプションの認証用ベアラートークン(認証なしの場合は空)
MCP_HTTP_BEARER_TOKEN=
利用可能なツール
デバイスと在庫管理ツール
devices_list: すべてのデバイスをリストする(オプションのフィルター付き)device_get: 特定のデバイスの詳細を取得するdevice_add: 新しいデバイスを追加するdevice_update: デバイスのメタデータを更新するdevice_delete: デバイスを削除するdevice_ports: デバイスのすべてのポートをリストするdevice_ports_get: デバイスの特定のポートの詳細を取得するdevice_availability: デバイスの可用性を取得するdevice_outages: デバイスの停止情報を取得するdevice_set_maintenance: デバイスのメンテナンスモードを設定するdevice_discover: 提供された資格情報を使用してデバイスを検出または追加するdevice_rename: 既存のデバイスをリネームするdevice_maintenance_status: デバイスのメンテナンス状態を取得するdevice_vlans: デバイスのVLANをリストするdevice_links: デバイスのリンクをリストするdevice_eventlog_add: デバイスのイベントログエントリを追加するinventory_device: デバイスの在庫を取得するinventory_device_flat: デバイスのフラットな在庫を取得するdevicegroups_list: デバイスグループをリストするdevicegroup_add: デバイスグループを追加するdevicegroup_update: デバイスグループを更新するdevicegroup_delete: デバイスグループを削除するdevicegroup_devices: デバイスグループ内のデバイスをリストするdevicegroup_set_maintenance: デバイスグループのメンテナンスを設定するdevicegroup_add_devices: デバイスグループにデバイスを追加するdevicegroup_remove_devices: デバイスグループからデバイスを削除するlocations_list: すべての場所をリストするlocation_add: 場所を追加するlocation_edit: 場所を編集するlocation_delete: 場所を削除するlocation_get: 場所の詳細を取得するlocation_set_maintenance: 場所のメンテナンスを設定する
ポートとポートグループ管理ツール
ports_list: すべてのポートをリストする(オプションのフィルター付き)ports_search: ポートを検索する(一般的な検索)ports_search_field: 特定のフィールドでポートを検索するports_search_mac: MACアドレスでポートを検索するport_get: 特定のポートの詳細を取得するport_ip_info: ポートのIPアドレス情報を取得するport_transceiver: ポートのトランシーバ情報を取得するport_description_get: ポートの説明を取得するport_description_update: ポートの説明を更新するport_groups_list: ポートグループをリストするport_group_add: ポートグループを追加するport_group_list_ports: ポートグループ内のポートをリストするport_group_assign: ポートをポートグループに割り当てるport_group_remove: ポートをポートグループから削除する
アラートとロギングツール
alerts_get: 現在および過去のアラートをリストするalert_get_by_id: 特定のアラートの詳細を取得するalert_acknowledge: アラートを承認するalert_unmute: アラートのミュートを解除するalert_rules_list: アラートルールをリストするalert_rule_get: 特定のアラートルールの詳細を取得するalert_rule_add: アラートルールを追加するalert_rule_edit: アラートルールを編集するalert_rule_delete: アラートルールを削除するalert_templates_list: すべてのアラートテンプレートをリストするalert_template_get: 特定のアラートテンプレートを取得するalert_template_create: 新しいアラートテンプレートを作成するalert_template_edit: アラートテンプレートを編集するalert_template_delete: アラートテンプレートを削除するlogs_eventlog: デバイスのイベントログを取得するlogs_syslog: デバイスのsyslogを取得するlogs_alertlog: デバイスのアラートログを取得するlogs_authlog: デバイスの認証ログを取得するlogs_syslogsink: syslogシンクを追加する
課金ツール
bills_list: 請求書をリストするbill_get: 請求書の詳細を取得するbill_graph: 請求書のグラフを取得するbill_graph_data: 請求書のグラフデータを取得するbill_history: 請求書の履歴を取得するbill_history_graph: 請求書の履歴グラフを取得するbill_history_graph_data: 請求書の履歴グラフデータを取得するbill_create_or_update: 請求書を作成または更新するbill_delete: 請求書を削除する
ネットワークと監視ツール
arp_search: ARPエントリを検索するpoller_group_get: ポーラーグループを取得するrouting_ip_addresses: LibreNMSからすべてのIPアドレスをリストするservices_list: LibreNMSからすべてのサービスをリストするservices_for_device: LibreNMSからデバイスのサービスを取得するservice_add: LibreNMSにサービスを追加するservice_edit: 既存のサービスを編集するservice_delete: サービスを削除するbgp_sessions: BGPセッションをリストするbgp_session_get: 特定のBGPセッションの詳細を取得するbgp_session_edit: BGPセッションを編集するfdb_lookup: 転送データベース(FDB)エントリを検索するospf_list: OSPFインスタンスをリストするospf_ports: OSPFポートをリストするvrf_list: VRFをリストするping: LibreNMSシステムをpingするhealth_list: ヘルスセンサーをリストするhealth_by_type: タイプ別にヘルスセンサーをリストするhealth_sensor_get: ヘルスセンサーの詳細を取得するsensors_list: センサーをリストするswitching_vlans: LibreNMSからすべてのVLANをリストするswitching_links: LibreNMSからすべてのリンクをリストするsystem_info: LibreNMSからシステム情報を取得する
一般的なクエリツール
- すべての主要なリソース(デバイス、ポート、アラート、ログ、在庫など)に対する柔軟なフィルタリングと検索。
🔧 技術詳細
セキュリティと安全機能
読み取り専用モード
サーバーは、安全な監視のためにすべての書き込み操作を無効にする読み取り専用モードをサポートしています。
READ_ONLY_MODE=true
タグベースのツールフィルタリング
無効にするタグを設定することで、特定のカテゴリのツールを無効にすることができます。
DISABLED_TAGS=alert,bills
レート制限
サーバーは、APIの使用を制御し、乱用を防止するためのレート制限をサポートしています。有効にすると、スライディングウィンドウアルゴリズムを使用してクライアントごとにリクエストが制限されます。
.envファイルで以下の環境変数を設定することで、レート制限を有効にします。
RATE_LIMIT_ENABLED=true
RATE_LIMIT_MAX_REQUESTS=100 # ウィンドウごとに許可される最大リクエスト数
RATE_LIMIT_WINDOW_MINUTES=1 # ウィンドウサイズ(分)
RATE_LIMIT_ENABLEDがtrueに設定されている場合、サーバーはレート制限ミドルウェアを適用します。RATE_LIMIT_MAX_REQUESTSとRATE_LIMIT_WINDOW_MINUTESを環境に合わせて調整してください。
Sentryエラートラッキングと監視(オプション)
サーバーは、エラートラッキング、パフォーマンス監視、およびデバッグのためにSentryをオプションでサポートしています。Sentryの統合は完全にオプションであり、構成された場合のみ初期化されます。
インストール
Sentry監視を有効にするには、オプションの依存関係をインストールします。
# UVを使用することをお勧めします
uv sync --extra sentry
設定
.envファイルでSENTRY_DSN環境変数を設定することで、Sentryを有効にします。
# 必須: プロジェクトのSentry DSN
SENTRY_DSN=https://your-key@o12345.ingest.us.sentry.io/6789
# オプション: パフォーマンス監視のサンプルレート(0.0 - 1.0、デフォルト: 1.0)
SENTRY_TRACES_SAMPLE_RATE=1.0
# オプション: 個人情報を含める(デフォルト: true)
SENTRY_SEND_DEFAULT_PII=true
# オプション: 環境名(例: "production", "staging")
SENTRY_ENVIRONMENT=production
# オプション: リリースバージョン(設定されていない場合はパッケージから自動検出)
SENTRY_RELEASE=1.2.2
# オプション: プロファイリング - 継続的なプロファイリングのサンプルレート(0.0 - 1.0、デフォルト: 1.0)
SENTRY_PROFILE_SESSION_SAMPLE_RATE=1.0
# オプション: プロファイリング - プロファイリングのライフサイクルモード(デフォルト: "trace")
# オプション: "all", "continuation", "trace"
SENTRY_PROFILE_LIFECYCLE=trace
# オプション: ログキャプチャをパンくずリストとイベントとして有効にする(デフォルト: true)
SENTRY_ENABLE_LOGS=true
機能
有効にすると、Sentryは自動的に以下をキャプチャします。
- 例外とエラー: 完全なコンテキストを持つすべての未処理の例外
- パフォーマンスメトリック: リクエスト/レスポンス時間とトレース
- MCP統合: 詳細なMCPサーバーのアクティビティとインタラクション
- ログとパンくずリスト: デバッグ用のアプリケーションログとイベントトレイル
- コンテキストデータ: 環境、クライアント情報、およびリクエストパラメータ
Sentry DSNの取得方法
- sentry.ioで無料アカウントを作成します。
- 新しいPythonプロジェクトを作成します。
- プロジェクト設定からDSNをコピーします。
.envファイルに設定します。
Sentryの無効化
Sentryは完全にオプションです。SENTRY_DSNを設定しない場合、サーバーはSentry統合なしで正常に実行され、監視データは収集されません。
SSL/TLS設定
サーバーは、SSL証明書の検証とカスタムタイムアウト設定をサポートしています。
LIBRENMS_VERIFY_SSL=true # SSL証明書の検証を有効にする
LIBRENMS_TIMEOUT=30 # 接続タイムアウト(秒)
トランスポート設定
サーバーは、MCPプロトコルの複数のトランスポートメカニズムをサポートしています。
STDIOトランスポート(デフォルト)
デフォルトのトランスポートは、標準入出力を使用して通信します。これは、ローカルでの使用やstdin/stdoutを介して通信するツールとの統合に最適です。
MCP_TRANSPORT=stdio
HTTP SSEトランスポート(Server-Sent Events)
ネットワークベースのデプロイメントでは、Server-Sent Eventsを使用したHTTPを利用できます。これにより、MCPサーバーをHTTP経由でリアルタイムストリーミングでアクセスできます。
MCP_TRANSPORT=sse
MCP_HTTP_HOST=0.0.0.0 # すべてのインターフェイスにバインドする(または特定のIP)
MCP_HTTP_PORT=8000 # リッスンするポート
MCP_HTTP_BEARER_TOKEN=your-secret-token # オプションの認証トークン
ベアラートークンを使用したSSEトランスポートを使用する場合、クライアントはリクエストにトークンを含める必要があります。
curl -H "Authorization: Bearer your-secret-token" http://localhost:8000/sse
HTTP Streamableトランスポート
HTTP Streamableトランスポートは、リクエスト/レスポンスのストリーミングを伴うHTTPベースの通信を提供します。これは、Web統合やHTTPエンドポイントを必要とするツールに最適です。
MCP_TRANSPORT=http
MCP_HTTP_HOST=0.0.0.0 # すべてのインターフェイスにバインドする(または特定のIP)
MCP_HTTP_PORT=8000 # リッスンするポート
MCP_HTTP_BEARER_TOKEN=your-secret-token # オプションの認証トークン
ストリーマブルトランスポートとベアラートークンを使用する場合:
curl -H "Authorization: Bearer your-secret-token" \
-H "Accept: application/json, text/event-stream" \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}' \
http://localhost:8000/mcp
注: HTTPトランスポートでは、jsonrpcとidフィールドを含む適切なJSON-RPC形式が必要です。また、サーバーは一部の操作にセッションの初期化を要求する場合があります。
FastMCPトランスポートの詳細については、FastMCPドキュメントを参照してください。
🤝 コントリビュート方法
- リポジトリをフォークします。
- 機能ブランチを作成します(
git checkout -b feature/amazing-feature)。 - 変更を加えます。
- テストを実行し、コードの品質を確保します(
uv run pytest && uv run ruff check .)。 - 変更をコミットします(
git commit -m 'Add amazing feature')。 - ブランチにプッシュします(
git push origin feature/amazing-feature)。 - プルリクエストを開きます。
📄 ライセンス
このプロジェクトはMITライセンスの下で公開されています。詳細については、LICENSEファイルを参照してください。













