关于 mcp-rag-server
mcp-rag-server 是一个实现检索增强生成(RAG)的 MCP 服务。它为文档建立索引,并通过 MCP 协议向 LLM 提供相关内容,使 LLM 能基于用户文档回答问题。项目使用本地 SQLite 向量存储,可连接多种嵌入模型提供方。
主要功能
- 01索引 txt、md、json、jsonl 和 csv 文档
- 02可自定义的文本分块大小
- 03基于 SQLite 的本地向量存储
- 04支持 OpenAI、Ollama、Granite 和 Nomic 嵌入
- 05通过 stdio 提供 MCP 工具与资源
适用场景
- 01让 LLM 基于本地文档内容回答问题
- 02在本地为项目文档建立可检索的索引
- 03通过 Ollama 嵌入模型在本地完成检索
MCP 相关
该项目是 MCP 服务,向 MCP 客户端暴露 embedding_documents、query_documents 等工具,以及 rag:// 开头的资源。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
5收录的工具列表 · 更新于 3 周前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| path | string | 是 | 包含要编入索引的 .json、.jsonl、.txt、.md、.csv 文件的路径 |
详细介绍
mcp-rag-server
支持检索增强生成(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 的基础 URL | http://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— 列出所有文档 URIrag://document/{path}— 获取文档的完整内容rag://query-document/{numberOfChunks}/{query}— 以资源形式查询文档rag://embedding/status— 查看当前索引状态(已完成、失败、总数)
RAG 的工作原理
- 建立索引: 读取文件,根据
CHUNK_SIZE将文本切分为多个文本块,并将其加入嵌入处理队列。 - 生成嵌入: 逐个处理每个文本块并调用嵌入 API,将向量存储在 SQLite 中。
- 查询: 为查询生成嵌入,从向量存储中检索最相近的文本块,并将其返回给客户端。
开发
npm install
npm run build # Compile TypeScript
npm start # Run server
npm run watch # Watch for changes
贡献
欢迎贡献!请在 GitHub 上提交问题或拉取请求。
许可证
MIT 2025 Quan Le
评论
支持 Markdown
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。