mcp-rag-server - RAG MCP Server

mcp-rag-server - RAG MCP Server

shtse8

研究与数据
访问服务器

README

MCP RAG 服务器

<!-- Badges -->

NPM 版本 许可证 CI 状态

<!-- Coverage Status --> <!-- TODO: 设置完成后添加覆盖率徽章 -->

mcp-rag-server 是一个 模型上下文协议 (MCP) 服务器,它为连接的 LLM 启用检索增强生成 (RAG) 功能。它索引您项目中的文档,并提供相关的上下文来增强 LLM 的响应。

使用 Google GenkitChromaDBOllama 构建。

快速开始

(在此处提供一个最小的可运行示例,假设 Docker 设置已完成)

# 示例:通过 MCP 客户端查询(概念性的)
# (实际用法取决于客户端的实现)

为什么选择这个项目?

  • 无缝 MCP 集成: 专为模型上下文协议生态系统设计。
  • 本地控制: 利用本地模型 (Ollama) 和向量存储 (ChromaDB) 来实现隐私和定制。
  • 自动上下文: 自动索引您的项目文件,为 LLM 提供相关的上下文。
  • 可扩展: 使用 Genkit 构建,允许潜在的未来扩展和集成。

特性

  • 自动索引: 在启动时扫描项目目录(可配置)并索引支持的文件。
  • 支持的文件类型: .txt.md、代码文件(通过通用拆分)、.json.jsonl.csv。(代码文件分块是基本的)。
  • 分层分块: 智能地对 Markdown 文件进行分块,分离文本和代码块。
  • 向量存储: 使用 ChromaDB 进行持久向量存储。
  • 本地嵌入: 利用 Ollama 进行本地嵌入生成(默认:nomic-embed-text)。
  • MCP 工具: 将 RAG 函数公开为标准 MCP 工具:
    • indexDocuments:手动索引文件或目录。
    • queryDocuments:检索查询的相关文档块。
    • removeDocument:按源路径删除特定文档的块。
    • removeAllDocuments:清除当前项目的整个索引。
    • listDocuments:列出已索引的文档源路径。
  • Docker 化: 包含一个 docker-compose.yml,方便设置服务器、ChromaDB 和 Ollama。

设计理念

  • 简单性: 旨在提供直接的设置和使用体验,尤其是在使用 Docker Compose 时。
  • 模块化: 利用 Genkit 流来组织 RAG 逻辑。
  • 本地优先: 优先使用 Ollama 和 ChromaDB 等本地工具来实现核心功能。

安装和使用(Docker Compose - 推荐)

此方法在隔离的容器中运行服务器及其依赖项(ChromaDB、Ollama)。

  1. 先决条件:

    • 安装 Docker Desktop 或 Docker Engine。
    • 确保主机上的端口 8000 (ChromaDB) 和 11434 (Ollama) 空闲,或者在 docker-compose.yml 中调整端口。
  2. 克隆存储库:

    git clone https://github.com/sylphlab/rag-server-mcp.git
    cd mcp-rag-server
    
  3. 启动服务:

    docker-compose up -d --build
    
    • 这会构建服务器镜像,下载 ChromaDB 和 Ollama 镜像,并启动服务。
    • 首次运行可能需要一些时间来下载镜像和构建。
  4. 拉取嵌入模型(首次运行): 默认的嵌入模型 (nomic-embed-text) 需要在 Ollama 容器启动_后_拉取到其中。

    docker exec ollama ollama pull nomic-embed-text
    
    • 在运行此命令之前,请在 docker-compose up 之后等待片刻。您只需要执行一次此操作,因为该模型将持久保存在 Docker 卷中。
  5. 与 MCP 客户端集成: 配置您的 MCP 客户端(例如,在 VS Code 设置或其他 MCP 服务器中)以连接到此服务器。由于它通过 Docker Compose 运行,因此通常不会直接在客户端配置中使用 npx 运行它。相反,客户端需要知道如何与正在运行的服务器通信(在这种设置中,默认情况下不会直接公开服务器,通常通过其他方式进行通信,例如,如果服务器公开了 HTTP 接口,则通过直接 API 调用,或者如果适用,则通过共享卷/数据库)。

    注意: 当前设置主要通过 Genkit 流促进 此项目内 或可能同一 Docker 网络内的其他服务的 RAG。从外部主机直接进行 MCP 客户端集成需要从 Docker 容器公开服务器的 MCP 端口。

配置(环境变量)

通过环境变量配置服务器,通常在 docker-compose.yml 文件中为 rag-server 服务设置:

  • CHROMA_URL: ChromaDB 服务的 URL。(Compose 中的默认值:http://chromadb:8000
  • OLLAMA_HOST: Ollama 服务的 URL。(Compose 中的默认值:http://ollama:11434
  • INDEX_PROJECT_ON_STARTUP: 设置为 true(默认)或 false 以启用/禁用服务器启动时的自动索引。
  • INDEXING_EXCLUDE_PATTERNS: 以逗号分隔的 glob 模式列表,用于从索引中排除(例如,**/node_modules/**,**/.git/**)。默认值在 autoIndexer.ts 中定义。
  • GENKIT_ENV: 设置为 productiondevelopment(影响日志记录等)。
  • LOG_LEVEL: 设置日志级别(例如,debuginfowarnerror)。

(有关更多详细信息,请参见 docker-compose.ymlsrc/config/genkit.ts)

性能

(性能基准测试尚未提供。)

与其他解决方案的比较

(与其他 RAG 解决方案的比较将在稍后添加。)

未来计划

  • 改进代码文件分块策略。
  • 增加对更多文件类型(例如,PDF)的支持。
  • 增强查询的过滤功能。
  • 调查并解决 E2E 测试失败。
  • 添加更强大的错误处理。

开发

  1. 先决条件: Node.js (LTS), npm。
  2. 安装依赖项: npm install
  3. 构建: npm run build
  4. 运行 Linters/Formatters:
    • npm run lint
    • npm run format
    • npm run validate(运行格式检查、lint、类型检查、测试)
  5. 运行测试:
    • npm test(运行单元测试)
    • npm run test:cov(运行带有覆盖率的单元测试)
    • E2E 测试: 需要运行 Docker Compose 环境 (docker-compose up -d)。通过 Vitest 命令运行特定的 E2E 测试,或者可能集成到 npm test 中。 (注意:由于外部服务交互问题,E2E 测试当前失败)。
  6. 在本地运行服务器(不使用 Docker):
    • 确保 ChromaDB 和 Ollama 正在运行且可访问(例如,本地安装或单独的 Docker 容器)。
    • 设置环境变量 (CHROMA_URL, OLLAMA_HOST)。
    • npm start

文档

完整文档可在 [TODO: 添加到已部署的 VitePress 站点的链接] 中找到。

贡献

欢迎贡献!请在提交拉取请求之前打开一个 issue 来讨论更改。遵循编码标准和提交约定。

许可证

此项目已获得 MIT 许可证 的许可。

推荐服务器

Crypto Price & Market Analysis MCP Server

Crypto Price & Market Analysis MCP Server

一个模型上下文协议 (MCP) 服务器,它使用 CoinCap API 提供全面的加密货币分析。该服务器通过一个易于使用的界面提供实时价格数据、市场分析和历史趋势。 (Alternative, slightly more formal and technical translation): 一个模型上下文协议 (MCP) 服务器,利用 CoinCap API 提供全面的加密货币分析服务。该服务器通过用户友好的界面,提供实时价格数据、市场分析以及历史趋势数据。

精选
TypeScript
MCP PubMed Search

MCP PubMed Search

用于搜索 PubMed 的服务器(PubMed 是一个免费的在线数据库,用户可以在其中搜索生物医学和生命科学文献)。 我是在 MCP 发布当天创建的,但当时正在度假。 我看到有人在您的数据库中发布了类似的服务器,但还是决定发布我的服务器。

精选
Python
mixpanel

mixpanel

连接到您的 Mixpanel 数据。 从 Mixpanel 分析查询事件、留存和漏斗数据。

精选
TypeScript
Sequential Thinking MCP Server

Sequential Thinking MCP Server

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

精选
Python
Nefino MCP Server

Nefino MCP Server

为大型语言模型提供访问德国可再生能源项目新闻和信息的能力,允许按地点、主题(太阳能、风能、氢能)和日期范围进行筛选。

官方
Python
Vectorize

Vectorize

将 MCP 服务器向量化以实现高级检索、私有深度研究、Anything-to-Markdown 文件提取和文本分块。

官方
JavaScript
Mathematica Documentation MCP server

Mathematica Documentation MCP server

一个服务器,通过 FastMCP 提供对 Mathematica 文档的访问,使用户能够从 Wolfram Mathematica 检索函数文档和列出软件包符号。

本地
Python
kb-mcp-server

kb-mcp-server

一个 MCP 服务器,旨在实现便携性、本地化、简易性和便利性,以支持对 txtai “all in one” 嵌入数据库进行基于语义/图的检索。任何 tar.gz 格式的 txtai 嵌入数据库都可以被加载。

本地
Python
Research MCP Server

Research MCP Server

这个服务器用作 MCP 服务器,与 Notion 交互以检索和创建调查数据,并与 Claude Desktop Client 集成以进行和审查调查。

本地
Python
Cryo MCP Server

Cryo MCP Server

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

本地
Python