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 에서 서버를 시작합니다.

지엑스피1

실행 후 MCP Inspector에 접속하세요: http://localhost:5173


Claude Desktop과 통합

Claude Desktop 에 MCP 서버를 추가하려면:

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"

이렇게 하면 단일 페이지 에서 크롤링된 콘텐츠가 인쇄됩니다.


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