mcpField
M
mcp-rag-server

mcp-rag-server

本地服务
github.com/kwanLeeFrmVi记忆与知识3680 周前更新

关于 mcp-rag-server

mcp-rag-server 是一个实现检索增强生成(RAG)的 MCP 服务。它为文档建立索引,并通过 MCP 协议向 LLM 提供相关内容,使 LLM 能基于用户文档回答问题。项目使用本地 SQLite 向量存储,可连接多种嵌入模型提供方。

主要功能

  1. 01索引 txt、md、json、jsonl 和 csv 文档
  2. 02可自定义的文本分块大小
  3. 03基于 SQLite 的本地向量存储
  4. 04支持 OpenAI、Ollama、Granite 和 Nomic 嵌入
  5. 05通过 stdio 提供 MCP 工具与资源

适用场景

  1. 01让 LLM 基于本地文档内容回答问题
  2. 02在本地为项目文档建立可检索的索引
  3. 03通过 Ollama 嵌入模型在本地完成检索

MCP 相关

该项目是 MCP 服务,向 MCP 客户端暴露 embedding_documents、query_documents 等工具,以及 rag:// 开头的资源。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"rag-server-kwanleefrmvi": {
"command": "npx",
"args": [
"-y",
"mcp-rag-server"
]
}
}
}
启动命令npx -y mcp-rag-server

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npmmcp-rag-server

工具

5

收录的工具列表 · 更新于 3 周前

参数类型必填说明
pathstring是包含要编入索引的 .json、.jsonl、.txt、.md、.csv 文件的路径

详细介绍

mcp-rag-server

npm version License Node.js Version

支持检索增强生成(RAG)的模型上下文协议(MCP)服务。它会为你的文档建立索引,并通过 MCP 协议向大模型提供相关上下文。

集成示例

通用 MCP 客户端配置
{
  "mcpServers": {
    "rag": {
      "command": "npx",
      "args": ["-y", "mcp-rag-server"],
      "env": {
        "BASE_LLM_API": "http://localhost:11434/v1",
        "EMBEDDING_MODEL": "nomic-embed-text",
        "VECTOR_STORE_PATH": "./vector_store",
        "CHUNK_SIZE": "500"
      }
    }
  }
}
交互示例
# Index documents
>> tool:embedding_documents {"path":"./docs"}

# Check status
>> resource:embedding-status

<< rag://embedding/status
Current Path: ./docs/file1.md
Completed: 10
Failed: 0
Total chunks: 15
Failed Reason:

目录

功能特性

  • 为 .txt、.md、.json、.jsonl 和 .csv 格式的文档建立索引
  • 可自定义文本分块大小
  • 使用 SQLite 提供本地向量存储(通过 LangChain 的 LibSQLVectorStore)
  • 支持多种嵌入提供商(OpenAI、Ollama、Granite、Nomic)
  • 通过 stdio 提供 MCP 工具和资源,轻松集成 MCP 客户端

安装

从 npm 安装
npm install -g mcp-rag-server
从源码安装
git clone https://github.com/kwanLeeFrmVi/mcp-rag-server.git
cd mcp-rag-server
npm install
npm run build
npm start

快速开始

export BASE_LLM_API=http://localhost:11434/v1
export EMBEDDING_MODEL=granite-embedding-278m-multilingual-Q6_K-1743674737397:latest
export VECTOR_STORE_PATH=./vector_store
export CHUNK_SIZE=500

# Run (global install)
mcp-rag-server

# Or via npx
npx mcp-rag-server

💡 提示: 建议使用 Ollama 生成嵌入。安装并拉取 nomic-embed-text 模型:

ollama pull nomic-embed-text
export EMBEDDING_MODEL=nomic-embed-text

配置

变量描述默认值
BASE_LLM_API嵌入 API 的基础 URLhttp://localhost:11434/v1
LLM_API_KEY大模型提供商的 API 密钥(空)
EMBEDDING_MODEL嵌入模型标识符nomic-embed-text
VECTOR_STORE_PATH本地向量存储目录./vector_store
CHUNK_SIZE每个文本块的字符数(数字)500

💡 建议: 为获得最佳性能,请使用 nomic-embed-text 等 Ollama 嵌入模型。

用法

MCP 工具

启动后,该服务会通过 MCP 提供以下工具:

  • embedding_documents(path: string):为指定路径下的文档建立索引
  • query_documents(query: string, k?: number):检索排名最高的 k 个文本块(默认值为 15)
  • remove_document(path: string):移除指定文档
  • remove_all_documents(confirm: boolean):清除整个索引(confirm=true)
  • list_documents():列出所有已建立索引的文档路径
MCP 资源

客户端还可以通过 URI 读取资源:

  • rag://documents — 列出所有文档 URI
  • rag://document/{path} — 获取文档的完整内容
  • rag://query-document/{numberOfChunks}/{query} — 以资源形式查询文档
  • rag://embedding/status — 查看当前索引状态(已完成、失败、总数)

RAG 的工作原理

  1. 建立索引: 读取文件,根据 CHUNK_SIZE 将文本切分为多个文本块,并将其加入嵌入处理队列。
  2. 生成嵌入: 逐个处理每个文本块并调用嵌入 API,将向量存储在 SQLite 中。
  3. 查询: 为查询生成嵌入,从向量存储中检索最相近的文本块,并将其返回给客户端。

开发

npm install
npm run build      # Compile TypeScript
npm start          # Run server
npm run watch      # Watch for changes

贡献

欢迎贡献!请在 GitHub 上提交问题或拉取请求。

许可证

MIT 2025 Quan Le

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。