mcpField
L
LibreNMS MCP

LibreNMS MCP

ローカル
github.comクラウド・インフラ422 日前に更新

LibreNMS MCP について

LibreNMS MCP は、ネットワーク運用担当者や自動化システム向けに LibreNMS の照会・管理機能を提供する Python 製 MCP サーバーです。デバイス、ポート、アラート、ログ、ネットワーク状態を扱い、読み取り・書き込みと読み取り専用モードに対応します。

主な機能

  1. 01デバイス、ポート、インベントリの照会
  2. 02トポロジー、状態、メトリクスの確認
  3. 03アラート履歴とシステムログの取得
  4. 04デバイス、ポート、グループ、ルールの管理
  5. 05読み取り専用モードと一括操作
  6. 06ネットワークグラフを MCP 画像で返却

活用シーン

  1. 01デバイス状態、ポートトラフィック、アラートの調査
  2. 02MAC または IP による接続端末の検索
  3. 03ツールを使ったデバイスとアラート設定の管理
  4. 04MCP クライアントへの LibreNMS 監視データの提供

MCP 対応

LibreNMS の監視リソースと管理操作を MCP ツールとして公開し、デバイス、ポート、アラート、ログ、グラフなどを扱います。読み取り・書き込みに対応し、読み取り専用にも設定できます。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"mhajder-librenms": {
"command": "uvx",
"args": [
"librenms-mcp"
],
"env": {
"LIBRENMS_URL": "<LIBRENMS_URL>",
"LIBRENMS_TOKEN": "<LIBRENMS_TOKEN>",
"LIBRENMS_VERIFY_SSL": "<LIBRENMS_VERIFY_SSL>",
"LIBRENMS_TIMEOUT": "<LIBRENMS_TIMEOUT>",
"READ_ONLY_MODE": "<READ_ONLY_MODE>",
"DISABLED_TAGS": "<DISABLED_TAGS>",
"LOG_LEVEL": "<LOG_LEVEL>",
"RATE_LIMIT_ENABLED": "<RATE_LIMIT_ENABLED>",
"RATE_LIMIT_MAX_REQUESTS": "<RATE_LIMIT_MAX_REQUESTS>",
"RATE_LIMIT_WINDOW_MINUTES": "<RATE_LIMIT_WINDOW_MINUTES>",
"TOOL_SEARCH_ENABLED": "<TOOL_SEARCH_ENABLED>",
"TOOL_SEARCH_STRATEGY": "<TOOL_SEARCH_STRATEGY>",
"TOOL_SEARCH_MAX_RESULTS": "<TOOL_SEARCH_MAX_RESULTS>",
"MCP_HTTP_PORT": "<MCP_HTTP_PORT>",
"MCP_HTTP_BEARER_TOKEN": "<MCP_HTTP_BEARER_TOKEN>",
"MCP_TRANSPORT": "<MCP_TRANSPORT>",
"SENTRY_DSN": "<SENTRY_DSN>",
"SENTRY_TRACES_SAMPLE_RATE": "<SENTRY_TRACES_SAMPLE_RATE>",
"SENTRY_SEND_DEFAULT_PII": "<SENTRY_SEND_DEFAULT_PII>",
"SENTRY_ENVIRONMENT": "<SENTRY_ENVIRONMENT>",
"SENTRY_RELEASE": "<SENTRY_RELEASE>",
"SENTRY_PROFILE_SESSION_SAMPLE_RATE": "<SENTRY_PROFILE_SESSION_SAMPLE_RATE>",
"SENTRY_PROFILE_LIFECYCLE": "<SENTRY_PROFILE_LIFECYCLE>",
"SENTRY_ENABLE_LOGS": "<SENTRY_ENABLE_LOGS>"
}
}
}
}
起動コマンドuvx librenms-mcp
設定が必要な環境変数
LIBRENMS_URLLibreNMS instance URL (e.g., https://librenms.example.com)
LIBRENMS_TOKENシークレットLibreNMS API token with appropriate permissions
LIBRENMS_VERIFY_SSLVerify TLS certificates for LibreNMS requests (true/false)
LIBRENMS_TIMEOUTHTTP timeout for LibreNMS API requests in seconds
READ_ONLY_MODEEnable read-only mode to block write operations
DISABLED_TAGSComma-separated tool tags to disable (e.g., alerts,bills)
LOG_LEVELLogging level (DEBUG, INFO, WARNING, ERROR)
RATE_LIMIT_ENABLEDEnable per-client rate limiting (true/false)
RATE_LIMIT_MAX_REQUESTSMaximum requests allowed per rate-limit window
RATE_LIMIT_WINDOW_MINUTESRate-limit window duration in minutes
TOOL_SEARCH_ENABLEDEnable FastMCP tool search transform
TOOL_SEARCH_STRATEGYTool search strategy: 'bm25' (natural language) or 'regex' (pattern match)
TOOL_SEARCH_MAX_RESULTSMaximum number of tools returned by search_tools
MCP_HTTP_PORTPort for HTTP server (default: 8000)
MCP_HTTP_BEARER_TOKENシークレットOptional bearer token for HTTP transport authentication
MCP_TRANSPORTMCP transport type: stdio, sse, or http (alias: streamable-http). Unknown values stop the server at startup.
SENTRY_DSNシークレットSentry DSN for optional error tracking
SENTRY_TRACES_SAMPLE_RATESentry traces sample rate (0.0-1.0)
SENTRY_SEND_DEFAULT_PIIAllow Sentry to include default PII, including tool inputs and outputs, in events (true/false)
SENTRY_ENVIRONMENTSentry environment name (e.g., production)
SENTRY_RELEASESentry release identifier
SENTRY_PROFILE_SESSION_SAMPLE_RATESentry profile session sample rate (0.0-1.0)
SENTRY_PROFILE_LIFECYCLESentry profiling lifecycle mode
SENTRY_ENABLE_LOGSEnable Sentry log capture integration (true/false)

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
pypilibrenms-mcp1.12.0
ocighcr.io/mhajder/librenms-mcp:1.12.0

ツール

110

掲載時のツール一覧 · 2 週間前に更新

パラメーター型必須説明
limitintegerいいえ返す結果の最大数
orderanyいいえ出力の並べ替え方法。デフォルトはタイムスタンプの降順です。DESC または ASC を追加して順序を変更できます。任意。
stateanyいいえ状態でアラートを絞り込みます:0 = 正常、1 = アラート、2 = 確認済み。任意。
offsetintegerいいえページネーションでスキップする結果数(オフセット)
severityanyいいえ重大度でアラートを絞り込みます。有効な値:ok、warning、critical。任意。
alert_ruleanyいいえアラートルール ID でアラートを絞り込みます。任意。

詳細

LibreNMS MCP Server

AI エージェントが Model Context Protocol を通じて LibreNMS のネットワーク監視を照会・管理できるようにします

PyPI Python License

Pre-commit Checks Docker MCP Registry

インストール · ツール · 設定 · セキュリティ

LibreNMS MCP Server は、LibreNMS のネットワーク監視データと管理機能に対し、高度でプログラム可能なアクセスを提供するために設計された、Python ベースの Model Context Protocol(MCP)サーバーです。デバイス、ポート、アラート、インベントリ、ロケーション、ログなどの LibreNMS リソースを照会、自動化、統合するための最新の API を提供します。このサーバーは読み取り操作と書き込み操作の両方をサポートし、堅牢なセキュリティ機能を備え、自動化ツール、ダッシュボード、カスタムのネットワーク管理ワークフローとの統合に適しています。

✨ 機能

コア機能
  • 柔軟なフィルタリングを使用して LibreNMS のデバイス、ポート、インベントリ、ロケーション、ログ、アラートを照会
  • ネットワークトポロジ、デバイスのステータス、パフォーマンスメトリクスを取得
  • アラート履歴、イベントログ、システムの健全性にアクセスして分析
  • インターフェイスの統計情報、ポートのステータス、トラフィックデータを監視
  • MAC アドレスまたは IP アドレスでエンドポイントと接続デバイスを追跡
  • デバイスグループ、ポートグループ、ポーラーグループを取得・管理
  • ネットワークサービスとルーティングの詳細情報を取得
管理操作
  • デバイス、ポート、グループを作成、更新、削除(有効な場合)
  • アラートルール、通知、デバイスのメタデータを管理
  • 安全な監視のため、読み取り専用モードを設定してすべての書き込み操作を制限
  • デバイスとポートの一括操作をサポート
高度な機能
  • レート制限と API セキュリティ機能
  • リアルタイムのネットワーク監視と健全性の追跡
  • 包括的なロギングと監査証跡
  • SSL/TLS サポートと設定可能なタイムアウト
  • 大規模なツールカタログ向けのオプションのツール検索変換
  • カスタムミドルウェアとユーティリティで拡張可能

🚀 インストール

前提条件
  • Python 3.11 から 3.15
  • LibreNMS へのアクセス
  • 適切な権限を持つ有効な LibreNMS トークン
PyPI からのクイックインストール

最も簡単な開始方法は、PyPI からインストールすることです。

# Using UV (recommended)
uvx librenms-mcp

# Or using pip
pip install librenms-mcp

サーバーを実行する前に、LibreNMS インスタンスの環境変数を設定してください。

# Create environment configuration
export LIBRENMS_URL=https://domain.tld:8443
export LIBRENMS_TOKEN=your-librenms-token

詳細については、https://pypi.org/project/librenms-mcp/ をご覧ください。

ソースからインストール
  1. リポジトリをクローンします。
git clone https://github.com/mhajder/librenms-mcp.git
cd librenms-mcp
  1. 依存関係をインストールします。
# Using UV (recommended)
uv sync

# Or using pip
pip install -e .
  1. 環境変数を設定します。
cp .env.example .env
# Edit .env with your LibreNMS url and token
  1. サーバーを実行します。
# Using UV (recommended)
uv run librenms-mcp

# Or using the installed command directly
librenms-mcp
Docker の使用

簡単にデプロイできるよう、GitHub Packages で Docker イメージを利用できます。HTTP Streamable トランスポートをポート 8000(/mcp)で実行します。

docker pull ghcr.io/mhajder/librenms-mcp:latest
Open WebUI

Open WebUI 0.6.31 以降では、イメージに直接接続できます。独立した MCPO イメージ(ghcr.io/mhajder/librenms-mcpo)は、現在公開されていません。Open WebUI で、Admin Settings > Integrations > External Tool Servers に移動し、URL を http://<host>:8000/mcp に設定した MCP (Streamable HTTP) タイプの接続を追加して、Bearer 認証に MCP_HTTP_BEARER_TOKEN を設定します。

開発環境のセットアップ

追加のツールを使った開発の場合:

# Clone and install with development dependencies
git clone https://github.com/mhajder/librenms-mcp.git
cd librenms-mcp
uv sync --group dev

# Run tests
uv run pytest

# Run with coverage
uv run pytest --cov=src/

# Run linting and formatting
uv run ruff check .
uv run ruff format .

# Run type checking
uv run ty check .

# Setup pre-commit hooks
uv run prek install

🔧 設定

環境変数

ブール値の設定では、true/false、1/0、yes/no、on/off を大文字と小文字を区別せずに指定できます。これ以外の値を指定するとサーバーの起動が停止するため、入力ミスによって読み取り専用モードや TLS 検証が誤って無効になることはありません。例外として、SENTRY_SEND_DEFAULT_PII と SENTRY_ENABLE_LOGS については、SENTRY_DSN が設定されている場合に無効な値を指定するとエラーが記録され、Sentry はオフのままになりますが、サーバーは動作を続けます。

# LibreNMS Connection Details
LIBRENMS_URL=https://domain.tld:8443
LIBRENMS_TOKEN=your-librenms-token

# SSL Configuration
LIBRENMS_VERIFY_SSL=true
LIBRENMS_TIMEOUT=30

# Read-Only Mode
# Set READ_ONLY_MODE true to disable all write operations (put, post, delete)
READ_ONLY_MODE=false

# Disabled Tags
# Comma-separated list of tags to disable tools for (empty by default)
# Example: DISABLED_TAGS=alert,alert-rules,alert-templates,bills
DISABLED_TAGS=

# Logging Configuration
LOG_LEVEL=INFO

# Rate Limiting (requests per minute)
# Set RATE_LIMIT_ENABLED true to enable rate limiting
RATE_LIMIT_ENABLED=false
RATE_LIMIT_MAX_REQUESTS=100
RATE_LIMIT_WINDOW_MINUTES=1

# Tool Search Transform (Optional)
# Set TOOL_SEARCH_ENABLED true to replace full tool listings with search_tools + call_tool
TOOL_SEARCH_ENABLED=false
# Search strategy: bm25 (natural language) or regex (pattern match)
TOOL_SEARCH_STRATEGY=bm25
# Maximum number of tools returned by search_tools
TOOL_SEARCH_MAX_RESULTS=5

# Sentry Error Tracking (Optional)
# Set SENTRY_DSN to enable error tracking and performance monitoring
# SENTRY_DSN=https://[email protected]/6789
# Optional Sentry configuration
# SENTRY_TRACES_SAMPLE_RATE=1.0
# SENTRY_SEND_DEFAULT_PII=false
# SENTRY_ENVIRONMENT=production
# SENTRY_RELEASE=1.2.3
# SENTRY_PROFILE_SESSION_SAMPLE_RATE=1.0
# SENTRY_PROFILE_LIFECYCLE=trace
# SENTRY_ENABLE_LOGS=true

# MCP Transport Configuration
# Transport type: 'stdio' (default), 'sse' (Server-Sent Events), or 'http' (HTTP Streamable).
# 'streamable-http' is accepted as an alias for 'http'. Any other value stops the server at startup.
MCP_TRANSPORT=stdio

# HTTP Transport Settings (used when MCP_TRANSPORT=sse or MCP_TRANSPORT=http)
# Host to bind the HTTP server (default: 127.0.0.1)
# MCP_HTTP_HOST=127.0.0.1
# Port to bind the HTTP server (default: 8000)
# MCP_HTTP_PORT=8000
# Optional bearer token for authentication (leave empty for no auth)
# MCP_HTTP_BEARER_TOKEN=

🧰 利用可能なツール

デバイスとインベントリのツール
  • devices_list:すべてのデバイスを一覧表示します(任意のフィルターを指定できます)
  • device_get:指定したデバイスの詳細を取得します
  • device_add:新しいデバイスを追加します
  • device_update:デバイスのメタデータを更新します
  • device_delete:デバイスを削除します
  • device_ports:デバイスのすべてのポートを一覧表示します
  • device_ports_get:デバイスの指定したポートの詳細を取得します
  • device_fdb:デバイスの転送データベース(学習済み MAC アドレス)を一覧表示します
  • device_nac:デバイスのネットワークアクセス制御(802.1X/MAB)セッションを一覧表示します
  • device_availability:デバイスの可用性を取得します
  • device_outages:デバイスの障害情報を取得します
  • device_set_maintenance:デバイスをメンテナンスモードに設定します
  • device_discover:指定した認証情報を使ってデバイスを検出または追加します
  • device_rename:既存のデバイスの名前を変更します
  • device_maintenance_status:デバイスのメンテナンス状態を取得します
  • device_vlans:デバイスの VLAN を一覧表示します
  • device_links:デバイスのリンクを一覧表示します
  • device_wireless_sensors:ワイヤレスセンサー(周波数、クライアント数、RSSI など)の現在値を一覧表示します
  • device_parents_set:デバイスの依存関係の親を設定します(現在の設定を置き換えます)
  • device_parents_clear:デバイスの依存関係の親を削除します
  • 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_fdb:ポートで学習された MAC アドレスを一覧表示します
  • 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:ポートグループからポートを削除します
ポートセキュリティツール
  • port_security_list:すべてのデバイスのポートセキュリティ設定を一覧表示します
  • port_security_device:デバイスのポートセキュリティ設定を取得します
  • port_security_port:単一ポートのポートセキュリティ設定を取得します
グラフツール

グラフは MCP 画像として返されます。ツールは LibreNMS に PNG を要求します。これにより、Claude などの MCP クライアントで表示できます(LibreNMS のデフォルトの webui.graph_type である SVG は、多くの場合表示できません)。要求を無視する LibreNMS リリースでは、代わりに webui.graph_type 形式でレンダリングされます。MIME タイプはレスポンスから取得されます。

  • device_graphs_list:デバイスで利用可能なグラフの種類を一覧表示します
  • device_graph:デバイスレベルのグラフをレンダリングします(例:device_icmp_perf)
  • port_graph:インターフェース名でポートごとのグラフをレンダリングします(bits、upkts、nupkts、errors、etherlike。port_bits などの LibreNMS 名も使用できます)
  • port_group_graph:ポート ID で 1 つ以上のポートのトラフィックグラフをレンダリングします

スラッシュ(Te2/7)を含むインターフェース名はパーセントエンコードして送信されますが、一部のリバースプロキシでは、エンコードされたスラッシュが拒否されたり、デコードされたりします。その場合、port_graph(bits の場合)と device_ports_get は、代わりにポート ID で再試行するため、そのようなプロキシの背後でも動作します。認証エラーは再試行されません。また、スラッシュを含まない名前については、LibreNMS 自身の「見つかりません」という応答がそのまま報告されます(スラッシュを含む名前は、デコードするプロキシによって誤ったパスに対する LibreNMS の「見つかりません」に変わる可能性があるため、常に再試行されます)。

パスにスラッシュを含む値を指定するその他のツール(ports_search、ports_search_field、0.0.0.0/0 などのプレフィックスを指定する oxidized_config_search、ロケーション名)には、このようなフォールバックはありません。LibreNMS が Apache の背後にある場合は、すべてのツールが動作するよう、エンコードされたスラッシュを許可してください。

AllowEncodedSlashes NoDecode

LibreNMS から返されたものではない、エンコードされたスラッシュを含むパスに対する 400 または 404 のエラーには、ツールのエラーメッセージにこのヒントが含まれます。

アラートとログのツール
  • 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:アラートテンプレートを編集します
  • logs_eventlog:ホスト名が指定されている場合はそのデバイスのイベントログを、指定されていない場合はすべてのデバイスのイベントログを取得します
  • logs_syslog:ホスト名が指定されている場合はそのデバイスの 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:請求を削除します
Oxidized ツール
  • oxidized_list:設定バックアップ用に Oxidized が追跡しているデバイスを一覧表示します
  • oxidized_config_get:特定のデバイスの保存済み設定を取得します
  • oxidized_config_search:保存されているすべてのデバイス設定から文字列を検索します
ネットワークと監視ツール
  • 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)のエントリーを検索します

  • nac_list:すべてのデバイスにわたるネットワークアクセス制御(802.1X / MAB)セッションを一覧表示します

  • 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 のシステム情報を取得します。

  • 主要なすべてのリソース(デバイス、ポート、アラート、ログ、インベントリーなど)に対する柔軟なフィルタリングと検索

📄 ページネーションと件数制限のサポート

大規模な LibreNMS 本番インスタンスへのクエリーで LLM のコンテキストが過負荷にならないよう、すべての一覧、検索、ログツールがページネーションに対応しています。

主な機能
  • 適切なデフォルト値:すべての一覧ツールは、デフォルトで1 ページあたり 100 件の結果を返します。
  • 統一されたパラメーター:
    • limit:返す結果の最大数(デフォルトは 100、最小は 1)。
    • offset(ログツールでは start):スキップする結果の数。
  • ページネーションメタデータ:ページネーションされた各レスポンスには、次のメタデータフィールドが含まれます。
    • limit:適用中の上限。
    • offset(または start):適用中のオフセット。
    • count:現在のページで返された項目数。
    • total:利用可能な項目の合計数(ログツールでは、LibreNMS API が返した場合に提供されます)。

🚨 エラーレスポンス

JSON を返すすべてのツールは、エラーが LibreNMS によるものか、このサーバー内のチェックによるものか、タイムアウトなどの例外によるものかにかかわらず、LibreNMS 独自の形式で失敗を報告します。

{"status": "error", "message": "Device typo does not exist"}

status == "error" を確認してください。バージョン 1.11.3 以前では、例外は {"error": "..."} として返されていました。error キーを参照していたクライアントは更新が必要です。

🔒 セキュリティと安全機能

読み取り専用モード

サーバーは、安全な監視のためにすべての書き込み操作を無効にする読み取り専用モードに対応しています。

READ_ONLY_MODE=true
タグベースのツールフィルタリング

無効にするタグを設定すると、特定のカテゴリーのツールを無効にできます。

DISABLED_TAGS=alert,alert-rules,alert-templates,bills

ツールに付与されているタグのいずれかが無効になっていると、そのツールは非表示になります。また、複数のカテゴリータグを持つツールもあります。たとえば、port_graph には graphs と ports のタグが付いているため、DISABLED_TAGS=ports を設定すると port_graph も非表示になります。アラート関連機能は 3 つのタグに分かれています。alert(現在のアラート:一覧表示、確認、ミュート解除)、alert-rules、alert-templates です。アラート関連のすべてのツールを非表示にするには、3 つすべてを無効にしてください。

カテゴリーに加えて、read-only は読み取り専用モードでも利用可能なツールを示します。admin と global-read のタグは、以前の LibreNMS リリースが API ルートに使用していた権限グループ(can:admin、can:global-read)に対応しています。現在の LibreNMS はオブジェクトごとに権限を確認するため、この 2 つは、LibreNMS ユーザーが実行できる操作と厳密に一致するものではなく、大まかなカテゴリーとして扱ってください。

大規模なツールセットのツール検索

FastMCP のツール検索を使うと、多数のツールを持つサーバーでプロンプトのサイズを削減できます。 有効にすると、list_tools は次の 2 つの合成ツールを返します。

  • search_tools:一致するツールを検索し、完全なスキーマを返します
  • call_tool:名前を指定して、見つかった任意のツールを実行します

次のようにして有効にします。

TOOL_SEARCH_ENABLED=true
TOOL_SEARCH_STRATEGY=bm25    # bm25 or regex
TOOL_SEARCH_MAX_RESULTS=5    # optional, default is 5

bm25 は自然言語のクエリに対応し、regex は決定的なマッチングのために正規表現の pattern 入力を使用します。

ツール検索では、既存の可視性制御(読み取り専用モードと無効化されたタグ)が適用されます。

レート制限

サーバーは、API の使用量を制御し、不正使用を防ぐためのレート制限に対応しています。有効にすると、スライディングウィンドウアルゴリズムを使ってクライアントごとにリクエストを制限します。

.env ファイルに次の環境変数を設定すると、レート制限を有効にできます。

RATE_LIMIT_ENABLED=true
RATE_LIMIT_MAX_REQUESTS=100   # Maximum requests allowed per window
RATE_LIMIT_WINDOW_MINUTES=1   # Window size in minutes

RATE_LIMIT_ENABLED が true に設定されている場合、サーバーはレート制限ミドルウェアを適用します。環境に応じて RATE_LIMIT_MAX_REQUESTS と RATE_LIMIT_WINDOW_MINUTES を調整してください。

Sentry によるエラー追跡とモニタリング(任意)

サーバーは、エラー追跡、パフォーマンスのモニタリング、デバッグのために、任意で Sentry に対応しています。Sentry との統合は完全に任意で、設定されている場合にのみ初期化されます。

インストール

Sentry のモニタリングを有効にするには、任意の依存関係をインストールします。

# Using UV (recommended)
uv sync --extra sentry
設定

.env ファイルで SENTRY_DSN 環境変数を設定すると、Sentry を有効にできます。

# Required: Sentry DSN for your project
SENTRY_DSN=https://[email protected]/6789

# Optional: Performance monitoring sample rate (0.0-1.0, default: 1.0)
SENTRY_TRACES_SAMPLE_RATE=1.0

# Optional: Include personally identifiable information (default: false).
# When true, tool inputs and outputs (device configs, SNMP credentials) are sent to Sentry.
SENTRY_SEND_DEFAULT_PII=false

# Optional: Environment name (e.g., "production", "staging")
SENTRY_ENVIRONMENT=production

# Optional: Release version (auto-detected from package if not set)
SENTRY_RELEASE=1.2.2

# Optional: Profiling - continuous profiling sample rate (0.0-1.0, default: 1.0)
SENTRY_PROFILE_SESSION_SAMPLE_RATE=1.0

# Optional: Profiling - lifecycle mode for profiling (default: "trace")
# Options: "all", "continuation", "trace"
SENTRY_PROFILE_LIFECYCLE=trace

# Optional: Enable log capture as breadcrumbs and events (default: true)
SENTRY_ENABLE_LOGS=true
機能

有効にすると、Sentry は次の情報を自動的に収集します。

  • 例外とエラー:コンテキストを含む、処理されなかったすべての例外
  • パフォーマンス指標:リクエスト/レスポンスの時間とトレース
  • MCP との統合:MCP サーバーのアクティビティとインタラクションの詳細
  • ログとパンくずリスト:デバッグ用のアプリケーションログとイベント履歴
  • コンテキストデータ:環境、クライアント情報、リクエストパラメーター
Sentry DSN の取得
  1. sentry.io で無料アカウントを作成します
  2. 新しい Python プロジェクトを作成します
  3. プロジェクト設定から DSN をコピーします
  4. .env ファイルに設定します
Sentry の無効化

Sentry は完全に任意です。SENTRY_DSN を設定しなければ、サーバーは Sentry との統合なしで通常どおり動作し、モニタリングデータも収集されません。

SSL/TLS の設定

サーバーは、SSL 証明書の検証とカスタムタイムアウト設定に対応しています。

LIBRENMS_VERIFY_SSL=true    # Enable SSL certificate verification
LIBRENMS_TIMEOUT=30         # Connection timeout in seconds
トランスポートの設定

サーバーは、MCP プロトコル用の複数のトランスポート方式に対応しています。MCP_TRANSPORT では大文字と小文字が区別されず、streamable-http は http のエイリアスとして使用できます。それ以外の値を指定すると、STDIO に暗黙的にフォールバックするのではなく、エラーで起動が停止します。

STDIO トランスポート(デフォルト)

デフォルトのトランスポートでは、標準入力/標準出力を使って通信します。ローカルでの利用や、stdin/stdout 経由で通信するツールとの統合に適しています。

MCP_TRANSPORT=stdio
HTTP SSE トランスポート(Server-Sent Events)

ネットワーク経由でデプロイする場合は、Server-Sent Events を使った HTTP を利用できます。これにより、リアルタイムストリーミングを使って HTTP 経由で MCP サーバーにアクセスできます。

MCP_TRANSPORT=sse
MCP_HTTP_HOST=127.0.0.1        # Localhost
MCP_HTTP_PORT=8000           # Port to listen on
MCP_HTTP_BEARER_TOKEN=your-secret-token  # Optional authentication token

SSE トランスポートでベアラートークンを使用する場合、クライアントはリクエストにトークンを含める必要があります。

curl -H "Authorization: Bearer your-secret-token" http://localhost:8000/sse
HTTP Streamable トランスポート

HTTP Streamable トランスポートでは、リクエスト/レスポンスのストリーミングを使った HTTP 通信が可能です。ウェブ統合や HTTP エンドポイントを必要とするツールに適しています。

MCP_TRANSPORT=http
MCP_HTTP_HOST=127.0.0.1        # Localhost
MCP_HTTP_PORT=8000           # Port to listen on
MCP_HTTP_BEARER_TOKEN=your-secret-token  # Optional authentication token

Streamable トランスポートでベアラートークンを使用する場合:

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 形式が必要です。一部の操作では、サーバーのセッション初期化も必要になる場合があります。

ヘルスエンドポイント

どちらの HTTP トランスポート(sse と http)も GET /health を提供し、サーバーがリクエストを処理している場合は 200 ok を返します。ベアラートークンは不要で、LibreNMS に接続しないため、LibreNMS の停止によって MCP サーバーが異常と判定されることはありません。 Docker イメージの HEALTHCHECK はこのエンドポイントを使用します。

curl http://localhost:8000/health

FastMCP トランスポートの詳細については、FastMCP のドキュメントをご覧ください。

🤝 貢献

貢献を歓迎します。開発環境のセットアップ、チェック、コミットメッセージの形式についてはCONTRIBUTING.mdをご覧ください。バグや機能のリクエストには、issue テンプレートをご利用ください。

セキュリティ上の問題を見つけましたか?SECURITY.mdの説明に従って、非公開で報告してください。

📜 ライセンス

MIT License — 詳細についてはLICENSEをご覧ください。

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。