文档索引与查询服务器

MCP服务器是一个将文档索引到Elasticsearch并通过MCP兼容客户端(如Claude Desktop、Cursor和GitHub Copilot)查询的工具,支持智能索引、语义搜索和动态更新。

  • by ViratGarg2
  • Python
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 ViratGarg2/ElasticMind-MCP

使用说明

中小企业知识库——MCP服务器

此存储库提供 MCP(模型上下文协议)服务器 将文档索引到 弹性搜索 并公开了从MCP兼容客户端查询它的工具,例如 克劳德桌面, 光标,以及 GitHub Copilot.


📌 特性

  • 智能索引:使用确定性ID来防止Elasticsearch中的重复条目。
  • 语义搜索:使用Elasticsearch的匹配功能查询知识库。
  • 动态更新:直接通过MCP工具添加新的文本内容。
  • 鲁棒性:优雅地处理数据库连接失败。

先决条件

在运行服务器之前,请确保已安装以下内容:

  1. Python 3.11+
  2. 码头工人 (用于运行Elasticsearch)
  3. 紫外线 (Python包和项目管理器)

📦 设置

1.启动Elasticsearch

服务器需要一个正在运行的Elasticsearch实例。您可以使用Docker轻松启动:

docker run -d --name elasticsearch \
  -p 9200:9200 -p 9300:9300 \
  -e "discovery.type=single-node" \
  -e "xpack.security.enabled=false" \
  -e ES_JAVA_OPTS="-Xms1g -Xmx1g" \
  docker.elastic.co/elasticsearch/elasticsearch:9.1.5

(注意:确保版本标记符合您的要求。此处使用8.11.0版本作为稳定的默认值。)

2.安装依赖项

导航到项目目录并安装所需的Python包:

uv sync
# OR
pip install -e .

3.摄入数据

将您的PDF文档放在 input/ 文件夹并运行提取脚本以生成 data/docs.json 索引文件:

uv run extraction.py

🧩 配置

要将此服务器与Claude Desktop、Cursor或GitHub Copilot一起使用,您需要配置MCP设置。

1.定位路径

您将需要这两个的绝对路径 uv 可执行文件和克隆的存储库。

  • 找到 uv 路径:
    which uv
    
  • 查找存储库路径:
    pwd
    

2.编辑配置文件

模板配置文件提供在 mcp.json。您可以复制其内容,但请记住将路径更新为绝对路径。

  1. 打开 克劳德桌面.
  2. 首选 设置 > 开发者 > 编辑配置.
  3. 将以下配置添加到 mcpServers JSON文件中的对象:
{
  "mcpServers": {
    "sme-knowledge-base": {
      "command": "/absolute/path/to/uv",
      "args": [
        "run",
        "--directory",
        "/absolute/path/to/my_server_sme",
        "elastic_server.py"
      ],
      "env": {
        "ES_HOST": "http://localhost:9200"
      }
    }
  }
}

替换 /absolute/path/to/uv 和 /absolute/path/to/my_server_sme 其中实际路径在步骤1中标识。


🔧 可用工具

服务器向LLM公开以下工具:

工具名称 描述
ingest_pdfs 扫描 input/ 新PDF、提取文本、更新的目录 docs.json,并将所有内容索引到Elasticsearch中。 添加新文件后调用此命令。
index_documents 从以下位置手动触发索引过程 data/docs.json Elasticsearch。如果您直接修改了JSON文件,则很有用。
add_text_to_index 将新的文本文档添加到知识库中。 特征:
•更新持久存储(docs.json)以及Elasticsearch。
•自动对超过1000个单词的内容进行分块。
•生成唯一ID。
query_knowledge_base 接受搜索查询字符串并返回前2个最相关的文档部分(标题+内容)。

📖 工作流示例

  1. 启动Elasticsearch确保你的Docker容器正在运行。
    docker start elasticsearch
    
  2. 添加文档:将任何要索引的PDF文件放入 input/ 文件夹。
  3. 启动服务器:打开Claude Desktop或Cursor时,服务器会自动启动。
    • 它将扫描 input/,从新PDF中提取文本,并将其索引到Elasticsearch中。
  4. 互动:
    • “文档对[主题]说了什么?”(使用 query_knowledge_base)
    • “将此会议记录添加到知识库:[内容]”(使用 add_text_to_index)

故障排除

  • 连接被拒绝: 确保Docker容器正在运行(docker ps)并且端口9200是可访问的。
  • 路径错误: 仔细检查配置JSON中的路径是否是绝对的(以 /)并指向正确的位置。