Are you the author? Sign in to claim
RAG-MCP-Server
Modular RAG MCP Server 是一个面向私有知识库的模块化 RAG(Retrieval-Augmented Generation,检索增强生成)服务框架。项目支持文档摄取、稠密/稀疏混合检索、可选重排、链路追踪、评估面板,并通过 MCP(Model Context Protocol)协议向外暴露知识库查询能力。
该项目适合作为企业内部知识库、团队文档问答、AI 助手工具接入、RAG 原型验证和检索质量分析的工程基础。
更多架构细节可参考 系统架构说明。
| 模块 | 能力 |
|---|---|
| 文档摄取 | 文件完整性检查、PDF 解析、分块、元数据增强、图片描述、向量化和存储 |
| 混合检索 | Dense 向量检索 + BM25 稀疏检索 + RRF 融合排序 |
| 重排 | 支持关闭、Cross-Encoder 重排或 LLM 重排 |
| MCP 服务 | 通过标准 MCP tools 对外提供知识库查询能力 |
| Dashboard | 基于 Streamlit 的系统总览、数据浏览、摄取管理、链路追踪和评估面板 |
| 可观测性 | 记录 Ingestion 和 Query 两条链路的结构化 trace |
| 评估 | 支持自定义指标和 Ragas 评估扩展 |
| 可插拔架构 | LLM、Embedding、Reranker、Splitter、VectorStore、Evaluator 均通过接口和工厂模式组织 |
文档
-> Ingestion Pipeline
-> Loader
-> Chunker
-> Transform
-> Dense + Sparse Encoding
-> ChromaDB + BM25 Index + Image Index
-> Query Pipeline
-> Query Processing
-> Dense Retrieval
-> Sparse Retrieval
-> RRF Fusion
-> Optional Rerank
-> Response + Citations
-> MCP Tools / CLI / Dashboard
主要目录:
src/ingestion/:文档摄取流水线、分块、编码和存储协调。src/core/query_engine/:查询处理、混合检索、融合排序和重排编排。src/mcp_server/:MCP 服务、协议处理和工具注册。src/observability/:日志、trace、Dashboard 和评估相关能力。src/libs/:LLM、Embedding、Loader、Splitter、Reranker、VectorStore 等 provider 抽象和实现。scripts/:摄取、查询、评估和 Dashboard 启动脚本。当前 MCP Server 注册了以下工具:
query_knowledge_hub:对指定 collection 执行混合检索并返回带引用的结果。list_collections:列出当前向量库中的 collection,可选返回统计信息。get_document_summary:根据文档 ID 查询文档标题、摘要、来源、标签和 chunk 数量。Provider 配置位于 config/settings.yaml。
当前代码支持的 provider 类型包括:
python -m venv .venv
.venv\Scripts\activate
python -m pip install --upgrade pip
python -m pip install -e ".[dev]"
macOS 或 Linux:
source .venv/bin/activate
编辑 config/settings.yaml,配置实际使用的模型和存储参数。
至少需要关注:
llm.providerllm.modelllm.api_key 或 provider 对应 endpoint 配置embedding.providerembedding.modelembedding.api_key 或 provider 对应 endpoint 配置vector_store.persist_directoryvector_store.collection_name默认运行数据目录:
data/db/chroma:ChromaDB 持久化目录data/db/bm25:BM25 稀疏索引data/db/ingestion_history.db:摄取历史与文件完整性记录data/db/image_index.db:图片索引data/images:提取出的图片资源这些运行时目录默认不会提交到 git。
摄取单个 PDF:
python scripts/ingest.py --path documents/report.pdf --collection default
摄取目录下的所有 PDF:
python scripts/ingest.py --path documents/ --collection default
强制重新处理已摄取文件:
python scripts/ingest.py --path documents/report.pdf --collection default --force
python scripts/query.py --query "Azure OpenAI 如何配置?" --collection default
查看 dense、sparse、fusion、rerank 等中间结果:
python scripts/query.py --query "RRF 融合策略是什么?" --collection default --verbose
关闭重排:
python scripts/query.py --query "RRF 融合策略是什么?" --collection default --no-rerank
python scripts/start_dashboard.py
指定 host 和 port:
python scripts/start_dashboard.py --host localhost --port 8502
python -m src.mcp_server.server
服务使用 stdio transport。接入 MCP 兼容客户端时,将客户端命令指向该 Python 模块即可。
示例命令结构:
{
"command": "python",
"args": ["-m", "src.mcp_server.server"]
}
config/
settings.yaml 主配置文件
prompts/ Transform 和 Rerank 使用的提示词模板
scripts/
ingest.py 文档摄取命令行入口
query.py 查询命令行入口
evaluate.py 评估命令行入口
start_dashboard.py Dashboard 启动入口
src/
core/ 共享类型、配置、trace、查询引擎、响应构建
ingestion/ 摄取流水线和文档生命周期管理
libs/ provider 抽象和适配器
mcp_server/ MCP server 和 tools
observability/ 日志、trace、Dashboard、评估
tests/
unit/ 单元测试
integration/ 集成测试
e2e/ 端到端测试
fixtures/ 测试数据和样例文档
运行单元测试:
pytest tests/unit -v
运行全部测试:
pytest
部分 integration/e2e 测试依赖真实 provider 凭证或本地服务。只运行快速测试时可使用 pytest markers:
pytest -m "unit and not llm"
项目通过接口和工厂模式组织 provider。新增或替换组件时,建议保持配置驱动的方式:
src/libs/llm/src/libs/embedding/src/libs/vector_store/src/libs/splitter/src/libs/reranker/src/libs/evaluator/ 或 src/observability/evaluation/新增组件时应完成:
config/settings.yaml 中补充配置项。MIT
Run Claude Code as an MCP server so any agent can delegate coding tasks to it
Browser automation using accessibility snapshots instead of screenshots
Google's universal MCP server supporting PostgreSQL, MySQL, MongoDB, Redis, and 10+ databases
Official GitHub integration for repos, issues, PRs, and CI/CD workflows