Skip to main content
Glama

RAG-Anything MCP Server

RAG-Anything 的独立 FastMCP 服务器项目。该服务器通过 MCP 暴露文档解析、摄取、查询、多模态查询以及轻量级图谱检查工具。

快速开始

在当前目录中运行:

python3 -m venv .venv
source .venv/bin/activate
python scripts/install.py --dev
raganything-mcp configure
raganything-mcp serve

python scripts/install.py --dev 会自动检测本机是否有可用 NVIDIA GPU:检测到 GPU 时安装 GPU 版本解析依赖;未检测到 GPU 时安装 CPU 版本解析依赖,避免在无 GPU 机器上下载 CUDA/cuDNN 大包。

如需排错,也可以手动强制安装目标:

python scripts/install.py --dev --cpu
python scripts/install.py --dev --gpu

raganything-mcp configure 会创建本地 .env 文件。raganything-mcp serve 会为你的 MCP 客户端启动 stdio MCP 服务器。

模型配置层

这里有两个独立的模型层:

  • 你的智能体客户端模型在连接 MCP 的客户端中配置,例如 OpenClaw 或 Claude Code。

  • 此 MCP 服务器的 .env 会配置 RAG-Anything 内部用于 LLM 调用、嵌入以及视觉/多模态处理的模型。

更改客户端模型不会改变 RAG-Anything 内部的嵌入、解析或视觉设置。请通过此服务器的 .env 配置这些设置。

配置

运行:

raganything-mcp configure

该向导会写入 .env 设置,包括:

  • LLM 提供商、基础 URL、模型和 API 密钥

  • 嵌入提供商、基础 URL、模型、维度和 API 密钥

  • 视觉提供商、基础 URL、模型和 API 密钥

  • LightRAG 向量存储和图谱存储后端

  • 解析器、解析方法、解析 backend、模型下载策略、解析超时、工作目录、输出目录、多模态处理标志和可选多模态处理超时

LLM、嵌入和视觉提供商可以不同。例如,你可以使用一个提供商进行聊天,另一个提供商生成嵌入,并使用单独的支持视觉的模型进行多模态处理。

存储后端

默认存储仍保持 LightRAG 本地文件模式:

LIGHTRAG_VECTOR_STORAGE=NanoVectorDBStorage
LIGHTRAG_GRAPH_STORAGE=NetworkXStorage

如需使用 Milvus Lite 保存向量、Neo4j 保存知识图谱,可设置:

LIGHTRAG_VECTOR_STORAGE=MilvusVectorDBStorage
LIGHTRAG_GRAPH_STORAGE=Neo4JStorage

MILVUS_URI=rag_storage/milvus_lite.db
MILVUS_DB_NAME=
MILVUS_INDEX_TYPE=AUTOINDEX
MILVUS_METRIC_TYPE=COSINE

NEO4J_URI=bolt://localhost:7687
NEO4J_USERNAME=neo4j
NEO4J_PASSWORD=your_neo4j_password
NEO4J_DATABASE=neo4j
NEO4J_WORKSPACE=raganything

MILVUS_URI 指向本地 .db 文件时使用 Milvus Lite;后续升级到远程 Milvus 或 Zilliz 时,只需替换该 URI 和认证配置。Neo4j 需要本地或远程服务已经运行。

当前 MCP 只显式切换 LightRAG 的向量存储和图谱存储;KV 存储与文档状态存储仍保持默认本地 JSON。raganything_graph_statsraganything_graph_search 是轻量文件检查工具,主要适用于默认 NetworkXStorage;切换到 Neo4JStorage 后,应以 RAG 查询和 Neo4j 自身查询作为图谱验证依据。

Embedding 入库阶段会对 chunks、entities 和 relationships 批量生成向量。公网 API 预检成功只说明单次小请求可用,不代表批量并发入库稳定。可以用下面的参数降低压力并放宽超时;后续切换到本地 Ollama embedding 时也复用同一组参数:

EMBEDDING_FUNC_MAX_ASYNC=2
EMBEDDING_BATCH_NUM=4
EMBEDDING_TIMEOUT_SECONDS=180

如果仍出现 Embedding func: Worker execution timeout,优先把 EMBEDDING_FUNC_MAX_ASYNC 降到 1;如果服务只是慢而非失败,再逐步增加 EMBEDDING_TIMEOUT_SECONDS。本地 Ollama 通常可以按机器能力再调大并发。

PARSER_TIMEOUT_SECONDS 默认是 120。解析 PDF 或图片时,如果 MinerU 超过该时间仍未完成,服务器会终止 MinerU 进程组并返回超时错误,避免解析任务在后台残留并持续占用资源。raganything_parseraganything_ingest_fileraganything_ingest_folder 也支持传入 timeout_seconds 覆盖单次调用超时。

OpenClaw 等 stdio MCP 客户端处理 PDF 摄取时,应默认使用 raganything_ingest_filewait_for_completion=false。推荐流程是:

  1. 调用 raganything_ingest_file

  2. 保存返回的 job_id

  3. 向用户报告 job_id 和后台提交状态。

  4. 停止当前 agent turn,除非用户明确要求等待、监控、入库后查询或验证完成。

这个后台作业由一个分离的单次 worker 进程执行,不依赖 OpenClaw 的单次 agent turn,也不依赖 stdio MCP server 的生命周期。即使客户端请求已经返回、agent turn 已结束,worker 仍会继续跑完摄取和入库流程。wait_for_completion=true 主要用于小文件或排错场景;大 PDF 可能会超过 MCP 请求超时,因此不适合把同步等待作为默认路径。

Agent polling behavior

OpenClaw 等 agent 默认应在后台入库提交后报告 job_id 并返回控制权,不要自动轮询。只有当用户明确要求 monitor、wait、ingest and query,或要求检查失败原因时,才调用 raganything_job_status(job_id) 继续跟踪任务。用户之后询问状态时,再使用保存的 job_id 查询。

不要把大 PDF 走成 raganything_parse(include_content=true)raganything_insert_content_list 的流程。parse 适合调试解析结果;完整入库应直接使用 raganything_ingest_file。如果确实已有内容列表要插入,raganything_insert_content_list 也默认提交后台任务并返回 job_id;只有需要监控、等待或排错时才通过 raganything_job_status 查询。

同一工作目录一次只会有一个 ingest worker 运行。若当前任务仍在运行,请先等待它在 raganything_job_status 中变成 succeededfailed,再提交下一次 ingest。

MinerU backend 默认使用 PARSER_BACKEND=pipeline,并默认关闭 MINERU_FORMULA=falseMINERU_TABLE=false,避免普通 CPU/虚拟机首次解析时误走 hybrid/vlm 高精度路径并下载大体积 VLM 模型。需要高精度解析时,可以在 .env 中设置 backend,或在单次 MCP 调用中传入 backendmodel_sourceformulatable 覆盖默认值。

MinerU 执行模式通过 MINERU_EXECUTION_MODE 控制:

  • local:默认模式,使用本机 mineru CLI。

  • api:使用 MinerU 官方精准解析 API。只需要配置 MINERU_API_KEYMINERU_API_BASE_URL 默认是 https://mineru.net。服务会通过官方批量上传接口申请上传 URL、上传本地文件、轮询解析结果并下载 zip,再转换为本地 RAG-Anything 内容列表。

常用 API 模式配置:

MINERU_EXECUTION_MODE=api
MINERU_API_KEY=你的 MinerU API key
MINERU_API_BASE_URL=https://mineru.net
MINERU_API_TIMEOUT_SECONDS=1800
MINERU_API_POLL_INTERVAL_SECONDS=5
JOB_TIMEOUT_SECONDS=3600
TEXT_INGEST_TIMEOUT_SECONDS=1800
MULTIMODAL_TIMEOUT_SECONDS=

raganything_job_status 会保留任务真实状态和阶段,例如 status=runningstage=ingeststage=processing。如果运行中已经检测到图谱存储文件,会额外返回 storage_progress.graph_stats,但不会把任务伪装成已完成。若后台任务超过 JOB_TIMEOUT_SECONDS 仍未返回,会标记为 failed 并写入 TimeoutErrorTEXT_INGEST_TIMEOUT_SECONDS 是官方 LightRAG/RAG-Anything 插入阶段的慢任务告警阈值,超过后只会在 manifest 中记录 text_ingest_slow warning 并继续等待官方入库完成,不会取消 insert_content_list(process_multimodal=True)。如果历史 job 因旧的 text ingest timeout 被标成 resumable_failed,但本地 doc_status 与 chunk 存储已经证明官方入库完成,raganything_job_status 会把该 job 收敛为 succeededMULTIMODAL_TIMEOUT_SECONDS 默认为空,表示不单独限制多模态后处理;设置为正整数后,图片/表格/公式等多模态后处理超过该秒数会让本次入库明确失败,避免任务长期停在半完成状态。

模型拉取策略通过 MODEL_DOWNLOAD_POLICY 控制:

  • auto:默认策略。允许高精度 backend 拉取所需模型;当 backend 是 hybrid*vlm* 时,解析超时会至少扩展到 MODEL_DOWNLOAD_TIMEOUT_SECONDS,默认 1800 秒,避免首次模型准备被短解析超时误杀。

  • never:禁止高精度 backend 触发可能的大模型下载;此时请使用 pipeline 或先手动准备模型。

  • require-ready:要求高精度模型已存在于本地缓存,否则在解析前直接报错,适合生产环境避免业务请求中临时下载大模型。

raganything_parseraganything_ingest_fileraganything_ingest_folder 支持 start_pageend_page 限制解析页码。MCP 参数使用用户习惯的 1-based 页码,例如 start_page=1,end_page=3 表示只解析第 1 到第 3 页;服务器内部会自动转换为 MinerU 使用的 0-based 页码。不传页码时默认解析整个文件。

工具

服务器会注册 13 个 MCP 工具:

  • raganything_status:报告配置、存储路径、模型摘要以及可选的解析器可用性。

  • raganything_config_info:返回当前生效的安全配置摘要。

  • raganything_parse:将一个源文件解析为 RAG-Anything 内容块。

  • raganything_ingest_file:默认提交文件解析和摄取后台任务,返回 job_id;OpenClaw stdio MCP 客户端做 PDF 摄取时应默认使用 wait_for_completion=false。传入 wait_for_completion=true 时同步等待完成,适合小文件或排错。

  • raganything_ingest_folder:解析并摄取某个文件夹中的文件。

  • raganything_insert_content_list:默认提交现有 RAG-Anything 内容列表的后台插入任务,返回 job_id;传入 wait_for_completion=true 时同步插入,适合小列表或排错。后台模式会拒绝过大的 content_list payload,此时应改用原始文件调用 raganything_ingest_file

  • raganything_job_status:根据 job_id 查看后台任务状态、阶段、结果或错误。

  • raganything_list_jobs:列出最近的后台任务。

  • raganything_query:查询已摄取的知识库。

  • raganything_query_multimodal:使用多模态内容进行查询。

  • raganything_graph_stats:统计图谱存储中的实体、关系、分块和文档数量。

  • raganything_graph_search:按关键字搜索图谱存储载荷,默认省略向量字段;只有排查底层存储时才传入 include_vectors=true

  • raganything_graph_export:将图谱存储载荷导出为 JSON,保存到配置的工作目录中。

图谱工具会直接从 WORKING_DIR 读取 RAG-Anything 存储文件;它们适用于在不运行完整查询的情况下检查已摄取数据。

raganything_query 接受 response_mode

  • answer:仅返回生成的答案。

  • context:仅返回检索到的上下文。

  • both:返回检索到的上下文和生成的答案。

可选离线缓存

默认不包含 model_cache/tiktoken_cache/ 等离线缓存目录。如果你的部署需要这些目录,请自行将缓存目录复制到相应位置,并在启动服务器前将相关环境变量指向这些路径。

客户端示例

示例客户端配置文件位于 examples/

  • examples/openclaw.json

  • examples/claude_code.md

请在连接客户端之前运行 raganything-mcp configure,以便服务器拥有可用的模型和存储设置。

冒烟测试

首先从你的 MCP 客户端检查服务器配置和连接:

  1. 调用 raganything_status,并将 check_parser 设置为 false

  2. 如果模型设置看起来正确,调用 raganything_config_info

  3. 可以选择调用 raganything_status,并将 check_parser 设置为 true,以验证解析器可用性。

然后使用一个小型本地文件测试 RAG 路径:

  1. 将一份简短文本、Markdown、PDF 或其他受支持的文件放入此项目目录。

  2. 使用该文件路径调用 raganything_ingest_file,记录返回的 job_id

  3. 使用 raganything_job_status 轮询该 job_id,直到状态变为 succeeded;如果状态为 failed,查看返回的 error。如果还有一个 ingest 任务在跑,先等它结束再提交新的文件。

  4. 调用 raganything_graph_stats,确认 chunksentitiesrelationships 已增加。

  5. 调用 raganything_query,提出一个关于该文件的简单问题。

  6. 如有需要,将 response_mode 设置为 contextboth,以检查检索到的上下文。

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/yyisahandsomeboy/rag_anything_mcp_sever'

If you have feedback or need assistance with the MCP directory API, please join our Discord server