MCPサーバー
概要
Zabbix MCPサーバーは、AIエージェントがModel Context Protocol(MCP)を使用してZabbixと連携できるようにするプロセスです。 MCPサーバーは、MCPクライアントおよびZabbix APIと通信します。
MCPサーバーを使用すると、AIエージェントは次の操作を実行できます。
- ホストグループ、テンプレートグループ、ホスト、テンプレート、アイテム、LLDルール、インターフェース、マクロ、トリガー、障害、メンテナンス期間、およびアイテムの履歴データ(バイナリアイテムを除く)を取得する
- 障害を更新する: コメントの追加、認識または認識解除、深刻度の変更、抑制または抑制解除、障害のクローズ
- メンテナンス期間を作成、更新、削除する
認証にはZabbix APIトークンが使用され、トークンはすべてのリクエストに付加されます。アクセスはトークン所有者の権限によって制限されます。つまり、そのユーザーが利用できるホストグループのデータのみが表示され、ユーザーに実行権限のない操作は拒否されます。
MCPサーバーはステートレスです。リクエスト間でセッションは保持されません。
Zabbix MCPサーバーは、古いバージョンまたは新しいバージョンのZabbixでも動作する場合がありますが、互換性が公式にサポートされるのは、MCPサーバー自体と同じバージョンのZabbixのみです。
関連項目:
インストール
公式のzabbix-mcp-serverパッケージは、Zabbixリポジトリで提供されています。
Zabbix MCPサーバーをソースからインストールするには、makeでビルドします。
Zabbix MCPサーバーを設定するには、MCPサーバー設定ファイルのパラメータを更新します。
少なくともFrontendURLおよびAllowedIPパラメータを設定する必要があります。
デフォルトの設定ファイル(zabbix_mcp_server.conf)は/etc/zabbix/にあります。このファイルでは、機密データを公開する可能性が最も高いツールが拒否されます。ツールを有効にするには、対応するDenyTool行を削除します。
関連項目:セキュリティのベストプラクティス
実行
MCPサーバーを起動するには、次のコマンドを実行します。
zabbix_mcp_server -c /etc/zabbix/zabbix_mcp_server.conf
サーバーを起動せずに設定ファイルを確認して終了するには、-T オプションを使用します。
zabbix_mcp_server -c /etc/zabbix/zabbix_mcp_server.conf -T
次のコマンドラインオプションがサポートされています。
| オプション | 説明 |
|---|---|
-c <file> |
設定ファイルへのパス。 デフォルトは /etc/zabbix/zabbix_mcp_server.conf です。 |
-T |
設定ファイルを検証して終了します。 |
-h |
ヘルプ情報を表示します。 |
-V |
バージョン番号を表示します。 |
MCPサーバーをソースからインストールした場合は、systemdユニットを手動で作成する必要があります。例:
[Unit]
Description=Zabbix MCP server
After=network-online.target
[Service]
User=zabbix
ExecStart=/usr/local/sbin/zabbix_mcp_server -c /etc/zabbix/zabbix_mcp_server.conf
Restart=on-failure
[Install]
WantedBy=multi-user.target
MCPクライアントの接続
Streamable HTTPトランスポートをサポートするMCPクライアントは、MCPサーバーに接続できます。 以下の設定が必要です。
| 設定 | 値 |
|---|---|
| トランスポート | Streamable HTTP |
| URL | https://<host>:<ListenPort>/mcp |
| ヘッダー | Authorization: Bearer <Zabbix API token>(すべてのリクエストで送信) |
各ユーザーは、自分のAPIトークンを設定する必要があります。
設定を確認するには、MCPサーバーに1回リクエストを送信します。
curl -sS https://mcp.example.com:8443/mcp \
-H "Authorization: Bearer $ZABBIX_API_TOKEN" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'
HTTPステータスコード200とレスポンス内の利用可能なツールの一覧によって、MCPサーバーに到達でき、トークンが受け入れられたことを確認できます。この一覧には、公開されているツールが表示されます。
その他のステータスコードは、以下の問題を示します。
400-Acceptヘッダーに、トランスポートで必要な両方のメディアタイプが含まれていない。401- トークンを含むAuthorizationヘッダーがない。403- クライアントアドレスがAllowedIPパラメータに記載されていない。
承認とツールアクセス
MCPクライアントがフォームによる情報要求をサポートしている場合、すべての変更はZabbixに送信する前にユーザーの承認を受ける必要があります。 MCPクライアントは変更内容をユーザーに表示し、ユーザーが確認した場合にのみ変更が適用されます。ユーザーが要求を拒否または閉じた場合、Zabbixには何も変更されません。 承認の有効期間は5分間で、表示された変更内容と完全に一致する変更に対してのみ有効です。この期間内であれば、承認を再利用できます。
MCPクライアントがフォームによる情報要求をサポートしていない場合(URLによる情報要求のみをサポートするクライアントを含む)、変更は承認なしで直ちに適用されます。 この場合は、書き込みツールとZabbix APIの権限を制限してください。
監視対象システムからの信頼できないテキストがツールの出力に含まれ、エージェントに影響を与える可能性があるため、承認は特に重要です。
AllowTool、DenyTool、AllowToolRegexp、DenyToolRegexpを使用して、MCPサーバーが公開するツールを制御します。拒否されたツールは呼び出すことも一覧表示することもできず、関連付けられたリソースにもアクセスできません。
AllowTool、DenyTool、AllowToolRegexp、DenyToolRegexpのルールはMCPへのアクセスを制限しますが、Zabbixトークンの権限は変更しません。WebインターフェースのアドレスがAIエージェントに公開されている場合、エージェントは直接APIリクエストを送信しようとする可能性があります。リクエストがMCPサーバーとそのセキュリティ制御を経由するように、Zabbix Webインターフェースの場所とMCPサーバーの設定にエージェントがアクセスできないようにしてください。
セキュリティのベストプラクティス
APIトークン
認証と認可はすべて Zabbix によって処理されます。MCPクライアントは各リクエストに Zabbix APIトークンを付加して送信します。MCPサーバーはトークンを保存またはログに記録せずに転送し、Zabbixがトークンを検証し、権限を適用して、操作を監査ログに記録します。
エージェントとユーザーごとに、権限を最小限に設定し、有効期限を設けた個別のトークンを使用してください。トークンは安全な場所に保管し、APIトークンを定期的にローテーションしてください。
TLS暗号化
トークンが平文で送信されないようにするには、TLSAccept=cert を設定し、証明書とキー(TLSCertFile および TLSKeyFile)を指定するか、信頼できるTLS終端リバースプロキシの背後でMCPサーバーを実行し、TLSAccept=unencrypted を設定します。
暗号化されていないHTTPは、信頼できるネットワーク内でのみ使用できます。
アクセス制限
AllowedIP パラメータを信頼できる MCP クライアントのアドレスに制限し、Zabbix の権限を使用して API トークンで実行できる操作を制限してください。
MCP サーバーはリクエストのレート制限を提供しません。 通常、各 MCP リクエストは 1 回の Zabbix API 呼び出しになりますが、ループで実行されるエージェントによって大きな負荷が発生する可能性があります。
機密データの保護
アイテムキーには認証情報(SSH、JMX、ODBC、HTTPエージェントのアイテムなど)が含まれる場合があり、マクロの値にはパスワードやコミュニティ文字列が含まれる場合があります。また、インターフェースからは内部アドレスが明らかになり、ログまたはテキストアイテムの値にはあらゆるデータが含まれる可能性があります。
このため、item_get、lld_get、interface_get、macro_get、history_get ツールは、提供される設定ファイルではデフォルトで拒否されています。
接続されたエージェントのLLMプロバイダーに機密性の高いマクロ値が公開されるのを防ぐには、シークレットマクロを使用してください。シークレットマクロの値がAPIから返されることはありません。