Elasticsearch MCP服务器
这是一个基于Python的MCP(模型控制协议)服务器,它提供了一个使用Elasticsearch搜索和分析属性数据的接口。服务器从Jupyter笔记本转换为独立的Python脚本。
观看房产搜索系统的演示:
https://github.com/user-attachments/assets/df498631-fb16-4ba5-b1fd-c14670213d73
特性
- 房产搜索:使用各种条件搜索房产,包括:
- 位置(支持地理编码) - 价格范围 - 卧室/浴室数量 - 平方英尺 - 物业特点 - 税费和维护费用
- 地理编码集成:使用Google Maps API将位置字符串转换为地理坐标
- Elasticsearch集成:
- 连接到Elasticsearch无服务器 - 使用ELSER(弹性学习稀疏编码器)进行语义搜索 - 使用E5(多语言E5-small)获得额外的语义功能 - 支持自定义搜索模板 - 自动监控和唤醒推理端点
项目结构
.
├── data-ingestion/ # Scripts for setting up and populating Elasticsearch
│ ├── data/ # Local data directory for property data
│ ├── ingest-properties.py # Main ingestion script
│ ├── requirements.txt # Python dependencies
│ ├── setup.sh # Setup script
│ └── README.md # Data ingestion documentation
├── elastic_mcp_server.py # Main MCP server
├── env_config.sh # Environment configuration
├── env_config.template.sh # Environment configuration template
├── requirements.txt # Python dependencies
└── README.md # This file数据摄入
在运行MCP服务器之前,您需要设置Elasticsearch实例并用属性数据填充它。这由中的脚本处理 data-ingestion 文件夹。按照中的设置说明进行操作 数据摄取README 致:
- 设置Python环境
- 配置Elasticsearch
- 下载并摄取房产数据
使API密钥只读
数据摄取部分创建了一个具有更广泛服务器权限的密钥,如创建索引和搜索模板脚本。您可以通过编辑现有密钥的安全权限或使用以下内容创建新密钥来进一步限制该API密钥:
{
"mcp_server_read_only": {
"cluster": [
"monitor"
],
"indices": [
{
"names": [
"properties", "properties_raw"
],
"privileges": [
"read",
"view_index_metadata"
],
"allow_restricted_indices": false
}
],
"applications": [],
"run_as": [],
"metadata": {},
"transient_metadata": {
"enabled": true
}
}
}需求
- Python=>3.10
- Elasticsearch无服务器实例
- 谷歌地图API密钥
- 必需的Python包(见requirements.txt)
设置所需服务
创建Google地图API密钥
- 转到 谷歌云控制台
- 创建新项目或选择现有项目
- 启用以下API:
- 地理编码API - 映射JavaScript API
- 创建凭据:
- 转到“API和服务”>“凭据” - 单击“创建凭据”>“API密钥” - 复制生成的API密钥
- (可选)将API密钥仅限于所需的API
设置Elasticsearch无服务器
- 首选 弹性云
- 注册或登录您的帐户
- 在“Serverless项目”下,选择“创建无服务器项目”
- 选择您首选的云提供商和地区
- 点击“创建部署”
- 创建后,在Kibana“入门”中,您将获得一个弹性URL
- 创建具有所需权限的API密钥(请参阅 数据摄取自述 详情)
环境变量
需要在中配置以下环境变量 env_config.sh在获取配置文件之前,可以通过设置相应的环境变量来覆盖推理端点ID:
ES_URL:您的Elasticsearch无服务器URLES_API_KEY:您的Elasticsearch API密钥GOOGLE_MAPS_API_KEY:您的谷歌地图API密钥PROPERTIES_SEARCH_TEMPLATE:搜索模板ID(默认:“属性搜索模板”)ELSER_INFERENCE_ID:ELSER推理端点ID(默认值:“.ELSER-2-elasticsearch”)E5_INFERENCE_ID:E5推理端点ID(默认值:“.multilingual-E5-small-elasticsearch”)RERANK_INFERENCE_ID:重新排列推理端点ID(默认值:“.Rerank-v1-elasticsearch”)ES_INDEX:Elasticsearch索引名称(默认值:“properties”)MCP_PORT:MCP服务器的端口号(默认值:8001)
覆盖推理端点ID
在获取配置之前,您可以通过设置环境变量来覆盖默认的推理端点ID:
# Set custom inference endpoint IDs
export ELSER_INFERENCE_ID=".custom-elser-endpoint"
export E5_INFERENCE_ID=".custom-e5-endpoint"
export RERANK_INFERENCE_ID=".custom-rerank-endpoint"
# Source the config (will use your custom values)
source env_config.sh设置
选项1:Docker设置
有关使用Docker的容器化设置,请参阅 有关以下内容的详细说明:
- 设置环境变量
- 使用Docker Compose运行
- 生产部署选项
- 容器管理命令
选项2:手动设置
- 克隆存储库:
git clone https://github.com/sunilemanjee/Elastic-Python-MCP-Server.git
cd Elastic-Python-MCP-Server- 如果您还没有在数据摄取说明中,请创建和配置您的环境变量:
# Copy the template file
cp env_config.template.sh env_config.sh
# Edit env_config.sh with your credentials
nano env_config.sh # or use your preferred editor- 设置Python虚拟环境:
# Create virtual environment
python3.11 -m venv venv
# Activate virtual environment
source venv/bin/activate ##on macbook it may be .venv/bin/activate
# Install dependencies
pip install -r requirements.txt- 获取环境变量:
source env_config.sh运行服务器
- 运行服务器:
./run_server.sh默认情况下,服务器将在端口8001上启动。您可以通过检查来验证它是否正在运行:
curl -v http://localhost:8001/mcpAPI终点
服务器提供了几个MCP工具,可以由前端应用程序或其他MCP客户端调用:
wake_inference_endpoints:唤醒ELSER和E5推理端点(成功时返回“端点已唤醒”)get_properties_template_params:返回属性搜索模板所需的参数geocode_location:将位置字符串转换为地理坐标search_template:使用配置的搜索模板执行属性搜索
搜索参数
搜索模板支持以下参数:
query:主搜索查询(必填)latitude:地理纬度坐标longitude:地理经度坐标bathrooms:浴室数量tax:房地产税金额maintenance:维护费金额square_footage:房产面积home_price:最高房价features:家庭功能(例如。, *池*更新厨房\*)
许可证
版权所有Elasticsearch B.V.和贡献者 SPDX许可证标识符:Apache-2.0
