使用说明
mcp-rag服务器
一种支持检索增强生成(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
💡 提示: 我们建议使用 没有 用于嵌入。安装并拉动
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 |
LLM提供程序的API密钥 | (空) |
EMBEDDING_MODEL |
嵌入模型标识符 | nomic-embed-text |
VECTOR_STORE_PATH |
本地矢量存储目录 | ./vector_store |
CHUNK_SIZE |
每个文本块的字符数 | 500 |
💡 建议: 使用Olama嵌入模型,如
nomic-embed-text为了获得最佳性能。
用法
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.
许可证
麻省理工学院2025全乐