mcp-rag-server - RAG MCP Server
kwanLeeFrmVi
README
mcp-rag-server - RAG MCP 服务器
mcp-rag-server 是一个模型上下文协议 (MCP) 服务器,它支持检索增强生成 (RAG) 功能。它通过高效地索引和检索相关信息,使大型语言模型 (LLM) 能够根据您的文档内容回答问题。
目录
概述
mcp-rag-server 允许您将 RAG 功能无缝集成到您的应用程序中。它的工作原理如下:
- 索引: 解析文档并将其拆分为可管理的小块。
- 嵌入: 为每个文本块生成向量嵌入。
- 查询: 将查询嵌入与存储的文档块匹配以检索上下文。
这使得下游 LLM(通过像 Claude Desktop 这样的 MCP 客户端)能够生成与上下文相关的响应。
MCP 服务器用法
基本配置
通过将以下内容添加到您的配置中,将服务器与您的 MCP 客户端集成:
{
"mcpServers": {
"rag": {
"command": "npx",
"args": ["-y", "mcp-rag-server"]
}
}
}
注意: 确保在您的 MCP 客户端运行命令的环境中设置了所需的环境变量。
高级配置
对于自定义设置,包括环境变量:
{
"mcpServers": {
"rag": {
"command": "npx",
"args": ["-y", "mcp-rag-server"],
"env": {
"BASE_LLM_API": "http://localhost:11434/v1",
"LLM_API_KEY": "",
"EMBEDDING_MODEL": "granite-embedding-278m-multilingual-Q6_K-1743674737397:latest",
"VECTOR_STORE_PATH": "/user-dir/vector_store_locate/",
"CHUNK_SIZE": "500"
}
}
}
}
注意: 通过客户端配置环境变量取决于其功能。通常建议使用系统级环境变量。
安装
从源代码安装
-
克隆存储库:
git clone https://github.com/yourusername/mcp-rag-server.git cd mcp-rag-server
-
安装依赖项:
npm install
-
构建项目:
npm run build
-
运行服务器:
确保您的环境变量已设置,然后启动服务器:
npm start
可用的 RAG 工具
服务器提供以下可通过 MCP 访问的操作:
-
index_documents:
从目录或单个文件索引文档。
支持的文件类型:.txt
、.md
、.json
、.jsonl
、.csv
-
query_documents:
通过使用 RAG 查询索引文档来检索上下文。 -
remove_document:
按路径从索引中删除特定文档。 -
remove_all_documents:
清除整个文档索引(需要确认)。 -
list_documents:
显示所有索引的文档路径。
RAG 的工作原理
服务器中的 RAG 过程包括以下步骤:
-
索引:
index_documents
工具接受文件或目录路径以开始处理。 -
分块和嵌入:
服务器将文档拆分为块(可通过CHUNK_SIZE
配置),并使用通过BASE_LLM_API
指定的EMBEDDING_MODEL
生成向量嵌入。 -
存储:
嵌入和块存储在VECTOR_STORE_PATH
指定的路径下的本地向量数据库中。 -
查询:
当调用query_documents
时,服务器会为您的查询生成嵌入。 -
搜索:
它检索与查询匹配的前k
个文档块。 -
上下文关联:
检索到的块作为上下文返回给您的 LLM,然后 LLM 生成最终答案。
flowchart LR
A[用户通过 index_documents 提供文档路径] --> B(RAG 服务器读取并分块文档)
B --> C{通过 LLM API 生成嵌入}
C --> D[将嵌入和块存储在向量数据库中]
E[用户通过 query_documents 提问] --> F{生成查询嵌入}
F --> G{搜索向量数据库}
G -- 前 k 个块 --> H[将上下文返回给用户/客户端]
H --> I(客户端/LLM 生成最终答案)
环境变量
服务器依赖于多个环境变量。这些可以在系统级别设置,也可以通过您的 MCP 客户端配置传递。
默认环境设置
如果未显式设置,将使用代码中的以下默认值:
-
BASE_LLM_API
(必需)
嵌入 API 端点的基本 URL。
默认值:http://localhost:11434/v1
-
LLM_API_KEY
(可选)
嵌入服务的 API 密钥(如果需要)。
默认值:""
(空字符串) -
EMBEDDING_MODEL
(必需)
要与 API 一起使用的嵌入模型。
默认值:granite-embedding-278m-multilingual-Q6_K-1743674737397:latest
-
VECTOR_STORE_PATH
(可选)
用于存储向量数据库的目录路径。
默认值:./vector_store
-
CHUNK_SIZE
(可选)
将文档拆分为块的目标大小(以字符为单位)。
默认值:500
嵌入提供商的配置示例
1. Ollama(本地)
- 设置:
- 确保 Ollama 正在运行并且已拉取所需的模型(例如,
ollama pull nomic-embed-text
)。
- 确保 Ollama 正在运行并且已拉取所需的模型(例如,
- 变量:
BASE_LLM_API=http://localhost:11434/v1 LLM_API_KEY= EMBEDDING_MODEL=nomic-embed-text
2. LM Studio(本地)
- 设置:
- 启动 LM Studio 服务器并加载嵌入模型。
- 变量:
BASE_LLM_API=http://localhost:1234/v1 LLM_API_KEY= EMBEDDING_MODEL=lm-studio-model
3. OpenAI API
- 设置:
- 使用您的 OpenAI 凭据。
- 变量:
BASE_LLM_API=https://api.openai.com/v1 LLM_API_KEY=YOUR_OPENAI_API_KEY EMBEDDING_MODEL=text-embedding-ada-002
4. OpenRouter
- 设置:
- 使用您的 OpenRouter API 密钥。
- 变量:
BASE_LLM_API=https://openrouter.ai/api/v1 LLM_API_KEY=YOUR_OPENROUTER_API_KEY EMBEDDING_MODEL=openai/text-embedding-ada-002
5. Google Gemini(通过 OpenAI 兼容性端点)
- 设置:
- 按照 Google 的说明启用兼容性端点。
- 变量:
BASE_LLM_API=https://generativelanguage.googleapis.com/v1beta LLM_API_KEY=YOUR_GEMINI_API_KEY EMBEDDING_MODEL=embedding-001
重要提示: 始终参考您的提供商的文档,以获取精确的 API 端点、模型名称和身份验证要求。
与您的客户端和 AI 代理集成
设置 MCP 服务器后,将其与您的客户端(或 AI 代理)集成,以便它可以无缝地利用 RAG 操作。
配置您的 MCP 客户端
确保您的客户端配置包含 RAG 服务器,如下所示:
{
"mcpServers": {
"rag": {
"command": "npx",
"args": ["-y", "mcp-rag-server"],
"env": {
"BASE_LLM_API": "http://localhost:11434/v1",
"LLM_API_KEY": "",
"EMBEDDING_MODEL": "granite-embedding-278m-multilingual-Q6_K-1743674737397:latest",
"VECTOR_STORE_PATH": "./vector_store",
"CHUNK_SIZE": "500"
}
}
}
}
示例聊天对话
以下是一个示例对话,演示了 AI 代理如何指示 MCP 服务器索引文档并查询索引的文档:
用户:
嘿,你能添加我的文档进行索引吗?我将它们存储在 /data/docs
中。
AI 代理:
当然,我现在索引 /data/docs
中的文档。
([工具调用]:代理发出带有路径 /data/docs
的 "index_documents" 命令。)
AI 代理(处理后):
文档已成功索引。
用户:
太好了!现在,你能帮我找出我们最新报告中的主要主题是什么吗?
AI 代理:
好的,我将查询索引的文档以检索与您的报告相关的上下文。
([工具调用]:代理发出带有查询 "我们最新报告中的主要主题是什么?" 的 "query_documents" 命令。)
AI 代理(处理后):
我从您的文档中找到了一些相关的上下文。根据检索到的信息,主要主题包括市场趋势、客户反馈和即将推出的产品功能。
开发
先决条件
- Node.js(有关版本要求,请参见
package.json
) - npm
构建
npm run build
测试
待实施:
# npm test
贡献
欢迎贡献!如果您希望提出更改或添加功能,请:
- 在提交拉取请求之前,先打开一个 issue 进行讨论。
- 遵循存储库中提供的代码样式和提交指南。
许可证
该项目已获得 MIT 许可证 的许可。
推荐服务器
Crypto Price & Market Analysis MCP Server
一个模型上下文协议 (MCP) 服务器,它使用 CoinCap API 提供全面的加密货币分析。该服务器通过一个易于使用的界面提供实时价格数据、市场分析和历史趋势。 (Alternative, slightly more formal and technical translation): 一个模型上下文协议 (MCP) 服务器,利用 CoinCap API 提供全面的加密货币分析服务。该服务器通过用户友好的界面,提供实时价格数据、市场分析以及历史趋势数据。
MCP PubMed Search
用于搜索 PubMed 的服务器(PubMed 是一个免费的在线数据库,用户可以在其中搜索生物医学和生命科学文献)。 我是在 MCP 发布当天创建的,但当时正在度假。 我看到有人在您的数据库中发布了类似的服务器,但还是决定发布我的服务器。
mixpanel
连接到您的 Mixpanel 数据。 从 Mixpanel 分析查询事件、留存和漏斗数据。

Sequential Thinking MCP Server
这个服务器通过将复杂问题分解为顺序步骤来促进结构化的问题解决,支持修订,并通过完整的 MCP 集成来实现多条解决方案路径。

Nefino MCP Server
为大型语言模型提供访问德国可再生能源项目新闻和信息的能力,允许按地点、主题(太阳能、风能、氢能)和日期范围进行筛选。
Vectorize
将 MCP 服务器向量化以实现高级检索、私有深度研究、Anything-to-Markdown 文件提取和文本分块。
Mathematica Documentation MCP server
一个服务器,通过 FastMCP 提供对 Mathematica 文档的访问,使用户能够从 Wolfram Mathematica 检索函数文档和列出软件包符号。
kb-mcp-server
一个 MCP 服务器,旨在实现便携性、本地化、简易性和便利性,以支持对 txtai “all in one” 嵌入数据库进行基于语义/图的检索。任何 tar.gz 格式的 txtai 嵌入数据库都可以被加载。
Research MCP Server
这个服务器用作 MCP 服务器,与 Notion 交互以检索和创建调查数据,并与 Claude Desktop Client 集成以进行和审查调查。

Cryo MCP Server
一个API服务器,实现了模型补全协议(MCP),用于Cryo区块链数据提取,允许用户通过任何兼容MCP的客户端查询以太坊区块链数据。