检索增强生成服务

一个基于MCP协议的检索增强生成服务,能够索引文档并为大型语言模型提供相关上下文。

  • by kwanLeeFrmVi
  • TypeScript
  • 本地部署
  • 36 星标
  • 更新于
在 GitHub 查看 kwanLeeFrmVi/mcp-rag-server

使用说明

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 --列出所有文档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.

许可证

麻省理工学院2025全乐