mcpField
W
Wazuh MCP Server

Wazuh MCP Server

ローカル
github.com/gbrigandiセキュリティ24046 週間前に更新

Wazuh MCP Server について

Wazuh MCP Server は Rust で書かれたサーバーで、Claude Desktop などの AI アシスタントから Wazuh SIEM のデータを利用できるようにします。セキュリティチームはアラート、エージェント、脆弱性、コンプライアンスについて自然言語で問い合わせられます。

主な機能

  1. 01セキュリティアラートとイベントの検索
  2. 02エージェントの状態、プロセス、ポートの確認
  3. 03脆弱性と検知ルールの参照
  4. 04クラスターの状態とマネージャーログの分析
  5. 05PCI-DSS や HIPAA などのコンプライアンス確認

活用シーン

  1. 01Web サーバーの重大な脆弱性を抽出し修正の優先度を決める
  2. 02特定のエージェント上の実行中プロセスと開放ポートを調査する
  3. 03ログ記録が PCI-DSS の要件を満たすかを確認する

MCP 対応

本プロジェクトは MCP サーバーとして、Wazuh のアラート、エージェント、脆弱性、ルール、クラスターのデータをツールとして MCP クライアントに公開します。デフォルトは stdio で、http 機能を有効にすると HTTP でも動作します。

設定

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

mcp.json · 共通設定
{
"mcpServers": {
"wazuh": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"pull"
]
}
}
}
起動コマンドdocker run -i --rm pull

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

パッケージ
ocipull

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

Wazuh MCP Server - SIEM と対話

Wazuh Security Information and Event Management(SIEM)システムと、コンテキストに応じたセキュリティデータを必要とするアプリケーションとの橋渡しをするために設計された Rust ベースのサーバーです。Model Context Protocol(MCP)を使用した Claude Desktop との統合に特化しています。

概要

Claude のような最新の AI アシスタントは、ユーザーのセキュリティ環境に関するリアルタイムのコンテキストを活用できます。Wazuh MCP Server は、自然言語でのやり取りを通じて Wazuh SIEM データに包括的にアクセスできるようにし、このギャップを埋めます。

このサーバーは、複雑な Wazuh API の応答を MCP 互換形式に変換し、AI アシスタントが次の情報にアクセスできるようにします。

  • セキュリティアラートとイベント:脅威の検出とインシデント対応のための Wazuh Indexer のデータ
  • エージェントの管理と監視:健全性ステータス、システムプロセス、ネットワークポートなど
  • 脆弱性評価:リスク管理とパッチ適用の優先順位付けに役立つデータ
  • セキュリティルールと設定:検出の最適化とコンプライアンス検証のための情報
  • システム統計とパフォーマンス:運用監視と監査証跡のための指標
  • ログ分析とフォレンジック:インシデント調査とコンプライアンス報告のための機能
  • クラスターの健全性と管理:インフラストラクチャの信頼性と可用性要件への対応
  • コンプライアンス監視とギャップ分析:PCI-DSS、HIPAA、SOX、GDPR などの規制フレームワークへの対応

手動での API 呼び出しや複雑なクエリを必要とせず、セキュリティチームは「Web サーバーの重大な脆弱性を表示して」「エージェント 001 ではどのプロセスが実行中ですか?」「PCI-DSS のログ要件を満たしていますか?」といった自然言語の質問をして、Wazuh のデプロイ環境から構造化された実用的なデータを受け取れるようになります。

このアプローチは、セキュリティ態勢の迅速な評価、監視範囲のギャップの特定、ルールの有効性の検証、分散インフラストラクチャ全体における監査要件の証跡生成を必要とするコンプライアンスチームにとって、特に有用です。

README の画像

使用例

Wazuh MCP Server は、自然言語でのやり取りを通じて Wazuh のセキュリティデータに直接アクセスできるようにし、実用的なユースケースをいくつも実現します。

セキュリティアラートの分析
  • アラートのトリアージと調査: get_wazuh_alert_summary で最近のセキュリティアラートを照会し、早急な対応が必要な脅威をすばやく特定して優先順位を付けます。
  • アラートパターンの認識: アラートの傾向とパターンを分析し、繰り返し発生するセキュリティ問題や潜在的な攻撃キャンペーンを特定します。
脆弱性管理
  • エージェントの脆弱性評価: get_wazuh_vulnerability_summary と get_wazuh_critical_vulnerabilities を使用して、特定のエージェントのセキュリティ態勢を評価し、パッチ適用の優先順位を付けます。
  • リスクに基づく脆弱性の優先順位付け: 脆弱性データをエージェントの重要度や露出度と関連付け、修復作業の対象を絞り込みます。
システム監視とフォレンジック
  • プロセス分析: get_wazuh_agent_processes を使用してエージェント上で実行中のプロセスを調査し、脅威ハンティングとシステム分析に役立てます。
  • ネットワークセキュリティ評価: get_wazuh_agent_ports で開いているポートとネットワークサービスを監視し、潜在的な攻撃経路を特定します。
  • エージェントの健全性監視: get_wazuh_running_agents でエージェントのステータスと接続状態を追跡し、包括的なセキュリティ対策を維持します。
セキュリティ運用インテリジェンス
  • ルールの有効性分析: get_wazuh_rules_summary でセキュリティ検出ルールを確認、分析し、検出機能を最適化します。
  • マネージャーのパフォーマンス監視: get_wazuh_weekly_stats、get_wazuh_remoted_stats、get_wazuh_log_collector_stats などのツールで、システムのパフォーマンスと統計を追跡します。
  • クラスターの健全性管理: get_wazuh_cluster_health と get_wazuh_cluster_nodes で Wazuh クラスターのステータスを監視し、運用の信頼性を確保します。
インシデント対応とフォレンジック
  • ログ分析: インシデント調査のために、search_wazuh_manager_logs と get_wazuh_manager_error_logs を使用してマネージャーのログを検索、分析します。
  • エージェント固有の調査: 複数のツールを組み合わせて、セキュリティインシデント発生時に特定のエージェントの包括的なプロファイルを作成します。
  • 自然言語によるセキュリティクエリ: 複雑なセキュリティに関する質問を自然言語で行い、複数の Wazuh コンポーネントから構造化データを取得します。
運用効率
  • レポートの自動生成: 手動で API を呼び出すことなく、対話型インターフェースを通じてセキュリティレポートや要約を生成します。
  • コンポーネント横断分析: Wazuh Indexer(アラート)と Wazuh Manager(エージェント、ルール、脆弱性)の両方からのデータを関連付け、包括的なセキュリティ分析情報を取得します。
  • 多言語でのセキュリティ運用: グローバルなセキュリティチーム向けに、複数の言語で Wazuh のデータにアクセスし、分析情報を取得します。
脅威インテリジェンスの収集と対応

脅威インテリジェンスとインシデント対応の機能を強化するには、Wazuh MCP Server を補完的なセキュリティ MCP サーバーと組み合わせることができます。

サーバー説明
Cortex MCP Server140 以上のアナライザーによるアーティファクト分析と IOC のエンリッチメント
TheHive MCP Serverケース管理とインシデント対応のオーケストレーション
MISP MCP Server脅威インテリジェンスの共有と IOC の検索

Cortex 連携による機能強化:

  • アーティファクト分析: Wazuh のアラートで見つかった不審なファイル、URL、ドメイン、IP アドレスを、Cortex の 140 以上のアナライザーを使用して自動的に分析します
  • IOC のエンリッチメント: VirusTotal、Shodan、MISP など複数のソースからの脅威インテリジェンスを使用して、Wazuh のアラートに含まれる侵害の痕跡(IOC)をエンリッチメントします
  • 自動化された脅威ハンティング: Wazuh の検知機能と Cortex の分析エンジンを組み合わせて、脅威を自動的に調査し、分類します
  • 複数ソースのインテリジェンス: レピュテーションチェック、マルウェア分析、ドメイン分析、振る舞い分析にアナライザーを活用します
  • 対応のオーケストレーション: 分析結果を使用して、自動化された対応アクションとアラートの優先順位付けに役立てます

TheHive 連携による機能強化:

  • ケースの作成: Wazuh のアラートから TheHive にケースを自動作成し、体系的にインシデントを追跡します
  • アラートの関連付け: 関連する Wazuh のアラートを既存のケースに紐付け、包括的なインシデントのタイムラインを作成します
  • タスク管理: アラートの重大度と種類に基づいて調査タスクを作成し、追跡します
  • オブザーバブルの管理: ケースの調査で IOC を抽出し、オブザーバブルとして管理します
  • コラボレーション: Wazuh が検知したインシデントについて、セキュリティチームの連携を可能にします

MISP 連携による機能強化:

  • IOC の検索: Wazuh のアラートに含まれるインジケーターが、脅威インテリジェンスデータベースに登録されているかを確認します
  • 脅威コンテキスト: IOC のイベントコンテキスト、脅威アクターの帰属情報、MITRE ATT&CK のマッピングを取得します
  • 誤検知の削減: MISP の警告リストに照らして IOC を検証し、誤検知を減らします
  • 検知情報の追跡: 検知情報の履歴を記録して検索し、IOC の普及状況を評価します
  • ギャラクシーの探索: 脅威アクターのプロファイル、マルウェアファミリー、攻撃パターンにアクセスします

ワークフローの例:

  1. Wazuh がアラート内で不審なファイルハッシュまたはネットワーク接続を検知します
  2. AI アシスタントが MISP MCP Server に問い合わせ、IOC が脅威インテリジェンスで既知かどうかを確認します
  3. 未知の場合、Cortex MCP Server が複数のアナライザーを使用してアーティファクトを分析します
  4. VirusTotal、ハイブリッド分析、ドメインのレピュテーションなど、さまざまなソースからの結果を相関分析します
  5. 調査を追跡するため、TheHive MCP Server を介して TheHive にケースを作成します
  6. 統合されたインテリジェンスが、インシデント対応の判断に必要なコンテキストを提供します
  7. 調査結果を使用して Wazuh のルールを更新したり、追加の監視を開始したりできます

要件

  • MCP(Model Context Protocol)に対応した LLM クライアント(例:Claude Desktop)
  • API が有効化され、アクセス可能な Wazuh サーバー(v4.12 を推奨)が稼働していること。
  • (API を使用する場合)このサーバーと Wazuh API 間のネットワーク接続。

インストール

オプション 1:ビルド済みバイナリをダウンロードする(推奨)
  1. バイナリをダウンロードする:
    • mcp-server-wazuh GitHub リポジトリのリリースページにアクセスします。
    • お使いのオペレーティングシステムに適したバイナリ(例:mcp-server-wazuh-linux-amd64、mcp-server-wazuh-macos-amd64、mcp-server-wazuh-macos-arm64、mcp-server-wazuh-windows-amd64.exe)をダウンロードします。
    • ダウンロードしたバイナリを実行可能にします(例:chmod +x mcp-server-wazuh-linux-amd64)。
    • (任意)mcp-server-wazuhのような簡単な名前に変更し、アクセスしやすいようにシステムのPATHに含まれるディレクトリに移動します。
オプション 2:Docker
  1. Docker イメージを取得する:
    docker pull ghcr.io/gbrigandi/mcp-server-wazuh:latest
    
オプション 3:ソースからビルドする
  1. 前提条件:

  2. ビルドする:

    git clone https://github.com/gbrigandi/mcp-server-wazuh.git
    cd mcp-server-wazuh
    
    # stdio トランスポートのみでビルド(デフォルト)
    cargo build --release
    
    # HTTP トランスポートのサポートを有効にしてビルド
    cargo build --release --features http
    

    バイナリはtarget/release/mcp-server-wazuhで利用できます。

LLM クライアントを設定する

LLM クライアントの設定方法は、クライアントによって異なります。MCP(Model Context Protocol)をサポートするクライアントでは、通常、mcp-server-wazuh実行ファイルのパスをクライアントに指定する必要があります。

Claude Desktop の例:

claude_desktop_config.jsonファイルを設定します。

{
  "mcpServers": {
    "wazuh": {
      "command": "/path/to/mcp-server-wazuh",
      "args": [],
      "env": {
        "WAZUH_API_HOST": "your_wazuh_manager_api_host",
        "WAZUH_API_PORT": "55000",
        "WAZUH_API_USERNAME": "your_wazuh_api_user",
        "WAZUH_API_PASSWORD": "your_wazuh_api_password",
        "WAZUH_INDEXER_HOST": "your_wazuh_indexer_host",
        "WAZUH_INDEXER_PORT": "9200",
        "WAZUH_INDEXER_USERNAME": "your_wazuh_indexer_user",
        "WAZUH_INDEXER_PASSWORD": "your_wazuh_indexer_password",
        "WAZUH_VERIFY_SSL": "false",
        "WAZUH_TEST_PROTOCOL": "https",
        "RUST_LOG": "info"
      }
    }
  }
}

/path/to/mcp-server-wazuhをバイナリへの実際のパスに置き換え、設定セクションの説明に従って環境変数を設定します。

設定が完了すると、LLM クライアントからmcp-server-wazuhを起動して通信し、Wazuh のセキュリティデータにアクセスできるようになります。

Docker を使用する場合は、Wazuh の設定を記載した.envファイルを作成します。

WAZUH_API_HOST=your_wazuh_manager_api_host
WAZUH_API_PORT=55000
WAZUH_API_USERNAME=your_wazuh_api_user
WAZUH_API_PASSWORD=your_wazuh_api_password
WAZUH_INDEXER_HOST=your_wazuh_indexer_host
WAZUH_INDEXER_PORT=9200
WAZUH_INDEXER_USERNAME=your_wazuh_indexer_user
WAZUH_INDEXER_PASSWORD=your_wazuh_indexer_password
WAZUH_VERIFY_SSL=false
WAZUH_TEST_PROTOCOL=https
RUST_LOG=info

claude_desktop_config.jsonファイルを設定します。

{
  "mcpServers": {
    "wazuh": {
      "command": "docker",
      "args": [
        "run", "--rm", "-i",
        "--env-file", "/path/to/your/.env",
        "ghcr.io/gbrigandi/mcp-server-wazuh:latest"
      ]
    }
  }
}

設定

設定は環境変数で管理します。ローカル開発では、プロジェクトのルートに .env ファイルを配置できます。

変数説明デフォルト必須
WAZUH_API_HOSTWazuh Manager API サーバーのホスト名または IP アドレスです。localhostはい
WAZUH_API_PORTWazuh Manager API のポート番号です。55000はい
WAZUH_API_USERNAMEWazuh Manager API 認証用のユーザー名です。wazuhはい
WAZUH_API_PASSWORDWazuh Manager API 認証用のパスワードです。wazuhはい
WAZUH_INDEXER_HOSTWazuh Indexer API サーバーのホスト名または IP アドレスです。localhostはい
WAZUH_INDEXER_PORTWazuh Indexer API のポート番号です。9200はい
WAZUH_INDEXER_USERNAMEWazuh Indexer API 認証用のユーザー名です。adminはい
WAZUH_INDEXER_PASSWORDWazuh Indexer API 認証用のパスワードです。adminはい
WAZUH_VERIFY_SSLWazuh API および Indexer への接続で SSL 証明書を検証するには、true に設定します。falseいいえ
WAZUH_TEST_PROTOCOLWazuh 接続用のプロトコルです(例:「http」、「https」)。クライアントのデフォルト設定を上書きします。httpsいいえ
RUST_LOGログレベルです(例:info、debug、trace)。infoいいえ

WAZUH_VERIFY_SSL に関する注意: 本番環境では、WAZUH_VERIFY_SSL=true に設定し、Wazuh Manager API と Wazuh Indexer の両方への接続で証明書が適切に検証されるようにすることを強く推奨します。false に設定すると証明書の検証が無効になり、安全ではありません。 「必須:はい」は、サーバーが各 Wazuh コンポーネントに接続するうえで、これらの変数が不可欠であることを示します。デフォルト値は設定されていますが、本番環境やローカル以外の環境に適合する可能性は低いです。

ビルド

前提条件
ローカル開発
  1. リポジトリをクローンします:
    git clone https://github.com/gbrigandi/mcp-server-wazuh.git 
    cd mcp-server-wazuh
    
  2. 設定します(Wazuh API を使用する場合):
    • サンプル環境ファイルをコピーします:cp .env.example .env
    • .env ファイルを編集し、使用する Wazuh API の詳細(例:WAZUH_API_HOST、WAZUH_API_PORT)を設定します。
  3. ビルドします:
    # デフォルト機能でビルド(stdio トランスポートのみ)
    cargo build
    
    # HTTP トランスポートのサポートを有効にしてビルド
    cargo build --features http
    
  4. 実行します:
    # stdio トランスポートで実行(デフォルト)
    cargo run
    
    # HTTP トランスポートで実行(ビルド時に --features http が必要)
    cargo run --features http -- --transport http
    
    # または実行スクリプトを使用(stdio モードを設定する場合があります):
    # ./run.sh
    

トランスポートモード

Wazuh MCP サーバーは、MCP クライアントとの通信に2つのトランスポートモードをサポートしています。

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

stdio トランスポートはデフォルトのモードで、MCP クライアントがサーバーを子プロセスとして起動するローカル統合に適しています。通信には stdin/stdout を使用し、JSON-RPC 2.0 メッセージを送受信します。

# Run with stdio transport (default)
mcp-server-wazuh

# Explicit stdio transport
mcp-server-wazuh --transport stdio
ストリーミング可能な HTTP トランスポート

HTTP トランスポートを使用すると、リモートサーバーをデプロイし、MCP クライアントがネットワーク経由で接続できるようになります。このモードでは、Server-Sent Events(SSE)をサポートする MCP Streamable HTTP 仕様を実装しています。

# Run with HTTP transport on default address (127.0.0.1:8080)
mcp-server-wazuh --transport http

# Run with custom host and port
mcp-server-wazuh --transport http --host 0.0.0.0 --port 3000

HTTP トランスポートの機能:

  • すべての MCP 通信に使用する単一の /mcp エンドポイント
  • JSON-RPC メッセージを含む POST リクエスト
  • 応答のストリーミングに使用する Server-Sent Events(SSE)
  • MCP-Session-Id ヘッダーによるセッション管理
  • プロトコルバージョン:2025-06-18(rmcp 0.10 でサポートされる MCP 仕様)

セキュリティに関する注意: HTTP トランスポートはデフォルトで 127.0.0.1(ローカルホストのみ)にバインドされます。リモートアクセスのために 0.0.0.0 にバインドする場合は、適切なネットワークセキュリティ対策(ファイアウォールルール、TLS を使用するリバースプロキシなど)が確実に設定されていることを確認してください。

CLI 引数
引数説明デフォルト
--transportトランスポートモード:stdio または httpstdio
--hostHTTP サーバーのバインドアドレス(http トランスポートのみ)127.0.0.1
--portHTTP サーバーのポート(http トランスポートのみ)8080

アーキテクチャ

サーバーは rmcp フレームワーク(v0.10 以降)を使用して構築されており、MCP クライアント(Claude Desktop、IDE 拡張機能など)と Wazuh MCP Server 間の通信を仲介します。サーバーは stdio と Streamable HTTP の両方のトランスポートをサポートし、Wazuh Indexer および Wazuh Manager API と連携してセキュリティアラートなどのデータを取得します。

sequenceDiagram
    participant ClientApp as Client Application (e.g., IDE Extension / Claude Desktop)
    participant WazuhMCPServer as Wazuh MCP Server (this application)
    participant WazuhAPI as Wazuh API

    ClientApp->>+WazuhMCPServer: (stdio) MCP Initialize
    WazuhMCPServer-->>-ClientApp: (stdout) MCP Initialized
    
    ClientApp->>+WazuhMCPServer: (stdio) MCP Request (tools/list)
    WazuhMCPServer->>WazuhMCPServer: Parse MCP Request
    WazuhMCPServer->>WazuhMCPServer: Process internally
    WazuhMCPServer-->>-ClientApp: (stdout) MCP Response (available tools)
    
    ClientApp->>+WazuhMCPServer: (stdio) MCP Request (tools/call for wazuhAlerts)
    WazuhMCPServer->>WazuhMCPServer: Parse MCP Request
    WazuhMCPServer->>+WazuhAPI: Request Wazuh Alerts (with WAZUH_API_USERNAME, WAZUH_API_PASSWORD)
    WazuhAPI-->>-WazuhMCPServer: Wazuh Alert Data (JSON)
    WazuhMCPServer->>WazuhMCPServer: Transform Wazuh Alerts to MCP Format
    WazuhMCPServer-->>-ClientApp: (stdout) MCP Response (alerts)

データフロー(stdio を中心に説明):

  1. アプリケーション(IDE 拡張機能や CLI ツールなど)が、子プロセスとして Wazuh MCP Server を起動します。
  2. アプリケーションは、MCP 形式のリクエスト(コマンド)をサーバーの stdin に送信します。
  3. Wazuh MCP Server は、stdin からコマンドを読み取ります。
  4. 処理:
    • サーバーは MCP コマンドを解析します。
    • コマンドで Wazuh からのデータ取得が必要な場合(例:「最新のアラートを取得」):
      • サーバーは Wazuh API に接続します(必要に応じて、WAZUH_API_USERNAME、WAZUH_API_PASSWORD などの設定済み認証情報を使用して認証します)。
      • 必要なデータ(例:セキュリティアラート)を取得します。
      • サーバーの変換ロジックが各アラートを処理し、Wazuh のフィールドを MCP 形式に対応付けます。
    • コマンドが内部的なもの(例:MCP サーバー固有のステータス確認)である場合は、サーバーが直接処理します。
  5. サーバーは、MCP 形式の JSON 応答(変換済みアラート、コマンドの確認応答、エラーメッセージなど)を stdout 経由でアプリケーションに送信します。
  6. アプリケーションは、サーバーの stdout から MCP 応答を読み取り、処理します。

この stdio 通信により、子プロセスを管理できるローカル開発ツールやその他のアプリケーションと緊密に連携できます。ポーリングを希望するクライアント向けに、オプションの HTTP エンドポイント(/mcp)も利用できる場合があります。

サーバーは Model Context Protocol(MCP)に準拠し、JSON-RPC 2.0 メッセージを使用して stdin と stdout 経由で通信します。

通信フローの例:

  1. クライアントアプリケーション(IDE 拡張機能など)が mcp-server-wazuh プロセスを起動します。

  2. クライアントが initialize リクエストをサーバーの stdin に送信します:

    {
      "jsonrpc": "2.0",
      "id": 0,
      "method": "initialize",
      "params": {
        "protocolVersion": "2025-06-18",
        "capabilities": {
          "sampling": {},
          "roots": { "listChanged": true }
        },
        "clientInfo": {
          "name": "mcp-inspector",
          "version": "0.11.0"
        }
      }
    }
    
  3. サーバーはstdoutを介してinitializeレスポンスをクライアントに送信します:

    {
      "jsonrpc": "2.0",
      "id": 1,
      "result": {
        "protocolVersion": "2025-06-18",
        "capabilities": {
          "prompts": {},
          "resources": {},
          "tools": {}
        },
        "serverInfo": {
          "name": "mcp-server-wazuh",
          "version": "0.3.0"
        },
        "instructions": "This server provides tools to interact with a Wazuh SIEM instance for security monitoring and analysis.\nAvailable tools:\n- 'get_wazuh_alert_summary': Retrieves a summary of Wazuh security alerts. Optionally takes 'limit' parameter to control the number of alerts returned (defaults to 100)."
      }
    }
    
  4. クライアントはnotifications/initializedをサーバーのstdinに送信します: (これは通知のため、クライアントはidを省略します。)

    {
      "jsonrpc": "2.0",
      "method": "notifications/initialized"
    }
    
  5. クライアントはtools/listをサーバーのstdinに送信して、利用可能なツールをリクエストします:

    {
      "jsonrpc": "2.0",
      "id": 1,
      "method": "tools/list",
      "params": {}
    }
    
  6. サーバーはstdoutを介してツールの一覧をクライアントに返します:

    {
      "jsonrpc": "2.0",
      "id": 2,
      "result": {
        "tools": [
          {
            "name": "get_wazuh_alert_summary",
            "description": "Retrieves a summary of Wazuh security alerts. Returns formatted alert information including ID, timestamp, and description.",
            "inputSchema": {
              "$schema": "http://json-schema.org/draft-07/schema#",
              "properties": {
                "limit": {
                  "description": "Maximum number of alerts to retrieve (default: 100)",
                  "format": "uint32",
                  "minimum": 0.0,
                  "type": ["integer", "null"]
                }
              },
              "title": "GetAlertSummaryParams",
              "type": "object"
            }
          }
        ]
      }
    }
    
  7. クライアントはtools/callをサーバーのstdinに送信して、get_wazuh_alert_summaryツールを呼び出します:

    {
      "jsonrpc": "2.0",
      "id": 3,
      "method": "tools/call",
      "params": {
        "name": "get_wazuh_alert_summary",
        "arguments": {
          "limit": 5
        }
      }
    }
    
  8. サーバーはstdinでリクエストを受信し、get_wazuh_alert_summary呼び出しを処理します(Wazuh Indexer APIへのクエリとデータの変換を行います)。

  9. サーバーは整形したアラートを含むtools/callレスポンスをstdoutを介してクライアントに送信します:

    {
      "jsonrpc": "2.0",
      "id": 3,
      "result": {
        "content": [
          {
            "type": "text",
            "text": "Alert ID: 1747091815.1212763\nTime: 2024-01-15T10:30:45.123Z\nAgent: web-server-01\nLevel: 7\nDescription: Attached USB Storage"
          },
          {
            "type": "text", 
            "text": "Alert ID: 1747066333.1207112\nTime: 2024-01-15T10:25:12.456Z\nAgent: database-server\nLevel: 5\nDescription: New dpkg (Debian Package) installed."
          }
        ],
        "isError": false
      }
    }
    

    または、アラートが見つからない場合:

    {
      "jsonrpc": "2.0",
      "id": 3,
      "result": {
        "content": [
          {
            "type": "text",
            "text": "No Wazuh alerts found."
          }
        ],
        "isError": false
      }
    }
    

    または、Wazuhへの接続でエラーが発生した場合:

    {
      "jsonrpc": "2.0",
      "id": 3,
      "result": {
        "content": [
          {
            "type": "text",
            "text": "Error retrieving alerts from Wazuh: HTTP request error: connection refused"
          }
        ],
        "isError": true
      }
    }
    

開発とテスト

  • コードスタイル: 標準の Rust フォーマット(cargo fmt)を使用します。
  • リンティング: Clippy(cargo clippy)を使用します。
  • テスト: 変換ロジックの単体テストと統合テストが含まれています。stdio のテストでは、テストハーネスに入力と出力をパイプで渡す場合があります。HTTP のテストでは、Wazuh API のモックサーバー(httpmock)とテスト用 MCP クライアントを使用します。
    # すべてのテストを実行
    cargo test
    
    # 特定の統合テストを実行(HTTP テストの例)
    # cargo test --test integration_test
    
    # 詳細なログを表示してテストを実行
    RUST_LOG=debug cargo test
    
  • テストの実行方法とテストクライアント CLI の使用方法について詳しくは、tests/README.md を参照してください。

ライセンス

このプロジェクトは MIT License の下でライセンスされています。

コメント

MCP は初めてですか?

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

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