关于 RAG for your documents
@devilsdev/rag-mcp-server 会为本地文档文件夹建立索引,支持离线搜索和答案核验。它适用于需要检索原文片段并进行词汇层面依据检查的 MCP 客户端,无需 API 密钥、数据库或网络连接。
主要功能
- 01为本地文档文件夹建立索引
- 02用自然语言查询搜索片段
- 03依据检索来源核验答案
- 04支持 Markdown、HTML、CSV 和文本
- 05启动时重建内存索引
适用场景
- 01查找本地文档中的相关片段
- 02检查答案是否有文件内容支持
- 03在无网络环境中搜索文档
MCP 相关
提供 `search_documents` 工具检索片段,并提供 `check_answer` 工具判断答案是否得到已索引文档或指定来源的支持。服务通过 stdio 通信,不调用模型。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
@devilsdev/rag-mcp-server
一个用于处理文档的 MCP 服务。将其指向一个文件夹,Claude 或任何其他 MCP 客户端就能搜索文档并核对答案:
npx @devilsdev/rag-mcp-server ./docs
服务启动时会为文件夹建立索引,使用 @devilsdev/rag-pipeline-utils 提供的离线 TF-IDF 嵌入器和内存检索器。它不需要 API 密钥、数据库或网络。助手就是语言模型,因此服务不会调用任何语言模型。
需要 Node.js 22 或更高版本。
连接客户端
该服务通过 stdio 使用 MCP,因此由客户端启动。请使用文件夹的绝对路径。
Claude Code:
claude mcp add docs -- npx -y @devilsdev/rag-mcp-server /absolute/path/to/docs
Claude Desktop、Cursor 和其他使用 mcpServers 配置的客户端(对于 Claude Desktop:依次选择 Settings → Developer → Edit Config,然后重启):
{
"mcpServers": {
"docs": {
"command": "npx",
"args": ["-y", "@devilsdev/rag-mcp-server", "/absolute/path/to/docs"]
}
}
}
接下来,询问一个文档中有答案的问题,例如“员工有多少天带薪假?”
工具
search_documents
| 输入 | 类型 | 描述 |
|---|---|---|
query | 字符串,必填 | 要查找的内容,以自然语言描述 |
topK | 整数,1–20 | 返回的段落数(默认值为 4,或使用 --top-k) |
以结构化内容和 JSON 文本的形式返回 { passages: [{ id, source, score, text }] },并按相关度从高到低排序。source 是相对于文件夹的文件路径,id 的格式为 <source>#<chunk number>。与查询没有共同词语的段落会被排除。
check_answer
| 输入 | 类型 | 描述 |
|---|---|---|
answer | 字符串,必填 | 要核对的答案 |
question | 字符串 | 答案所对应的问题;未提供 sources 时,可提高检索效果 |
sources | 字符串数组或 { id, text } | 用于核对的段落;省略时会搜索已建立索引的文档 |
topK | 整数,1–20 | 省略 sources 时检索的段落数 |
运行此库的 checkAnswer,并返回 { grounded, groundedness, unsupported, citations, sources }:其中包括每个句子是否都有依据、有依据的句子所占比例(0 到 1)、缺乏依据的句子、支持各句的来源 ID,以及已核对的来源。此核对采用词汇匹配,不会调用模型,因此正确的改述也可能被判定为缺乏依据;请将其视为提示你再次检查的标记,而非结论。
这两个工具都只读。段落文本来自你的文件,工具描述会告知客户端应将其视为数据,而非指令。文件仍可能包含用于操纵助手的文本,因此请只为可信文件夹建立索引。
文件
支持文件夹及其子文件夹中的 Markdown(.md、.markdown)、HTML(.html、.htm,仅可见文本)、CSV(.csv,每行作为一个段落)和文本(.txt)文件,处理方式与该库的加载器一致;散文会按句子拆分为最多 500 个字符的片段。其他文件、node_modules 和 .git 会被跳过。索引存储在内存中,每次服务启动时都会重建,因此更改文档后,请重启客户端的服务。
选项
rag-mcp-server <folder> [--top-k <n>] [--embedder local]
| 选项 | 默认值 | 含义 |
|---|---|---|
--top-k <n> | 4 | 客户端未传入 topK 时,每次调用返回的段落数 |
--embedder <name> | local | 嵌入器;local(TF-IDF,离线)是唯一可用的选项 |
服务记录的所有日志都会写入 stderr;stdout 用于传输协议数据。
构建自己的服务
对于其他嵌入器(OpenAI、Ollama)、持久化索引或向量数据库,请从 MCP 服务示例开始。该示例使用此库,在约 100 行代码中构建了同类服务。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。