基于Cron的文档MCP服务器
包装的Docker镜像 arabold/docs-mcp服务器 通过基于cron的自动化文档抓取和刷新。
它的作用
按计划自动抓取和索引文档网站,使其可通过MCP(模型上下文协议)进行搜索。
配置
创建一个 config.json 文件:
{
"global-settings": {
"cronSchedule": "0 2 * * *",
"telemetryEnabled": false,
"scraper": {
"scope": "hostname"
}
},
"websites": [
{
"name": "my-docs",
"url": "https://docs.example.com",
"description": "My documentation",
"enabled": true
}
]
}Cron计划示例:
0 2 * * *-每天凌晨2:00(默认)0 */6 * * *-每6小时0 0 * * 0-每周周日
看 config.json.示例 所有可用选项。
索引PDF文档
scraper会自动索引从HTML页面链接的PDF文件。对于要发现和抓取的PDF,请设置 scope: "hostname" 在全局刮刀设置中:
{
"global-settings": {
"cronSchedule": "0 2 * * *",
"telemetryEnabled": false,
"scraper": {
"maxDepth": 2,
"scope": "hostname"
}
}
}为什么需要这样做: 默认范围为 "subpages" 它仅跟随起始URL路径下的链接。PDF通常位于不同的路径中(如 /documents/),所以 "hostname" 允许跟踪同一域上的所有链接。
注: 如果大型PDF超过文档大小限制,则可能会被跳过。集 DOCS_MCP_SCRAPER_DOCUMENT_MAX_SIZE=52428800 例如(50MB),或根据需要在您的环境中选择其他大小。
部署
- 创造你的
config.json文件 - 设置您的OpenAI API密钥:
export OPENAI_API_KEY="your-key-here" - 使用Docker Compose进行部署:
docker compose up -ddocker-compose.yml:
services:
cron-docs-mcp:
image: ghcr.io/leonine-studios/docs-mcp-cron:latest
container_name: cron-docs-mcp
volumes:
- ./docs-mcp-data:/data
- ./config.json:/config.json:ro
- ./logs:/var/log
environment:
- OPENAI_API_KEY=${OPENAI_API_KEY}
- DOCS_MCP_TELEMETRY=false
- DOCS_MCP_SCRAPER_DOCUMENT_MAX_SIZE=${DOCS_MCP_SCRAPER_DOCUMENT_MAX_SIZE}
restart: unless-stopped初始设置
部署后,触发初始抓取:
docker exec cron-docs-mcp scrape-or-refresh.sh这将填充所有启用的库。您可以在运行时看到日志。后续运行将更快,因为它只刷新更改,而不是重新抓取所有内容。
备选方案: 等待计划的cron(默认值:每天凌晨2点)自动运行。
环境变量
OPENAI_API_KEY-用于嵌入的OpenAI API密钥DOCS_MCP_TELEMETRY-启用/禁用遥测(默认值:true)DOCS_MCP_SCRAPER_DOCUMENT_MAX_SIZE-(可选)PDF/Office文档的最大字节数(默认值:10485760=10MB)
- 要允许更大的文档(例如50MB),请设置: export DOCS_MCP_SCRAPER_DOCUMENT_MAX_SIZE=52428800
您可以在shell中设置环境变量或创建 .env 文件:
export OPENAI_API_KEY="your-key-here"
# Optional: Increase document size limit to 50MB
export DOCS_MCP_SCRAPER_DOCUMENT_MAX_SIZE=52428800库同步
系统会自动使库与您的 config.json 在 实时的:
- 实时清理:编辑时
config.json删除一个网站,其抓取的库是 在几秒钟内自动删除 - 文件监视器:后台进程监视器
config.json对于更改和触发器,立即同步 - 启动同步:当容器在关闭时开始捕获任何更改时,会运行初始同步
- 无孤立数据:只有当前配置中的网站才会存储库
- 手动同步:您还可以随时通过以下方式手动触发同步:
docker exec cron-docs-mcp sync-libraries.sh
启用和禁用网站
这 enabled 标记在 config.json 控制网站是否被抓取并保存在库中:
enabled: true-网站被抓取/刷新,数据被保留enabled: false-图书馆是 立即删除
当您重新启用已禁用的网站时,它将 从头刮得干干净净 (未刷新)在下一次刮擦运行时。
工作原理:
- 您编辑
config.json并删除网站或集合enabled: false - 文件监视器在几秒钟内检测到更改
- 它验证JSON语法
- 如果有效,它将自动运行同步脚本
- 禁用或删除的库将立即删除
您可以监视观察者日志:
docker exec cron-docs-mcp tail -f /var/log/docs-mcp-config-watcher.log测试
# Trigger initial scrape (also runs sync to remove orphaned libraries)
docker exec cron-docs-mcp scrape-or-refresh.sh
# Manually sync libraries with config (remove orphaned libraries)
docker exec cron-docs-mcp sync-libraries.sh
# List indexed libraries
docker exec cron-docs-mcp node /app/dist/index.js list
# View container logs
docker logs -f cron-docs-mcp
# View cron job logs (from host)
tail -f logs/docs-mcp-refresh.log
# View config watcher logs (monitors for config.json changes)
docker exec cron-docs-mcp tail -f /var/log/docs-mcp-config-watcher.log
# Check cron jobs
docker exec cron-docs-mcp crontab -l学分
建在上面 arabold/docs-mcp服务器 -用于文档索引和搜索的出色MCP服务器。
