Kibana MCP Server について
Kibana MCP Server は、MCP 互換クライアントが自然言語やプログラムからのリクエストで Kibana インスタンスを検索・管理できるようにする MCP サーバーです。コミュニティが保守しており、Elastic や MCP の公式製品ではありません。Elasticsearch MCP Server と組み合わせて使用できます。
主な機能
- 01Stdio と HTTP の2つのトランスポートモード
- 02API Key、Basic 認証、Cookie 認証
- 03保存オブジェクトの CRUD と一括操作
- 04依存関係分析とダッシュボードのヘルスチェック
- 05search_elasticsearch による読み取り専用の Query DSL 検索
活用シーン
- 01自然言語による Kibana のステータスやスペースの確認
- 02ダッシュボードや可視化オブジェクトの一括更新と整理
- 03変更前のダッシュボード健全性確認と削除影響の分析
- 04ログやトレースからエラーと関連イベントを検索
MCP 対応
このプロジェクトは MCP サーバーであり、保存オブジェクト管理、API エンドポイントの検索、Elasticsearch データ検索などの Kibana 向けツールとリソースを MCP クライアントに公開します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
npx -y @tocharianou/mcp-server-kibanaKIBANA_URLYour Kibana instance URL (e.g., http://localhost:5601)KIBANA_API_KEYシークレットKibana API key for authenticationKIBANA_USERNAMEKibana username for basic authenticationKIBANA_PASSWORDシークレットKibana password for basic authenticationMCP_TRANSPORTTransport mode selectionMCP_HTTP_PORTHTTP server portMCP_BEARER_TOKENシークレットBearer token required on /mcp requests (recommended for any non-localhost bind)ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ツール
16掲載時のツール一覧 · 3 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| space | string | いいえ | 対象の Kibana スペース(任意。デフォルトでは設定済みのスペースを使用します) |
詳細
Kibana MCP サーバー
MCP 互換クライアント(Claude Desktop など)が、自然言語またはプログラムによるリクエストを通じて Kibana インスタンスにアクセスできるようにする、Kibana MCP サーバーの実装です。
このプロジェクトは、Elastic の公式 Kibana API ドキュメントに基づいており、Elastic Stack 8.x の OpenAPI YAML 仕様を使用しています。詳細については、Kibana API ドキュメントをご覧ください。
このプロジェクトはコミュニティによって保守されており、Elastic または MCP の公式製品ではありません。
💡 関連プロジェクト: Elastic Stack を完全に統合するには、Elasticsearch MCP サーバーを組み合わせて、Elasticsearch のデータを直接操作してください。
🚀 インストール
# Global installation (recommended)
npm install -g @tocharianou/mcp-server-kibana
# Or use directly with npx
npx @tocharianou/mcp-server-kibana
ソースから
git clone https://github.com/TocharianOU/mcp-server-kibana.git
cd mcp-server-kibana
npm install && npm run build
🎯 クイックスタート
Claude Desktop との統合(推奨)
Claude Desktop の設定ファイルに追加します。
- MacOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"kibana": {
"command": "npx",
"args": ["@tocharianou/mcp-server-kibana"],
"env": {
"KIBANA_URL": "http://your-kibana-server:5601",
"KIBANA_API_KEY": "your-api-key",
"KIBANA_DEFAULT_SPACE": "default"
}
}
}
}
CLI を直接使用
# Using API Key (recommended)
KIBANA_URL=http://localhost:5601 \
KIBANA_API_KEY=your-api-key \
npx @tocharianou/mcp-server-kibana
# Using Basic Auth
KIBANA_URL=http://localhost:5601 \
KIBANA_USERNAME=your-username \
KIBANA_PASSWORD=your-password \
npx @tocharianou/mcp-server-kibana
# Using Cookie Auth
KIBANA_URL=http://localhost:5601 \
KIBANA_COOKIES="sid=xxx; security-session=yyy" \
npx @tocharianou/mcp-server-kibana
HTTP モード(リモートアクセス)
MCP_TRANSPORT=http \
MCP_HTTP_PORT=3000 \
KIBANA_URL=http://localhost:5601 \
KIBANA_API_KEY=your-api-key \
npx @tocharianou/mcp-server-kibana
アクセス先:http://localhost:3000/mcp
ヘルスチェック:http://localhost:3000/health
HTTP モードのセキュリティ保護。 /mcp 上のすべてのセッションは、サーバーの起動時に設定された Kibana 認証情報を使用するため、このエンドポイントは慎重に扱ってください。
- デフォルトでは、サーバーは
localhostのみでリッスンし、Hostヘッダーがループバック名ではないリクエストを拒否します(DNS リバインディング対策)。 - リモートクライアントからのアクセスを許可するには、
MCP_BEARER_TOKENを設定します。その場合、クライアントはすべての/mcpリクエストにAuthorization: Bearer <token>を含める必要があります。/healthは引き続き認証なしでアクセスできます。 MCP_BEARER_TOKENを設定せずに、ループバック以外のアドレス(MCP_HTTP_HOST=0.0.0.0)にバインドすると、起動時に警告がログに記録されます。このポートにアクセスできる人は誰でも、Kibana の認証情報を使用できます。- パブリックな
Hostヘッダーを localhost にバインドされたサーバーに転送するリバースプロキシの背後で使用する場合は、そのホスト名をMCP_ALLOWED_HOSTSに指定してください。
MCP_TRANSPORT=http \
MCP_HTTP_HOST=0.0.0.0 \
MCP_BEARER_TOKEN="$(openssl rand -hex 32)" \
KIBANA_URL=http://localhost:5601 \
KIBANA_API_KEY=your-api-key \
npx @tocharianou/mcp-server-kibana
✨ 特長
主な機能
- 2 種類のトランスポートモード:stdio(ローカル)と HTTP(リモートアクセス)
- 複数の認証方式:API キー、Basic 認証、Cookie ベース
- 複数スペースのサポート:エンタープライズに対応した Kibana スペース管理
- SSL/TLS のサポート:カスタム CA 証明書の設定
- セッション管理:HTTP モードで UUID を自動生成
- 動的な API 検出:公式 Kibana OpenAPI 仕様に基づく
保存済みオブジェクトの管理
- すべての Kibana 保存済みオブジェクトタイプに対する完全な CRUD 操作
- ページネーションに対応したインテリジェントな検索
- 効率的な一括更新のためのバルク操作
- 楽観的同時実行制御によるバージョン管理
- オブジェクト間の関係を管理する参照管理
🔧 設定
必須の変数
| 変数 | 説明 | 例 |
|---|---|---|
KIBANA_URL | Kibana サーバーのアドレス | http://localhost:5601 |
認証(いずれかの方式を選択)
| 変数 | 説明 | 優先度 |
|---|---|---|
KIBANA_API_KEY | API キー(Base64 エンコード済み) | 1 番目 |
KIBANA_USERNAME + KIBANA_PASSWORD | Basic 認証 | 2 番目 |
KIBANA_COOKIES | セッションクッキー | 3 番目 |
オプションの変数
| 変数 | 説明 | デフォルト |
|---|---|---|
KIBANA_DEFAULT_SPACE | デフォルトの Kibana スペース | default |
KIBANA_CA_CERT | CA 証明書のパス | - |
KIBANA_TIMEOUT | リクエストのタイムアウト(ms) | 60000 |
MCP_TRANSPORT | トランスポートモード | stdio |
MCP_HTTP_PORT | HTTP サーバーのポート | 3000 |
MCP_HTTP_HOST | HTTP サーバーのホスト | localhost |
MCP_BEARER_TOKEN | HTTP モード:/mcp で Authorization: Bearer <token> を必須にする | - |
MCP_ALLOWED_HOSTS | HTTP モード:Host ヘッダーで受け入れる追加のホスト名(カンマ区切り) | - |
NODE_TLS_REJECT_UNAUTHORIZED | SSL 検証を無効にする | 1 |
🛠️ 利用可能なツール
基本ツール
get_status- Kibana サーバーのステータスを取得execute_kb_api- カスタム Kibana API リクエストを実行search_elasticsearch- ユーザーの Elasticsearch インデックス権限の範囲内で、Kibana の検索 API を通じて Elasticsearch のドキュメントやログを検索get_available_spaces- 利用可能な Kibana スペースを一覧表示search_kibana_api_paths- API エンドポイントを検索list_all_kibana_api_paths- すべての API エンドポイントを一覧表示get_kibana_api_detail- API エンドポイントの詳細を取得
保存済みオブジェクトのツール
vl_search_saved_objects- 保存済みオブジェクトを検索(汎用)vl_get_saved_object- 単一の保存済みオブジェクトを取得vl_create_saved_object- 新しい保存済みオブジェクトを作成vl_update_saved_object- 単一の保存済みオブジェクトを更新vl_bulk_update_saved_objects- 一括更新操作vl_bulk_delete_saved_objects- 一括削除操作
サポート対象のオブジェクトタイプ: dashboard、visualization、index-pattern、search、config、lens、map、tag、canvas-workpad、canvas-element
分析ツール(v0.6.0+)
analyze_object_dependencies- 保存済みオブジェクトの依存関係を分析analyze_deletion_impact- 削除前に影響を確認check_dashboard_health- ダッシュボードの健全性を確認scan_all_dashboards_health- ダッシュボードの健全性を一括スキャン
Elasticsearch データ検索
Elasticsearch でドキュメント、アプリケーションログ、トレース、または集計を検索する必要がある場合は、search_elasticsearch を使用してください。このツールは Dev Tools Console のプロキシではなく、Kibana の /internal/search/es ルートを通じて Query DSL を送信します。
このツールは読み取り専用で、データへのアクセス範囲を広げません。Elasticsearch は各検索で、設定されたユーザーのインデックス権限を適用します。これは Discover やダッシュボードの場合と同じです。ユーザーが読み取れないインデックスからは結果が返されません。
Dev Tools Console のプロキシ(/api/console/proxy)には別個の Kibana 権限が必要です。Console からは書き込みや管理者向けのエンドポイントを含め、あらゆる Elasticsearch API を呼び出せるためです。このツールが用意されているのはそのためです。対象インデックスを読み取れるものの Dev Tools 権限を持たないユーザーは、Console プロキシから 403 を受け取ります。このツールを使えば、そのユーザーは検索を行えますが、それ以上の操作はできません。Kibana 管理者がアカウントから Dev Tools 権限を取り上げることでアドホッククエリを禁止している場合、このツールを使うと Query DSL 検索が可能になることにご注意ください。
範囲を限定したログ検索に使うツール引数の例:
{
"index": "application-logs-*",
"body": {
"size": 20,
"_source": [
"@timestamp",
"message",
"trace.id",
"service.name"
],
"sort": [
{ "@timestamp": "desc" }
],
"query": {
"bool": {
"filter": [
{
"range": {
"@timestamp": {
"gte": "2025-01-15T10:00:00Z",
"lt": "2025-01-15T11:00:00Z"
}
}
},
{
"term": {
"service.name.keyword": "example-service"
}
}
]
}
}
}
}
大量のログを扱う場合は、短い時間範囲と小さい size から始めてください。トレース ID または相関 ID が見つかったら、広い時間範囲を繰り返しスキャンするのではなく、その値を使って絞り込んだ検索をもう一度行います。_source を使って、現在の調査に必要なフィールドだけを含めてください。
このツールは、*、**、_all などのワイルドカードのみのインデックスセグメント(カンマ区切りのインデックス式に含まれる場合も含む)、空の検索ボディ、および 100 を超える body.size を拒否します。文字列の size 値は数値に変換され、検証されます。このエンドポイントは Kibana の内部 API であるため、Kibana のメジャーアップグレード後には互換性を確認してください。
📖 リソース
| リソース URI | 説明 |
|---|---|
kibana-api://paths | 利用可能なすべての API エンドポイントを一覧表示 |
kibana-api://paths?search=<keyword> | キーワードでエンドポイントを検索 |
kibana-api://path/{method}/{encoded_path} | 特定のエンドポイントの詳細を取得 |
💬 クエリの例
基本操作
- 「Kibana サーバーのステータスを教えてください」
- 「利用可能な Kibana スペースをすべて一覧表示してください」
- 「ダッシュボードに関連する API エンドポイントをすべて表示してください」
Elasticsearch とログ
- 「過去 1 時間にサービス X で発生したエラーについて、本番環境のログを検索してください」
- 「このトレース ID を検索し、前後のログイベントを時系列順に表示してください」
- 「この Elasticsearch Query DSL を使って、インデックス application-logs-* を検索してください」
- 「この期間のサービス別エラー件数を集計してください」
保存済みオブジェクト
- 「すべてのダッシュボードを検索してください」
- 「タイトルに『nginx』を含むビジュアライゼーションを検索してください」
- 「『Sales Overview』という名前の新しいダッシュボードを作成してください」
- 「ダッシュボード『my-dashboard-123』の説明を更新してください」
- 「IDを指定して複数のダッシュボードを削除してください」
ヘルスチェックと分析
- 「ダッシュボード『overview』のヘルス状態を確認してください」
- 「ビジュアライゼーション『viz-123』の依存関係を分析してください」
- 「すべてのダッシュボードをスキャンして、ヘルス上の問題を確認してください」
🐛 トラブルシューティング
接続の問題
- Kibana の URL にアクセスできることを確認してください
- 認証情報を確認してください
- SSL の問題がある場合:
NODE_TLS_REJECT_UNAUTHORIZED=0(注意して使用してください)
Claude Desktop の問題
- 設定を変更した後、Claude Desktop を再起動してください
- JSON 設定の構文を検証してください
- エラーがないか、コンソールログを確認してください
よくあるエラー
- 「import: command not found」:最新バージョンに更新してください
- 認証失敗:認証情報と権限を確認してください
- SSL エラー:CA 証明書を確認するか、SSL 検証を無効にしてください
- Elasticsearch の検索中に
/api/console/proxyから 403 が返される:search_elasticsearchを使用してください。対象のインデックスを読み取る権限があっても、Console プロキシの使用には Kibana Dev Tools 権限が必要な場合があります。
🔍 デバッグ
デバッグには MCP Inspector を使用してください。
npm run inspector
ブラウザーからアクセスできるデバッグインターフェースが表示されます。
📦 パッケージ情報
- NPM: @tocharianou/mcp-server-kibana
- GitHub:TocharianOU/mcp-server-kibana
- Node.js:>= 18.0.0
- ライセンス:Apache 2.0
🤝 コントリビューション
このプロジェクトはコミュニティによってメンテナンスされています。コントリビューションやフィードバックを歓迎します。
すべてのコミュニケーションにおいて、Elastic コミュニティ行動規範に従ってください。
📄 ライセンス
Apache License 2.0。詳細については LICENSE ファイルを参照してください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。
