使用说明
本地RAG MCP服务器
在本地PC或服务器上的共享文件夹中,可以从AI中用自然语言搜索文本文件 MCP(Model Context Protocol)服务器 是。
自动转换PDF Word Excel PowerPoint图像源代码等各种文件并进行矢量索引,提供使用Ollama嵌入模型的语义搜索(RAG)。可从CLINE等支持MCP的客户端使用。
📋 更新历史记录是 更改日志.md 来修改标记元素的显示属性。
[!注意] 【重要】在Ollama v0.17.x系统中
glm-ocr故障 曾经在Ollama v0.17.0~v0.17.5版本中glm-ocr使用模型时OCR结果出现异常(空白等)的问题此问题已在Ollama v0.17.6或更高版本中修复。如果使用当前最新的Ollama,则没有问题,但如果使用v0.17.0~v0.17.5更新到v0.17.6或更高版本中所述修改相应参数的值。
机能一覧
| 机能 | 说明 |
|---|---|
| 文书变换 | PDF・DOCX・XLSX・PPTX・画像→Markdown变换(OCR对应) |
| 混合搜索结合向量搜索和BM25(Sparse)的高精度搜索 | |
| |重新排序|通过FlashRank重新评估和优化搜索结果| | |
| |访问控制(ACL)|通过API密钥以根文件夹为单位的检索权限管理| | |
| |差分同步|仅更新文件重新索引(mtime+内容散列管理)| | |
| |跳过基于散列的OCR|跳过内容没有改变的文件的OCR处理| | |
| \u0026#上下文限制\u0026#控制不超过大型文档(大于1MB)的自动压缩LLM上下文上限\u0026# | |
| 支持SSE/Stdio两种功能,无论是CLINE(SSE)还是stdio MCP客户端都可以使用 |
体系结构概述
flowchart TD
subgraph UserSide["👤 ユーザー側"]
Client["🖥️ MCPクライアント<br/>(CLINE 等)"]
end
subgraph ServerSide["⚙️ サーバー側 (Local RAG MCP Server)"]
Server["server.py<br/>MCPサーバー<br/>(SSE / stdio)"]
RAG["rag_engine.py<br/>RAGエンジン"]
Chroma[("ChromaDB<br/>ベクトルDB<br/>(Dense検索)")]
BM25[("BM25インデックス<br/>(Sparse検索)")]
FlashRank["FlashRank<br/>リランキングモデル"]
ModelCache[("models/flashrank_cache/<br/>モデルキャッシュ")]
Ollama_Embed["Ollama<br/>埋め込みモデル"]
Converter["file_converter.py<br/>文書変換エンジン"]
OCR_Ollama["Ollama<br/>glm-ocr (OCR)"]
OCR_Paddle["PaddleOCR"]
UpdateIdx["update_index.py<br/>インデックス更新スクリプト<br/>(手動 / cron / タスクスケジューラー)"]
Docs["📁 ソース文書<br/>(PDF / DOCX / 画像 等)"]
end
Client <-->|"MCP Protocol<br/>(検索 / ツール実行 / 応答)"| Server
Server <--> RAG
RAG <--> Chroma
RAG <--> BM25
RAG <--> Ollama_Embed
RAG <--> FlashRank
FlashRank <--> ModelCache
RAG <--> Converter
Converter <-->|"ocr_engine"| OCR_Ollama
Converter <-->|"ocr_engine"| OCR_Paddle
Docs --> RAG
UpdateIdx -->|"差分 / フル再構築"| RAG
RAG -->|"ハイブリッド検索結果"| FlashRank
FlashRank -->|"リランキング済み結果"| Server
🔧 管理员指南
1.必要环境
- Python 3.10 以上
- 奥拉玛(本地执行)
- 嵌入式模型(例如:
nomic-embed-text-v2-moe:latest) - OCR模型(例如:
glm-ocr:latest)
- 嵌入式模型(例如:
2.安装
# 1. リポジトリを任意のフォルダに配置
# 2. 仮想環境を作成して有効化
python -m venv venv
venv\Scripts\activate # Windows
# source venv/bin/activate # Linux / macOS
# 3. 依存パッケージをインストール
pip install -r requirements.txt
2.1选择OCR引擎
本系统支持两种OCR引擎:
|OCR引擎|特征|安装|
|------------|------|-------------|
| Olama glm ocr(默认)通过Ollama服务器执行OCR。不需要追加安装。GPU由Ollama侧管理。没有glm-ocr仅抽取模型)
| 飞桨OCR(可选)=本地执行的OCR库。不依赖于Ollama,可以工作。需要另行安装
使用Ollama glm-ocr时(默认)
# Ollamaにglm-ocrモデルをプル
ollama pull glm-ocr:latest
config.json设置如下:
{
"ocr_engine": "ollama",
"ocr_model": "glm-ocr:latest"
}
使用PaddleOCR(可选)
PaddleOCR是可选的依赖关系。使用时请按照以下步骤安装。
安装处理器版(推荐):
pip install paddlepaddle paddleocr
安装GPU版(高级版):
pip install paddlepaddle-gpu paddleocr
[!警告] GPU版的导入是特定的DLL(
cudnn64_8.dll,zlibwapi.dll)的手动配置面向高手是。无论如何都想使用GPU版情况下PADDLE_GPU_SETUP.md 中描述的场景,使用以下步骤创建明细表,以便在概念设计中分析体量的体积。
config.json设置如下:
{
"ocr_engine": "paddleocr",
"paddleocr_use_gpu": false
}
[!提示] 在未安装PaddleOCR的状态下
ocr_engine: "paddleocr"时褪色为此颜色。
在脱机环境中安装
它提供了一种安装到未连接到网络的Ubuntu终端的方法。
Docker映像方式(推荐)
可以使用Docker映像完全打包环境。
# Windows側(オンライン環境)
.\scripts\export-docker-image.ps1 -IncludeModels
# Ubuntu側(オフライン環境)
./scripts/import-docker-image.sh
docker-compose up -d
自完成型封装方式
可以生成不需要Python环境的独立二进制。
# ビルド
python build-standalone.py --clean
详细步骤 docs/OFFLINE_INSTALL.md 来修改标记元素的显示属性。
在Docker环境中运行实用程序
在Docker环境中,可以使用以下命令运行实用程序:
# インデックスの手動更新
docker-compose exec mcp-server python update_index.py
# サーバーの停止(通常は docker-compose stop を使用)
docker-compose exec mcp-server python stop.py
3.初期设定
config.json
config.json 请根据自己的环境编辑。
{
"source_docs_dir": "C:\\path\\to\\your\\documents",
"docs_dir": "converted_docs",
"embedding_model": "nomic-embed-text-v2-moe:latest",
"ocr_engine": "paddleocr",
"ocr_model": "glm-ocr:latest",
"extra_text_extensions": [".conf", ".ini", ".env", ".log"],
"paddleocr_use_gpu": false,
"ollama_base_url": "http://localhost:11434",
"db_dir": "./chroma_db",
"collection_name": "mcp_rag_collection",
"search_settings": {
"hybrid_search_enabled": true,
"reranking_enabled": true,
"flashrank_model": "ms-marco-MultiBERT-L-12",
"flashrank_cache_dir": "models/flashrank_cache",
"flashrank_offline_mode": false
},
"context_management": {
"detail_level": "auto",
"max_context_tokens": 128000,
"max_document_tokens": 12000,
"max_search_result_tokens": 8000,
"summary_model": null,
"ollama_base_url": null
}
}
|键|说明|
|------|------|
| source_docs_dir |原文档文件夹的绝对或相对路径(来自server.py的相对)|
| docs_dir |已转换标记的保存位置(相对路径)|
| embedding_model Ollama的嵌入模型名称
| ocr_engine OCR引擎(ollama 或 paddleocr) |
| ocr_model 用于PDF/图像OCR的Ollama模型名称(如果ocr_engine为ollama)
| extra_text_extensions 作为文本直接读取的附加扩展名列表(例如: [".conf", ".env"]) |
| paddleocr_use_gpu 在执行PaddleOCR时是否使用GPU(true 或 false) |
| ollama_base_url Ollama的API端点
| db_dir |ChromaDB的保存位置(相对路径)|
| collection_name |ChromaDB收藏名称|
| search_settings 关于搜索引擎的详细设置(参照以下)
| context_management 设置大型文档的上下文限制(请参见下文)
search_settings详细信息
参数|说明|
|------------|------|
| hybrid_search_enabled 是否启用混合搜索(矢量搜索+BM25)(true/false) |
| reranking_enabled 是否启用FlashRank重新排序(true/false) |
| flashrank_model 使用的FlashRank模型名称
| flashrank_cache_dir FlashRank模型的保存目录
| flashrank_offline_mode 是否启用脱机模式(true/false) |
context_management详细信息
参数|说明|
|------------|------|
| detail_level 文档详细程度: "auto"(默认值,仅限超过上限时压缩)/ "summary"(始终压缩)/ "full"(经常全文)|
| max_context_tokens LLM的上下文上限令牌数(默认值:128000)
| max_document_tokens | get_document_content 的最大返还令牌数(默认值:12000)
| max_search_result_tokens | search_documents 最大返还令牌数(默认值:8000)
| summary_model 用于LLM汇总的Ollama模型名称(可选)。null 时,仅使用基于结构的压缩
| ollama_base_url 用于汇总的其他Ollama服务器URL(可选)。null 的规格化距离的幂函数 ollama_base_url 使用)|
关于大型文档(1MB以上)的处理
本服务器是 1MB以上的单一Markdown文件 等已弃用的函数的缺少的支持。
工作方式:
get_document_content啊search_documents返回时自动计数标记数- 设置的上限(
max_document_tokens/max_search_result_tokens)时,请尊重Markdown的标题结构进行阶段性压缩 - 压缩时留下“开头句+重要关键字句+末尾句”,省略部分
get_document_content(path=..., section=...)在中明确表示可获取详细信息
后方互换性:
config.json的context_management未设定时detail_level: "auto"中动作(上限内的话全文返还,超过时压缩)- 通常大小的文档(几KB~数百KB)一如既往地全文返还
关于FlashRank离线运行
在没有互联网连接的环境中使用重新排序功能时,请按照以下步骤进行设置。
建议型号:
- 默认值:
ms-marco-MultiBERT-L-12(軽量・高速)
文件夹配置:
models/
└── flashrank_cache/
└── ms-marco-MultiBERT-L-12/
├── tokenizer.json
├── tokenizer_config.json
├── special_tokens_map.json
└── *.onnx (モデルファイル)
设置脱机模式:
-
下载模型(在联机环境中运行)
- 在有互联网连接的环境中启动服务器,执行首次搜索后自动下载模型
- 或者,手动将模型文件放置在上述文件夹配置中
-
启用脱机模式
config.json的flashrank_offline_mode: true中所述修改相应参数的值- 这将使用本地模型文件而不尝试互联网连接
-
动作确认
- 在脱机环境中启动服务器,并确保搜索工作正常
配置文档文件夹
本服务器的基本运用思想文档文件夹(source_docs_dir)来定义自定义外观表示。用户可以像往常一样向共享文件夹添加、更新、删除文件。安全性由操作系统(Windows/Linux)的文件夹访问权限管理。
source_docs_dir 正下方 根文件夹 中描述的场景,使用以下步骤创建明细表,以便在概念设计中分析体量的体积。
[!重要] 根文件夹名称建议使用英语。
虽然也可以使用日语文件夹名,但是从CLINE设置默认搜索范围时需要在URL中记载。有关详细信息,请参见面向用户:CLINE的连接设置中所述修改相应参数的值。
documents/ ← source_docs_dir
├── Public/ ← ルートフォルダ(誰でもアクセス可)
│ └── manual.pdf
├── Group A/ ← グループA専用
│ └── design_spec.docx
└── Group B/ ← グループB専用
└── report.xlsx
acl.json(设置搜索访问权限)
acl.json 是 映射API密钥和根文件夹的访问权限 中所述修改相应参数的值。设置独立于文件夹操作系统权限的搜索权限。
{
"_comment": "MCPサーバーのグループアクセス制御設定ファイル。",
"_default": {
"name": "Public",
"allowed_roots": ["Public"]
},
"your-api-key-here": {
"name": "Group A",
"allowed_roots": ["Group A", "Public"]
}
}
|条目|说明|
|---------|------|
| _default 在未设置API密钥的情况下应用的权限
| "キー文字列" |定义提示了该密钥的客户端可搜索的根文件夹|
[!提示] 可指定多个API密钥
x-api-key对于标题或URL查询参数,请使用逗号分隔的API密钥(例如:key1,key2),模板名称将采用不同的格式。在这种情况下,链接到指定的所有键allowed_roots合并(并集),允许跨多组文档进行搜索。
API密钥应使用不易推测的随机字符串(例如:
openssl rand -hex 32中所述方法的备选方法。
注意: acl.json 的更改在服务器重新启动之前不会反映。
3.4.创建初始索引
在第一次启动服务器之前,必须创建文档索引(数据库注册)。仅启动服务器不会自动创建索引。
请执行以下命令为文档创建索引:。
# ドキュメントの同期(初回・差分更新)
python update_index.py
第一次可能需要较长的时间(特别是需要OCR的情况),具体取决于文档的数量。在该处理完成之后。请转至启动/停止服务器。
4.启动/停止服务器
启动(SSE模式、CLINE等HTTP客户端)
python server.py --transport sse --port 8000
启动(stdio模式・MCP标准输入输出客户端)
python server.py --transport stdio
停止
python stop.py
或者,在服务器启动的终端 Ctrl+C 来修改标记元素的显示属性。
5.后台驻留(生产操作)
Ubuntu/Linux(systemd)
注册为系统服务将在操作系统启动时自动启动崩溃时自动重新启动。
创建服务文件
sudo nano /etc/systemd/system/local-rag-mcp.service
请粘贴以下内容(路径应符合实际环境)。
[Unit]
Description=Local RAG MCP Server
After=network.target
[Service]
Type=simple
User=your-username
WorkingDirectory=/home/your-username/local-rag-mcp-server
ExecStart=/home/your-username/local-rag-mcp-server/venv/bin/python server.py --transport sse --port 8000
Restart=on-failure
RestartSec=5
StandardOutput=append:/home/your-username/local-rag-mcp-server/server.log
StandardError=append:/home/your-username/local-rag-mcp-server/server.log
[Install]
WantedBy=multi-user.target
启用和启动服务
sudo systemctl daemon-reload
sudo systemctl enable local-rag-mcp # OS起動時に自動起動
sudo systemctl start local-rag-mcp # 今すぐ起動
sudo systemctl status local-rag-mcp # 状態確認
操作命令
sudo systemctl stop local-rag-mcp # 停止
sudo systemctl restart local-rag-mcp # 再起動
journalctl -u local-rag-mcp -f # リアルタイムログ確認
Windows(任务调度器)
在PowerShell上执行以下操作(请使用管理员权限执行):。
# サーバーをログイン時に自動起動
$action = New-ScheduledTaskAction `
-Execute "D:\tools\local-rag-mcp-servr\venv\Scripts\python.exe" `
-Argument "server.py --transport sse --port 8000" `
-WorkingDirectory "D:\tools\local-rag-mcp-servr"
$trigger = New-ScheduledTaskTrigger -AtLogOn
Register-ScheduledTask -TaskName "LocalRagMCPServer" `
-Action $action -Trigger $trigger `
-RunLevel Highest -Force
6.自动更新索引
可以在不停止服务器的情况下执行索引更新。建议在负载较低的时间段(如深夜)自动运行。
补足:在索引更新期间,服务器仍继续接受请求。更新完成后将搜索新文档。
手动更新
# 差分更新(通常はこちら)
python update_index.py
# 強制フル再構築
python update_index.py --force
Ubuntu / Linux(cronで每日深夜2时に自动実行)
crontab -e
添加以下行:。
0 2 * * * cd /home/your-username/local-rag-mcp-servr && ./venv/bin/python update_index.py >> server.log 2>&1
Windows(任务调度器每天深夜2点自动运行)
$action2 = New-ScheduledTaskAction `
-Execute "D:\tools\local-rag-mcp-servr\venv\Scripts\python.exe" `
-Argument "update_index.py" `
-WorkingDirectory "D:\tools\local-rag-mcp-servr"
$trigger2 = New-ScheduledTaskTrigger -Daily -At "02:00"
Register-ScheduledTask -TaskName "LocalRagIndexUpdate" `
-Action $action2 -Trigger $trigger2 `
-RunLevel Highest -Force
6.1基于散列的OCR跳过和.source_hashes.json的规格
OCR处理需要时间,因此在本系统中 .source_hashes.json 中描述的场景,使用以下步骤创建明细表,以便在概念设计中分析体量的体积。
.source_hashes.json 规格和生成位置
-
自动生成(通常运用时)
update_index.py等进行索引更新时,RAG引擎计算各文档的散列值config.json在工作空间的边缘db_dir(默认值为chroma_db)正下方.source_hashes.json中所述修改相应参数的值。 -
手动生成(移行用) 在已经转换为Markdown的环境中,为了避免下次以后不需要的OCR处理,可以事先仅批量生成散列文件。
python _generate_source_hashes.py -
生成位置完整性 自动生成(
update_index.py)时,也可以手动生成(_generate_source_hashes.py)时完全相同的地方(db_dir属下.source_hashes.json) 中所述修改相应参数的值。因此,即使进行手动生成,源代码也能正常进行参照、比较,OCR跳过也能正常发挥作用。
7.通过文件监视进行自动索引更新(面向高级人员)
file_watcher.py 是 watchdog 使用库随时监视源文件夹,检测到文件的追加、更新、删除、移动时 立即更新索引的脚本。
起动方法
# サーバーとは別のターミナルで起動
python file_watcher.py
⚠️ 风险和注意事项
[!警告]
file_watcher.py中描述的场景,使用以下步骤创建明细表,以便在概念设计中分析体量的体积。请充分理解之后再使用。
|风险|说明|
|--------|------|
| 高负荷 在文件更新频繁的环境中,OCR/嵌入操作连续运行,占用大量CPU内存
| DB竞合 | update_index.py 或通过CLINE update_index 与工具一起运行时,写入ChromaDB可能会发生冲突
| 传播错误删除 直接检测到文件的误删除,并立即从索引中删除。要撤消,请在恢复文件后 update_index.py 需要重新执行
| 流程管理 | stop.py 是 server.py 中所述修改相应参数的值。file_watcher.py 另外 Ctrl+C 请停止
推奨运用
- 更新频率低的环境:
update_index.py的定期运行(cron/任务调度器) - 需要实时反映的环境:
file_watcher.py可以考虑使用,请在上述风险的基础上使用
8.故障排除
无法连接到Ollama
- 确认Ollama是否已启动:
ollama list config.json的,之ollama_base_url确认是否正确
ChromaDB初始化错误
如果数据库损坏,则自动重新创建。如果要手动删除 chroma_db/ 请删除文件夹。
PDF的文字未被识别/OCR为空白输出
图像型PDF使用OCR模型。config.json 的,之 ocr_model 中描述的场景,使用以下步骤创建明细表,以便在概念设计中分析体量的体积。
在Ollama v0.17.x中使用glm-ocr时
[!注意] 在Ollama v0.17.0~v0.17.5中
glm-ocr虽然确认了模型不兼容的问题,但是这个问题是 已在Ollama v0.17.6或更高版本中修复。
対処法:
- 把Ollama的版本 v0.17.6以上中所述修改相应参数的值。
- 如果更新困难,请打开OCR引擎
"paddleocr"中所述修改相应参数的值。
另外,file_converter.py 自动检测OCR输出明显异常时(空字符、极短输出、重复相同字符等),对应OCR失败返回空文本。记录 OCR validation failed: 如果出现的消息,请考虑更新Ollama。
仍有反斜线路径数据
如果仍保留Windows环境的旧数据,请执行以下操作:。
python _cleanup_db.py
索引锁定错误
同时运行多个索引更新时发生。请稍候再试。
👤 用户指南
与CLINE的连接设置
将管理员提供的URL API密钥添加到CLINE的MCP服务器设置中。
stdio模式(本地执行、推荐)
直接在本地启动服务器 stdio 中所述修改相应参数的值。与SSE模式不同,不需要启动HTTP服务器,安全性也很安全。
{
"mcpServers": {
"local-rag": {
"command": "python",
"args": ["server.py", "--transport", "stdio"],
"cwd": "D:\\tools\\local-rag-mcp-server",
"env": {
"MCP_API_KEY": "your-api-key-here",
"DEFAULT_ROOTS": "Group A",
"DEFAULT_CATEGORIES": ""
}
}
}
}
| 环境变数 | 说明 |
|---|---|
MCP_API_KEY |
acl.json 中定义的API密钥 |
DEFAULT_ROOTS 默认情况下要搜索的根文件夹(可以用逗号分隔多个) |
|
DEFAULT_CATEGORIES 默认情况下要搜索的子文件夹(可以用逗号分隔多个) |
[!提示] 指定Windows路径时,在环境变量中
D:/tools/documents中描述的场景,使用以下步骤创建明细表,以便在概念设计中分析体量的体积D:\\tools\\documents请像这样把两个反高峰重叠起来。本服务器自动规格化为正向斜线。
SSE模式(通过HTTP)
使用SSE模式时,如下所示设置URL和页眉。
文件夹名称为英文(推荐)
x-roots / x-categories 您可以在页眉中直接填写文件夹名称。
{
"mcpServers": {
"local-rag": {
"url": "http://localhost:8000/sse",
"headers": {
"x-api-key": "your-api-key-here",
"x-roots": "Group A",
"x-categories": ""
}
}
}
}
文件夹名称使用日语时
通常,在HTTP标题中包含日语的话会发生乱码(Mojibake),但是本服务器 自动解码并恢复CLINE发送的日语标题的功能缺少支持的问题。
因此,在很多情况下没有特别的考虑 x-roots 等可以记载日语。
[!提示] 如果在页眉中指定无法正常工作URL查询参数中描述的场景,使用以下步骤创建明细表,以便在概念设计中分析体量的体积。
|目的|查询参数|例|
|------|----------------|-----|
|指定根文件夹| roots= | ?roots=グループA |
|指定子文件夹| categories= | ?categories=カテゴリA |
|多个指定|逗号分隔| ?categories=カテゴリA,カテゴリB |
{
"mcpServers": {
"local-rag": {
"url": "http://localhost:8000/sse?categories=カテゴリA,カテゴリB",
"headers": {
"x-api-key": "your-api-key-here"
}
}
}
}
|参数/页眉|说明|支持日语|
|---------|------|:---------:|
| x-api-key (页眉) acl.json 中定义的API密钥
| x-roots (页眉)|默认搜索根文件夹|✅(Mojibake自动修复)
| roots (URL查询)|同上(URL参数可靠)|✅ |
| x-categories (页眉)|默认搜索子文件夹|✅(Mojibake自动修复)
| categories (URL查询)|同上(URL参数可靠)|✅ |
如何添加文档
只需将文件复制或保存到具有访问权限的共享文件夹(根文件夹)中。
反映时机:添加文件不会立即反映到搜索中。在下次自动索引更新后(深夜批处理等)反映。如果想马上反映的话,请在CLINE的聊天栏中输入以下内容。
ドキュメントのインデックスを今すぐ更新してください。
CLINE自动
update_index调用该工具并在后台启动更新。如果你想确认进展インデックスの更新状況を教えてください。来修改标记元素的显示属性。
关于访问权限
- 文件夹的读写权限由OS的文件共享设置管理
- MCP服务器的API密钥是“将哪个根文件夹可以搜索吗来定义自定义外观
- 即使拥有对文件夹的操作系统访问权限,如果没有API密钥权限也无法进行检索(反之亦然)
未设置API密钥时的动作
在未设置API密钥的情况下进行连接时的动作acl.json 的,之 _default 由设置决定。
| acl.json 的状态|动作|
|------------------|------|
| _default 已定义条目 _default 的,之 allowed_roots 中所述修改相应参数的值
| _default 未定义条目 全部拒绝访问(出现“访问denied”错误)|
管理者
_default的"Public"中描述的场景,使用以下步骤创建明细表,以便在概念设计中分析体量的体积。如果想访问自己专用的文件夹,请委托管理员发行API密钥。
对应文件格式
| 形式 | 扩张子 | 备考 |
|---|---|---|
.pdf |文本提取+图像页面为OCR| |
||
| Word | .docx |文本提取| |
|
| Excel | .xlsx |提取所有工作表的单元格值| |
|
| PowerPoint | .pptx |提取所有幻灯片的文本| |
|
| 画像 | .png .jpg .jpeg .bmp 用OCR提取文本 |
|
文本 .txt .md + extra_text_extensions 中所述的工具,调整墙的布局和几何形状 直接读取 |
||
设置文件等 .json .xml .yaml .yml .toml .ini .env .log .conf 直接读取 |
||
| Web | .html .htm .css .js .ts 直接读取 |
|
python .py 直接读取 |
||
| C/C++ | .c .cpp .cc .cxx .h .hpp .hxx 直接读取 |
|
| Verilog/SystemVerilog | .v .sv .svh .vh 直接读取 |
|
| 生锈 | .rs 直接读取 |
|
| 去吧 | .go 直接读取 |
|
| Java/Kotlin | .java .kt 直接读取 |
|
|外壳脚本等| .sh .bash .bat .ps1 直接读取 |
||
|其他语言| .rb .php .swift .cs 直接读取 |
不支持的格式:
.xls(旧 Excel)・.doc(旧Word)・动画・声音文件等。
制约事项
| 项目 | 制约属性 |
|---|---|
| |搜索范围|只能搜索与自己的API键关联的根文件夹| | |
未设置API密钥时 acl.json 的,之 _default 按照设置 |
|
|取得件数|1次检索默认5件(n_results 参数可更改) |
|
| |实时反映|添加文件后到下次索引更新为止检索中不会反映| | |
| 图像PDF和手写文档取决于OCR模型的精度 | |
| 日语文件夹名称|搜索没有问题。CLINE的连接设置中的页眉指定是有乱码的(推荐使用URL查询) |
需要委托管理员的事项
| 依頼内容 | 説明 |
|---|---|
| 发布API密钥 | 初回利用时やCLINE接続设定に必要 |
| 更改共享文件夹的访问权限 想向其他根文件夹添加读写权限的情况 | |
更改MCP搜索权限 |API键的 allowed_roots 想要变更的情况 |
|
| 立即更新和强制重建索引 想马上反映检索的情况或检索结果奇怪的情况 | |
| 支持新文件格式 想追加未对应形式时(需要开发对应) |
常见问题
Q.搜索时没有相关的文档
A.请确认以下内容。
- 确认共享文件夹中是否添加了文件
- 添加后确认索引更新是否已完成(深夜批处理或手动更新)
- 试着用不同的表达方式进行检索查询(日语、英语都可以)
Q.可以看到特定文件夹的文件,但看不到其他文件夹
A.API密钥权限(allowed_roots)中可能不包含目标根文件夹。请委托管理员添加访问权限。
Q.想立即更新索引
在A.CLINE的聊天栏中输入以下内容即可开始更新。不需要很难的操作。
开始更新
ドキュメントのインデックスを今すぐ更新してください。确认进展
インデックスの更新状況を教えてください。CLINE
update_index/get_sync_status分别调用工具。如果是几十个文件的话,几分钟就完成了。
Q.无法正确检索PDF内容
A.作为图像制作的PDF(扫描的文件等)会进行OCR处理,但根据画质和语言的不同,精度也会下降。请咨询管理员。
Q.如何在CLINE中设置服务器URL和API密钥
A.请在CLINE的MCP服务器设置中输入管理员提供的URL API密钥。设置方法为与CLINE的连接设置中所述修改相应参数的值。
📖 引用
可用工具
工具名称|说明|
|---------|------|
| search_documents 在自然语言查询中搜索文档(结果自动应用上下文限制)
| list_roots 可以访问的根文件夹一览
| list_categories 可以访问的类别(子文件夹)一览
| get_document_content 指定路径的文档检索(大型文档自动压缩section 可在中获取特定分项详细信息
| list_documents [索引文档列表]
| update_index 在后台更新索引
| get_sync_status |确认索引更新的进展|
search_documents参数
参数|类型|说明|
|-----------|---|------|
| query 搜索查询(必需)
| root 压缩根文件夹名称(可选)
| category |string|要缩小的类别名称(可选)|
| n_results |integer|获取件数(默认值:5)|
get_document_content参数
参数|类型|说明|
|-----------|---|------|
| path 文档相对路径(必需)
| section 要检索的节的标题名称(可选。指定后仅全文检索该节)
节指定示例:
get_document_content(path="manual.md", section="1. インストール手順")在大型文档中只想详细阅读特定章节时使用。如果未找到节名称,则返回可用的节列表。
文件配置
local-rag-mcp-servr/
├── server.py # MCP サーバー本体(SSE / stdio)
├── rag_engine.py # RAG エンジン(ChromaDB / Ollama)
├── context_budget.py # コンテキスト予算管理(巨大ドキュメント圧縮・トークン制限)
├── file_converter.py # 文書変換エンジン(PDF OCR 等)
├── file_watcher.py # ファイル変更監視(watchdog)
├── update_index.py # インデックス手動更新ツール
├── _generate_source_hashes.py # 既存環境向けハッシュ生成ツール(OCRスキップ用)
├── stop.py # サーバー停止ツール
├── _cleanup_db.py # DB メンテナンスツール(バックスラッシュパス削除)
├── config.json # 設定ファイル
├── acl.json # アクセス制御設定
├── requirements.txt # Python 依存パッケージ
├── CHANGELOG.md # 更新履歴
└── README.md # このファイル
许可证
MIT许可证
第三方许可证
本项目作为OCR处理的选项 飞桨OCR 对较大场景进行渲染期间已观察到该故障。 PaddleOCR是 Apache许可证2.0 中所述修改相应参数的值。
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/