🚀 Easysearch MCP Server
AIエージェントがINFINI Easysearch(Elasticsearch/OpenSearch APIと互換性があります)を操作できるようにするMCPサーバーです。
✨ 主な機能
- 🔧 121個のツール - クラスター、インデックス、ドキュメント、検索、監視などのすべての機能を網羅
- 🔌 即座に使用可能 - Kiro、Claude DesktopなどのMCPクライアントをサポート
- 🔒 安全な接続 - HTTPSと基本認証をサポート
- ⚡ 高性能 - httpx非同期HTTPクライアントをベースに構築
📦 インストール
git clone https://github.com/cloudsmithy/easysearch-mcp-server.git
cd easysearch-mcp-server
pip install -e .
🚀 クイックスタート
1. MCPクライアントを設定
Kiro (.kiro/settings/mcp.json):
{
"mcpServers": {
"easysearch": {
"command": "python3",
"args": ["-m", "easysearch_mcp.server"],
"cwd": "/path/to/easysearch-mcp-server/src",
"env": {
"EASYSEARCH_URL": "https://localhost:9200",
"EASYSEARCH_USER": "admin",
"EASYSEARCH_PASSWORD": "your-password",
"PYTHONPATH": "/path/to/easysearch-mcp-server/src"
}
}
}
}
Claude Desktop (claude_desktop_config.json):
{
"mcpServers": {
"easysearch": {
"command": "python3",
"args": ["-m", "easysearch_mcp.server"],
"cwd": "/path/to/easysearch-mcp-server/src",
"env": {
"EASYSEARCH_URL": "https://localhost:9200",
"EASYSEARCH_USER": "admin",
"EASYSEARCH_PASSWORD": "your-password",
"PYTHONPATH": "/path/to/easysearch-mcp-server/src"
}
}
}
}
⚠️ 重要提示
/path/to/easysearch-mcp-server を実際のプロジェクトパスに置き換えてください。
2. 使用を開始
設定が完了すると、AIエージェントはEasysearchを直接操作できます。
- "クラスターの健康状態を確認する"
- "productsインデックスを作成する"
- "価格が100を超える商品を検索する"
- "各カテゴリの注文数を集計する"
📚 ツールリスト
クラスター管理 (8)
| ツール |
説明 |
cluster_health |
クラスターの健康状態 |
cluster_stats |
クラスターの統計情報 |
cluster_state |
クラスターの状態詳細 |
cluster_settings |
クラスターの設定を取得 |
cluster_update_settings |
クラスターの設定を更新 |
cluster_pending_tasks |
保留中のタスク |
cluster_allocation_explain |
シャードの割り当てを説明 |
cluster_reroute |
シャードを手動でルーティング |
インデックス管理 (25)
| ツール |
説明 |
index_create |
インデックスを作成 |
index_delete |
インデックスを削除 |
index_exists |
インデックスが存在するか確認 |
index_get |
インデックスの詳細を取得 |
index_get_mapping |
マッピングを取得 |
index_put_mapping |
マッピングを更新 |
index_get_settings |
設定を取得 |
index_put_settings |
設定を更新 |
index_open |
インデックスを開く |
index_close |
インデックスを閉じる |
index_refresh |
インデックスをリフレッシュ |
index_flush |
データをディスクに書き込む |
index_forcemerge |
セグメントを強制的にマージ |
index_clear_cache |
キャッシュをクリア |
index_stats |
インデックスの統計情報 |
index_segments |
セグメント情報 |
index_recovery |
回復状態 |
index_shard_stores |
シャードのストア情報 |
index_set_readonly |
読み取り専用に設定(clone/split/shrinkの前提条件) |
index_prepare_for_shrink |
縮小の準備をする(shrinkの前提条件) |
index_create_with_write_alias |
書き込み可能なエイリアス付きのインデックスを作成(rolloverの前提条件) |
index_clone |
インデックスをクローン |
index_split |
インデックスを分割 |
index_shrink |
インデックスを縮小 |
index_rollover |
インデックスをロールオーバー |
エイリアス管理 (4)
| ツール |
説明 |
alias_get |
エイリアスを取得 |
alias_create |
エイリアスを作成 |
alias_delete |
エイリアスを削除 |
alias_actions |
エイリアスの一括操作 |
テンプレート管理 (3)
| ツール |
説明 |
template_get |
テンプレートを取得 |
template_create |
テンプレートを作成 |
template_delete |
テンプレートを削除 |
ドキュメント操作 (11)
| ツール |
説明 |
doc_index |
ドキュメントを書き込む |
doc_get |
ドキュメントを取得 |
doc_exists |
ドキュメントが存在するか確認 |
doc_delete |
ドキュメントを削除 |
doc_update |
ドキュメントを更新 |
doc_bulk |
一括操作 |
doc_bulk_simple |
簡易的な一括書き込み |
doc_mget |
一括取得 |
doc_source |
ドキュメントのソースを取得 |
doc_delete_by_query |
クエリに基づいてドキュメントを削除 |
doc_update_by_query |
クエリに基づいてドキュメントを更新 |
検索機能 (15)
| ツール |
説明 |
search |
DSL検索 |
search_simple |
簡易キーワード検索 |
search_template |
テンプレート検索 |
msearch |
多重検索 |
count |
ドキュメントの数をカウント |
validate_query |
クエリを検証 |
explain |
スコアを説明 |
aggregate |
集約クエリ |
aggregate_simple |
簡易集約 |
scroll_start |
スクロール検索を開始 |
scroll_next |
次のバッチを取得 |
scroll_clear |
スクロールコンテキストをクリア |
field_caps |
フィールドの機能 |
knn_search |
ベクトル検索 |
sql_query |
SQLクエリ |
CAT API (19)
| ツール |
説明 |
cat_health |
クラスターの健康状態 |
cat_nodes |
ノードのリスト |
cat_indices |
インデックスのリスト |
cat_shards |
シャードの分布 |
cat_allocation |
ディスクの割り当て |
cat_thread_pool |
スレッドプールの状態 |
cat_master |
マスターノードの情報 |
cat_segments |
セグメント情報 |
cat_count |
ドキュメントの数をカウント |
cat_recovery |
回復状態 |
cat_pending_tasks |
保留中のタスク |
cat_aliases |
エイリアスのリスト |
cat_templates |
テンプレートのリスト |
cat_plugins |
プラグインのリスト |
cat_fielddata |
Fielddataの使用状況 |
cat_nodeattrs |
ノードの属性 |
cat_repositories |
スナップショットのリポジトリ |
cat_snapshots |
スナップショットのリスト |
cat_tasks |
タスクのリスト |
ノード管理 (5)
| ツール |
説明 |
nodes_info |
ノードの情報 |
nodes_stats |
ノードの統計情報 |
nodes_hot_threads |
ホットスレッド |
nodes_usage |
機能の使用統計 |
nodes_reload_secure_settings |
セキュリティ設定を再読み込み |
スナップショット管理 (10)
| ツール |
説明 |
snapshot_repo_create |
リポジトリを作成 |
snapshot_repo_get |
リポジトリを取得 |
snapshot_repo_delete |
リポジトリを削除 |
snapshot_repo_verify |
リポジトリを検証 |
snapshot_create |
スナップショットを作成 |
snapshot_get |
スナップショットを取得 |
snapshot_status |
スナップショットの状態 |
snapshot_delete |
スナップショットを削除 |
snapshot_restore |
スナップショットを復元 |
snapshot_clone |
スナップショットをクローン |
スナップショットライフサイクル管理 SLM (6)
| ツール |
説明 |
slm_policy_create |
ポリシーを作成 |
slm_policy_get |
ポリシーを取得 |
slm_policy_delete |
ポリシーを削除 |
slm_policy_explain |
ポリシーを説明 |
slm_policy_start |
ポリシーを開始 |
slm_policy_stop |
ポリシーを停止 |
タスク管理 (3)
| ツール |
説明 |
tasks_list |
タスクのリスト |
tasks_get |
タスクの詳細 |
tasks_cancel |
タスクをキャンセル |
Ingest Pipeline (6)
| ツール |
説明 |
pipeline_get |
Pipelineを取得 |
pipeline_create |
Pipelineを作成 |
pipeline_delete |
Pipelineを削除 |
pipeline_simulate |
Pipelineをシミュレート |
ingest_stats |
Ingestの統計情報 |
ingest_processor_grok |
Grokパターンのリスト |
ILM インデックスライフサイクル管理 (5)
| ツール |
説明 |
ilm_policy_get |
ILMポリシーを取得 |
ilm_policy_create |
ILMポリシーを作成 |
ilm_policy_delete |
ILMポリシーを削除 |
ilm_add_policy |
インデックスにILMポリシーを設定 |
ilm_remove_policy |
インデックスからILMポリシーを削除 |
その他 (1)
| ツール |
説明 |
reindex |
インデックスを再構築 |
💻 使用例
クラスター監視
クラスターの健康状態を確認する
→ cluster_health()
すべてのノードを表示する
→ cat_nodes()
スレッドプールの状態を確認する
→ cat_thread_pool()
サイズでソートしてインデックスを表示する
→ cat_indices(sort_by="store.size", order="desc")
インデックス操作
インデックスを作成する
→ index_create("products",
mappings={"properties": {"name": {"type": "text"}, "price": {"type": "float"}}},
settings={"number_of_shards": 3})
ドキュメントを書き込む
→ doc_index("products", {"name": "iPhone", "price": 999})
一括書き込み
→ doc_bulk_simple("products", [
{"name": "iPad", "price": 799},
{"name": "MacBook", "price": 1299}
])
検索クエリ
簡易検索
→ search_simple("products", "iPhone")
DSL検索
→ search("products", query={
"bool": {
"must": [{"match": {"name": "phone"}}],
"filter": [{"range": {"price": {"lte": 1000}}}]
}
})
集約統計
→ aggregate("orders", aggs={
"by_status": {"terms": {"field": "status"}},
"avg_amount": {"avg": {"field": "amount"}}
})
SQLクエリ
→ sql_query("SELECT * FROM products WHERE price > 500 ORDER BY price DESC")
インデックスのクローン/分割/縮小
# インデックスをクローンする(読み取り専用に設定する必要があります)
→ index_set_readonly("my-index", True)
→ index_clone("my-index", "my-index-clone")
→ index_set_readonly("my-index", False)
# インデックスを縮小する(準備が必要です)
→ index_prepare_for_shrink("my-index")
→ index_shrink("my-index", "my-index-shrunk", {"index.number_of_shards": 1})
# インデックスをロールオーバーする(書き込み可能なエイリアスが必要です)
→ index_create_with_write_alias("logs-000001", "logs")
→ index_rollover("logs", conditions={"max_docs": 1000000})
📚 環境変数
| 変数 |
説明 |
デフォルト値 |
EASYSEARCH_URL |
Easysearchのアドレス |
https://localhost:9200 |
EASYSEARCH_USER |
ユーザー名 |
admin |
EASYSEARCH_PASSWORD |
パスワード |
- |
🔧 開発
git clone https://github.com/cloudsmithy/easysearch-mcp-server.git
cd easysearch-mcp-server
pip install -e .
pytest
black src/
ruff check src/
互換性テスト
すべての121個のツールはINFINI Easysearchでテスト検証されています。
| 分類 |
ツール数 |
状態 |
| クラスター管理 |
8 |
✅ すべて合格 |
| インデックス管理 |
25 |
✅ すべて合格 |
| エイリアス管理 |
4 |
✅ すべて合格 |
| テンプレート管理 |
3 |
✅ すべて合格 |
| ドキュメント操作 |
11 |
✅ すべて合格 |
| 検索機能 |
15 |
✅ すべて合格 |
| CAT API |
19 |
✅ すべて合格 |
| ノード管理 |
5 |
✅ すべて合格 |
| スナップショット管理 |
10 |
✅ すべて合格 |
| SLM |
6 |
✅ すべて合格 |
| タスク管理 |
3 |
✅ すべて合格 |
| Ingest Pipeline |
6 |
✅ すべて合格 |
| ILM |
5 |
✅ すべて合格 |
| その他 |
1 |
✅ すべて合格 |
⚠️ 重要提示
スナップショットとSLM機能は、サーバーに path.repo を設定する必要があります。
📄 ライセンス
MIT License