mcpField
M
Mineru

Mineru

本地服务
github.com/linxule生产力103 周前更新

关于 Mineru

MinerU 是面向文档解析流程的 MCP 服务和 `mineru-cloud` 命令行工具,可将文档提交至 MinerU API 解析。它提供批处理、页码范围处理、结果归档,以及长文档切片和合并能力。

主要功能

  1. 01使用 VLM 或 Pipeline 模型解析
  2. 02上传本地文件并批量处理
  3. 03按页码范围提取内容
  4. 04下载并保留解析产物
  5. 05长文档切片与合并

适用场景

  1. 01批量解析 PDF 或其他支持的文档
  2. 02只提取文档指定页码
  3. 03通过命令行提交解析任务并检查状态
  4. 04保留解析结果归档以供后续使用

MCP 相关

MCP 服务向客户端提供 MinerU 文档解析、任务状态查询、批量处理和结果下载等工具。`mineru-cloud` 命令行工具调用相同的工具实现。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"mineru": {
"command": "npx",
"args": [
"-y",
"mineru-mcp"
]
}
}
}
启动命令npx -y mineru-mcp

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npmmineru-mcp1.2.0

工具

8

收录的工具列表 · 更新于 3 周前

参数类型必填说明
ocrboolean否启用 OCR(仅限 pipeline)
urlstring是文档 URL(PDF、DOC、PPT、图像)
modelenum否pipeline=fast,vlm=90% 准确率pipeline | vlm
pagesstring否页码范围:1-10,15 或 2--2
tableboolean否表格识别
formatsarray否额外导出格式
formulaboolean否公式识别
languagestring否语言代码:ch、en 等

详细介绍

mineru-mcp

用于 MinerU 文档解析 API 的 MCP 服务和 mineru-cloud CLI,支持完整保留产物、持久化操作和可移植的 PDF 包。

此检出版本中的持久化操作和文档包尚未发布。已发布的 [email protected] 不包含这些功能;npm 用户需要等待包含这些更改的版本发布。

功能

  • VLM 模型 — 使用视觉语言模型解析文档
  • Pipeline 模型 — 使用 pipeline 模型解析文档
  • 本地文件上传 — 上传磁盘上的文件进行批量解析
  • 批量处理 — 在一个请求中提交多份文档
  • 下载并重命名 — 使用原始文件名提取 Markdown
  • 页面范围 — 仅提取指定页面
  • 长文档 — mineru_parse_long 提交按页面范围切分的片段,mineru_merge_slices 拼接这些片段
  • CLI 对应工具 — mineru-cloud 可在命令行中调用相同的工具
  • 语言和 OCR 选项 — 选择语言,并为 pipeline 模型启用 OCR

工具

工具描述
mineru_parse解析文档 URL
mineru_status检查任务进度并获取下载 URL
mineru_batch解析多个 URL
mineru_batch_status分页获取批处理结果
mineru_upload_batch上传本地文件进行批量解析
mineru_download_results保留完整归档、列出所有成员,并创建带有名称的兼容副本
mineru_parse_long将长文档作为多个页面范围片段的批次提交
mineru_merge_slices拼接可用的 Markdown,并保留不可变的片段归档,明确标注未知的页面来源
mineru_capabilities读取本地已知能力;显式刷新时执行发现
mineru_submit使用持久化本地日志提交,并防止重复请求
mineru_operation_status读取已记录的操作;显式刷新时检查远程状态
mineru_resume继续安全的已记录检查点
mineru_cancel停止本地处理;不支持远程取消
mineru_bundle验证并返回某个操作保留的文档包

安装

新安装请使用 Node.js 24。为保持兼容,仍支持 Node.js 18 及更高版本。云端命令需要 MinerU API 密钥;离线创建文档包无需凭据。

本地输出保留、文档包和持久化操作需要 macOS 或 Linux。这些路径使用绑定到目录的文件系统操作,在 Windows 上会安全失败;下方的 Windows 客户端配置并不意味着支持本地保留。

CLI 安装(单行命令)
# Claude Code
claude mcp add mineru-mcp -e MINERU_API_KEY=your-api-key -- npx -y mineru-mcp

# Codex CLI (OpenAI)
codex mcp add mineru --env MINERU_API_KEY=your-api-key -- npx -y mineru-mcp

# Gemini CLI (Google)
gemini mcp add -e MINERU_API_KEY=your-api-key mineru npx -y mineru-mcp
Claude Desktop

将以下内容添加到 claude_desktop_config.json:

OS配置路径
macOS~/Library/Application Support/Claude/claude_desktop_config.json
Windows%APPDATA%\Claude\claude_desktop_config.json
Linux~/.config/Claude/claude_desktop_config.json
{
  "mcpServers": {
    "mineru": {
      "command": "npx",
      "args": ["-y", "mineru-mcp"],
      "env": {
        "MINERU_API_KEY": "your-api-key"
      }
    }
  }
}
VS Code

添加到 .vscode/mcp.json(工作区),或打开命令面板 > MCP: Open User Configuration(全局):

{
  "servers": {
    "mineru": {
      "command": "npx",
      "args": ["-y", "mineru-mcp"],
      "env": {
        "MINERU_API_KEY": "your-api-key"
      }
    }
  }
}

注意:VS Code 使用 "servers" 作为顶层键,而不是 "mcpServers"。其他 VS Code 分支版本(Trae、Void、PearAI 等)通常也使用相同格式。

Cursor

添加到 ~/.cursor/mcp.json(全局)或 .cursor/mcp.json(项目):

{
  "mcpServers": {
    "mineru": {
      "command": "npx",
      "args": ["-y", "mineru-mcp"],
      "env": {
        "MINERU_API_KEY": "your-api-key"
      }
    }
  }
}
Windsurf

添加到 ~/.codeium/windsurf/mcp_config.json(Windows:%USERPROFILE%\.codeium\windsurf\mcp_config.json):

{
  "mcpServers": {
    "mineru": {
      "command": "npx",
      "args": ["-y", "mineru-mcp"],
      "env": {
        "MINERU_API_KEY": "your-api-key"
      }
    }
  }
}
Cline

在 Cline 面板中打开 MCP Servers 图标 > Configure > Advanced MCP Settings,然后添加:

{
  "mcpServers": {
    "mineru": {
      "command": "npx",
      "args": ["-y", "mineru-mcp"],
      "env": {
        "MINERU_API_KEY": "your-api-key"
      }
    }
  }
}
Cherry Studio

在 Settings > MCP Servers > Add Server 中,将 Type 设为 STDIO,Command 设为 npx,Args 设为 -y mineru-mcp,并添加环境变量 MINERU_API_KEY。或者在 JSON/Code 模式中粘贴:

{
  "mineru": {
    "name": "MinerU",
    "command": "npx",
    "args": ["-y", "mineru-mcp"],
    "env": {
      "MINERU_API_KEY": "your-api-key"
    },
    "isActive": true
  }
}
Witsy

在 Settings > MCP Servers 中添加新服务,将 Type 设为 stdio,Command 设为 npx,Args 设为 -y mineru-mcp,并将环境变量 MINERU_API_KEY 设为你的 API 密钥。

Codex CLI(TOML 配置)

也可以直接编辑 ~/.codex/config.toml:

[mcp_servers.mineru]
command = "npx"
args = ["-y", "mineru-mcp"]

[mcp_servers.mineru.env]
MINERU_API_KEY = "your-api-key"
Gemini CLI(JSON 配置)

也可以直接编辑 ~/.gemini/settings.json:

{
  "mcpServers": {
    "mineru": {
      "command": "npx",
      "args": ["-y", "mineru-mcp"],
      "env": {
        "MINERU_API_KEY": "your-api-key"
      }
    }
  }
}
Windows

在 Windows 上,npx 需要 shell 包装器。将 "command": "npx" 替换为:

{
  "command": "cmd",
  "args": ["/c", "npx", "-y", "mineru-mcp"],
  "env": {
    "MINERU_API_KEY": "your-api-key"
  }
}

Windows 上的 CLI 工具:

claude mcp add mineru-mcp -e MINERU_API_KEY=your-api-key -- cmd /c npx -y mineru-mcp
codex mcp add mineru --env MINERU_API_KEY=your-api-key -- cmd /c npx -y mineru-mcp
ChatGPT

ChatGPT 仅支持通过 HTTPS 连接远程 MCP 服务,不直接支持此类本地 stdio 服务。你需要将其部署在公开 URL 后,并使用 HTTP 传输。

CLI:mineru-cloud

每个工具也都是一个 shell 命令——CLI 通过内存传输在进程内运行 MCP 服务,因此两者不会出现偏差。使用相同的环境变量(MINERU_API_KEY、MINERU_BASE_URL、MINERU_DEFAULT_MODEL)。

mineru-cloud list                                    # commands + options (from the tool schemas)
mineru-cloud parse --url https://arxiv.org/pdf/2303.08774 --pages 1-10
mineru-cloud status --task-id <id> --wait            # --wait polls every 10s until done/failed
mineru-cloud batch --urls '["https://…/a.pdf","https://…/b.pdf"]'
mineru-cloud download-results --batch-id <id> --output-dir ./papers --wait

# Long document: slice, then stitch
mineru-cloud parse-long --url https://…/book.pdf --total-pages 520 --name book
mineru-cloud merge-slices --batch-id <id> --output-dir ./books --wait

选项与工具参数相对应,并将 _ 替换为 -(--total-pages、--output-dir);数字、true/false 和 JSON 数组会自动转换类型。安装:bun add -g mineru-mcp(或 npm i -g)。

离线制品包

使用现有的服务提供方 ZIP 文件和原始 PDF,创建可移植的 Scholia v1.0.1 制品包。此命令离线运行,无需 API 密钥:

mineru-cloud bundle --source /absolute/source.pdf --archive /absolute/result.zip \
  --output /absolute/bundles --json

命令会返回 bundle_dir,即一个不可变目录,其中包含 bundle.json、原始 PDF 和字节完全相同的 ZIP 文件。移动整个目录即可进行导入。重复输入会验证现有字节,并返回相同的制品包。可选的 --batch-id 和 --model 会记录调用方提供的元数据。--binding caller_asserted 会记录经限定的关联;默认值为 unknown。这两种选择都无法证明服务提供方解析的正是这些 PDF 字节。命令不会根据文件名推断页面覆盖范围、请求的选项或服务提供方版本。

此制品包仅接受 PDF 源文件。现有的非 PDF 云端命令仍可使用,并会生成诊断清单。不安全的归档文件会保留在隔离区,不纳入可导入的制品包。ZIP64、加密归档、特殊文件、含义不明确的旧式文件名编码,以及不安全或冲突的路径都会被拒绝。

完整下载与结构化状态

download-results 会将每个 ZIP 保存在 {name}/archives/<sha256>.zip,并写入一个涵盖所有成员(包括未知格式)的 inventory.json。如果选择结果明确无歧义,还会创建旧版 {name}.md、{name}_content.json 和图像副本。Markdown 文件缺失或含义不明确时,不会丢弃归档文件。不使用 shell unzip 可执行文件。清单会增量计算解压后字节的哈希;所选兼容副本的大小上限则单独设为 64 MiB。

生命周期命令可使用 --json 获取结构化的操作 ID、规范化状态、是否可轮询、计数和错误。--wait 会在整个批次中使用类型化状态,包括当前显示页面之外的条目。它每 10 秒轮询一次,最长持续 30 分钟。某个条目失败不会隐藏其他待处理条目。未知的服务提供方状态会明确显示。失败时退出状态为 1,部分结果或未知结果时为 2。现有的 8 个 MCP 工具名称及其 CLI 命令仍可使用。

切片合并会将每个归档文件保存在带哈希标识的目录中。后续合并后,先前的图像链接仍然有效。合并后的内容 JSON 是包含归档引用的切片收据,而非带有假定页面偏移量的扁平数组。Markdown 缺失或切片失败时会明确返回部分结果;否则,覆盖范围和原始 PDF 页面来源仍然未知。

持久化独立操作

另外 6 个命令与 MCP 共用实现:

mineru-cloud capabilities --api v4 --json
mineru-cloud submit --file /absolute/source.pdf --api v4 --model vlm --output-dir /absolute/results --json
mineru-cloud operation-status --operation-id ID --json
mineru-cloud resume --operation-id ID --wait --wait-timeout-seconds 1800 --json
mineru-cloud cancel --operation-id ID --json
mineru-cloud bundle --operation-id ID --json

MINERU_STATE_DIR 用于选择日志根目录;默认值为 ~/.local/share/mineru-cloud。请保留该目录以便恢复。日志会保留源字节、请求指纹、远程 ID、已完成输出的哈希值 以及阶段检查点。凭据和签名 URL 仅保存在进程内存中。 完全重复的提交会加入已记录的操作。分配 ID 或作业 ID 丢失时,需要进行核对,且绝不会触发自动重新提交。 如果某次含糊的 V4 上传已保存批次 ID,则会通过轮询该批次继续操作。 V1 会先检查已知上传,再继续处理结果不确定的完成操作。

同一时间只有一个进程持有写入锁。可通过检查所有者令牌回收普通的死进程锁。若锁恢复步骤中断或 PID 被重用,则会安全失败并返回明确的繁忙/恢复错误。此文件系统日志与 Scholia 的 SQLite 租约和预留系统相互独立;它不提供 Scholia 的工作进程调度或维护保证。

operation-status 默认在本地读取,除非提供 --refresh。resume 会继续安全的检查点。最终定稿会使用已保存的输出,而不会联系提供方。本地取消不会取消远程处理,也不会移除已上传的数据。远程取消和自动关联丢失的 ID 仍不受支持。 已完成的包会保留归档及所有独立输出,包括未知格式。提供方传输完成并不代表 PDF 的所有页面均已覆盖。

V4 持久化 submit --pages 1-2,5 接受正整数页码和包含端点的范围。 请求大小上限为 16 KiB,逗号分隔的区间最多为 1,024 个;零、降序范围以及超出 JavaScript 安全整数范围的数字,会在获取源文件或调用提供方之前导致失败。原始文本会保留在操作标识和提供方选项中。新包会记录排序并合并后的请求区间,且这些区间的覆盖情况均为未知。此意图无法确定已完成或缺失的页面、页面映射或整个文档的覆盖情况。

对较早的范围操作进行完全相同的重放时,会保留其原始包字节,包括未知的请求范围。后续验证通过的输出恢复操作,可以发布一个包含规范化范围意图和原始前驱哈希值的后继包。新范围包使用单独的写入者标识;若目标地址已被冲突内容占用或缺少已记录的包,则会安全失败,而不会改写较早的回执。 超出当前准入范围的旧选择器,只能重放经验证的现有旧版回执。它们不能发布新包或增强现有包,也不能授权提供方操作。

当经过有限次数的下载尝试后仍有一个输出无法获取时,操作会发布一个部分包,其中包含已验证成功的输出和带类型的失败详情。bundle --operation-id ID 可返回这些保留的证据。之后显式执行 resume,可以从同一操作中恢复缺失的输出并发布后继包;较早的包保持不可变。部分结果并不意味着可以再次提交文档。

新的操作命令会在 CLI JSON 和 MCP structuredContent 中使用结构化 Result 封装,同时保留现有的扁平字段以兼容旧版。其 CLI 退出码为:ok 时为 0,partial 或 error 时为 1,参数无效时为 2。原有八条命令仍保留历史退出码:error 为 1,partial 为 2。离线 bundle --source ... --archive ... 也保留现有的已创建/已存在回执格式。请检查 status、state 和恢复详情,而不要将非零退出码理解为允许重新提交。

进程重启测试会在实际的源文件、提交意图、输出保留和最终定稿检查点终止工作进程。可安全接管首次写入日志之前创建且已验证的源文件孤儿;远程提交结果不确定时则不能接管。源文件/输出文件的写入会先同步,再记录对应的日志引用。这些测试验证的是有界的进程崩溃行为,并不构成对断电或网络文件系统的普遍持久性保证。 现代 V1 适配器使用 uploads、parse/jobs 和 files/{id}/content。 它不使用旧版 agent/parse API。显式刷新能力时会查询 health 和独立的 tiers 端点。没有将任何 V4 模型映射到 V1 层级。 V1 不支持范围解析。托管 V1 执行默认仍处于禁用状态,直到完成针对特定端点的验证;可以通过测试夹具注入适配器。

新的网络调用要求使用公开的 HTTPS 地址。DNS 解析结果会在连接时检查并固定;重定向会重新验证,且不会携带 API 授权信息。 传输 URL 仅会接收显式提供的请求头。私有/自托管端点需要单独实现信任策略,此处未启用。 新的 submit 目前仅接受 PDF;原有的 8 个命令仍支持非 PDF 文件。 在这个独立里程碑中,没有账户配额预留、自动调度器,也没有用于关联不确定操作的操作员界面。

官方协议参考资料包括固定版本的 V1 指南、 固定版本的示例 和固定版本的 API 服务架构。 当前指南已于 2026 年 9 月 30 日核查。所有新增执行行为均已通过测试夹具测试;不声称已进行在线服务商验证、版本升级或发布。

配置

环境变量默认值描述
MINERU_API_KEY(必填)你的 MinerU API Bearer 令牌
MINERU_BASE_URLhttps://mineru.net/api/v4API 基础 URL
MINERU_DEFAULT_MODELpipeline默认模型:pipeline 或 vlm

在 mineru.net 获取 API 密钥

用法

解析单个 URL
mineru_parse({
  url: "https://example.com/document.pdf",
  model: "vlm",        // optional: "pipeline" (default) or "vlm"
  pages: "1-10,15",    // optional: page ranges
  ocr: true,           // optional: enable OCR (pipeline only)
  formula: true,       // optional: formula recognition
  table: true,         // optional: table recognition
  language: "en",      // optional: language code
  formats: ["html"]    // optional: extra export formats
})
检查任务进度
mineru_status({
  task_id: "abc-123",
  format: "concise"    // optional: "concise" (default) or "detailed"
})

精简输出:done | abc-123 | https://cdn-mineru.../result.zip

批量解析 URL
mineru_batch({
  urls: ["https://example.com/doc1.pdf", "https://example.com/doc2.pdf"],
  model: "vlm"
})
检查批次进度
mineru_batch_status({
  batch_id: "batch-123",
  limit: 10,           // optional: max results (default: 10)
  offset: 0,           // optional: skip first N results
  format: "concise"    // optional: "concise" or "detailed"
})
上传本地文件
mineru_upload_batch({
  directory: "/path/to/pdfs",  // scan directory for supported files
  // OR
  files: ["/path/to/doc1.pdf", "/path/to/doc2.pdf"],  // explicit file list
  model: "vlm",        // optional
  formula: true,       // optional
  table: true,         // optional
  language: "en",      // optional
  formats: ["html"]    // optional
})

返回用于跟踪的 batch_id。每个文件的原始名称都会通过 data_id 保留(空格会变为下划线)。

将结果下载为 Markdown
mineru_download_results({
  batch_id: "batch-123",       // from mineru_upload_batch or mineru_batch
  output_dir: "/path/to/output",
  overwrite: false             // optional: overwrite existing files
})

输出文件名由 data_id 派生(例如 my_paper_title.md)。原始文件名中的空格会变为下划线。

典型的本地文件工作流
mineru_upload_batch → mineru_batch_status (poll) → mineru_download_results

支持的格式

  • PDF、DOC、DOCX、PPT、PPTX
  • PNG、JPG、JPEG

本地限制与服务商依据

旧版批处理命令最多接受 200 个项目;旧版本地上传会拒绝超过 200 MiB 的文件。parse-long 会将每个请求切片限制为 200 页。这些是当前实现中的限制,并不代表已核实服务商账户当前的限额、配额、队列优先级或支持的套餐。获准使用云端任务时,请另行核查这些信息。此代码库的合成测试无法衡量托管解析的准确率、速度或语言覆盖范围。

版本 1.1.6

通过保留 MCP SDK 1.29.x 及其兼容 Node.js 18 的 Hono 适配器,为全新安装恢复 Node.js 18 HTTP 兼容性。SDK 1.30 允许使用要求 Node.js 20 的适配器。版本 1.1.5 通过了锁定依赖检查,但已发布软件包检查发现全新安装时 HTTP 初始化失败。CI 现在会在不使用仓库锁文件的情况下安装打包后的软件包,并在 Node.js 18 上测试两种传输方式。SDK 兼容性限制是有意设置的;采用更新的 SDK 前,应先通过此使用方安装门禁重新评估。

版本 1.1.5

维护版本:审计依赖更新、兼容 Express 5 和 Zod 4,并为两种传输方式补充回归测试。MCP 握手和 HTTP 启动消息现在会报告软件包版本,而不再显示过时的 1.0.2。工具输入和文档处理行为保持不变。

开发

请阅读 AGENTS.md,了解规范的贡献者交接说明、任务权限、恢复不变量,以及配套的 Scholia fixture/集成检查。

开发时请使用 Bun 1.4.2 和推荐的 Node.js 24 运行时:

bun install --frozen-lockfile
bun audit
bun run build
bun run test
bun run test:package

测试使用合成 fixture 和本地 MinerU API 模拟对象。测试会验证构建后的 stdio 和 HTTP 服务、持久化操作恢复、精确保留产物、捆绑包身份,以及文件系统路径包含关系,不需要真实凭据或调用服务提供商。临时 fixture 在 macOS 和 Linux 上使用规范的系统临时目录。这些检查无法证明对实时服务提供商的解析准确性。

对于向 main 提交的 PR、版本标签推送和手动注册表恢复操作,CI 会审核依赖项、构建项目,并在 macOS 和 Linux 上运行完整测试套件。每个平台还会安装一个全新打包的程序包(不使用仓库锁文件),并在 Node.js 18 上测试。此使用者安装门禁确保兼容 Node 18 的目标。Dependabot 会同时更新 Bun 清单和锁文件。向 main 的常规推送不会触发此工作流。

发布

获得明确的发布授权后,更新 package.json、server.json 中的顶层版本及其对应的 npm 程序包版本,完成上述检查并合并,然后推送匹配的 vX.Y.Z 标签。发布前,CI 要求标签和所有这些版本保持一致。现有的 ci 检查要求所有 macOS/Linux 验证任务通过后,才能运行独立的发布任务。CI 只解析一次指定的检出版本,然后验证并发布该确切提交。发布使用 Node.js 24 和 GitHub OIDC:先发布到 npm,等待确切的程序包版本可用,然后将其注册到 MCP Registry。 如果 npm 发布成功后注册表注册失败,只使用现有的不可变标签重试注册:

gh workflow run publish-mcp.yml --ref main -f registry_tag=vX.Y.Z

将 vX.Y.Z 替换为已发布的标签。恢复流程会解析 refs/tags/vX.Y.Z、验证该标签对应的检出版本、跳过 npm 发布,并仅重试 MCP Registry 注册。

许可证

MIT

链接

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。