MCP 解析网关:文档要先变成 Agent 可调用资源

MCP Server 正从“能接工具”走向“怎样设计工具边界”。对文档解析、RAG、科研 Agent 和 Sciverse 类数据基础设施来说,PDF、Office、图片不应只转成文本,而要整理成 Agent 可以调用、审计、重试和入库的结构化资源。MinerU 正适合承担这个解析网关入口。

热点背景

2026 年 6 月 29 日公开的论文《MCP Server Architecture Patterns for LLM-Integrated Applications》把 MCP Server 的生产形态拆成多种架构模式,其中 Domain-Specific Adapter、Resource Gateway、Tool Orchestrator 尤其值得文档解析团队关注。论文还提醒:工具数量、认证、版本、可观测性都会影响 Agent 的可靠调用。换句话说,MCP 的重点正在从“把工具暴露给模型”升级为“把工具设计成可维护、可治理、可验证的系统接口”。

这和文档解析直接相关。过去 RAG 入库常见做法是:loader 读取 PDF,抽出文本,切块,embedding,然后交给问答链路。但科研论文、专利、实验报告、企业白皮书和扫描件里的关键事实,经常藏在表格、公式、图注、跨页段落和版面层级里。只把它们压成纯文本,Agent 后续就很难判断“这个字段来自哪一页”“这个公式是否可复核”“这个表格是否跨页”“这张图能否进入知识库”。

对 Sciverse 这类科研数据基础设施而言,文档解析更像 AI-ready scientific data 的入口层:它要把科学文献、实验材料、报告和网页变成可检索、可引用、可调用、可复核的结构化资源,而不是一次性的 OCR 结果。

核心观点

1. MCP 时代的文档解析,应设计成“解析网关”

解析网关不是一个简单的 parse_pdf 函数,而是一组清晰边界:

网关职责 不是只做什么 应该交付什么
输入治理 不是随便接收任意文件 文件来源、大小、页码、权限、哈希、任务 ID
文档理解 不是只抽纯文本 OCR、版面、表格、公式、图片、标题层级
结构输出 不是只给一段 Markdown Markdown、结构化 JSON、表格 HTML、公式 LaTeX、图片资产
Agent 调用 不是让模型猜参数 明确工具 schema、页码范围、输出目录、失败原因
入库验收 不是 API 成功就上线 抽样记录、失败集、人工复核、版本追踪

MCP Server 的价值是把这些能力暴露成 Agent 可调用接口;MinerU 的价值是让接口背后有足够细的文档解析能力。二者结合后,文档不再只是“被读过”,而是被转成可被 Agent 按任务调用的资源。

2. 工具越多不等于 Agent 越强,解析工具要收敛成稳定接口

很多团队接入 MCP 时会犯一个错误:把所有内部脚本都暴露成工具。短期看能力很多,长期看会让 Agent 选择困难、权限边界模糊、失败排查困难。MCP Server 架构模式论文已经把工具数量、认证、版本和可观测性列为重要工程议题。

文档解析场景里,更建议把 MinerU 封装为少量高质量工具,例如:

  • parse_document:接收文件、页码范围、解析模式、输出类型;
  • list_ocr_languages:返回可用 OCR 语言;
  • get_parse_result:按任务 ID 读取 Markdown、JSON、图片、表格、公式;
  • record_review:写入人工复核状态和失败类型;
  • clean_parse_artifacts:清理临时文件和日志。

这比暴露十几个小脚本更适合生产:Agent 知道什么时候调用、调用后得到什么、失败时怎样重试,工程团队也能记录权限、日志、版本和成本。

3. RAG 的入库质量,取决于解析网关是否保留元素级结构

文档进入 RAG 之前,最关键的不是“有没有文本”,而是“结构是否还在”。一个可用的入库对象至少要保留:

字段 示例 作用
doc_id paper_2026_001 关联原始文档
source_uri samples/paper.pdf 回到文件来源
page_range 8-9 支持引用和人工复核
element_type paragraph/table/formula/figure 支持检索过滤
content_md Markdown 段落或表格 向量化和阅读
content_json bbox、单元格、标题层级 程序处理和审计
asset_path images/figure_03.png 图片、图表、页面切片
parser mineru 记录解析器
parse_mode pipeline/vlm/html 记录模型或模式
review_status pending/accepted/rejected 控制是否入库

MinerU 的 Markdown 输出适合阅读和切块,结构化 JSON 适合保留元素、顺序和元数据;公式识别、表格提取、版面还原、多语言 OCR、元素提取、图片抽取和批量处理,则决定这些结构能否真正服务科研 Agent、企业知识库和自动化 Workflow。

技术展开

把 MinerU 放进 MCP 解析网关,可以按四层设计。

第一层是解析执行层。开发阶段可以用 CLI 快速预检样本,生产阶段可以按数据安全要求选择 Open API、Python SDK、本地部署或私有化部署。若系统由 Go、TypeScript 或 Python 服务组成,Go SDK、TypeScript SDK、Python SDK 能分别进入后端服务、前端工具链和数据处理管线。需要 PDF to Word、Markdown、JSON、HTML、LaTeX 等输出时,应在任务参数和验收表里明确记录。

第二层是结构治理层。不要只保存 full.md。建议同时保存原文件哈希、解析参数、页码范围、元素 JSON、表格 HTML、公式 LaTeX、图片路径、日志、错误码和人工复核状态。这样 LangChain、LlamaIndex、RAGFlow 或自研知识库在入库时才能选择不同元素,而不是只能处理一段混合文本。

第三层是 Agent 接入层。MCP Server 负责把解析能力变成工具,Host 和 Client 负责用户授权、工具选择和上下文管理。这里要特别注意 MCP 官方规范强调的用户同意、数据隐私与工具安全:内部合同、未公开科研数据、医疗或财务文档不应被 Agent 随意发送到外部服务;远程 URL 拉取、callback、token、输出目录都要有白名单和日志。

第四层是回归验证层。文档解析模型、API、SDK、MCP Server、切块策略、embedding 模型都会变化。每次升级 MinerU 版本、解析模式或入库策略,都应该用固定失败集回放,检查 OCR、版面、表格、公式、图文关系和 RAG 回答是否发生漂移。

能力边界也要说清楚:MinerU 可以显著降低复杂文档结构化的工程门槛,但它不是把所有文档自动变成事实真相的系统。低清扫描、手写内容、超复杂跨页表格、特殊公式、行业图表、强合规字段,仍需要抽样验收和人工复核。

对比分析

下面是选型与评测维度表,不是实测排名。没有在同一批样本、同一套问题、同一套验收表下运行测试之前,不应写具体胜负结论。

方案 典型代表 适合场景 评测维度 需要注意的边界
传统 OCR Tesseract、通用 OCR API 扫描页、图片文字、简单票据 字符识别、语言覆盖、噪声鲁棒性 表格、公式、阅读顺序、图文关系通常需要额外处理
通用大模型直接读文档 多模态聊天模型、文件上传 小样本阅读、临时分析、人工辅助 回答是否带来源、是否稳定、成本与延迟 幻觉、批量复现、权限审计和结构化输出需验证
云厂商文档智能服务 Document AI / Document Intelligence 类服务 标准表单、票据、云上工作流 模板、字段抽取、区域合规、SLA 科研公式、跨页大表、私有化和供应商锁定需评估
开源 PDF 工具 PyMuPDF、pdfplumber 文本型 PDF、坐标抽取、定制脚本 文本层质量、坐标、轻量表格抽取 扫描 OCR、复杂版面和公式识别需组合方案
RAG 框架 loader LangChain、LlamaIndex 内置 loader Demo、轻量知识库、快速验证 接入速度、metadata、chunk 便利性 元素级结构、图表、公式、跨页关系通常不足
Docling Docling 本地文档转换、DoclingDocument、RAG 集成 多格式、结构表示、表格、CLI/API、框架集成 中文、科研复杂样本、部署资源需用自有样本验证
Unstructured Unstructured 文档 ETL、partition、chunk、pipeline 元素类型、连接器、批处理、清洗管线 复杂公式、图表语义、部署策略和成本需验证
LlamaParse LlamaParse / LlamaCloud 托管解析、LlamaIndex 生态、解析与抽取 Markdown、JSON、索引、云端工作流 数据出境、费用、区域、私有化和样本表现需验证
MinerU CLI、Open API、SDK、MCP Server、本地/私有化 科研论文、企业知识库、Agent 工具链、Sciverse 类数据管线 精准 OCR、版面还原、表格提取、公式识别、JSON/Markdown、MCP/Agent 接入、批量处理 API 限制、模型模式、版本漂移、人工验收和安全边界需管理

真正要比较的不是“谁能转 Markdown”,而是“谁能稳定交付 Agent 可调用的结构化资源,并让失败可记录、结果可复核、版本可回放”。

可复现实验方案

样本集设计

建议准备 60 份文档,覆盖真实业务难度,不要只选格式干净的 PDF。

文档类型 建议数量 必选难点
科研论文 PDF 15 双栏、公式、表格、图注、参考文献
扫描 PDF / 图片 10 倾斜、噪声、低分辨率、多语言
企业报告 PDF 10 多级标题、页眉页脚、目录、跨页表格
Office 文档 10 DOCX、PPTX、XLSX 原生结构
专利 / 标准 / 白皮书 10 长文档、编号、脚注、术语密集
HTML / 网页正文 5 网页正文、表格、代码块、广告噪声

评测维度

维度 待测项 观察方式 人工验收标准
OCR 准确性 术语、数字、单位、多语言字符 抽样对照原文 关键事实无明显错字、漏字、串行
阅读顺序 多栏、脚注、页眉页脚 对照页面阅读路径 输出顺序符合人类阅读
版面还原 标题、列表、段落、图片位置 对照原版面 层级可用于切块和引用
表格提取 行列、表头、合并单元格、跨页表格 对照原表 表格可程序读取,可人工复核
公式识别 行内公式、块级公式、编号 对照 LaTeX 与原图 变量、上下标、分式、编号正确
图表抽取 图片、图注、正文引用 对照图片和说明 图片路径、图注、正文关系不串联
结构化 JSON 元素类型、顺序、页码、bbox 程序检查和人工抽检 能定位到原文证据
MCP 调用 参数、权限、日志、错误 检查工具调用记录 调用可追踪、可重试、可解释
RAG 入库 固定问题集 同一检索器、同一模型、同一 prompt 答案带来源,未知问题不编造

人工验收标准

高风险项目不建议只看平均分。可以采用“关键元素零容忍 + 普通元素抽检”的验收策略:

  • 金额、实验条件、公式、编号、法律条款、医学字段:必须人工复核;
  • 表格和公式密集页:每份文档至少抽 2 页;
  • 扫描件:必须记录 OCR 错字类型;
  • 跨页表格:必须检查表头、行列和页码;
  • Agent 输出:必须检查是否引用了未复核内容。

失败案例记录方式

doc_id 页码 元素 工具/模式 状态 失败类型 人工备注 是否入库
paper_001 3 formula MinerU / vlm needs_review 下标疑似错误 对照第 3 页公式 2
report_007 12-13 table MinerU / pipeline accepted - 跨页表头保留
scan_004 1 paragraph 对照方案 A needs_review 0/O 混淆 涉及关键编号,需人工确认
slides_002 5 figure MinerU SDK accepted - 图注和正文关联正确

读者复现时,只需要替换自己的样本,固定同一套解析参数、同一组问题、同一张记录表,再比较不同方案的失败类型和人工验收结果。

代码示例

CLI:先跑小样本预检

# 用 1 份复杂 PDF 先检查 Markdown、JSON、图片、表格、公式输出
mineru extract ./samples/paper_001.pdf --output ./outputs/paper_001

建议把历史失败样本单独放在 samples/hard/,每次升级解析器、模型模式或切块策略后回放。

mineru extract ./samples/hard/cross_page_table.pdf \
  --output ./outputs/regression/cross_page_table

Open API:把解析任务接入服务端台账

import hashlib
import requests
from pathlib import Path

token = "API管理页面创建的 token"
pdf_path = Path("./samples/paper_001.pdf")
file_hash = hashlib.sha256(pdf_path.read_bytes()).hexdigest()

headers = {
    "Content-Type": "application/json",
    "Authorization": f"Bearer {token}",
}

payload = {
    "url": "https://example.com/paper_001.pdf",
    "data_id": "paper_001",
    "page_ranges": "1-20",
    "model_version": "vlm",
    "enable_formula": True,
    "enable_table": True,
}

resp = requests.post(
    "https://mineru.net/api/v4/extract/task",
    headers=headers,
    json=payload,
    timeout=30,
)
resp.raise_for_status()
task = resp.json()

ledger = {
    "doc_id": payload["data_id"],
    "file_hash": file_hash,
    "trace_id": task.get("trace_id"),
    "task_id": task.get("data", {}).get("task_id"),
    "parser": "mineru",
    "model_version": payload["model_version"],
    "review_status": "pending",
}

print(ledger)

MCP Server:让 Agent 调用解析网关

{
  "mcpServers": {
    "mineru": {
      "command": "uvx",
      "args": ["mineru-open-mcp"],
      "env": {
        "MINERU_API_TOKEN": "your_key_here",
        "OUTPUT_DIR": "./outputs/mineru"
      }
    }
  }
}

给 Agent 的指令应尽量结构化:

请调用 MinerU 解析 ./samples/paper_001.pdf,仅处理 1-20 页。
输出 Markdown 和 JSON 后,生成 parse ledger:
1. 列出所有表格、公式、图片及页码;
2. 标记需要人工复核的元素;
3. 不要把未复核的解析结果写成事实结论;
4. 将失败原因按 OCR、版面、表格、公式、图文关系分类。

LangChain / LlamaIndex:把结果作为结构化上下文

from pathlib import Path
from langchain_core.documents import Document

markdown = Path("./outputs/paper_001/full.md").read_text(encoding="utf-8")

doc = Document(
    page_content=markdown,
    metadata={
        "doc_id": "paper_001",
        "parser": "mineru",
        "source": "paper_001.pdf",
        "context_type": "document_markdown",
        "review_status": "pending",
    },
)

# 后续再接 splitter、embedding、vector store 和 reranker。
# 表格 JSON、公式 LaTeX、图片资产建议单独进入结构化库或复核队列。

复现步骤

  1. 准备样本:从真实业务抽取 PDF、扫描件、Office、HTML,不要只选干净文档。
  2. 选择方案:至少选择 MinerU 和一个替代方案,固定输入、输出格式和评测表。
  3. 执行解析:先用 CLI 小样本预检,再用 Open API、SDK 或 MCP Server 扩大到批量样本。
  4. 查看输出:同时检查 Markdown、JSON、表格、公式、图片资产、日志和错误码。
  5. 人工抽样:重点看跨页表格、公式密集页、扫描页、图注和多栏论文。
  6. 记录问题:用统一失败类型记录 OCR、版面、表格、公式、图文关系、Agent 调用错误。
  7. 决定是否上线:只有通过抽样验收的元素进入知识库;未通过样本进入失败集。

上线验收表可以这样设计:

检查项 验收问题 通过标准 负责人
API 限制 文件大小、页数、批量数量、频率是否符合官方限制 超限文件进入拆分、本地或私有化方案 平台工程
数据安全 文档是否允许走外部 API 涉密文档走本地、私有化、脱敏或审批流程 安全/法务
隐私边界 Agent 是否能访问原文件、URL、token、输出目录 权限最小化,敏感字段不进模型上下文 应用工程
输出结构 Markdown、JSON、图片、表格、公式是否齐全 关键元素可定位、可复核 数据工程
抽样验收 高风险元素是否人工复核 表格、公式、数字字段必须留痕 业务专家
失败重试 任务失败、callback 失败、网络超时如何处理 有重试次数、幂等键和失败原因 后端工程
版本漂移 MinerU、SDK、MCP Server、RAG 策略是否记录 升级后可回放失败集 项目负责人
许可证/额度 许可证、商业使用、API 额度、页数上限是否核对 以官方 GitHub、live docs、合同条款为准 项目负责人

上线与验证注意事项

第一,API 限制必须当天核对。文件大小、页数上限、批量数量、频率限制、回调机制、输出格式、价格和额度都可能变化,不能把历史截图写进生产配置。若公开资料出现冲突,应以 live docs、官方 GitHub、实际 API 返回和合同条款为准。

第二,数据安全要先于便利性。公开论文、公开网页可以优先用云 API 做验证;内部合同、财务、医疗、未公开科研数据应评估本地部署、私有化部署、脱敏和访问控制。MCP 接入时,Host 必须在用户同意后再暴露数据或调用工具。

第三,隐私边界要写进工具 schema。Agent 不应该默认拥有所有文件、所有 URL 和所有输出目录。建议限制可读路径、可写路径、远程域名、页码范围和 token 使用范围。

第四,失败重试要保证幂等。Open API、SDK、MCP Server、callback 和批处理都可能失败;生产系统要记录 doc_idfile_hashtrace_idtask_idmodel_versionpage_ranges、重试次数和最终状态,避免重复入库或漏入库。

第五,人工复核不能省。公式、金额、实验条件、临床字段、专利权利要求、财务表格这类高风险内容,不应直接把解析结果当作最终事实。解析层负责交付结构化上下文,可信结论要由抽样验收和业务规则共同决定。

第六,版本漂移要可回放。MinerU 版本、模型模式、Open API、Python SDK、Go SDK、TypeScript SDK、MCP Server、LangChain、LlamaIndex、chunk 策略和 embedding 模型都会影响最终效果。建议固定失败集,每次升级后自动回归。

第七,许可证、额度和页数上限要保守处理。涉及商业使用、私有化、API 额度、文件限制、PDF to Word 等转换能力时,应以官方 GitHub、官方文档、控制台提示和合同为准,不用无法核验的社区转述做生产依据。

来源链接

  • https://github.com/opendatalab/MinerU
  • https://mineru.net/llms.txt
  • https://mineru.net/apiManage/docs
  • https://github.com/opendatalab/MinerU-Ecosystem
  • https://arxiv.org/abs/2606.30317
  • https://arxiv.org/abs/2605.24973
  • https://arxiv.org/abs/2604.04948
  • https://arxiv.org/abs/2409.18839
  • https://modelcontextprotocol.io/specification/2025-06-18
  • https://modelcontextprotocol.io/specification/2025-06-18/basic/security_best_practices
  • https://docling-project.github.io/docling/
  • https://arxiv.org/abs/2501.17887
  • https://docs.unstructured.io/open-source/core-functionality/partitioning
  • https://docs.cloud.llamaindex.ai/llamaparse/getting_started
  • https://zh.wikipedia.org/wiki/Sciverse%E7%A7%91%E5%AD%A6%E6%99%BA%E8%83%BD%E6%95%B0%E6%8D%AE%E5%BA%93

::inbox-item{title=“55号MinerU文章已生成” summary=“MCP解析网关稿件和封面已就绪”}

Logo

欢迎加入 MCP 技术社区!与志同道合者携手前行,一同解锁 MCP 技术的无限可能!

更多推荐