文档搜索服务

1C УПП 文档配置的搜索服务,支持多向量搜索和快速启动。

  • by nikita-yakuschenko
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 nikita-yakuschenko/1C-mcp-server

使用说明

1C UPP-MCP配置文档服务器

搜索配置描述1c UPP:QDRANT中的Ingestion(两个命名向量),FASTMCP上的MCP服务器,多向量搜索(RRF)。

快速启动(启动并按地址连接)

  1. 安装 (一次):
    cd D:\1C_mcp
    python -m venv .venv
    .\.venv\Scripts\Activate.ps1
    pip install -r requirements.txt
    
  2. Qdrant (必须启动): docker compose up -d
  3. 数据 (ZIP出现后一次):
    python -m ingest "D:\1C_mcp\data\ОписаниеКонфигурации.zip"
  4. 启动服务器 (一个项目根命令):
    • PowerShell (从 D:\1C_mcp): .\run_server.ps1
    • 命令提示符 或双击: run_server.bat (或) .\run_server.bat)
    • 从任何文件夹:脚本的完整路径,例如 & "D:\1C_mcp\run_server.ps1" PowerShell或 D:\1C_mcp\run_server.bat 在CMD。
  5. 连接到Cursor:这个项目已经有了一个框架。 .cursor/mcp.json -打开文件夹时,1C-UPP-DOCS服务器将被捕获。手动:Settings→MCP→添加类型服务器 streamableHttp с网址 http://127.0.0.1:8000/mcp更改配置后,重新启动Cursor。

设置(qdrant URL,端口,路径)在文件中指定 .env 在项目的根。

第8000章忙吗? (错误10048)-关闭旧进程或更换端口 .env (MCP_PORT=8001).找出谁占领了港口,并完成:

netstat -ano | findstr :8000
taskkill /PID <номер_из_колонки_PID> /F

要求

  • Python 3.10+
  • Docker(用于QDRANT)或外部QDRANT

安装

cd D:\1C_mcp
python -m venv .venv
.\.venv\Scripts\Activate.ps1
pip install -r requirements.txt

启动QDRANT

docker compose up -d

检查: http://localhost:6333/dashboard.

如果图像不下载 (错误) 127.0.0.1:10801 或Registry:Docker使用未运行的代理。在Docker Desktop(settings→resources→proxies)中禁用代理或删除变量 HTTP_PROXY/HTTPS_PROXY,然后重新启动Docker并再次运行 docker compose up -d.

Docker和Dokploy(从任何地方访问MCP)

堆栈可以在Docker中完全运行:上升 Qdrant 和 MCP服务器在卸载到服务器(包括Dokploy)后,可以从任何计算机上的Cursor或其他客户端通过URL连接到MCP。

本地(Docker Compose)

从项目的根:

docker compose up -d
  • Qdrant: http://localhost:6333
  • 主控程序: http://localhost:8000/mcp

连接到cursor:url http://localhost:8000/mcp (类型) streamableHttp).

QDRANT:ZIP存储库中的数据(data/ОписаниеКонфигурации.zip)在Docker Ingestion中,当MCP第一次启动时,它会自动启动。本地: python -m ingest "data/ОписаниеКонфигурации.zip".

在Dokploy

  1. 存储库/文件
    将项目放入Git或下载到Dokploy,以便从根本上 Dockerfile, docker-compose.yml, requirements.txt, config.py, embedding.py, qdrant_ops.py, mcp_server.py.

  2. 创建应用程序
    在Dokploy: Docker Compose →创建应用程序→指定存储库或下载文件,根目录 docker-compose.yml.

  3. 通过域访问MCP(Traefik)
    В docker-compose.yml 在服务中 mcp 解码带有traefik和网络标签的块(文件末尾):

    • 替换 mcp.your-domain.com 你的域名(例如, mcp.example.com).
    • 取消评论 networks: 和 dokploy-network (外部)。
    • 在服务 mcp 取消评论 networks: default, dokploy-network.

    或者通过Dokploy UI设置域:在应用程序→ 领域 →为MCP服务添加域(容器8000端口,路径) /mcp 在URL中)。

  4. 环境变量
    在Dokploy中,您可以在应用程序设置中指定(如果需要): COLLECTION_NAME, EMBED_MODEL. QDRANT_URL Compose已指定为 http://qdrant:6333.

  5. 装配和启动
    运行deploy。启动后,MCP将通过以下地址提供:

    • 按域名 : https://mcp.your-domain.com/mcp
    • 或者通过IP和端口,如果端口8000已在主机上尝试: http://<IP-сервера>:8000/mcp
  6. 摄入
    档案 data/ОписаниеКонфигурации.zip 它包含在存储库中,并在构建时复制到Docker映像中。
    在第一次启动时,MCP Entrypoint会自动将数据加载到QDRANT(10-30分钟,请参阅MCP日志)。
    重新加载: docker compose --profile ingest run --rm ingest

  7. 从任何地方连接到Cursor
    Settings→MCP→添加类型服务器 流式Http с网址:

    • https://mcp.your-domain.com/mcp (如果设置了域和HTTPS)
    • 或 http://<IP-сервера>:8000/mcp (如果使用IP和端口)

    保存后重新启动cursor。

简短

连接的MCP URL在哪里 |--------------|--------------------------| Docker Compose(本地) http://localhost:8000/mcp | IP服务器,端口8000打开。 http://<IP>:8000/mcp | –Dokploy+域(Traefik)→ https://mcp.your-domain.com/mcp |

配置(.env)

文件 .env 在项目根中指定所有参数。实例已创建;如有必要,请编辑:

ÐÐÐÐÐÐÐÐÐÐÐÐÐ |------------------|-----------------------------------|----------------------| | QDRANT_URL |URL Qdrant| http://localhost:6333 | | COLLECTION_NAME收藏名称 1c_upp_docs | | EMBED_MODEL Sentence-Transformers模型 paraphrase-multilingual-MiniLM-L12-v2 | | MCP_TRANSPORT 运输: http (URL连接)或 stdio | http | | MCP_HOST ÐHTTP主机(若要从其他PC访问,请指定) 0.0.0.0) | 127.0.0.1 | | MCP_PORT HTTP端口 8000 | | MCP_PATH HTTP的路径 /mcp |

摄入

准备带有配置说明的zip:

  • ZIP根:文件 objects.csv (分隔符) ;UTF-8编码)。
  • CSV列: 对象名称, 对象类型, 同义词, 文件 (有关存档根的MD路径)。
  • 在存档中,Markdown是“文件”列中路径上的文件。

启动下载(从项目文件夹;env将自动):

python -m ingest "D:\1C_mcp\data\ОписаниеКонфигурации.zip"

边界案例处理:

  • BOM 为 CSV阅读 utf-8-sig标题正常化。
  • 西里尔字母:到处都是UTF-8;模型 paraphrase-multilingual-MiniLM-L12-v2 支持俄语。
  • 缺少MD文件:不跳过payload字段中的条目 doc 它将是空的,并在日志中写入警告。
  • 无效/不存在的集合在搜索和 get_1c_object_doc 返回“找不到集合”的明显错误。首先运行Ingestion。»

MCP服务器

默认情况下 .env 设置模式 超文本传输协议:启动服务器并连接到客户端搜索栏中的地址。

  • 发射:一个来自项目根的命令-- .\run_server.ps1 (PowerShell)或 .\run_server.bat (cmd/双击)或者 python mcp_server.py 已激活的VEV。
  • 连接地址: http://localhost:8000/mcp (另一台PC) http://<IP>:8000/mcp)

对于模式 标准 (客户端启动进程)在.env中设置 MCP_TRANSPORT=stdio 并将客户端配置为命令 python mcp_server.py.

工具(tools)

  1. search1c-docs
    search_1c_docs(query, object_type=None, limit=10, use_multivector=True)
    搜索文档。在 use_multivector=True 使用RRF向量 object_name 和 friendly_name.

  2. get_1c_object_doc
    get_1c_object_doc(object_name)
    从payload对象名称检索: object_name, object_type, synonym, file_name, doc.

  3. 健康检查
    检查集合的可用性和可用性(方便使用,而不是单独的HTTP) /health).

项目结构

D:\1C_mcp\
  data/            # ОписаниеКонфигурации.zip (~2 МБ), копируется в образ при сборке
  config.py        # загрузка .env и конфиг
  embedding.py     # sentence-transformers
  qdrant_ops.py    # коллекция, named vectors, поиск (single + RRF)
  ingest.py        # pipeline: ZIP → CSV → MD → Qdrant
  mcp_server.py    # FastMCP: search_1c_docs, get_1c_object_doc, health_check
  run_server.bat   # запуск MCP-сервера (CMD / двойной клик)
  run_server.ps1   # запуск одной командой из корня: .\run_server.ps1
  requirements.txt
  docker-compose.yml
  Dockerfile
  .dockerignore
  README.md

健康终点

HTTP Endpoint /health 它不会上升。使用工具检查状态 健康检查 或MCP的可用性(例如, fastmcp list 服务器URL)。如果需要,可以添加带有路由的单独应用程序(Fastapi/Starlette) GET /health.