🚀 Zabbix MCP Server
Zabbix MCP Serverは、PythonベースのModel Context Protocol (MCP)サーバーです。Zabbixの監視データと管理機能に高度なプログラム可能なアクセスを提供するように設計されています。ホスト、テンプレート、トリガー、アイテム、問題、イベント、ユーザー、プロキシ、メンテナンス期間などのZabbixリソースのクエリ、自動化、統合のための最新のAPIを公開します。このサーバーは読み取りと書き込みの両方の操作をサポートし、堅牢なセキュリティ機能を備えており、AIアシスタント、自動化ツール、ダッシュボード、およびカスタム監視ワークフローとの統合に適しています。
🚀 クイックスタート
Zabbix MCP Serverは、Zabbixの監視データと管理機能に高度なアクセスを提供するPythonベースのサーバーです。以下の手順を参照して、サーバーをインストールし、設定してください。
✨ 主な機能
コア機能
- 柔軟なフィルタリングでZabbixのホスト、テンプレート、アイテム、トリガー、およびホストグループをクエリする
- 重大度フィルタリングで問題、イベント、およびアラートを取得する
- 監視アイテムの履歴とトレンドデータにアクセスする
- トリガーの状態と問題の重大度を監視する
- メンテナンス期間とスケジュールされたダウンタイムを管理する
- ユーザーマクロと構成データを取得する
- SLAとサービス情報を取得する
管理操作
- ホスト、テンプレート、およびホストグループを作成、更新、および削除する(有効にした場合)
- トリガー、アイテム、およびディスカバリルールを管理する
- メンテナンス期間とユーザーマクロを構成する
- 監視対象ホストでスクリプトを実行する
- イベントを承認し、問題を解決する
- ユーザーとプロキシを作成および管理する
- ホストとテンプレートの一括操作をサポートする
高度な機能
- レート制限とAPIセキュリティ機能
- 安全な監視のためにすべての書き込み操作を制限する読み取り専用モード
- HTTPトランスポートのためのベアラートークン認証
- 包括的なロギングと監査トレイル
- SSL/TLSサポートと構成可能なタイムアウト
- 複数のトランスポートオプション (STDIO、SSE、HTTP)
- エラートラッキングのためのオプションのSentry統合
📦 インストール
前提条件
- Python 3.11から3.14
- Zabbixサーバー (5.4+) へのアクセス
- 適切な権限を持つ有効なZabbix APIトークンまたはユーザー資格情報
PyPIからのクイックインストール
最も簡単な開始方法は、PyPIからインストールすることです。
uvx zabbix-mcp
pip install zabbix-mcp
サーバーを実行する前に、Zabbixインスタンスの環境変数を設定することを忘れないでください。
export ZABBIX_URL=https://zabbix.example.com/api_jsonrpc.php
export ZABBIX_TOKEN=your-zabbix-api-token
ソースからのインストール
- リポジトリをクローンする:
git clone https://github.com/mhajder/zabbix-mcp.git
cd zabbix-mcp
- 依存関係をインストールする:
uv sync
pip install -e .
- 環境変数を構成する:
cp .env.example .env
- サーバーを実行する:
uv run python run_server.py
python run_server.py
zabbix-mcp
Dockerを使用する
DockerイメージはGitHub Packagesで利用可能で、簡単にデプロイできます。
docker pull ghcr.io/mhajder/zabbix-mcp:latest
docker pull ghcr.io/mhajder/zabbix-mcpo:latest
開発環境のセットアップ
追加のツールを使用した開発のために:
git clone https://github.com/mhajder/zabbix-mcp.git
cd zabbix-mcp
uv sync --group dev
uv run pytest
uv run pytest --cov=src/
uv run ruff check .
uv run ruff format .
uv run pre-commit install
📚 ドキュメント
環境変数
# Zabbix接続詳細
ZABBIX_URL=https://zabbix.example.com/api_jsonrpc.php
# 認証 - トークンまたはユーザー/パスワードのいずれかを使用する
# APIトークン(Zabbix 5.4+で推奨)
ZABBIX_TOKEN=your-api-token
# またはユーザー名/パスワード(古いバージョン用)
# ZABBIX_USER=Admin
# ZABBIX_PASSWORD=zabbix
# SSL構成
ZABBIX_VERIFY_SSL=true
ZABBIX_TIMEOUT=30
ZABBIX_SKIP_VERSION_CHECK=false
# 読み取り専用モード
# READ_ONLY_MODEをtrueに設定して、すべての書き込み操作(作成、更新、削除)を無効にする
READ_ONLY_MODE=false
# 無効にするタグ
# ツールを無効にするタグのカンマ区切りリスト(デフォルトは空)
# 例: DISABLED_TAGS=host,user,maintenance
DISABLED_TAGS=
# ロギング構成
LOG_LEVEL=INFO
# レート制限
# RATE_LIMIT_ENABLEDをtrueに設定して、レート制限を有効にする
RATE_LIMIT_ENABLED=false
RATE_LIMIT_MAX_REQUESTS=60
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=
利用可能なツール
API情報
api_version: Zabbix APIのバージョン情報を取得する
ホスト管理
host_get: グループ、テンプレート、プロキシ、および検索条件でオプションのフィルタリングを行ってホストをリストする
host_create: インターフェイスとテンプレートのリンク付きで新しいホストを作成する
host_update: ホストのプロパティ(名前、ステータス、説明)を更新する
host_delete: IDでホストを削除する
ホストグループ管理
hostgroup_get: オプションのフィルタリングを行ってホストグループをリストする
hostgroup_create: 新しいホストグループを作成する
hostgroup_update: 既存のホストグループのプロパティ(名前)を更新する
hostgroup_delete: ホストグループを削除する
テンプレート管理
template_get: オプションのフィルタリングを行ってテンプレートをリストする
template_create: 新しいテンプレートを作成する
template_update: テンプレートのプロパティ(名前、説明)を更新する
template_delete: テンプレートを削除する
アイテム管理
item_get: ホスト、グループ、テンプレートでオプションのフィルタリングを行ってアイテムをリストする
item_create: ホスト上に新しいアイテムを作成する
item_update: アイテムのプロパティ(名前、遅延、単位、説明、ステータス)を更新する
item_delete: アイテムを削除する
トリガー管理
trigger_get: 重大度と状態のフィルタリングを行ってトリガーをリストする
trigger_create: 式付きで新しいトリガーを作成する
trigger_update: トリガーのプロパティ(説明、式、優先度、ステータス、コメント)を更新する
trigger_delete: トリガーを削除する
問題とイベント管理
problem_get: 重大度と時間のフィルタリングを行って現在の問題を取得する
event_get: 時間範囲のフィルタリングを行ってイベントを取得する
event_acknowledge: オプションのメッセージ付きでイベントを承認する
履歴とトレンド
history_get: アイテムの履歴データを取得する
trend_get: アイテムのトレンドデータを取得する
ユーザー管理
user_get: オプションのフィルタリングを行ってユーザーをリストする
user_create: 新しいユーザーを作成する
user_update: ユーザーのプロパティ(名前、姓、パスワード、タイプ)を更新する
user_delete: ユーザーを削除する
プロキシ管理
proxy_get: オプションのフィルタリングを行ってプロキシをリストする
proxy_create: 新しいプロキシを作成する
proxy_update: プロキシのプロパティ(名前、動作モード、説明)を更新する
proxy_delete: プロキシを削除する
メンテナンス管理
maintenance_get: メンテナンス期間をリストする
maintenance_create: 新しいメンテナンス期間を作成する
maintenance_update: メンテナンス期間のプロパティ(名前、時間、説明)を更新する
maintenance_delete: メンテナンス期間を削除する
アクションとメディア
action_get: アクション(トリガー、自動登録など)をリストする
mediatype_get: メディアタイプをリストする
グラフとディスカバリ
graph_get: オプションのフィルタリングを行ってグラフをリストする
discoveryrule_get: LLDディスカバリルールをリストする
drule_get: ネットワークディスカバリルールをリストする
itemprototype_get: ディスカバリルールからアイテムプロトタイプを取得する
SLAとサービス
sla_get: SLAをリストする
service_get: サービスをリストする
スクリプト
script_get: スクリプトをリストする
script_execute: ホスト上でスクリプトを実行する
ユーザーマクロ
usermacro_get: ユーザーマクロ(ホストとグローバル)をリストする
usermacro_create: ホストマクロを作成する
usermacro_delete: ホストマクロを削除する
構成管理
configuration_export: Zabbixの構成をJSONまたはXMLにエクスポートする
configuration_import: JSONまたはXMLからZabbixの構成をインポートする
🔧 技術詳細
セキュリティと安全機能
読み取り専用モード
サーバーは、安全な監視のためにすべての書き込み操作を無効にする読み取り専用モードをサポートしています。
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 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.3
# オプション: プロファイリング - 継続的なプロファイリングのサンプルレート(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証明書の検証とカスタムタイムアウト設定をサポートしています。
ZABBIX_VERIFY_SSL=true # SSL証明書の検証を有効にする
ZABBIX_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ファイルを参照してください。