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から返されることはありません。