Elasticsearch Semantic Search MCP Server

by jedrazb
Verified

hybrid server

The server is able to function both locally and remotely, depending on the configuration or use case.

Integrations

  • The MCP server provides semantic search functionality through Elasticsearch, enabling users to search through Search Labs blog posts that have been indexed using Elastic Open Crawler.

MCP サーバー: Elasticsearch セマンティック検索ツール

デモリポジトリ: https://j.blaszyk.me/tech-blog/mcp-server-elasticsearch-semantic-search/

目次


概要

このリポジトリは、 ElasticsearchでインデックスされたSearch Labs ブログ投稿を通じてセマンティック検索を行うための MCP サーバーの Python 実装を提供します。

Elastic Open Crawlerを使用してブログ投稿をクロールし、 search-labs-postsインデックスに保存していることを前提としています。


MCPサーバーの実行

ES_URLES_AP_KEY.envファイルに追加します (最小限の権限で API キーを生成する方法については、こちらをご覧ください)

MCP Inspectorでサーバーを起動します。

make dev

実行したら、次の MCP インスペクターにアクセスします: http://localhost:5173


Claude Desktopとの統合

MCP サーバーをClaude Desktopに追加するには:

make install-claude-config

これにより、ホームディレクトリのclaude_desktop_config.jsonが更新されます。次回の再起動時に、Claude アプリはサーバーを検出し、宣言されたツールを読み込みます。


クロール検索ラボのブログ投稿

1. クローラーの設定を確認する

Elastic Open Crawler が動作するかどうかを確認するには、次のコマンドを実行します。

docker run --rm \ --entrypoint /bin/bash \ -v "$(pwd)/crawler-config:/app/config" \ --network host \ docker.elastic.co/integrations/crawler:latest \ -c "bin/crawler crawl config/test-crawler.yml"

これにより、クロールされたコンテンツが1 ページから印刷されます。


2. Elasticsearchを設定する

Elasticsearch URL と API キーを設定します。

最小限のクローラー権限を持つ API キーを生成します:

POST /_security/api_key { "name": "crawler-search-labs", "role_descriptors": { "crawler-search-labs-role": { "cluster": ["monitor"], "indices": [ { "names": ["search-labs-posts"], "privileges": ["all"] } ] } }, "metadata": { "application": "crawler" } }

応答からencoded値をコピーし、 API_KEYとして設定します。


3. セマンティック検索のインデックスマッピングを更新する

search-labs-postsインデックスが存在することを確認してください。存在しない場合は作成してください。

PUT search-labs-posts

セマンティック検索を有効にするにはマッピングを更新します。

PUT search-labs-posts/_mappings { "properties": { "body": { "type": "text", "copy_to": "semantic_body" }, "semantic_body": { "type": "semantic_text", "inference_id": ".elser-2-elasticsearch" } } }

bodyフィールドは**、Elasticsearch の ELSER モデルを使用してセマンティック テキスト**としてインデックス化されます。


4. 這い始める

クローラーを実行してインデックスを作成します。

docker run --rm \ --entrypoint /bin/bash \ -v "$(pwd)/crawler-config:/app/config" \ --network host \ docker.elastic.co/integrations/crawler:latest \ -c "bin/crawler crawl config/elastic-search-labs-crawler.yml"

[!TIP]新しい Elasticsearch クラスターを使用する場合は、インデックスを作成する前にELSER モデルが開始するまで待機します。


5. インデックスされたドキュメントを検証する

ドキュメントがインデックスされたかどうかを確認します。

GET search-labs-posts/_count

インデックス内のドキュメントの総数が返されます。Kibanaでも確認できます。


完了! Search Labsのブログ投稿セマンティック検索ができるようになりました

-
security - not tested
F
license - not found
-
quality - not tested

Elasticsearch でインデックスされた Search Labs ブログ投稿を通じてセマンティック検索を可能にする Python MCP サーバー。これにより、Claude はブログ コンテンツから関連情報をインテリジェントに取得できます。

  1. Table of Contents
    1. Overview
      1. Running the MCP Server
        1. Integrating with Claude Desktop
          1. Crawling Search Labs Blog Posts
            1. 1. Verify Crawler Setup
            2. 2. Configure Elasticsearch
            3. 3. Update Index Mapping for Semantic Search
            4. 4. Start Crawling
            5. 5. Verify Indexed Documents
          ID: ovfbwy77z2