本地RAG MCP服务器

一个能够在本地PC或服务器上通过AI进行自然语言搜索的MCP服务器,支持多种文件格式的自动转换和向量索引化,提供基于Ollama嵌入模型的语义搜索(RAG)功能。

  • by efn-2101
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 efn-2101/local-rag-mcp-server

使用说明

本地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文件 等已弃用的函数的缺少的支持。

工作方式:

  1. get_document_content 啊 search_documents 返回时自动计数标记数
  2. 设置的上限(max_document_tokens / max_search_result_tokens)时,请尊重Markdown的标题结构进行阶段性压缩
  3. 压缩时留下“开头句+重要关键字句+末尾句”,省略部分 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 (モデルファイル)

设置脱机模式:

  1. 下载模型(在联机环境中运行)

    • 在有互联网连接的环境中启动服务器,执行首次搜索后自动下载模型
    • 或者,手动将模型文件放置在上述文件夹配置中
  2. 启用脱机模式

    • config.json 的 flashrank_offline_mode: true 中所述修改相应参数的值
    • 这将使用本地模型文件而不尝试互联网连接
  3. 动作确认

    • 在脱机环境中启动服务器,并确保搜索工作正常

配置文档文件夹

本服务器的基本运用思想文档文件夹(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 .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/