{
  "markdown": "<div align=\"center\">\n\n# MinerU-Ecosystem\n\n**The official ecosystem toolkit for [MinerU](https://github.com/opendatalab/MinerU) Open API**\n\nEmpowering developers and AI agents with seamless document parsing capabilities — PDF · Word · PPT · Images · Web pages → Markdown / JSON · VLM+OCR dual engine · 109 languages · MCP Server · LangChain / RAGFlow / Dify / FastGPT native integration.\n\n[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](LICENSE)\n[![MinerU](https://img.shields.io/badge/Powered%20by-MinerU-orange)](https://github.com/opendatalab/MinerU)\n[![Online](https://img.shields.io/badge/Online-mineru.net-purple)](https://mineru.net)\n\n[中文文档](README.zh-CN.md)\n\n</div>\n\n---\n\n## 📖 Overview\n\n**MinerU-Ecosystem** provides a full suite of tools, SDKs, and integrations built on top of the [MinerU Open API](https://mineru.net/apiManage/docs). Whether you're building production pipelines, integrating with LangChain for RAG, or enabling AI agents to parse documents on the fly — this repository has you covered.\n\n[MinerU](https://github.com/opendatalab/MinerU) is an open-source, high-accuracy document parsing engine that converts unstructured documents (PDFs, images, Office files, etc.) into machine-readable Markdown and JSON, purpose-built for LLM pre-training, RAG, and agentic workflows.\n\n**Core capabilities:**\n- Formulas → LaTeX · Tables → HTML, accurate complex layout reconstruction\n- Supports scanned docs, handwriting, multi-column layouts, cross-page table merging\n- Output follows human reading order with automatic header/footer removal\n- VLM + OCR dual engine, 109-language OCR recognition\n\n---\n\n## 🏗️ Repository Structure\n\n```\nMinerU-Ecosystem/\n├── cli/                  # Command-line tool for document parsing\n├── sdk/                  # Multi-language SDKs\n│   ├── python/           #   Python SDK\n│   ├── go/               #   Go SDK\n│   └── typescript/       #   TypeScript SDK\n├── langchain_mineru/     # LangChain document loader integration\n├── llama-index-readers-mineru/     # LlamaIndex document reader integration\n├── mcp/                  # Model Context Protocol server (Python)\n└── skills/               # AI agent skills (Claude Code, OpenClaw, etc.)\n```\n\n---\n\n## 🔑 Supported APIs\n\nAll components support both API modes:\n\n| Comparison      | 🎯 Precision Extract API                                    | ⚡ Quick Parse API (Agent-Oriented) |\n| --------------- | ----------------------------------------------------------- | ----------------------------------- |\n| Auth            | ✅ Token required                                           | ❌ Not required (IP rate-limited)   |\n| Model Versions  | `pipeline` (default) / `vlm` (recommended) / `MinerU-HTML`  | Fixed lightweight pipeline model    |\n| File Size Limit | ≤ 200 MB                                                    | ≤ 10 MB                             |\n| Page Limit      | ≤ 200 pages                                                 | ≤ 20 pages                          |\n| Batch Support   | ✅ Supported (≤ 200 files)                                  | ❌ Single file only                 |\n| Output Formats  | Markdown, JSON, Zip; optional export to DOCX / HTML / LaTeX | Markdown only                       |\n\n## 🧭 Choose Your Integration Path\n\nNot sure where to start? Pick the path that matches your use case:\n\n```text\nI want to...\n│\n├── 🌐 Try it instantly, with no install and no code\n│   └── Web App → https://mineru.net/OpenSourceTools/Extractor\n│\n├── 💻 Parse documents from the terminal\n│   └── CLI → cli/\n│       flash-extract: no token, best for quick previews\n│       extract: full features, better for production workflows\n│\n├── 🐍 Integrate it into my Python / Go / TypeScript project\n│   └── SDK → sdk/python/ | sdk/go/ | sdk/typescript/\n│\n├── 🤖 Enable my AI agent to parse documents\n│   ├── Call the CLI directly → cli/\n│   ├── Use natural-language skills (OpenClaw, ZeroClaw, etc.) → skills/\n│   └── Use MCP protocol (Cursor, Claude Desktop, Windsurf, etc.) → mcp/\n│\n├── 📚 Build a RAG pipeline / knowledge base\n│   ├── LangChain Loader → langchain_mineru/\n│   └── LlamaIndex Reader → llama-index-readers-mineru/\n│       flash mode: zero-token quick start\n│       precision mode: OCR, tables, formulas, and higher fidelity\n```\n\n---\n\n## 🚀 Quick Start\n\n### 💻 CLI (`cli/`)\n\nA fast command-line tool for parsing documents directly from your terminal.\n\n#### Installation\n\n```bash\n# Linux / macOS\ncurl -fsSL https://cdn-mineru.openxlab.org.cn/open-api-cli/install.sh | sh\n```\n\n```powershell\n# Windows (PowerShell)\nirm https://cdn-mineru.openxlab.org.cn/open-api-cli/install.ps1 | iex\n```\n\n**Flash Extract (no login)**\n\n```bash\nmineru-open-api flash-extract report.pdf\n```\n\n**Precision Extract (login required)**\n\n```bash\n# First-time setup\nmineru-open-api auth\n\n# Extract to stdout\nmineru-open-api extract paper.pdf\n\n# Save all resources (images/tables) to directory\nmineru-open-api extract report.pdf -o ./output/\n\n# Export to multiple formats\nmineru-open-api extract report.pdf -f docx,latex,html -o ./results/\n```\n\n**Web Crawl**\n\n```bash\nmineru-open-api crawl https://www.example.com\n```\n\n**Batch Processing**\n\n```bash\n# All PDFs in current directory\nmineru-open-api extract *.pdf -o ./results/\n\n# From a file list\nmineru-open-api extract --list filelist.txt -o ./results/\n```\n\n---\n\n### 🐍 Python SDK\n\n#### Installation\n\n```bash\npip install mineru-open-sdk\n```\n\n**Flash Extract (no token)**\n\n```python\nfrom mineru import MinerU\n\nclient = MinerU()\nresult = client.flash_extract(\"https://cdn-mineru.openxlab.org.cn/demo/example.pdf\")\nprint(result.markdown)\n```\n\n**Precision Extract (token required)**\n\n```python\nfrom mineru import MinerU\n\nclient = MinerU(\"your-api-token\")\nresult = client.extract(\"https://cdn-mineru.openxlab.org.cn/demo/example.pdf\")\nprint(result.markdown)\nprint(result.images)  # extracted image list\n```\n\n---\n\n### 🐹 Go SDK\n\n#### Installation\n\n```bash\ngo get github.com/opendatalab/MinerU-Ecosystem/sdk/go@latest\n```\n\n**Flash Extract**\n\n```go\npackage main\n\nimport (\n    \"context\"\n    \"fmt\"\n    mineru \"github.com/opendatalab/MinerU-Ecosystem/sdk/go\"\n)\n\nfunc main() {\n    client := mineru.NewFlash()\n    result, err := client.FlashExtract(\n        context.Background(),\n        \"https://cdn-mineru.openxlab.org.cn/demo/example.pdf\",\n    )\n    if err != nil {\n        panic(err)\n    }\n    fmt.Println(result.Markdown)\n}\n```\n\n**Precision Extract**\n\n```go\nclient, err := mineru.New(\"your-api-token\")\nif err != nil {\n    panic(err)\n}\nresult, err := client.Extract(\n    context.Background(),\n    \"https://cdn-mineru.openxlab.org.cn/demo/example.pdf\",\n)\nif err != nil {\n    panic(err)\n}\nfmt.Println(result.Markdown)\n```\n\n**Precision Extract with options**\n\n```go\nresult, err := client.Extract(ctx, \"./paper.pdf\",\n    mineru.WithModel(\"vlm\"),\n    mineru.WithLanguage(\"en\"),\n    mineru.WithPages(\"1-20\"),\n    mineru.WithExtraFormats(\"docx\"),\n    mineru.WithPollTimeout(10*time.Minute),\n)\nif err != nil {\n    panic(err)\n}\nif err := result.SaveAll(\"./output\"); err != nil {\n    panic(err)\n}\n```\n\n**Batch Processing**\n\n```go\nch, err := client.ExtractBatch(ctx, []string{\"a.pdf\", \"b.pdf\"})\nif err != nil {\n    panic(err)\n}\nfor result := range ch {\n    fmt.Printf(\"%s: %s\\n\", result.Filename, result.State)\n}\n```\n\n**Web Crawling**\n\n```go\nresult, err := client.Crawl(ctx, \"https://www.example.com\")\nif err != nil {\n    panic(err)\n}\nfmt.Println(result.Markdown)\n```\n\n---\n\n### 🟦 TypeScript / JavaScript SDK\n\n#### Installation\n\n```bash\nnpm install mineru-open-sdk\n```\n\n**Flash Extract**\n\n```typescript\nimport { MinerU } from \"mineru-open-sdk\";\n\nconst client = new MinerU();\nconst result = await client.flashExtract(\n  \"https://cdn-mineru.openxlab.org.cn/demo/example.pdf\"\n);\nconsole.log(result.markdown);\n```\n\n**Precision Extract**\n\n```typescript\nimport { MinerU } from \"mineru-open-sdk\";\n\nconst client = new MinerU(\"your-api-token\");\nconst result = await client.extract(\n  \"https://cdn-mineru.openxlab.org.cn/demo/example.pdf\"\n);\nconsole.log(result.markdown);\nconsole.log(result.images);\n```\n\n**Precision Extract with options**\n\n```typescript\nimport { MinerU, saveAll } from \"mineru-open-sdk\";\n\nconst client = new MinerU(\"your-api-token\");\nconst result = await client.extract(\"./paper.pdf\", {\n  model: \"vlm\",       // \"vlm\" | \"pipeline\" | \"html\"\n  language: \"en\",\n  pages: \"1-20\",\n  extraFormats: [\"docx\"],\n  timeout: 600,\n});\nawait saveAll(result, \"./output\");\n```\n\n**Batch Processing**\n\n```typescript\nfor await (const result of client.extractBatch([\"a.pdf\", \"b.pdf\"])) {\n  console.log(`${result.filename}: ${result.state}`);\n}\n```\n\n**Web Crawling**\n\n```typescript\nconst result = await client.crawl(\"https://www.example.com\");\nconsole.log(result.markdown);\n```\n\n---\n\n## 🤖 Use with Claude / Cursor (MCP Server)\n\nMinerU provides an official MCP Server allowing Claude Desktop, Cursor, Windsurf, and any MCP-compatible AI client to parse documents as a native tool.\n\n> No API key needed — Flash mode works out of the box, free, up to 20 pages / 10 MB per file.\n\n**Configure: `claude_desktop_config.json` / `.cursor/mcp.json`**\n\n```json\n{\n  \"mcpServers\": {\n    \"mineru\": {\n      \"command\": \"uvx\",\n      \"args\": [\"mineru-open-mcp\"],\n      \"env\": {\n        \"MINERU_API_TOKEN\": \"your_key_here\"\n      }\n    }\n  }\n}\n```\n\n**Streamable HTTP mode (web-based MCP clients)**\n\n```bash\nMINERU_API_TOKEN=your_key mineru-open-mcp --transport streamable-http --port 8001\n```\n\n```json\n{\n  \"mcpServers\": {\n    \"mineru\": {\n      \"type\": \"streamableHttp\",\n      \"url\": \"http://127.0.0.1:8001/mcp\"\n    }\n  }\n}\n```\n\n**Tools exposed via MCP:**\n\n| Tool | Description |\n|---|---|\n| `parse_documents` | Convert PDF, DOCX, PPTX, images, HTML to Markdown |\n| `get_ocr_languages` | List all 109 supported OCR languages |\n| `clean_logs` | Delete old server log files (when `ENABLE_LOG=true`) |\n\n**Environment Variables:**\n\n| Variable | Description | Default |\n|---|---|---|\n| `MINERU_API_TOKEN` | MinerU cloud API token | — |\n| `OUTPUT_DIR` | Directory for saved output | `~/mineru-downloads` |\n| `ENABLE_LOG` | Set `true` to write log files | disabled |\n| `MINERU_LOG_DIR` | Override log file directory | `~/.mineru-open-mcp/logs/` |\n\n---\n\n## 🦜 Use in RAG with LangChain\n\n`langchain-mineru` is an official LangChain Document Loader — parse any document into LangChain `Document` objects with one line of code.\n\n#### Installation\n\n```bash\npip install langchain-mineru\n```\n\n**Minimal example (no token)**\n\n**1. Basic usage (`flash` mode by default, no token required)**\n\n```python\nfrom langchain_mineru import MinerULoader\n\nloader = MinerULoader(source=\"demo.pdf\")   # flash mode, no token needed\ndocs = loader.load()\nprint(docs[0].page_content[:500])\nprint(docs[0].metadata)\n```\n\nDefault is `mode=\"flash\"`, which is ideal for quick previews and lightweight integrations.\n\n**2. Precision mode (token required)**\n\nBest for long documents, larger files, and workflows that need higher-fidelity extraction or standard API outputs. Flash mode also supports OCR, table, and formula switches within flash API limits.\n\n```python\nfrom langchain_mineru import MinerULoader\n\nloader = MinerULoader(\n    source=\"/path/to/manual.pdf\",\n    mode=\"precision\",\n    token=\"your-api-token\",  # or set MINERU_TOKEN\n    split_pages=True,\n    pages=\"1-5\",\n)\n\ndocs = loader.load()\nfor doc in docs:\n    print(doc.metadata.get(\"page\"), doc.page_content[:200])\n```\n\n**3. Use it in a LangChain RAG pipeline**\n\n```python\nfrom langchain_mineru import MinerULoader\nfrom langchain_text_splitters import RecursiveCharacterTextSplitter\nfrom langchain_openai import OpenAIEmbeddings\nfrom langchain_community.vectorstores import FAISS\n\nloader = MinerULoader(source=\"demo.pdf\", split_pages=True)\ndocs = loader.load()\n\nsplitter = RecursiveCharacterTextSplitter(chunk_size=1200, chunk_overlap=200)\nchunks = splitter.split_documents(docs)\n\nvs = FAISS.from_documents(chunks, OpenAIEmbeddings())\nresults = vs.similarity_search(\"What are the key conclusions in this document?\", k=3)\n\nfor r in results:\n    print(r.page_content[:200])\n```\n\nDefault is `mode=\"flash\"` (no API token required). Switch to `mode=\"precision\"` for higher fidelity with token auth. For RAG use cases, `split_pages=True` is usually a better default for PDFs because it gives you page-level `Document` granularity.\n\n### ## Use in RAG with LlamaIndex\n\nA document reader for LlamaIndex that parses PDFs, Word files, PPTs, images, and Excel files through MinerU and returns LlamaIndex-compatible `Document` objects for indexing and retrieval.\n\n#### Installation\n\n```bash\npip install llama-index-readers-mineru\n```\n\n#### Usage\n\n**1. Flash mode (default, no token required)**\n\nGood for quick setup and lightweight parsing. Output is returned as Markdown.\n\n```python\nfrom llama_index.readers.mineru import MinerUReader\n\nreader = MinerUReader()\ndocuments = reader.load_data(\"https://cdn-mineru.openxlab.org.cn/demo/example.pdf\")\n\nprint(documents[0].text[:500])\nprint(documents[0].metadata)\n```\n\n**2. Precision mode (token required)**\n\nBest for longer documents, larger files, and use cases that need higher-fidelity extraction or standard API outputs. Flash mode also supports OCR, formula, and table switches within flash API limits.\n\n```python\nfrom llama_index.readers.mineru import MinerUReader\n\nreader = MinerUReader(\n    mode=\"precision\",\n    token=\"your-api-token\",  # or set MINERU_TOKEN\n    pages=\"1-20\",\n)\ndocuments = reader.load_data(\"/path/to/paper.pdf\")\n```\n\n**3. Use it in a LlamaIndex pipeline**\n\n```python\nfrom llama_index.core import VectorStoreIndex\nfrom llama_index.readers.mineru import MinerUReader\n\nreader = MinerUReader(split_pages=True)\ndocuments = reader.load_data(\"/path/to/paper.pdf\")\n\nindex = VectorStoreIndex.from_documents(documents)\nquery_engine = index.as_query_engine()\nresponse = query_engine.query(\"Summarize the main findings of this document\")\nprint(response)\n```\n\nDefault is `mode=\"flash\"` with no token required. Switch to `mode=\"precision\"` when you need higher parsing fidelity. For PDF-based RAG pipelines, `split_pages=True` is recommended so each page becomes a separate `Document`.\n\n---\n\n## 🤖 AI Agent Skills (`skills/`)\n\nPre-built skills for AI coding agents, wrapping the `mineru-open-api` CLI for use in agent workflows.\n\n- **[OpenClaw / ClawHub](https://clawhub.ai/MinerU-Extract/mineru-ai)** — View skill details\n- **[One-click download](https://cdn-mineru.openxlab.org.cn/open-api-cli/skill.zip)** — Skill package\n- Compatible with Claude Code, OpenClaw, ZeroClaw, and other skill-interface agents\n\n---\n\n## 🔗 All Integrations\n\n| Framework / Tool | Status | Notes |\n|---|---|---|\n| LangChain | ✅ Official | `pip install langchain-mineru` |\n| LlamaIndex | ✅ Community | See MinerU-Ecosystem |\n| RAGFlow | ✅ Supported | Document loader integration |\n| RAG-Anything | ✅ Supported | Multi-modal RAG pipeline |\n| Flowise | ✅ Supported | Node-based RAG builder |\n| Dify | ✅ Native Plugin | Built-in document loader |\n| FastGPT | ✅ Native Plugin | Integration guide |\n| Claude Desktop | ✅ MCP | `uvx mineru-open-mcp` |\n| Cursor | ✅ MCP | `.cursor/mcp.json` config |\n| Windsurf | ✅ MCP | stdio / streamable-http |\n| OpenClaw / ZeroClaw | ✅ Agent Skill | ClawHub |\n| Go SDK | ✅ Official | `go get .../sdk/go@latest` |\n| TypeScript SDK | ✅ Official | `npm install mineru-open-sdk` |\n| Python SDK | ✅ Official | `pip install mineru-open-sdk` |\n\n---\n\n## 📚 Documentation\n\n| Resource | Link |\n|---|---|\n| MinerU Open API Docs | [mineru.net/apiManage/docs](https://mineru.net/apiManage/docs) |\n| MinerU Online Demo | [mineru.net/OpenSourceTools/Extractor](https://mineru.net/OpenSourceTools/Extractor) |\n| MinerU Open Source | [github.com/opendatalab/MinerU](https://github.com/opendatalab/MinerU) |\n\n---\n\n## 📄 License\n\nThis project is licensed under the [Apache License 2.0](LICENSE).\n",
  "bytes": 15766,
  "sha": "b49793cf569461aa8a1e8ece3fcbdd0c1ac0bce9786fbbc88ceab6d8a934d444",
  "repo_slug": "opendatalab/mineru-ecosystem",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_opendatalab_mineru_open_mcp_e8782cce/readme"
}