中小企业知识库——MCP服务器
此存储库提供 MCP(模型上下文协议)服务器 将文档索引到 弹性搜索 并公开了从MCP兼容客户端查询它的工具,例如 克劳德桌面, 光标,以及 GitHub Copilot.
______________________________________________________________________
📌 特性
- 智能索引:使用确定性ID来防止Elasticsearch中的重复条目。
- 语义搜索:使用Elasticsearch的匹配功能查询知识库。
- 动态更新:直接通过MCP工具添加新的文本内容。
- 鲁棒性:优雅地处理数据库连接失败。
______________________________________________________________________
先决条件
在运行服务器之前,请确保已安装以下内容:
- Python 3.11+
- 码头工人 (用于运行Elasticsearch)
- 紫外线 (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- 查找存储库路径:
pwd2.编辑配置文件
模板配置文件提供在 mcp.json。您可以复制其内容,但请记住将路径更新为绝对路径。
- 打开 克劳德桌面.
- 首选 设置 > 开发者 > 编辑配置.
- 将以下配置添加到
mcpServersJSON文件中的对象:
{
"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个最相关的文档部分(标题+内容)。 |
______________________________________________________________________
📖 工作流示例
- 启动Elasticsearch确保你的Docker容器正在运行。
docker start elasticsearch- 添加文档:将任何要索引的PDF文件放入
input/文件夹。 - 启动服务器:打开Claude Desktop或Cursor时,服务器会自动启动。
- 它将扫描 input/,从新PDF中提取文本,并将其索引到Elasticsearch中。
- 互动:
- “文档对\[主题\]说了什么?”(使用 query_knowledge_base) - “将此会议记录添加到知识库:\[内容\]”(使用 add_text_to_index)
______________________________________________________________________
故障排除
- 连接被拒绝: 确保Docker容器正在运行(
docker ps)并且端口9200是可访问的。 - 路径错误: 仔细检查配置JSON中的路径是否是绝对的(以
/)并指向正确的位置。
