mcp-local-rag

使用说明内容如下,包含项目简介、主要功能点、安装与运行步骤,以及服务器对 MCP 客户端的配置说明。

项目简介

本项目实现了一个本地 MCP 服务器,面向与 LLM 客户端的上下文服务需求。它通过以下方式工作:

  • 提供对文档资源的托管、管理和检索能力(集合、文档元数据、文本分块及向量嵌入)。
  • 注册并暴露多种工具,供 LLM 客户端以 JSON-RPC 形式调用(如创建/删除集合、索引文件、目录、删除文档、搜索、获取文档内容等)。
  • 使用 SQLite 保存元数据、使用 Qdrant 保存向量与检索结果,嵌入模型通过本地配置加载。
  • 支持对 PDF(含 OCR)、DOCX、 plaintext 的文本提取与处理;OCR 功能可通过 GEMINI_API_KEY 环境变量启用(未提供密钥时仅文本提取)。
  • 通过 FastMCP 提供 MCP 协议的服务端实现,支持多种传输协议(如 Stdio、SSE、WebSocket)以便与 LLM 客户端通信。

主要功能点

  • MCP 服务端实现:基于 FastMCP,处理 JSON-RPC 请求并返回响应,具备会话生命周期管理。
  • 资源管理与数据存储:
    • 集合(collections)管理:创建、删除、列出、获取信息
    • 文档(documents)管理:索引、列出、按路径检索、删除
    • 元数据存储:使用 SQLite 保存文档、集合、索引时间等信息
    • 向量存储:使用 Qdrant 保存文档分块及嵌入向量,支持按集合、文档筛选与全文检索
  • 工具注册与执行:
    • 提供一组工具(工具集合)供 MCP 客户端调用,如索引文件/目录、搜索、获取文档内容等
    • 工具实现涵盖文本提取、分块、嵌入、以及对向量检索的调用
  • 内容提取与处理:
    • PDF 提取:支持 OCR(需 Gemini API,未提供时禁用 OCR)
    • DOCX、纯文本提取支持
    • 分块与嵌入:自定义分块策略,基于 embedding 模型生成向量
  • 配置与扩展性:
    • 数据目录可通过 MCP_LOCAL_RAG_DATA_DIR 环境变量自定义
    • Embedding 模型通过 EMBEDDING_MODEL 配置(默认 BAAI/bge-small-en-v1.5)
    • 数据库与向量数据库默认路径位于 .mcp-local-rag/ 下,便于本地化部署
  • 安全与容错:
    • 在遇到 OCR 不可用时会回退文本提取路径
    • 对请求的参数和集合、文档存在性进行校验并抛出自定义错误

安装与运行步骤(简要)

  • 准备工作
    • 确保已安装 Python (建议 3.8+)
    • 安装所需依赖(如 mcp 框架、google-genai、pymupdf、qdrant 客户端等;按照项目需求文档或 README 的指引安装)
  • 配置环境
    • 可选:设置 GEMINI_API_KEY(用于 PDF OCR;未设置时不会进行 OCR)
    • 可选:设置 MCP_LOCAL_RAG_DATA_DIR 指向自定义数据目录
  • 运行服务器
    • 将服务器作为 MCP 服务对外暴露,参考仓库 README 的运行方式(README 给出使用 uvx 的示例配置,结合 MCP 客户端启动方式)
    • 默认服务器名称为 local-rag,启动时会创建并初始化必要的数据库与向量存储
  • MCP 客户端连接
    • 使用 MCP 客户端的配置,连接到服务器,调用诸如创建集合、索引文件、搜索等工具
    • 服务器会以 JSON-RPC 的请求/响应格式处理并返回结果

服务器配置(MCP 客户端所需信息,描述性文本,供参考而非代码)

  • server 名称:mcp-local-rag
  • 启动命令与参数(示例,实际以你的运行环境为准):
    • command: uvx
    • args: ["mcp-local-rag@latest"]
  • 说明:上述配置用于 MCP 客户端在本地启动并连接到 MCP 服务器。仓库提供了在 VS Code 下的示例配置,若遇到 SSL 问题还提供了额外的参数组合来指定本机证书链。MCP 客户端本身不需要额外的实现,只需按照示例提供的启动信息与服务器名称即可建立连接。
  • 备注:如果你使用的是容器或打包分发方式,请参照项目的打包与部署说明进行相应替换(如镜像标签、命令行入口等)。

基本使用方法

  • 启动后,LLM 客户端可以通过 MCP 的 JSON-RPC 调用向服务器请求:
    • 创建/删除集合:用于按项目或数据域划分文档
    • 索引文件/目录:将文档内容提取、分块、嵌入并存入向量数据库
    • 删除文档/集合:清理相关向量与元数据
    • 搜索:对指定查询进行向量检索,返回相关文本片段与元数据
    • 获取文档内容:将选定文档的片段输出到 Markdown 文件
  • 环境变量与数据目录
    • GEMINI_API_KEY:开启 PDF OCR 的 Gemini OCR 服务
    • MCP_LOCAL_RAG_DATA_DIR:自定义数据目录(包含 metadata.db 与 qdrant 子目录)
    • EMBEDDING_MODEL:更换嵌入模型(默认为 BAAI/bge-small-en-v1.5)
  • 常见操作顺序示例(概述)
    • 启动服务器
    • 通过 MCP 客户端创建一个集合(如要处理某一组文档)
    • 使用 index_files 或 index_directory 将文档加入集合
    • 使用 search 或 search_collection 进行语义检索,获取相关文本片段及上下文
    • 使用 get_document_content 导出文档片段到 Markdown

其他说明

  • 该实现为一个完整的、可运行的 MCP 服务器端实现,具有明确的资源、工具、向量检索和文档提取功能,非简单示例或测试代码。
  • 代码结构清晰,模块间解耦,便于扩展和维护;MCP 服务端对外提供标准的 JSON-RPC 风格接口,客户端通过此接口进行交互。

服务器信息