Servidor MCP: herramienta de búsqueda semántica de Elasticsearch
Repositorio de demostración para: https://j.blaszyk.me/tech-blog/mcp-server-elasticsearch-semantic-search/
Tabla de contenido
Related MCP server: Elasticsearch 7.x MCP Server
Descripción general
Este repositorio proporciona una implementación en Python de un servidor MCP para búsqueda semántica a través de publicaciones del blog de Search Labs indexadas en Elasticsearch .
Se supone que ha rastreado las publicaciones del blog y las ha almacenado en el índice search-labs-posts usando Elastic Open Crawler .
Ejecución del servidor MCP
Agregue ES_URL y ES_AP_KEY al archivo .env (consulte aquí para generar una clave API con permisos mínimos)
Inicie el servidor en MCP Inspector :
make devUna vez en ejecución, acceda al Inspector MCP en: http://localhost:5173
Integración con Claude Desktop
Para agregar el servidor MCP a Claude Desktop :
make install-claude-configEsto actualiza claude_desktop_config.json en tu directorio personal. En el siguiente reinicio, la aplicación Claude detectará el servidor y cargará la herramienta declarada.
Publicaciones del blog de Crawling Search Labs
1. Verificar la configuración del rastreador
Para comprobar si Elastic Open Crawler funciona, ejecute:
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"Esto debería imprimir el contenido rastreado de una sola página .
2. Configurar Elasticsearch
Configurar la URL y la clave API de Elasticsearch .
Genere una clave API con permisos mínimos de rastreador :
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"
}
}Copie el valor encoded de la respuesta y configúrelo como API_KEY .
3. Actualizar la asignación de índices para la búsqueda semántica
Asegúrate de que el índice search-labs-posts exista. Si no, créalo:
PUT search-labs-postsActualice el mapeo para habilitar la búsqueda semántica :
PUT search-labs-posts/_mappings
{
"properties": {
"body": {
"type": "text",
"copy_to": "semantic_body"
},
"semantic_body": {
"type": "semantic_text",
"inference_id": ".elser-2-elasticsearch"
}
}
}El campo body se indexa como texto semántico utilizando el modelo ELSER de Elasticsearch .
4. Empieza a gatear
Ejecute el rastreador para completar el índice:
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"Si usa un clúster Elasticsearch nuevo , espere a que se inicie el modelo ELSER antes de indexar.
5. Verificar documentos indexados
Compruebe si los documentos fueron indexados:
GET search-labs-posts/_countEsto devolverá el recuento total de documentos en el índice. También puede verificarlo en Kibana .
¡Listo! Ya puedes realizar búsquedas semánticas en las publicaciones del blog de Search Labs.