MinerU MCP Server
It provides an MCP server for MinerU document parsing, letting you extract text, tables, and formulas from PDFs, DOCs, and images via API tasks.
Parse a single document URL (
mineru_parse) with model choice (pipeline/vlm), page ranges, OCR, formula/table recognition, language, and extra formats.Check task progress and get the download URL when done (
mineru_status), with concise or detailed output.Batch parse up to 200 URLs at once (
mineru_batch).Poll batch results with pagination (
mineru_batch_status).Also supports local file upload, downloading results as named markdown files, long-document slicing/merging for files over 200 pages, and 109-language OCR.
Includes a CLI twin (
mineru-cloud) that exposes the same capabilities from the shell.
Provides document parsing capabilities for JPEG images (along with PNG, PDF, DOC, DOCX, PPT, PPTX formats) through the MinerU API, with support for OCR, formula recognition, table recognition, and page range selection across 109 languages.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@MinerU MCP Serverparse this PDF from pages 1-5 using VLM model with OCR enabled"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
mineru-mcp
MCP server for MinerU document parsing API — extract text, tables, and formulas from PDFs, DOCs, and images.
Features
VLM model — 90%+ accuracy for complex documents
Pipeline model — Fast processing for simple documents
Local file upload — Upload files from disk for batch parsing
Batch processing — Parse up to 200 documents at once
Download & rename — Extract markdown with original filenames
Page ranges — Extract specific pages only
Long documents — MinerU caps files at 200 pages;
mineru_parse_longslices andmineru_merge_slicesstitchesCLI twin —
mineru-cloudruns the same tools from a shell (no MCP context cost)109 language OCR support
Optimized for Claude Code — 73% token reduction vs alternatives
Related MCP server: LandingAI ADE MCP Server
Tools
Tool | Description |
| Parse a document URL |
| Check task progress, get download URL |
| Parse multiple URLs (max 200) |
| Get batch results with pagination |
| Upload local files for batch parsing |
| Download results as named markdown files |
| Document >200 pages: one batch of ≤200-page |
| Stitch a sliced batch into one |
Installation
Requires Node.js 18+ and a MinerU API key.
CLI Install (one-liner)
# 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-mcpClaude Desktop
Add to your claude_desktop_config.json:
OS | Config path |
macOS |
|
Windows |
|
Linux |
|
{
"mcpServers": {
"mineru": {
"command": "npx",
"args": ["-y", "mineru-mcp"],
"env": {
"MINERU_API_KEY": "your-api-key"
}
}
}
}VS Code
Add to .vscode/mcp.json (workspace) or open Command Palette > MCP: Open User Configuration (global):
{
"servers": {
"mineru": {
"command": "npx",
"args": ["-y", "mineru-mcp"],
"env": {
"MINERU_API_KEY": "your-api-key"
}
}
}
}Note: VS Code uses
"servers"as the top-level key, not"mcpServers". Other VS Code forks (Trae, Void, PearAI, etc.) typically use this same format.
Cursor
Add to ~/.cursor/mcp.json (global) or .cursor/mcp.json (project):
{
"mcpServers": {
"mineru": {
"command": "npx",
"args": ["-y", "mineru-mcp"],
"env": {
"MINERU_API_KEY": "your-api-key"
}
}
}
}Windsurf
Add to ~/.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
Open MCP Servers icon in Cline panel > Configure > Advanced MCP Settings, then add:
{
"mcpServers": {
"mineru": {
"command": "npx",
"args": ["-y", "mineru-mcp"],
"env": {
"MINERU_API_KEY": "your-api-key"
}
}
}
}Cherry Studio
In Settings > MCP Servers > Add Server, set Type to STDIO, Command to npx, Args to -y mineru-mcp, and add environment variable MINERU_API_KEY. Or paste in JSON/Code mode:
{
"mineru": {
"name": "MinerU",
"command": "npx",
"args": ["-y", "mineru-mcp"],
"env": {
"MINERU_API_KEY": "your-api-key"
},
"isActive": true
}
}Witsy
In Settings > MCP Servers, add a new server with Type: stdio, Command: npx, Args: -y mineru-mcp, and set environment variable MINERU_API_KEY to your API key.
Codex CLI (TOML config)
Alternatively, edit ~/.codex/config.toml directly:
[mcp_servers.mineru]
command = "npx"
args = ["-y", "mineru-mcp"]
[mcp_servers.mineru.env]
MINERU_API_KEY = "your-api-key"Gemini CLI (JSON config)
Alternatively, edit ~/.gemini/settings.json directly:
{
"mcpServers": {
"mineru": {
"command": "npx",
"args": ["-y", "mineru-mcp"],
"env": {
"MINERU_API_KEY": "your-api-key"
}
}
}
}Windows
On Windows, npx requires a shell wrapper. Replace "command": "npx" with:
{
"command": "cmd",
"args": ["/c", "npx", "-y", "mineru-mcp"],
"env": {
"MINERU_API_KEY": "your-api-key"
}
}For CLI tools on Windows:
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-mcpChatGPT
ChatGPT only supports remote MCP servers over HTTPS — local stdio servers like this one are not directly supported. You would need to deploy behind a public URL with HTTP transport.
CLI: mineru-cloud
Every tool is also a shell command — the CLI runs the MCP server in-process over an in-memory
transport, so the two can't drift. Same env vars (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
# > 200 pages: 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 --waitOptions mirror the tool parameters with _ → - (--total-pages, --output-dir); numbers,
true/false and JSON arrays are coerced. Install: bun add -g mineru-mcp (or npm i -g).
Configuration
Environment Variable | Default | Description |
| (required) | Your MinerU API Bearer token |
|
| API base URL |
|
| Default model: |
Get your API key at mineru.net
Usage
Parse a single URL
mineru_parse({
url: "https://example.com/document.pdf",
model: "vlm", // optional: "pipeline" (default) or "vlm" (90% accuracy)
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
})Check task progress
mineru_status({
task_id: "abc-123",
format: "concise" // optional: "concise" (default) or "detailed"
})Concise output: done | abc-123 | https://cdn-mineru.../result.zip
Batch parse URLs
mineru_batch({
urls: ["https://example.com/doc1.pdf", "https://example.com/doc2.pdf"],
model: "vlm"
})Check batch progress
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"
})Upload local files
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
})Returns batch_id for tracking. Each file's original name is preserved via data_id (spaces become underscores).
Download results as 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
})Output filenames are derived from data_id (e.g., my_paper_title.md). Spaces in original filenames become underscores.
Typical local file workflow
mineru_upload_batch → mineru_batch_status (poll) → mineru_download_resultsSupported Formats
PDF, DOC, DOCX, PPT, PPTX
PNG, JPG, JPEG
Limits
Single file: 200MB max, 200 pages max (use
pagesto parse a longer file in ≤200-page slices — verified 2026-09-16)Daily quota: 1000 pages at high priority (excess is deprioritized, not rejected)
Batch: max 200 files per request
Release 1.1.6
Restores Node.js 18 HTTP compatibility for fresh installs by retaining MCP SDK 1.29.x and its Node 18-compatible Hono adapter. SDK 1.30 permits an adapter that requires Node.js 20. Version 1.1.5 passed the locked dependency checks but the published-package check exposed an HTTP initialization failure on a fresh install. CI now installs the packed package without the repository lock and exercises both transports on Node.js 18. The SDK compatibility bound is intentional; revisit it with this consumer-install gate before adopting a newer SDK.
Release 1.1.5
Maintenance release: audited dependency updates, Express 5 and Zod 4 compatibility, and regression coverage for both transports. The MCP handshake and HTTP startup message now report the package version instead of the stale 1.0.2 value. Tool inputs and document-processing behavior are unchanged.
Development
Use Bun 1.4.2 and Node.js 24 for the build and CI checks:
bun install --frozen-lockfile
bun audit
bun run build
bun run test
bun run test:packageThe runtime tests exercise the built stdio and HTTP servers against a local MinerU API double. They check tool schemas, request mapping, pagination defaults, provider errors, malformed HTTP requests, and session termination without real credentials or API calls. They do not verify live parsing or file extraction. Dependabot updates the Bun manifest and lockfile together. CI audits dependencies and runs the build and runtime tests before publishing on version tags.
Publishing
Bump package.json and both version fields in server.json, complete the checks
above, merge, then push the matching vX.Y.Z tag. CI publishes to npm, waits for
the exact package version to become available, then registers it with the MCP Registry.
If registry registration fails after npm succeeds, retry only registration using
the existing immutable tag:
gh workflow run publish-mcp.yml --ref main -f registry_tag=v1.1.6License
MIT
Links
MinerU — Document parsing service
MinerU GitHub — Open source version
MCP Specification — Model Context Protocol
Available Tools
8 toolsmineru_batchA
Parse multiple URLs in one batch (max 200). Preferred over mineru_upload_batch — faster and more reliable. Use public URLs (arXiv, SSRN, publisher sites) when available.
| Name | Required | Description | Default |
|---|---|---|---|
| ocr | No | Enable OCR (pipeline only) | |
| urls | Yes | Array of document URLs, or a single URL string | |
| model | No | pipeline=fast, vlm=90% accuracy | |
| table | No | Table recognition | |
| formats | No | Extra export formats | |
| formula | No | Formula recognition | |
| language | No | Language code: ch, en, etc |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral disclosure burden, but it only adds a max batch size and a comparative reliability claim. It does not disclose whether this is an asynchronous job submission, what the response contains, how to track progress, or how to retrieve results, even though sibling tool names like mineru_batch_status and mineru_download_results imply such a workflow.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with the core action and limit front-loaded. Every clause earns its place: the batch limit, the preferred-alternative note, and the public-URL guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter tool with no output schema and no annotations, the description under-specifies the call flow: it doesn't mention job submission, status polling, result download, or how the model/formats/ocr options relate to the batch behavior. An agent would have to infer the asynchronous workflow purely from sibling tool names.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, and the description adds the 'max 200' constraint on the urls parameter, which is not present in the schema. It also connects 'batch' to multiple URLs, providing a small but useful semantic addition beyond the raw property descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific action and object: 'Parse multiple URLs in one batch,' and adds a concrete limit of max 200. It also explicitly distinguishes itself from the closest sibling, mineru_upload_batch, by noting it is preferred and faster/more reliable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It names mineru_upload_batch as the alternative and states when this tool should be preferred, including a speed/reliability rationale and a recommendation to use public URLs. However, it never states when not to use this tool relative to other siblings such as mineru_parse or mineru_parse_long, and it doesn't cover limits beyond the max 200 hint.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mineru_batch_statusC
Get batch results. Supports pagination for large batches.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results to return | |
| format | No | Output format | concise |
| offset | No | Skip first N results | |
| batch_id | Yes | Batch ID from mineru_batch |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It does add that pagination is supported, but it does not say what the returned results look like, whether output is status information or extracted content, or how the format parameter affects the response.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short, front-loaded, and contains no filler. Both sentences serve a purpose, though it is so brief that it sacrifices useful behavioral and contextual detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, no annotations, and several sibling tools, the description is too sparse. It does not explain the relationship to mineru_batch, the meaning of the 'format' enum values, or what the agent should expect in the response, making it incomplete for confident invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all four parameters. The description's pagination note reinforces limit/offset intent but adds little beyond what the schema's 'Max results to return' and 'Skip first N results' already convey.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear action and resource: 'Get batch results.' It is distinct enough from the parser tools and from mineru_status, though it does not explicitly differentiate itself from mineru_status or explain whether 'results' means output files, statuses, or both.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool instead of mineru_status, mineru_download_results, or other siblings. The pagination note hints at large batches, but there is no explicit condition, prerequisite, or alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mineru_download_resultsA
Download batch results and extract named paper folders. Each folder contains {name}.md, {name}_content.json (structured TOC), and images/. Output includes parsed title — verify it matches the expected paper.
| Name | Required | Description | Default |
|---|---|---|---|
| batch_id | Yes | Batch ID from mineru_upload_batch or mineru_batch | |
| overwrite | No | Overwrite existing files | |
| output_dir | Yes | Directory to save markdown files |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses that it creates per-paper folders containing markdown, JSON, and images, and it includes a caution to verify the parsed title. However, it does not mention whether the output directory is created, how overwrite behaves beyond the schema default, or any network/permission requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences are used efficiently: action, expected folder structure, and a verification note. No redundancy, and the most important information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the output structure and a verification step, which is helpful. However, it lacks guidance on error conditions, whether the output directory must exist or is created, and what happens when overwrite=false and files already exist. With no output schema or annotations, a bit more context would make it complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents batch_id, output_dir, and overwrite. The description adds only general context (e.g., 'batch results') and does not elaborate on parameter formats, directory creation, or overwrite semantics beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool downloads batch results and extracts named paper folders, and it details the expected folder contents. It is specific about verb and resource, but it does not explicitly differentiate itself from sibling tools such as mineru_status or mineru_parse_long.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies this tool is used to retrieve batch outputs after processing, but it gives no explicit when-to-use guidance or mention of alternatives. It also does not state prerequisites like waiting for batch completion or when to prefer mineru_status over this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mineru_merge_slicesA
Stitch the slices of a mineru_parse_long batch into one {name}/{name}.md (+ {name}_content.json with page_idx re-based to the whole document, + images/). Slices are ordered by their page range; each is marked with an HTML comment. Waits for nothing — if any slice is still processing, it reports and you re-run later.
| Name | Required | Description | Default |
|---|---|---|---|
| batch_id | Yes | Batch ID from mineru_parse_long | |
| overwrite | No | Overwrite an existing merged folder | |
| output_dir | Yes | Directory to write the merged document folder into |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses output artifacts, page_idx re-basing, ordering by page range, HTML comments, and non-blocking wait behavior. It does not detail overwrite side effects or the exact report/return format, but the main behavioral traits are transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: the core action and outputs appear first, followed by ordering details and the wait/retry behavior. Every sentence contributes useful information and there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations and no output schema, the description covers the main inputs, outputs, ordering, and retry guidance. It omits the exact definition of {name} and the structure of the report/status, but it provides enough for an agent to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description does not add much parameter-specific meaning beyond the schema; it introduces {name} without defining its source and does not explain overwrite behavior beyond what the schema already says.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Stitch'), a specific resource ('slices of a mineru_parse_long batch'), and concrete output artifacts ({name}/{name}.md, {name}_content.json, images/). This clearly differentiates it from sibling tools like mineru_parse_long, which creates slices, and mineru_download_results, which downloads results.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly ties usage to a mineru_parse_long batch and tells the agent to re-run later if any slice is still processing. It does not explicitly discuss when not to use the tool or name alternative merge/result tools, but the intended context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mineru_parseB
Parse a document URL. Returns task_id to check status.
| Name | Required | Description | Default |
|---|---|---|---|
| ocr | No | Enable OCR (pipeline only) | |
| url | Yes | Document URL (PDF, DOC, PPT, images) | |
| model | No | pipeline=fast, vlm=90% accuracy | |
| pages | No | Page range: 1-10,15 or 2--2 | |
| table | No | Table recognition | |
| formats | No | Extra export formats | |
| formula | No | Formula recognition | |
| language | No | Language code: ch, en, etc |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must carry the full behavioral burden. It is sparse, only stating that it returns a task_id, but does not clarify anything about data handling, potential side effects, or whether results are destroyed. The description is too brief to provide adequate transparency for an operation that likely creates a task.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficient at 13 words, front-loaded with the main action and the key return value. It is concise, though it could potentially add a bit more useful detail without significant bloat.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter tool with no annotations and no output schema, the description is far too minimal. It should explain the purpose of the returned task_id, how to use it with sibling tools (e.g., mineru_status), and any prerequisites, but it only provides a single line. Significant gaps exist for an agent to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 100% description coverage for all parameters, including hints like 'Enable OCR' and 'pipeline=fast, vlm=90% accuracy'. The description adds no extra parameter context, but the baseline of 3 is appropriate given the schema's rich coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb ('Parse') and resource ('a document URL'), and explains that it returns a task_id for status checking. It differentiates from the status and batch tools by focusing on single URL parsing, though it does not explicitly contrast with siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The mention of 'pipeline' and 'vlm' models gives implicit usage context (e.g., when to choose one over the other), but there is no explicit statement about when this tool is preferred over mineru_parse_long for long documents or mineru_batch for multiple URLs. The usage guidance is moderate but not fully explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mineru_parse_longA
Parse a document LONGER than 200 pages (MinerU's per-file cap) by submitting it as one batch of ≤200-page slices with page_ranges. Give total_pages (from mdls -name kMDItemNumberOfPages, pdfinfo, or the viewer) — it is auto-detected only for local files on macOS. Returns a batch_id; poll with mineru_batch_status, then stitch with mineru_merge_slices. Files ≤200 pages: use mineru_parse instead.
| Name | Required | Description | Default |
|---|---|---|---|
| ocr | No | Enable OCR (pipeline only) | |
| url | No | Public document URL (preferred) | |
| file | No | Absolute local file path (uploaded once per slice — slow for big files) | |
| name | No | Output name for the merged result (default: from URL/file name) | |
| model | No | pipeline=fast, vlm=90% accuracy | |
| table | No | Table recognition | |
| formula | No | Formula recognition | |
| language | No | Language code: ch, en, etc | |
| slice_size | No | Pages per slice (≤200) | |
| total_pages | No | Total page count of the document |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and discloses key behaviors: it slices into ≤200-page batches, requires total_pages, auto-detects total_pages only for local files on macOS, and returns a batch_id for asynchronous polling. It does not cover failure modes or side effects, but the core execution model is clearly spelled out.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense sentences each serve a distinct purpose: the core use case, the total_pages requirement, and the follow-up/alternative routing. The 200-page condition is front-loaded and there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex long-document tool with no output schema and no annotations, the description covers the selection rule, prerequisite information, and end-to-end workflow. It could be more explicit about how slices are derived from total_pages, but it provides enough context for an agent to make a correct first call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds real meaning for total_pages by explaining how to obtain it and the macOS auto-detection caveat, which goes beyond the schema. It loses a point for referencing 'page_ranges', a concept not present in the input schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: parse documents longer than 200 pages, which is MinerU's per-file cap. It also distinguishes this tool from mineru_parse by page count, so an agent can select it without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says to use mineru_parse for files ≤200 pages, and gives the post-call workflow: poll mineru_batch_status, then stitch with mineru_merge_slices. This is clear when-to-use and when-not-to-use guidance with named alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mineru_statusB
Check task progress. Returns download URL when done.
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | Output format | concise |
| task_id | Yes | Task ID from mineru_parse |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure. It reveals that the tool reports progress and eventually returns a download URL, but it does not describe what an in-progress response looks like, failure states, or confirm the operation is read-only without side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences with no filler. The core action is front-loaded, and the additional outcome detail earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple and the schema covers its parameters, but there is no output schema and the description does not explain the difference between concise and detailed formats, what a non-finished response contains, or how this relates to sibling batch-status tools. Minor but real gaps remain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents task_id and format, including the enum values. The description adds no parameter-specific context, which is acceptable given the high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Check task progress') and a concrete outcome ('Returns download URL when done'). It is clear about the tool's resource and purpose, though it does not explicitly differentiate from sibling mineru_batch_status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies this tool is used to check a task's progress but provides no guidance on when to use it versus mineru_batch_status, how often to poll, or what distinguishes it from other status tools. No alternatives or exclusions are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mineru_upload_batchA
Upload local files for batch parsing. SLOW: uploads can take minutes and may timeout. Prefer mineru_batch with public URLs (arXiv, SSRN, publisher sites) when available — it's faster and more reliable. Only use this for files not available online.
| Name | Required | Description | Default |
|---|---|---|---|
| files | No | Array of absolute file paths, or a single path string | |
| model | No | pipeline=fast, vlm=90% accuracy | |
| table | No | Table recognition | |
| formats | No | Extra export formats | |
| formula | No | Formula recognition | |
| language | No | Language code: ch, en, etc | |
| directory | No | Directory path containing PDF/DOC/PPT files |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure. It warns that uploads are 'SLOW' and 'may timeout,' and notes the reliability tradeoff versus the alternative. It does not describe the job lifecycle, return value, or next steps, but the performance caveats are meaningful and not present anywhere else.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, with the key caveat front-loaded and the alternative guidance following. Every sentence earns its place, and there is no fluff or repetition of schema details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has 7 parameters, no annotations, and no output schema, and the description covers when to use it and its slowness. However, it does not explain what the upload returns, whether it is asynchronous, or how to proceed with mineru_status or mineru_download_results afterward, leaving a gap in end-to-end workflow context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds minimal parameter-specific meaning beyond clarifying that files are local paths, which the schema already states as 'absolute file paths.' It does not expand on model, table, formula, formats, or language beyond their schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Upload local files for batch parsing.' It also distinguishes this tool from mineru_batch by clarifying that public-URL parsing belongs to that sibling, so an agent can disambiguate without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to avoid this tool ('Prefer mineru_batch with public URLs'), names the alternative, and gives the exclusive condition for use: 'Only use this for files not available online.' This is explicit when/when-not guidance with a named sibling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
8 tool updates
v1.1.6- Changed
mineru_batch5 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / urls / anyOfAdded value: +[ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "string" + } +] - changed
Input schema / properties / urls / descriptionPrevious value: -"Array of document URLs"New value: +"Array of document URLs, or a single URL string" - removed
Input schema / properties / urls / itemsRemoved value: -{ - "type": "string" -} - removed
Input schema / properties / urls / typeRemoved value: -"array"
- Changed
mineru_batch_status1 field changed- removed
Input schema / additionalPropertiesRemoved value: -false
- Added
mineru_download_results - Added
mineru_merge_slices - Changed
mineru_parse1 field changed- removed
Input schema / additionalPropertiesRemoved value: -false
- Added
mineru_parse_long - Changed
mineru_status1 field changed- removed
Input schema / additionalPropertiesRemoved value: -false
- Added
mineru_upload_batch
4 tool updates
v1.0.0- First observed
mineru_batch - First observed
mineru_batch_status - First observed
mineru_parse - First observed
mineru_status
TDQS
Scored across 8 tools
Each tool targets a distinct action or resource: status checking, single parse, batch parse, batch status, local upload, result download, slice merging, and long-document parsing. The descriptions explicitly clarify when to use each, especially the overlap between mineru_parse/mineru_parse_long and mineru_batch/mineru_upload_batch, leaving no ambiguity.
All tool names share the 'mineru_' prefix, but the second part mixes verbs (parse, upload, download, merge) with nouns (status, batch, results). This is readable and predictable, though not strictly verb_noun like the calibration example. The minor inconsistency (e.g., 'mineru_batch_status' vs 'mineru_status') does not cause confusion.
With 8 tools, the server covers the core document parsing workflow without excess. Each tool has a clear role: parsing (single/batch/long), status checks, result retrieval, and local file upload. This is well-scoped for the domain.
The tool set covers the full parse lifecycle: submit, check status, download results, and merge slices for long documents. The only notable gap is the lack of a direct single-local-file parse path (requires using upload_batch even for one file), but this is a minor workaround and does not severely impede agents.
Maintenance
Related MCP Connectors
Parse PDF/Word/PPT/HTML to Markdown; tables as JSON, image extraction, RAG chunking, page ranges.
Turn any PDF into structured JSON via AI + OCR: invoices, bank statements, contracts.
Turn PDFs and images into typed fields — invoices, receipts, IDs and custom models — via Mindee OCR.
Turn documents into structured data: parse, extract, classify, split, and fill PDF forms.
Related MCP Servers
- FlicenseNot gradedqualityNot gradedmaintenanceEnables batch conversion of PDF files to HTML format using Mineru's official PDF parsing API. Supports automatic file scanning, customizable parsing parameters, and organized output with renamed image assets.-
- FlicenseNot gradedqualityDmaintenanceEnables extraction of text, tables, and structured data from PDFs, images, and office documents using LandingAI's Agentic Document Extraction API. Supports both direct parsing and background job processing for large files with privacy-focused processing.-
- FlicenseNot gradedqualityDmaintenanceEnables document parsing through the Mineru API with support for multiple formats (PDF, DOC, DOCX, PPT, images), OCR, formula recognition, and table extraction in multiple languages.1-
- AlicenseAqualityDmaintenanceExposes the MinerU document-to-markdown API as MCP tools for converting PDF, Word, PPT, and images into Markdown. It supports both local and remote file processing with integrated OCR capabilities for multiple languages.210MIT