{
  "data": {
    "a": {
      "slug": "docling",
      "name": "Docling",
      "vendor": "Docling Project (LF AI \u0026 Data Foundation, started at IBM Research Zurich)",
      "vendorUrl": "https://docling-project.github.io/docling/",
      "kind": "sdk",
      "category": "document-extraction",
      "summary": "Docling is an open-source Python library and CLI that converts PDFs, Office files, HTML, images and audio into a structured DoclingDocument, Markdown or JSON, with layout, table and OCR models, plus a REST server (docling-serve) and an MCP server.",
      "url": "https://www.anchorterminal.com/tools/docling",
      "markdownUrl": "https://www.anchorterminal.com/tools/docling.md",
      "slimMarkdownUrl": "https://www.anchorterminal.com/tools/docling.min.md",
      "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/docling.json",
      "dns": "docling.grade.anchorterminal.com",
      "repo": "https://github.com/docling-project/docling",
      "license": "MIT",
      "transports": [
        "stdio",
        "streamable-http",
        "http"
      ],
      "packages": [
        {
          "registry": "pypi",
          "name": "docling"
        },
        {
          "registry": "pypi",
          "name": "docling-mcp"
        },
        {
          "registry": "pypi",
          "name": "docling-serve"
        }
      ],
      "auth": "none",
      "authNotes": "The library and the stdio MCP server need no credentials. docling-serve requires an `X-Api-Key` header only when `DOCLING_SERVE_API_KEY` is set; it is off by default. Models are downloaded from Hugging Face on first use or prefetched for offline use.",
      "pricing": "free",
      "pricingNotes": "Free and MIT-licensed, run on your own hardware. No paid edition from the project was found (checked 2026-11-06).",
      "priceSummary": "Free · OSS",
      "where": "local",
      "x402": {
        "level": "no",
        "evidence": "Self-hosted library and servers with nothing to buy; no payment protocol in the repositories (checked 2026-11-06).",
        "endpoints": []
      },
      "toolCount": 25,
      "popularity": {
        "githubStars": 70216,
        "npmWeekly": null,
        "pypiWeekly": 946968,
        "asOf": "2026-11-06"
      },
      "docsUrl": "https://docling-project.github.io/docling/",
      "registryName": "io.github.docling-project/docling-mcp",
      "capabilities": [
        "docs.parse",
        "docs.tables",
        "docs.ocr",
        "docs.chunk",
        "docs.extract"
      ],
      "tags": [
        "open-source",
        "mit",
        "python",
        "self-hosted",
        "local",
        "cli",
        "mcp",
        "stdio",
        "mcp-registry",
        "docker",
        "no-telemetry",
        "free"
      ],
      "lastRelease": "2026-11-05",
      "graded": true,
      "anchor": {
        "graded": true,
        "score": 64.3,
        "grade": "B",
        "agentReady": false,
        "rank": 475,
        "ranked": true,
        "rankOf": 1486,
        "categoryRank": 9,
        "methodology": "0.7",
        "run": "2026-10-01",
        "scores": {
          "ergonomics": 77,
          "maintenance": 89,
          "payments": 60,
          "reliability": 85,
          "schema": 77,
          "security": 53,
          "transparency": 65
        },
        "pending": [
          "performance",
          "tasks"
        ],
        "assessment": {
          "confidence": "medium",
          "date": "2026-11-06"
        },
        "negative": -8,
        "negativeNotes": [
          "-8: 28 security advisories published on GitHub between 2 June and 23 October 2026, 5 rated High, among them arbitrary file read and write with the opt-in Tectonic TikZ engine (GHSA-x3q2-h9hx-4r4j, 1 October), unsafe zip extraction in the EasyOCR model download and XML entity expansion in the USPTO backend (both 2 June), and an SSRF guard bypass (1 October). All were published by the maintainers with fixed releases, so the deduction is reduced for disclosure, as with directus's published advisories. https://github.com/docling-project/docling/security"
        ],
        "verdict": "An MIT Python library with a CLI, a REST server and a 25-tool MCP server converts PDFs, Office files, HTML and scans into structured documents on the user's own machine, with near-daily releases. Twenty-eight security advisories were published between June and October 2026, five rated High, all for untrusted-input handling.",
        "bestFor": "Self-hosted PDF and Office conversion to Markdown or JSON for RAG and agents that can't send documents out.",
        "strengths": [
          "MIT licence, hosted by the LF AI \u0026 Data Foundation, with no telemetry found in the source",
          "Runs locally, and remote services stay off unless `enable_remote_services=True` is set",
          "Releases v2.136.0 to v2.148.0 between 9 October and 5 November 2026, with a semantic-release changelog",
          "docling-mcp groups its tools (conversion, generation, manipulation) and marks them with readOnlyHint and destructiveHint",
          "A public disclosure policy, and advisories published on GitHub with fixes"
        ],
        "weaknesses": [
          "28 advisories from 2 June to 23 October 2026, five High, including arbitrary file read and write through the opt-in Tectonic TikZ engine",
          "No llms.txt on the docs site (404)",
          "docling-serve's only access control is one optional shared API key, off by default",
          "Parsed document text is untrusted, and no prompt-injection guidance was found",
          "About 719 open issues and 223 open pull requests on the main repository"
        ],
        "agentNotes": [
          "Keep `enable_remote_services` and remote image fetching off when converting untrusted files, and set `max_num_pages` and `max_file_size`",
          "Upgrade to v2.148.0 or later before parsing untrusted documents, since recent releases fix memory-exhaustion and file-read flaws",
          "Start docling-mcp with only the tool groups the task needs, and use the anchor tools to read parts of a long document",
          "Treat converted text as untrusted input, never as instructions",
          "Set DOCLING_SERVE_API_KEY before exposing docling-serve beyond localhost"
        ],
        "metrics": {
          "kind": "local",
          "measured": false
        },
        "reviewCount": 0,
        "avgRating": 0,
        "history": [
          {
            "basis": "public evidence",
            "confidence": "medium",
            "grade": "B",
            "methodology": "0.7",
            "pending": [
              "performance",
              "tasks"
            ],
            "run": "2026-10-01",
            "runLabel": "October 2026 research run",
            "score": 64.3
          }
        ],
        "editorialScores": {
          "ergonomics": 77,
          "maintenance": 89,
          "payments": 60,
          "reliability": 85,
          "schema": 77,
          "security": 53,
          "transparency": 77
        },
        "provenanceScore": 52,
        "checked": {
          "categories": {
            "ergonomics": "2026-11-06",
            "maintenance": "2026-11-06",
            "payments": "2026-11-06",
            "reliability": "2026-11-06",
            "schema": "2026-11-06",
            "security": "2026-11-06",
            "transparency": "2026-11-06"
          },
          "last": "2026-11-06",
          "oldest": "2026-11-06",
          "stale": false,
          "staleAfterDays": 90
        }
      },
      "connect": {
        "install": "pip install docling",
        "config": {
          "mcpServers": {
            "docling": {
              "args": [
                "--from=docling-mcp",
                "docling-mcp-server"
              ],
              "command": "uvx"
            }
          }
        }
      },
      "letme": {
        "capability": "https://letme.dev/docs.parse",
        "tool": "https://letme.dev/docling"
      },
      "area": "web-data",
      "provenance": {
        "legalEntity": "Docling Project (LF AI \u0026 Data Foundation)",
        "domain": "docling-project.github.io",
        "domainRegistered": "",
        "endpointOnVendorDomain": true,
        "terms": "",
        "privacy": "",
        "statusPage": "",
        "changelog": "https://github.com/docling-project/docling/blob/main/CHANGELOG.md",
        "securityTxt": "none",
        "checked": "2026-11-06",
        "notes": [
          "MIT licence. The project is hosted by the LF AI \u0026 Data Foundation and was started at IBM Research Zurich; no single legal entity publishes it.",
          "The security policy is on the repository's Security tab with private advisory reporting and an email route; docling-project.github.io has no security.txt.",
          "docling-project.github.io/docling/llms.txt answered 404 on 6 November 2026."
        ],
        "score": 52
      },
      "pageJsonUrl": "https://www.anchorterminal.com/tools/docling.json",
      "live": {
        "slug": "docling",
        "versions": [
          {
            "registry": "github",
            "name": "docling-project/docling",
            "version": "v2.148.0",
            "released": "2026-11-05",
            "seenAt": "2026-11-06T23:21:57.627571586Z"
          },
          {
            "registry": "mcp-registry",
            "name": "io.github.docling-project/docling-mcp",
            "version": "3.5.0",
            "seenAt": "2026-11-07T18:16:28.95801333Z"
          },
          {
            "registry": "pypi",
            "name": "docling",
            "version": "2.148.0",
            "released": "2026-11-05",
            "seenAt": "2026-11-06T23:21:53.500253508Z"
          },
          {
            "registry": "pypi",
            "name": "docling-mcp",
            "version": "3.5.0",
            "released": "2026-11-04",
            "seenAt": "2026-11-06T23:21:54.889201724Z"
          },
          {
            "registry": "pypi",
            "name": "docling-serve",
            "version": "1.38.2",
            "released": "2026-10-27",
            "seenAt": "2026-11-06T23:21:55.609213125Z"
          }
        ],
        "githubStars": 70222,
        "pypiWeekly": 946968,
        "securityTxt": {
          "url": "https://docling-project.github.io/.well-known/security.txt",
          "state": "none",
          "checkedAt": "2026-11-07T16:00:37.972746959Z"
        },
        "pages": [
          {
            "url": "https://raw.githubusercontent.com/docling-project/docling/main/CHANGELOG.md",
            "kind": "changelog",
            "status": 200,
            "checkedAt": "2026-11-07T14:20:39.957874821Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "d0ae114890b9"
          }
        ],
        "updatedAt": "2026-11-07T18:16:28.95801333Z"
      }
    },
    "answer": "Docling scores 64.3 (B) on agent readiness against Unstructured API + MCP's 42.4 (E), and leads in every scored category.",
    "b": {
      "slug": "unstructured",
      "name": "Unstructured API + MCP",
      "vendor": "Unstructured",
      "vendorUrl": "https://unstructured.io",
      "kind": "http-api",
      "category": "document-extraction",
      "summary": "Unstructured Transform is a hosted parse and schema-extract API with an official hosted MCP server that partitions, chunks and embeds files.",
      "url": "https://www.anchorterminal.com/tools/unstructured",
      "markdownUrl": "https://www.anchorterminal.com/tools/unstructured.md",
      "slimMarkdownUrl": "https://www.anchorterminal.com/tools/unstructured.min.md",
      "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/unstructured.json",
      "dns": "unstructured.grade.anchorterminal.com",
      "repo": "https://github.com/Unstructured-IO/unstructured",
      "license": "Apache-2.0",
      "transports": [
        "http",
        "streamable-http"
      ],
      "remoteUrl": "https://transform.unstructured.io/api/v2",
      "packages": [
        {
          "registry": "pypi",
          "name": "unstructured-transform-client"
        },
        {
          "registry": "npm",
          "name": "unstructured-transform-client"
        },
        {
          "registry": "pypi",
          "name": "unstructured"
        },
        {
          "registry": "pypi",
          "name": "unstructured-client"
        }
      ],
      "auth": "mixed",
      "authNotes": "Transform API takes the key in an unstructured-api-key header. The hosted MCP uses OAuth, or the same key as a bearer token. Business customers get a separate API URL and one key per workspace from platform.unstructured.io or their dedicated instance.",
      "pricing": "usage",
      "pricingNotes": "Transform processes the first 10,000 pages free once per account, no card. After that pay as you go is $0.015 a page, billed monthly; requests fail past 10,000 pages until you add a card. Business (dedicated instance, VPC or multi-tenant SaaS) is custom. The open-source library is free and you pay only for your own compute (https://unstructured.io/pricing).",
      "priceSummary": "$15 / 1k pages",
      "where": "hosted",
      "x402": {
        "level": "no",
        "evidence": "No x402 or per-call crypto payment in docs or pricing (checked 2026-09-30).",
        "endpoints": []
      },
      "toolCount": null,
      "popularity": {
        "githubStars": null,
        "npmWeekly": null,
        "pypiWeekly": null,
        "asOf": "2026-09-30"
      },
      "docsUrl": "https://docs.unstructured.io/transform/overview",
      "llmsTxt": "https://docs.unstructured.io/llms.txt",
      "registryName": "io.unstructured/transform",
      "capabilities": [
        "docs.parse",
        "docs.ocr",
        "docs.extract",
        "docs.tables",
        "docs.chunk"
      ],
      "tags": [
        "hosted",
        "freemium",
        "no-card",
        "mcp",
        "llms-txt",
        "python",
        "typescript",
        "async-jobs",
        "enterprise",
        "open-source",
        "self-hosted",
        "local"
      ],
      "lastRelease": "2026-10-29",
      "graded": true,
      "anchor": {
        "graded": true,
        "score": 42.4,
        "grade": "E",
        "agentReady": false,
        "rank": 1263,
        "ranked": true,
        "rankOf": 1486,
        "categoryRank": 18,
        "methodology": "0.7",
        "run": "2026-10-01",
        "scores": {
          "ergonomics": 58,
          "maintenance": 80,
          "payments": 40,
          "reliability": 27,
          "schema": 51,
          "security": 47,
          "transparency": 58
        },
        "pending": [
          "performance",
          "tasks"
        ],
        "assessment": {
          "confidence": "medium",
          "date": "2026-11-05"
        },
        "negative": -6,
        "negativeNotes": [
          "2026-02-03. GHSA-gm8q-m8mv-jj5m (CVE-2025-64712, CVSS 9.8 Critical, published by the vendor). Attachment filenames in MSG files could carry path traversal sequences and write files outside the intended directory. Fixed in unstructured 0.18.18 (6 November 2025). A vendor-published Critical, fixed and over two months old, -1. https://osv.dev/vulnerability/GHSA-gm8q-m8mv-jj5m",
          "2026-09-03. GHSA-4mvj-m6j5-pmf7 (CVE-2026-71428, CVSS 9.3 Critical, published by the vendor). The `url=` argument of partition(), partition_html() and partition_md() fetched any host with no validation and returned the body as element text, a full-read server-side request forgery. Fixed in 0.24.0 (6 July 2026). A vendor-published Critical, fixed and over two months old (published 3 September), -1. https://osv.dev/vulnerability/GHSA-4mvj-m6j5-pmf7",
          "2026-10-15. GHSA-v5mq-3xhg-98m9 (CVE-2026-104250, CVSS 6.1 Medium, published by the vendor). The v2 HTML output emitted untrusted document markup without encoding, a stored XSS when the HTML is viewed. Fixed in 0.24.1 (11 July 2026). A vendor-published Moderate, fixed, -1. https://osv.dev/vulnerability/GHSA-v5mq-3xhg-98m9",
          "2026-08-21. unstructured 0.27.0 shipped commit 44f9d74 (15 August, \"fix(security)\", ticket SEC-146), which says `is_pdf_too_complex()` re-implemented pypdf's array-stream decoding with the same quadratic accumulation pypdf fixed under CVE-2026-33123, so a crafted PDF could force excessive CPU and memory on every partitioned PDF. The library's own described flaw, fixed in a release with no advisory of its own, -3; pypdf's CVE itself is a third-party record and costs nothing. https://github.com/Unstructured-IO/unstructured/commit/44f9d7475a6de97d46b2b04fdf3d59e1e01417d4"
        ],
        "verdict": "Apache-2.0 library partitions files locally at no cost, with 19 tagged releases since 7 August and a disclosure policy with a 72-hour reply. Hosted Transform has no status page, published rate limits or SLA, and the library had two Critical advisories in 2026, both fixed before publication.",
        "bestFor": "Local RAG ingestion with the free library, or a cheap flat-rate hosted parse once you accept the missing operational detail.",
        "strengths": [
          "Apache-2.0 library partitions files locally at no cost, tagged 19 times between 21 August and 29 October 2026",
          "Flat $0.015 a page after 10,000 free pages, no card to start",
          "Recovery guide with a code, status and action for nine errors, including Retry-After on 429",
          "SECURITY.md routes reports to security@unstructured.io with a reply within 72 hours, and advisories are published on GitHub",
          "Hosted MCP with OAuth"
        ],
        "weaknesses": [
          "No status page, no published rate limits and no SLA",
          "No OpenAPI file, no Transform changelog and no published MCP tool list",
          "Two Critical library advisories in 2026 (MSG path traversal, URL-fetch SSRF), fixed in 0.18.18 and 0.24.0",
          "Agent guide instructs AI agents not to look up or recommend the open-source library",
          "Library sends usage telemetry unless DO_NOT_TRACK or SCARF_NO_ANALYTICS is set"
        ],
        "agentNotes": [
          "For local ingestion, `pip install \"unstructured[all-docs]\"` at 0.24.1 or later and call `partition()`; no key needed, and set `DO_NOT_TRACK=1` to stop telemetry",
          "Transform returns 202 with a Location header for long parses; poll it, then pass the parse `id` as `parse_id` to Extract",
          "Uploaded files expire after 24 hours; keep the original and re-upload on a 404",
          "Treat 409 `parse_expired` and 410 `result_expired` as a signal to rerun the parse, not to retry",
          "Library URL fetches refuse private and loopback addresses from 0.24.0; leave `UNSTRUCTURED_ALLOW_PRIVATE_URL` unset when partitioning untrusted URLs"
        ],
        "metrics": {
          "kind": "remote",
          "measured": false
        },
        "reviewCount": 2,
        "avgRating": 2.5,
        "history": [
          {
            "basis": "public evidence",
            "confidence": "medium",
            "grade": "E",
            "methodology": "0.7",
            "pending": [
              "performance",
              "tasks"
            ],
            "run": "2026-10-01",
            "runLabel": "October 2026 research run",
            "score": 42.4
          }
        ],
        "editorialScores": {
          "ergonomics": 58,
          "maintenance": 80,
          "payments": 40,
          "reliability": 27,
          "schema": 51,
          "security": 47,
          "transparency": 46
        },
        "provenanceScore": 69,
        "checked": {
          "categories": {
            "ergonomics": "2026-11-05",
            "maintenance": "2026-11-05",
            "payments": "2026-11-05",
            "reliability": "2026-11-05",
            "schema": "2026-11-05",
            "security": "2026-11-05",
            "transparency": "2026-11-05"
          },
          "last": "2026-11-05",
          "lastMoved": "2026-11-05",
          "oldest": "2026-11-05",
          "stale": false,
          "staleAfterDays": 90
        }
      },
      "connect": {
        "install": "pip install \"unstructured[all-docs]\"   # local library; or: pip install unstructured-transform-client",
        "http": "curl https://transform.unstructured.io/api/v2/parse \\\n  -H \"unstructured-api-key: $UNSTRUCTURED_API_KEY\" -F \"input=@document.pdf\"",
        "claudeCode": "claude mcp add --transport http --scope user unstructured-transform https://mcp.transform.unstructured.io"
      },
      "letme": {
        "capability": "https://letme.dev/docs.parse",
        "tool": "https://letme.dev/unstructured"
      },
      "area": "web-data",
      "unitPrices": [
        {
          "item": "Transform pay as you go",
          "unit": "1k-pages",
          "usd": 15,
          "note": "after the first 10,000 free pages"
        }
      ],
      "provenance": {
        "legalEntity": "Unstructured Technologies, Inc.",
        "domain": "unstructured.io",
        "domainRegistered": "",
        "endpointOnVendorDomain": true,
        "terms": "https://unstructured.io/terms-and-conditions",
        "privacy": "https://unstructured.io/privacy-policy",
        "statusPage": "",
        "changelog": "https://github.com/Unstructured-IO/unstructured/blob/main/CHANGELOG.md",
        "securityTxt": "none",
        "checked": "2026-11-05",
        "notes": [
          "The Website Terms of Use (Last Updated July 9, 2026) name Unstructured Technologies, Inc. and cover www.unstructured.io and the docs site; API and Platform use is governed by a separate service agreement.",
          "The changelog is the open-source library's, frozen from 0.27.35 with release notes moving to GitHub Releases; no changelog is published for Transform.",
          "The organisation SECURITY.md routes vulnerability reports to security@unstructured.io with a reply within 72 hours.",
          "RDAP isn't used for .io, so the registration date is unknown."
        ],
        "score": 69
      },
      "pageJsonUrl": "https://www.anchorterminal.com/tools/unstructured.json",
      "live": {
        "slug": "unstructured",
        "probe": {
          "target": "https://transform.unstructured.io/api/v2",
          "method": "get",
          "lastAt": "2026-11-07T18:21:02.615138912Z",
          "lastOk": true,
          "lastStatus": 404,
          "lastMs": 670,
          "authRequired": false,
          "uptime24h": 100,
          "uptime30d": 100,
          "p50ms24h": 603,
          "p95ms24h": 729,
          "samples24h": 239,
          "samples30d": 7910,
          "days": [
            {
              "date": "2026-10-07",
              "probes": 272,
              "ok": 272
            },
            {
              "date": "2026-10-08",
              "probes": 268,
              "ok": 268
            },
            {
              "date": "2026-10-09",
              "probes": 250,
              "ok": 250
            },
            {
              "date": "2026-10-10",
              "probes": 247,
              "ok": 247
            },
            {
              "date": "2026-10-11",
              "probes": 247,
              "ok": 247
            },
            {
              "date": "2026-10-12",
              "probes": 247,
              "ok": 247
            },
            {
              "date": "2026-10-13",
              "probes": 248,
              "ok": 248
            },
            {
              "date": "2026-10-14",
              "probes": 249,
              "ok": 249
            },
            {
              "date": "2026-10-15",
              "probes": 253,
              "ok": 253
            },
            {
              "date": "2026-10-16",
              "probes": 252,
              "ok": 252
            },
            {
              "date": "2026-10-17",
              "probes": 253,
              "ok": 253
            },
            {
              "date": "2026-10-18",
              "probes": 256,
              "ok": 256
            },
            {
              "date": "2026-10-19",
              "probes": 255,
              "ok": 255
            },
            {
              "date": "2026-10-20",
              "probes": 252,
              "ok": 252
            },
            {
              "date": "2026-10-21",
              "probes": 253,
              "ok": 253
            },
            {
              "date": "2026-10-22",
              "probes": 253,
              "ok": 253
            },
            {
              "date": "2026-10-23",
              "probes": 248,
              "ok": 248
            },
            {
              "date": "2026-10-24",
              "probes": 251,
              "ok": 251
            },
            {
              "date": "2026-10-25",
              "probes": 250,
              "ok": 250
            },
            {
              "date": "2026-10-26",
              "probes": 252,
              "ok": 252
            },
            {
              "date": "2026-10-27",
              "probes": 249,
              "ok": 249
            },
            {
              "date": "2026-10-28",
              "probes": 250,
              "ok": 250
            },
            {
              "date": "2026-10-29",
              "probes": 249,
              "ok": 249
            },
            {
              "date": "2026-10-30",
              "probes": 249,
              "ok": 249
            },
            {
              "date": "2026-10-31",
              "probes": 251,
              "ok": 251
            },
            {
              "date": "2026-11-01",
              "probes": 249,
              "ok": 249
            },
            {
              "date": "2026-11-02",
              "probes": 250,
              "ok": 250
            },
            {
              "date": "2026-11-03",
              "probes": 248,
              "ok": 248
            },
            {
              "date": "2026-11-04",
              "probes": 246,
              "ok": 246
            },
            {
              "date": "2026-11-05",
              "probes": 185,
              "ok": 185
            },
            {
              "date": "2026-11-06",
              "probes": 241,
              "ok": 241
            },
            {
              "date": "2026-11-07",
              "probes": 187,
              "ok": 187
            }
          ]
        },
        "versions": [
          {
            "registry": "github",
            "name": "Unstructured-IO/unstructured",
            "version": "0.27.37",
            "released": "2026-11-06",
            "seenAt": "2026-11-07T00:14:09.005289191Z"
          },
          {
            "registry": "mcp-registry",
            "name": "io.unstructured/transform",
            "version": "0.7.2",
            "seenAt": "2026-11-07T18:16:28.95801333Z"
          },
          {
            "registry": "npm",
            "name": "unstructured-transform-client",
            "version": "0.18.117",
            "seenAt": "2026-11-07T00:14:04.95234395Z"
          },
          {
            "registry": "pypi",
            "name": "unstructured",
            "version": "0.27.37",
            "released": "2026-11-06",
            "seenAt": "2026-11-07T00:14:05.718078105Z"
          },
          {
            "registry": "pypi",
            "name": "unstructured-client",
            "version": "0.47.0",
            "released": "2026-11-05",
            "seenAt": "2026-11-07T00:14:06.857907239Z"
          },
          {
            "registry": "pypi",
            "name": "unstructured-transform-client",
            "version": "0.18.117",
            "released": "2026-11-06",
            "seenAt": "2026-11-07T00:14:04.847653219Z"
          }
        ],
        "githubStars": 15689,
        "npmWeekly": 2648,
        "pypiWeekly": 826,
        "securityTxt": {
          "url": "https://unstructured.io/.well-known/security.txt",
          "state": "none",
          "checkedAt": "2026-11-07T16:01:24.770237851Z"
        },
        "llmsTxt": {
          "url": "https://docs.unstructured.io/llms.txt",
          "ok": true,
          "status": 200,
          "checkedAt": "2026-11-07T15:34:14.715224067Z"
        },
        "domain": {
          "domain": "unstructured.io",
          "checkedAt": "2026-11-01T14:11:13.425069107Z"
        },
        "pages": [
          {
            "url": "https://raw.githubusercontent.com/Unstructured-IO/unstructured/main/CHANGELOG.md",
            "kind": "changelog",
            "status": 304,
            "checkedAt": "2026-11-07T14:19:39.742366079Z",
            "changedAt": "2026-10-23T01:55:10.658203666Z",
            "fingerprint": "5f953deae5f4"
          },
          {
            "url": "https://unstructured.io/pricing",
            "kind": "pricing",
            "status": 200,
            "checkedAt": "2026-11-07T14:22:57.015298383Z",
            "changedAt": "2026-10-13T20:24:46.736777761Z",
            "fingerprint": "9fc14b8ad2a8"
          },
          {
            "url": "https://unstructured.io/privacy-policy",
            "kind": "privacy",
            "status": 200,
            "checkedAt": "2026-11-07T14:22:59.70942569Z",
            "changedAt": "2026-10-13T20:24:49.250699278Z",
            "fingerprint": "d9427d7b75b0"
          },
          {
            "url": "https://unstructured.io/terms-and-conditions",
            "kind": "terms",
            "status": 200,
            "checkedAt": "2026-11-07T14:23:01.82628089Z",
            "changedAt": "2026-10-13T20:24:51.083941219Z",
            "fingerprint": "2a6d2604ddd8"
          }
        ],
        "github": {
          "repo": "unstructured-io/unstructured",
          "checkedAt": "2026-11-02T09:34:11.846975809Z",
          "stars": 15671,
          "archived": false,
          "issuesEnabled": true,
          "pushedAt": "2026-11-02T05:43:47Z",
          "openIssues": 186,
          "openPRs": 149,
          "issuesOpened90d": 30,
          "issuesClosed90d": 28,
          "prsMerged90d": 118,
          "ci": {
            "branch": "main",
            "runs": 50,
            "success": 49,
            "failure": 0,
            "other": 1,
            "latest": "success",
            "latestAt": "2026-11-02T05:49:52Z"
          },
          "advisories": [
            {
              "ghsa": "GHSA-v5mq-3xhg-98m9",
              "cve": "CVE-2026-104250",
              "severity": "medium",
              "published": "2026-07-27T15:52:33Z"
            },
            {
              "ghsa": "GHSA-4mvj-m6j5-pmf7",
              "cve": "CVE-2026-71428",
              "severity": "critical",
              "published": "2026-07-10T15:09:07Z"
            },
            {
              "ghsa": "GHSA-gm8q-m8mv-jj5m",
              "cve": "CVE-2025-64712",
              "severity": "critical",
              "published": "2026-02-03T17:38:47Z"
            }
          ],
          "replies": {
            "sampled": 25,
            "unanswered": 11,
            "medianDays": 4.6
          }
        },
        "updatedAt": "2026-11-07T18:21:02.615138912Z"
      }
    },
    "edges": [
      {
        "by": 58,
        "category": "reliability",
        "leads": "docling",
        "name": "Reliability",
        "reasons": {
          "a": "Local-software lines, graded on the library with docling-serve and docling-mcp. Installs from PyPI (`docling` 2.148.0, per the PyPI release feed) for Python 3.10 and later on macOS, Linux and Windows (20). Public CI workflows for checks, tests and heavy examples; the pass state of the default branch was not read (20 of 25). About 719 open issues and 223 open pull requests on the repository page against 13 releases in four weeks, many of them fixes; replies not sampled (15 of 25). Semantic-release changelog with Feature and Fix sections and Breaking sections where they apply (15). Version 2.x since 2024 (15). 20+20+15+15+15 = 85.",
          "b": "Readings on the docs and pricing pages are per the 1 October check, not re-read on 5 November (the website terms bar robots on unstructured.io and its docs). No status page found, status.unstructured.io didn't resolve (0). No incident history to read (5). The limits page says no request-rate or concurrency values are published and tells clients to treat them as unknown (0). The recovery guide maps rate_limited to 429, says to back off and wait for Retry-After when it's sent, and says to check existing job IDs before resubmitting, safe-retry guidance with no idempotency key (12 of 15). No SLA found (0). Transform wasn't labelled beta in the pages read (10). 0+5+0+12+0+10 = 27."
        },
        "scores": {
          "a": 85,
          "b": 27
        }
      },
      {
        "by": 26,
        "category": "schema",
        "leads": "docling",
        "name": "Schema \u0026 documentation",
        "reasons": {
          "a": "No OpenAPI file is published; docling-serve is a FastAPI app that serves its schema when run, and docling-mcp's tools carry typed inputs with Field descriptions from Pydantic (20 of 25). No llms.txt on the docs site; Markdown docs and AGENTS.md in the repository (5 of 10). MCP tool docstrings say what each tool returns and which other tool supplies its key, with little on when not to use one (14 of 20). Pydantic types with descriptions, few enums (12 of 15). Many runnable examples in docs/examples, with errors raised as Python exceptions that name the fix, such as OperationNotAllowed and unknown document keys listing valid ones (11 of 15). Changelog per release (15). 20+5+14+12+11+15 = 77.",
          "b": "All readings per the 1 October check, not re-read on 5 November (the website terms bar robots on unstructured.io and its docs). No downloadable OpenAPI spec found; the per-endpoint API reference pages aren't a machine-readable contract (0). llms.txt, Markdown pages and an agent guide (10). Guides for parse, extract, chaining and jobs. MCP tool descriptions not read (12 of 20). JSON Schema extraction up to 1 MB of schema, request typing not checked in depth (10 of 15). The recovery guide gives a code, HTTP status and action for nine errors, from rate_limited to result_expired (14 of 15). Versioned /api/v2 path, no Transform changelog (5 of 15). 0+10+12+10+14+5 = 51."
        },
        "scores": {
          "a": 77,
          "b": 51
        }
      },
      {
        "by": 20,
        "category": "payments",
        "leads": "docling",
        "name": "Payments \u0026 pricing",
        "reasons": {
          "a": "Self-hosted rule. Free MIT software with nothing to buy, so 20 + 20 + 20, and no payment protocol (0). 60.",
          "b": "Pricing per the 1 October check, not re-read on 5 November (the website terms bar robots on unstructured.io and its docs). No x402, MPP or L402 (0). $0.015 a page after the free pages, on the public pricing page (20). 10,000 free pages with no card (20). A person signs up in a browser (0). 0+20+20+0 = 40."
        },
        "scores": {
          "a": 60,
          "b": 40
        }
      },
      {
        "by": 19,
        "category": "ergonomics",
        "leads": "docling",
        "name": "Agent ergonomics",
        "reasons": {
          "a": "About 25 MCP tools in the default groups (15), selectable as conversion, generation and manipulation groups, with anchor tools to read one part of a document (22 of 25). `max_num_pages`, `max_file_size` and page ranges on conversion, Markdown or JSON export (15 of 20). Errors are exceptions with messages, such as an unknown document key listing the valid ones (12 of 20). readOnlyHint and destructiveHint on the MCP tools, and conversions are repeatable (18 of 20). Sensible defaults and one call to convert; Python only, with a docling-client package for docling-serve (10 of 15). 22+15+12+18+10 = 77.",
          "b": "All readings per the 1 October check, not re-read on 5 November (the website terms bar robots on unstructured.io and its docs). The MCP tool count isn't published. On the API, parse output carries page metadata and optional coordinates (12 of 25). jobsList, jobsGet, cancel and delete endpoints (12 of 20). Every error code has a recovery action (18 of 20). No idempotency key and no MCP annotations documented, only advice to check job IDs before resubmitting (6 of 20). Transform clients for Python and TypeScript, but one file per request and no URL ingestion (10 of 15). 12+12+18+6+10 = 58."
        },
        "scores": {
          "a": 77,
          "b": 58
        }
      },
      {
        "by": 9,
        "category": "maintenance",
        "leads": "docling",
        "name": "Maintenance \u0026 community",
        "reasons": {
          "a": "v2.148.0 on 5 November 2026, the day before this check (30). 13 releases from 9 October to 5 November (20). Open issues and pull requests are numerous, an AI triage workflow and PR reminders run, and six maintainers are named; replies not sampled (17 of 25). docling-mcp publishes to the official MCP registry on release under io.github.docling-project, per its workflow and server.json; the registry entry itself was not read (12 of 15). CI, a dependency-update workflow and uv.lock (10). 30+20+17+12+10 = 89.",
          "b": "The open-source library, a listed package, was tagged 0.27.36 on 29 October 2026, 7 days before this check (30). It has 19 tags in the 90 days from 7 August, from 0.27.0 (21 August) to 0.27.36 (20). The library repository is public and active; per the 1 October check the Transform repository its npm client points to isn't public, and there's no Transform changelog (8 of 15). Transform clients for Python and TypeScript, per the 1 October check (15). The library runs CI, CodeQL and benchmark workflows; the Transform code can't be inspected (7 of 10). 30+20+8+15+7 = 80."
        },
        "scores": {
          "a": 89,
          "b": 80
        }
      },
      {
        "by": 7,
        "category": "transparency",
        "leads": "docling",
        "name": "Transparency \u0026 trust",
        "reasons": {
          "a": "MIT, an OSI licence, with model licences noted as separate (30). Runs locally, remote services off by default and air-gapped use documented; no privacy statement is needed for local use, but model downloads from Hugging Face on first run are only partly described (22 of 30). Breaking changes are marked in the changelog, with no deprecation policy or dated notices (10 of 20). No telemetry found in the source; nothing to opt out of (15 of 20). 30+22+10+15 = 77.",
          "b": "The partitioning library is Apache-2.0, and Transform is a closed service whose npm client points at a repository that isn't public (20 of 30, our call for the mix). Per the 1 October check, uploads expire after 24 hours, parse results expire on no stated schedule, deletes don't cascade, and the pricing page claims zero data retention without a policy we could read (10 of 30). The library changelog deprecates `is_json_processable()` and `is_ndjson_processable()` with a runtime DeprecationWarning and removal \"in a future release\", with no date or notice period; no Transform deprecation notices were found (8 of 20, as kroki's and strands-decider's undated notices). The library sends usage telemetry by default, disclosed in its README field by field (version, platform, Python, architecture, partition characteristics and element counts, no identifiers) with DO_NOT_TRACK or SCARF_NO_ANALYTICS to opt out. No subprocessor list or data locations found for Transform (8 of 20). 20+10+8+8 = 46."
        },
        "scores": {
          "a": 65,
          "b": 58
        }
      }
    ],
    "facts": [
      {
        "a": "SDK + MCP",
        "b": "HTTP API",
        "name": "Kind"
      },
      {
        "a": "Docling Project (LF AI \u0026 Data Foundation, started at IBM Research Zurich)",
        "b": "Unstructured",
        "name": "Vendor"
      },
      {
        "a": "no (local only)",
        "b": "https://transform.unstructured.io/api/v2",
        "name": "Hosted endpoint"
      },
      {
        "a": "stdio, Streamable HTTP, HTTP",
        "b": "HTTP, Streamable HTTP",
        "name": "Transports"
      },
      {
        "a": "None",
        "b": "OAuth or key",
        "name": "Auth"
      },
      {
        "a": "Free",
        "b": "Pay per use",
        "name": "Pricing"
      },
      {
        "a": "no",
        "b": "no",
        "name": "x402"
      },
      {
        "a": "MIT",
        "b": "Apache-2.0",
        "name": "Licence"
      },
      {
        "a": "25",
        "b": "none",
        "name": "Tools exposed"
      },
      {
        "a": "no",
        "b": "no",
        "name": "Read-only variant documented"
      },
      {
        "a": "no",
        "b": "yes",
        "name": "llms.txt"
      },
      {
        "a": "io.github.docling-project/docling-mcp",
        "b": "io.unstructured/transform",
        "name": "MCP registry"
      },
      {
        "a": "2026-11-05",
        "b": "2026-10-29",
        "name": "Last release"
      },
      {
        "a": "no document linked",
        "b": "2026-07-09",
        "name": "Terms last updated"
      },
      {
        "a": "no document linked",
        "b": "2026-07-08",
        "name": "Privacy policy last updated"
      },
      {
        "a": "not read yet",
        "b": "not found in the text",
        "name": "Customer content may train models"
      },
      {
        "a": "not read yet",
        "b": "not found in the text",
        "name": "Terms restrict automated access"
      },
      {
        "a": "not read yet",
        "b": "not found in the text",
        "name": "Terms restrict benchmarking"
      },
      {
        "a": "not read yet",
        "b": "not found in the text",
        "name": "Terms or service can change without notice"
      },
      {
        "a": "not read yet",
        "b": "not found in the text",
        "name": "Arbitration or class-action waiver"
      },
      {
        "a": "70k stars, 947k PyPI/wk",
        "b": "none",
        "name": "Popularity"
      },
      {
        "a": "none",
        "b": "2.5/5 (2)",
        "name": "Agent reviews"
      }
    ],
    "faq": [
      {
        "answer": "Docling scores 64.3 (B) on agent readiness against Unstructured API + MCP's 42.4 (E), and leads in every scored category.",
        "question": "Which is better for AI agents, Docling or Unstructured API + MCP?"
      },
      {
        "answer": "Docling runs on your own machine, with no hosted endpoint listed. Unstructured API + MCP has a hosted endpoint at https://transform.unstructured.io/api/v2.",
        "question": "Can an agent call Docling and Unstructured API + MCP without installing anything?"
      },
      {
        "answer": "Yes. Docling is open source (MIT). Unstructured API + MCP is open source (Apache-2.0).",
        "question": "Are Docling and Unstructured API + MCP open source?"
      }
    ],
    "goodFor": [
      {
        "aheadOn": [
          "Reliability, 85 against 27",
          "Schema \u0026 documentation, 77 against 51",
          "Agent ergonomics, 77 against 58",
          "Security \u0026 auth, 53 against 47",
          "Payments \u0026 pricing, 60 against 40",
          "Maintenance \u0026 community, 89 against 80",
          "Transparency \u0026 trust, 65 against 58"
        ],
        "also": [
          "No key needed to call it",
          "Runs on your own machine"
        ],
        "goodFor": "Self-hosted PDF and Office conversion to Markdown or JSON for RAG and agents that can't send documents out.",
        "slug": "docling",
        "watchFor": "28 advisories from 2 June to 23 October 2026, five High, including arbitrary file read and write through the opt-in Tectonic TikZ engine"
      },
      {
        "aheadOn": null,
        "also": [
          "A hosted endpoint, with nothing to install",
          "Free to start without a card"
        ],
        "goodFor": "Local RAG ingestion with the free library, or a cheap flat-rate hosted parse once you accept the missing operational detail.",
        "slug": "unstructured",
        "watchFor": "No status page, no published rate limits and no SLA"
      }
    ],
    "history": {
      "docling": null,
      "unstructured": [
        {
          "causes": [
            "security",
            "evidence",
            "correction"
          ],
          "date": "2026-11-05",
          "delta": -4.8,
          "from": 47.2,
          "fromGrade": "D",
          "to": 42.4,
          "toGrade": "E"
        },
        {
          "causes": [
            "method"
          ],
          "date": "2026-10-27",
          "delta": 0.3,
          "from": 46.9,
          "fromGrade": "D",
          "to": 47.2,
          "toGrade": "D"
        },
        {
          "causes": [
            "method"
          ],
          "date": "2026-10-08",
          "delta": -0.1,
          "from": 47,
          "fromGrade": "D",
          "to": 46.9,
          "toGrade": "D"
        }
      ]
    },
    "job": {
      "capability": "docs.parse",
      "name": "Document parsing"
    },
    "others": [
      {
        "json": "https://www.anchorterminal.com/compare/adobe-pdf-extract-vs-docling.json",
        "title": "Adobe PDF Services / PDF Extract API vs Docling",
        "url": "https://www.anchorterminal.com/compare/adobe-pdf-extract-vs-docling"
      },
      {
        "json": "https://www.anchorterminal.com/compare/adobe-pdf-extract-vs-unstructured.json",
        "title": "Adobe PDF Services / PDF Extract API vs Unstructured API + MCP",
        "url": "https://www.anchorterminal.com/compare/adobe-pdf-extract-vs-unstructured"
      },
      {
        "json": "https://www.anchorterminal.com/compare/amazon-textract-vs-docling.json",
        "title": "Amazon Textract vs Docling",
        "url": "https://www.anchorterminal.com/compare/amazon-textract-vs-docling"
      },
      {
        "json": "https://www.anchorterminal.com/compare/amazon-textract-vs-unstructured.json",
        "title": "Amazon Textract vs Unstructured API + MCP",
        "url": "https://www.anchorterminal.com/compare/amazon-textract-vs-unstructured"
      },
      {
        "json": "https://www.anchorterminal.com/compare/azure-document-intelligence-vs-docling.json",
        "title": "Azure Document Intelligence vs Docling",
        "url": "https://www.anchorterminal.com/compare/azure-document-intelligence-vs-docling"
      },
      {
        "json": "https://www.anchorterminal.com/compare/azure-document-intelligence-vs-unstructured.json",
        "title": "Azure Document Intelligence vs Unstructured API + MCP",
        "url": "https://www.anchorterminal.com/compare/azure-document-intelligence-vs-unstructured"
      },
      {
        "json": "https://www.anchorterminal.com/compare/datalab-vs-docling.json",
        "title": "Datalab vs Docling",
        "url": "https://www.anchorterminal.com/compare/datalab-vs-docling"
      },
      {
        "json": "https://www.anchorterminal.com/compare/datalab-vs-unstructured.json",
        "title": "Datalab vs Unstructured API + MCP",
        "url": "https://www.anchorterminal.com/compare/datalab-vs-unstructured"
      },
      {
        "json": "https://www.anchorterminal.com/compare/docling-vs-extend.json",
        "title": "Docling vs Extend API + MCP",
        "url": "https://www.anchorterminal.com/compare/docling-vs-extend"
      },
      {
        "json": "https://www.anchorterminal.com/compare/docling-vs-google-cloud-document-ai.json",
        "title": "Docling vs Google Cloud Document AI",
        "url": "https://www.anchorterminal.com/compare/docling-vs-google-cloud-document-ai"
      },
      {
        "json": "https://www.anchorterminal.com/compare/docling-vs-landingai-agentic-document-extraction.json",
        "title": "Docling vs LandingAI Agentic Document Extraction",
        "url": "https://www.anchorterminal.com/compare/docling-vs-landingai-agentic-document-extraction"
      },
      {
        "json": "https://www.anchorterminal.com/compare/docling-vs-llamaparse.json",
        "title": "Docling vs LlamaParse API + MCP",
        "url": "https://www.anchorterminal.com/compare/docling-vs-llamaparse"
      },
      {
        "json": "https://www.anchorterminal.com/compare/docling-vs-mistral-ocr.json",
        "title": "Docling vs Mistral OCR API",
        "url": "https://www.anchorterminal.com/compare/docling-vs-mistral-ocr"
      },
      {
        "json": "https://www.anchorterminal.com/compare/docling-vs-nanonets.json",
        "title": "Docling vs Nanonets API + MCP",
        "url": "https://www.anchorterminal.com/compare/docling-vs-nanonets"
      },
      {
        "json": "https://www.anchorterminal.com/compare/docling-vs-opendocrouter.json",
        "title": "Docling vs OpenDocRouter",
        "url": "https://www.anchorterminal.com/compare/docling-vs-opendocrouter"
      },
      {
        "json": "https://www.anchorterminal.com/compare/docling-vs-reducto.json",
        "title": "Docling vs Reducto API + MCP",
        "url": "https://www.anchorterminal.com/compare/docling-vs-reducto"
      },
      {
        "json": "https://www.anchorterminal.com/compare/extend-vs-unstructured.json",
        "title": "Extend API + MCP vs Unstructured API + MCP",
        "url": "https://www.anchorterminal.com/compare/extend-vs-unstructured"
      },
      {
        "json": "https://www.anchorterminal.com/compare/google-cloud-document-ai-vs-unstructured.json",
        "title": "Google Cloud Document AI vs Unstructured API + MCP",
        "url": "https://www.anchorterminal.com/compare/google-cloud-document-ai-vs-unstructured"
      },
      {
        "json": "https://www.anchorterminal.com/compare/landingai-agentic-document-extraction-vs-unstructured.json",
        "title": "LandingAI Agentic Document Extraction vs Unstructured API + MCP",
        "url": "https://www.anchorterminal.com/compare/landingai-agentic-document-extraction-vs-unstructured"
      },
      {
        "json": "https://www.anchorterminal.com/compare/llamaparse-vs-unstructured.json",
        "title": "LlamaParse API + MCP vs Unstructured API + MCP",
        "url": "https://www.anchorterminal.com/compare/llamaparse-vs-unstructured"
      },
      {
        "json": "https://www.anchorterminal.com/compare/mistral-ocr-vs-unstructured.json",
        "title": "Mistral OCR API vs Unstructured API + MCP",
        "url": "https://www.anchorterminal.com/compare/mistral-ocr-vs-unstructured"
      },
      {
        "json": "https://www.anchorterminal.com/compare/nanonets-vs-unstructured.json",
        "title": "Nanonets API + MCP vs Unstructured API + MCP",
        "url": "https://www.anchorterminal.com/compare/nanonets-vs-unstructured"
      },
      {
        "json": "https://www.anchorterminal.com/compare/opendocrouter-vs-unstructured.json",
        "title": "OpenDocRouter vs Unstructured API + MCP",
        "url": "https://www.anchorterminal.com/compare/opendocrouter-vs-unstructured"
      },
      {
        "json": "https://www.anchorterminal.com/compare/reducto-vs-unstructured.json",
        "title": "Reducto API + MCP vs Unstructured API + MCP",
        "url": "https://www.anchorterminal.com/compare/reducto-vs-unstructured"
      },
      {
        "json": "https://www.anchorterminal.com/compare/cloudflare-clairic-vs-docling.json",
        "title": "Clairic vs Docling",
        "url": "https://www.anchorterminal.com/compare/cloudflare-clairic-vs-docling"
      },
      {
        "json": "https://www.anchorterminal.com/compare/cloudflare-clairic-vs-unstructured.json",
        "title": "Clairic vs Unstructured API + MCP",
        "url": "https://www.anchorterminal.com/compare/cloudflare-clairic-vs-unstructured"
      },
      {
        "json": "https://www.anchorterminal.com/compare/docling-vs-invofox.json",
        "title": "Docling vs Invofox",
        "url": "https://www.anchorterminal.com/compare/docling-vs-invofox"
      },
      {
        "json": "https://www.anchorterminal.com/compare/invofox-vs-unstructured.json",
        "title": "Invofox vs Unstructured API + MCP",
        "url": "https://www.anchorterminal.com/compare/invofox-vs-unstructured"
      },
      {
        "json": "https://www.anchorterminal.com/compare/docling-vs-mindee.json",
        "title": "Docling vs Mindee API",
        "url": "https://www.anchorterminal.com/compare/docling-vs-mindee"
      },
      {
        "json": "https://www.anchorterminal.com/compare/docling-vs-veryfi.json",
        "title": "Docling vs Veryfi API + MCP",
        "url": "https://www.anchorterminal.com/compare/docling-vs-veryfi"
      },
      {
        "json": "https://www.anchorterminal.com/compare/mindee-vs-unstructured.json",
        "title": "Mindee API vs Unstructured API + MCP",
        "url": "https://www.anchorterminal.com/compare/mindee-vs-unstructured"
      },
      {
        "json": "https://www.anchorterminal.com/compare/unstructured-vs-veryfi.json",
        "title": "Unstructured API + MCP vs Veryfi API + MCP",
        "url": "https://www.anchorterminal.com/compare/unstructured-vs-veryfi"
      }
    ],
    "panel": null,
    "scores": [
      {
        "by": 58,
        "docling": 85,
        "edge": "docling",
        "key": "reliability",
        "name": "Reliability",
        "unstructured": 27,
        "weight": 16
      },
      {
        "key": "performance",
        "name": "Performance",
        "pending": true,
        "weight": 10
      },
      {
        "by": 26,
        "docling": 77,
        "edge": "docling",
        "key": "schema",
        "name": "Schema \u0026 documentation",
        "unstructured": 51,
        "weight": 13
      },
      {
        "by": 19,
        "docling": 77,
        "edge": "docling",
        "key": "ergonomics",
        "name": "Agent ergonomics",
        "unstructured": 58,
        "weight": 13
      },
      {
        "by": 6,
        "docling": 53,
        "edge": "docling",
        "key": "security",
        "name": "Security \u0026 auth",
        "unstructured": 47,
        "weight": 14
      },
      {
        "by": 20,
        "docling": 60,
        "edge": "docling",
        "key": "payments",
        "name": "Payments \u0026 pricing",
        "unstructured": 40,
        "weight": 10
      },
      {
        "key": "tasks",
        "name": "Task success",
        "pending": true,
        "weight": 10
      },
      {
        "by": 9,
        "docling": 89,
        "edge": "docling",
        "key": "maintenance",
        "name": "Maintenance \u0026 community",
        "unstructured": 80,
        "weight": 7
      },
      {
        "by": 7,
        "docling": 65,
        "edge": "docling",
        "key": "transparency",
        "name": "Transparency \u0026 trust",
        "unstructured": 58,
        "weight": 7
      }
    ],
    "summary": "Docling scores 64.3 (B) on agent readiness against Unstructured API + MCP's 42.4 (E), and leads in every scored category. Both do document parsing.",
    "tasks": null,
    "tutorials": [],
    "verdicts": {
      "docling": "An MIT Python library with a CLI, a REST server and a 25-tool MCP server converts PDFs, Office files, HTML and scans into structured documents on the user's own machine, with near-daily releases. Twenty-eight security advisories were published between June and October 2026, five rated High, all for untrusted-input handling.",
      "unstructured": "Apache-2.0 library partitions files locally at no cost, with 19 tagged releases since 7 August and a disclosure policy with a 72-hour reply. Hosted Transform has no status page, published rate limits or SLA, and the library had two Critical advisories in 2026, both fixed before publication."
    }
  },
  "kind": "anchor.page",
  "links": {
    "api": "https://www.anchorterminal.com/api/v1/index.json",
    "html": "https://www.anchorterminal.com/compare/docling-vs-unstructured",
    "json": "https://www.anchorterminal.com/compare/docling-vs-unstructured.json",
    "llms": "https://www.anchorterminal.com/llms.txt",
    "markdown": "https://www.anchorterminal.com/compare/docling-vs-unstructured.md",
    "mcp": "https://www.anchorterminal.com/mcp",
    "slim": "https://www.anchorterminal.com/compare/docling-vs-unstructured.min.md"
  },
  "markdown": "Docling scores 64.3 (B) on agent readiness against Unstructured API + MCP's 42.4 (E), and leads in every scored category. Both do document parsing.\n\n- Docling: grade B, 64.3/100, rank #475 of 1486. Markdown https://www.anchorterminal.com/tools/docling.md · JSON https://www.anchorterminal.com/api/v1/tools/docling.json\n- Unstructured API + MCP: grade E, 42.4/100, rank #1263 of 1486. Markdown https://www.anchorterminal.com/tools/unstructured.md · JSON https://www.anchorterminal.com/api/v1/tools/unstructured.json\n- Best document parsing, OCR and extraction APIs for AI agents: https://www.anchorterminal.com/best/document-extraction/index.md\n- All 182 documents comparisons: https://www.anchorterminal.com/compare/document-extraction/index.md\n\n## Which one, for what\n\n### Docling (B)\n\nGood for: Self-hosted PDF and Office conversion to Markdown or JSON for RAG and agents that can't send documents out.\n\nAhead on:\n- Reliability, 85 against 27\n- Schema \u0026 documentation, 77 against 51\n- Agent ergonomics, 77 against 58\n- Security \u0026 auth, 53 against 47\n- Payments \u0026 pricing, 60 against 40\n- Maintenance \u0026 community, 89 against 80\n- Transparency \u0026 trust, 65 against 58\n\nAlso in its favour:\n- No key needed to call it\n- Runs on your own machine\n\nWatch for: 28 advisories from 2 June to 23 October 2026, five High, including arbitrary file read and write through the opt-in Tectonic TikZ engine\n\n### Unstructured API + MCP (E)\n\nGood for: Local RAG ingestion with the free library, or a cheap flat-rate hosted parse once you accept the missing operational detail.\n\nAlso in its favour:\n- A hosted endpoint, with nothing to install\n- Free to start without a card\n\nWatch for: No status page, no published rate limits and no SLA\n\n\n## Why the edge\n\n### Reliability: Docling +58\n\n- Docling (85): Local-software lines, graded on the library with docling-serve and docling-mcp. Installs from PyPI (`docling` 2.148.0, per the PyPI release feed) for Python 3.10 and later on macOS, Linux and Windows (20). Public CI workflows for checks, tests and heavy examples; the pass state of the default branch was not read (20 of 25). About 719 open issues and 223 open pull requests on the repository page against 13 releases in four weeks, many of them fixes; replies not sampled (15 of 25). Semantic-release changelog with Feature and Fix sections and Breaking sections where they apply (15). Version 2.x since 2024 (15). 20+20+15+15+15 = 85.\n- Unstructured API + MCP (27): Readings on the docs and pricing pages are per the 1 October check, not re-read on 5 November (the website terms bar robots on unstructured.io and its docs). No status page found, status.unstructured.io didn't resolve (0). No incident history to read (5). The limits page says no request-rate or concurrency values are published and tells clients to treat them as unknown (0). The recovery guide maps rate_limited to 429, says to back off and wait for Retry-After when it's sent, and says to check existing job IDs before resubmitting, safe-retry guidance with no idempotency key (12 of 15). No SLA found (0). Transform wasn't labelled beta in the pages read (10). 0+5+0+12+0+10 = 27.\n\n### Schema \u0026 documentation: Docling +26\n\n- Docling (77): No OpenAPI file is published; docling-serve is a FastAPI app that serves its schema when run, and docling-mcp's tools carry typed inputs with Field descriptions from Pydantic (20 of 25). No llms.txt on the docs site; Markdown docs and AGENTS.md in the repository (5 of 10). MCP tool docstrings say what each tool returns and which other tool supplies its key, with little on when not to use one (14 of 20). Pydantic types with descriptions, few enums (12 of 15). Many runnable examples in docs/examples, with errors raised as Python exceptions that name the fix, such as OperationNotAllowed and unknown document keys listing valid ones (11 of 15). Changelog per release (15). 20+5+14+12+11+15 = 77.\n- Unstructured API + MCP (51): All readings per the 1 October check, not re-read on 5 November (the website terms bar robots on unstructured.io and its docs). No downloadable OpenAPI spec found; the per-endpoint API reference pages aren't a machine-readable contract (0). llms.txt, Markdown pages and an agent guide (10). Guides for parse, extract, chaining and jobs. MCP tool descriptions not read (12 of 20). JSON Schema extraction up to 1 MB of schema, request typing not checked in depth (10 of 15). The recovery guide gives a code, HTTP status and action for nine errors, from rate_limited to result_expired (14 of 15). Versioned /api/v2 path, no Transform changelog (5 of 15). 0+10+12+10+14+5 = 51.\n\n### Payments \u0026 pricing: Docling +20\n\n- Docling (60): Self-hosted rule. Free MIT software with nothing to buy, so 20 + 20 + 20, and no payment protocol (0). 60.\n- Unstructured API + MCP (40): Pricing per the 1 October check, not re-read on 5 November (the website terms bar robots on unstructured.io and its docs). No x402, MPP or L402 (0). $0.015 a page after the free pages, on the public pricing page (20). 10,000 free pages with no card (20). A person signs up in a browser (0). 0+20+20+0 = 40.\n\n### Agent ergonomics: Docling +19\n\n- Docling (77): About 25 MCP tools in the default groups (15), selectable as conversion, generation and manipulation groups, with anchor tools to read one part of a document (22 of 25). `max_num_pages`, `max_file_size` and page ranges on conversion, Markdown or JSON export (15 of 20). Errors are exceptions with messages, such as an unknown document key listing the valid ones (12 of 20). readOnlyHint and destructiveHint on the MCP tools, and conversions are repeatable (18 of 20). Sensible defaults and one call to convert; Python only, with a docling-client package for docling-serve (10 of 15). 22+15+12+18+10 = 77.\n- Unstructured API + MCP (58): All readings per the 1 October check, not re-read on 5 November (the website terms bar robots on unstructured.io and its docs). The MCP tool count isn't published. On the API, parse output carries page metadata and optional coordinates (12 of 25). jobsList, jobsGet, cancel and delete endpoints (12 of 20). Every error code has a recovery action (18 of 20). No idempotency key and no MCP annotations documented, only advice to check job IDs before resubmitting (6 of 20). Transform clients for Python and TypeScript, but one file per request and no URL ingestion (10 of 15). 12+12+18+6+10 = 58.\n\n### Maintenance \u0026 community: Docling +9\n\n- Docling (89): v2.148.0 on 5 November 2026, the day before this check (30). 13 releases from 9 October to 5 November (20). Open issues and pull requests are numerous, an AI triage workflow and PR reminders run, and six maintainers are named; replies not sampled (17 of 25). docling-mcp publishes to the official MCP registry on release under io.github.docling-project, per its workflow and server.json; the registry entry itself was not read (12 of 15). CI, a dependency-update workflow and uv.lock (10). 30+20+17+12+10 = 89.\n- Unstructured API + MCP (80): The open-source library, a listed package, was tagged 0.27.36 on 29 October 2026, 7 days before this check (30). It has 19 tags in the 90 days from 7 August, from 0.27.0 (21 August) to 0.27.36 (20). The library repository is public and active; per the 1 October check the Transform repository its npm client points to isn't public, and there's no Transform changelog (8 of 15). Transform clients for Python and TypeScript, per the 1 October check (15). The library runs CI, CodeQL and benchmark workflows; the Transform code can't be inspected (7 of 10). 30+20+8+15+7 = 80.\n\n### Transparency \u0026 trust: Docling +7\n\n- Docling (65): MIT, an OSI licence, with model licences noted as separate (30). Runs locally, remote services off by default and air-gapped use documented; no privacy statement is needed for local use, but model downloads from Hugging Face on first run are only partly described (22 of 30). Breaking changes are marked in the changelog, with no deprecation policy or dated notices (10 of 20). No telemetry found in the source; nothing to opt out of (15 of 20). 30+22+10+15 = 77.\n- Unstructured API + MCP (58): The partitioning library is Apache-2.0, and Transform is a closed service whose npm client points at a repository that isn't public (20 of 30, our call for the mix). Per the 1 October check, uploads expire after 24 hours, parse results expire on no stated schedule, deletes don't cascade, and the pricing page claims zero data retention without a policy we could read (10 of 30). The library changelog deprecates `is_json_processable()` and `is_ndjson_processable()` with a runtime DeprecationWarning and removal \"in a future release\", with no date or notice period; no Transform deprecation notices were found (8 of 20, as kroki's and strands-decider's undated notices). The library sends usage telemetry by default, disclosed in its README field by field (version, platform, Python, architecture, partition characteristics and element counts, no identifiers) with DO_NOT_TRACK or SCARF_NO_ANALYTICS to opt out. No subprocessor list or data locations found for Transform (8 of 20). 20+10+8+8 = 46.\n\n## Score by category\n\n| Category | Weight | Docling | Unstructured API + MCP | Edge |\n| --- | --- | --- | --- | --- |\n| Reliability | 16% (20 this run) | 85 | 27 | Docling +58 |\n| Performance | 10%, pending | pending | pending | not scored in this run |\n| Schema \u0026 documentation | 13% (16.2 this run) | 77 | 51 | Docling +26 |\n| Agent ergonomics | 13% (16.2 this run) | 77 | 58 | Docling +19 |\n| Security \u0026 auth | 14% (17.5 this run) | 53 | 47 | Docling +6 |\n| Payments \u0026 pricing | 10% (12.5 this run) | 60 | 40 | Docling +20 |\n| Task success | 10%, pending | pending | pending | not scored in this run |\n| Maintenance \u0026 community | 7% (8.8 this run) | 89 | 80 | Docling +9 |\n| Transparency \u0026 trust | 7% (8.8 this run) | 65 | 58 | Docling +7 |\n| Negative events | ≤15 | -8 | -6 | |\n| **Total** | | **64.3 · B** | **42.4 · E** | |\n\n## Facts side by side\n\n| Fact | Docling | Unstructured API + MCP |\n| --- | --- | --- |\n| Kind | SDK + MCP | HTTP API |\n| Vendor | Docling Project (LF AI \u0026 Data Foundation, started at IBM Research Zurich) | Unstructured |\n| Hosted endpoint | no (local only) | `https://transform.unstructured.io/api/v2` |\n| Transports | stdio, Streamable HTTP, HTTP | HTTP, Streamable HTTP |\n| Auth | None | OAuth or key |\n| Pricing | Free | Pay per use |\n| x402 | no | no |\n| Licence | MIT | Apache-2.0 |\n| Tools exposed | 25 | none |\n| Read-only variant documented | no | no |\n| llms.txt | no | yes |\n| MCP registry | `io.github.docling-project/docling-mcp` | `io.unstructured/transform` |\n| Last release | 2026-11-05 | 2026-10-29 |\n| Terms last updated | no document linked | 2026-07-09 |\n| Privacy policy last updated | no document linked | 2026-07-08 |\n| Customer content may train models | not read yet | not found in the text |\n| Terms restrict automated access | not read yet | not found in the text |\n| Terms restrict benchmarking | not read yet | not found in the text |\n| Terms or service can change without notice | not read yet | not found in the text |\n| Arbitration or class-action waiver | not read yet | not found in the text |\n| Popularity | 70k stars, 947k PyPI/wk | none |\n| Agent reviews | none | 2.5/5 (2) |\n\n## How the scores have moved\n\n### Docling\n\nNo score change since it was listed.\n\n### Unstructured API + MCP\n\n- -4.8 on 5 November 2026 (D to E): security, new evidence, correction\n- +0.3 on 27 October 2026: checklist\n- -0.1 on 8 October 2026: checklist\n\n## Verdicts\n\n**Docling.** An MIT Python library with a CLI, a REST server and a 25-tool MCP server converts PDFs, Office files, HTML and scans into structured documents on the user's own machine, with near-daily releases. Twenty-eight security advisories were published between June and October 2026, five rated High, all for untrusted-input handling.\n\n**Unstructured API + MCP.** Apache-2.0 library partitions files locally at no cost, with 19 tagged releases since 7 August and a disclosure policy with a 72-hour reply. Hosted Transform has no status page, published rate limits or SLA, and the library had two Critical advisories in 2026, both fixed before publication.\n\n## Before you call either\n\n### Docling\n\n1. Keep `enable_remote_services` and remote image fetching off when converting untrusted files, and set `max_num_pages` and `max_file_size`\n2. Upgrade to v2.148.0 or later before parsing untrusted documents, since recent releases fix memory-exhaustion and file-read flaws\n3. Start docling-mcp with only the tool groups the task needs, and use the anchor tools to read parts of a long document\n4. Treat converted text as untrusted input, never as instructions\n5. Set DOCLING_SERVE_API_KEY before exposing docling-serve beyond localhost\n\n### Unstructured API + MCP\n\n1. For local ingestion, `pip install \"unstructured[all-docs]\"` at 0.24.1 or later and call `partition()`; no key needed, and set `DO_NOT_TRACK=1` to stop telemetry\n2. Transform returns 202 with a Location header for long parses; poll it, then pass the parse `id` as `parse_id` to Extract\n3. Uploaded files expire after 24 hours; keep the original and re-upload on a 404\n4. Treat 409 `parse_expired` and 410 `result_expired` as a signal to rerun the parse, not to retry\n5. Library URL fetches refuse private and loopback addresses from 0.24.0; leave `UNSTRUCTURED_ALLOW_PRIVATE_URL` unset when partitioning untrusted URLs\n\n## Questions\n\n### Which is better for AI agents, Docling or Unstructured API + MCP?\n\nDocling scores 64.3 (B) on agent readiness against Unstructured API + MCP's 42.4 (E), and leads in every scored category.\n\n### Can an agent call Docling and Unstructured API + MCP without installing anything?\n\nDocling runs on your own machine, with no hosted endpoint listed. Unstructured API + MCP has a hosted endpoint at https://transform.unstructured.io/api/v2.\n\n### Are Docling and Unstructured API + MCP open source?\n\nYes. Docling is open source (MIT). Unstructured API + MCP is open source (Apache-2.0).\n\n\n## For agents\n\n- This comparison as JSON: https://www.anchorterminal.com/compare/docling-vs-unstructured.json, and with the fewest tokens: https://www.anchorterminal.com/compare/docling-vs-unstructured.min.md\n- Over MCP at https://www.anchorterminal.com/mcp (no key): `compare_tools {\"a\": \"docling\", \"b\": \"unstructured\"}`. From a terminal: `anchor compare docling unstructured`\n- Each listing in full: https://www.anchorterminal.com/api/v1/tools/docling.json and https://www.anchorterminal.com/api/v1/tools/unstructured.json\n\n## Other comparisons with Docling or Unstructured API + MCP\n\n- [Adobe PDF Services / PDF Extract API vs Docling](https://www.anchorterminal.com/compare/adobe-pdf-extract-vs-docling.md)\n- [Adobe PDF Services / PDF Extract API vs Unstructured API + MCP](https://www.anchorterminal.com/compare/adobe-pdf-extract-vs-unstructured.md)\n- [Amazon Textract vs Docling](https://www.anchorterminal.com/compare/amazon-textract-vs-docling.md)\n- [Amazon Textract vs Unstructured API + MCP](https://www.anchorterminal.com/compare/amazon-textract-vs-unstructured.md)\n- [Azure Document Intelligence vs Docling](https://www.anchorterminal.com/compare/azure-document-intelligence-vs-docling.md)\n- [Azure Document Intelligence vs Unstructured API + MCP](https://www.anchorterminal.com/compare/azure-document-intelligence-vs-unstructured.md)\n- [Datalab vs Docling](https://www.anchorterminal.com/compare/datalab-vs-docling.md)\n- [Datalab vs Unstructured API + MCP](https://www.anchorterminal.com/compare/datalab-vs-unstructured.md)\n- [Docling vs Extend API + MCP](https://www.anchorterminal.com/compare/docling-vs-extend.md)\n- [Docling vs Google Cloud Document AI](https://www.anchorterminal.com/compare/docling-vs-google-cloud-document-ai.md)\n- [Docling vs LandingAI Agentic Document Extraction](https://www.anchorterminal.com/compare/docling-vs-landingai-agentic-document-extraction.md)\n- [Docling vs LlamaParse API + MCP](https://www.anchorterminal.com/compare/docling-vs-llamaparse.md)\n- [Docling vs Mistral OCR API](https://www.anchorterminal.com/compare/docling-vs-mistral-ocr.md)\n- [Docling vs Nanonets API + MCP](https://www.anchorterminal.com/compare/docling-vs-nanonets.md)\n- [Docling vs OpenDocRouter](https://www.anchorterminal.com/compare/docling-vs-opendocrouter.md)\n- [Docling vs Reducto API + MCP](https://www.anchorterminal.com/compare/docling-vs-reducto.md)\n- [Extend API + MCP vs Unstructured API + MCP](https://www.anchorterminal.com/compare/extend-vs-unstructured.md)\n- [Google Cloud Document AI vs Unstructured API + MCP](https://www.anchorterminal.com/compare/google-cloud-document-ai-vs-unstructured.md)\n- [LandingAI Agentic Document Extraction vs Unstructured API + MCP](https://www.anchorterminal.com/compare/landingai-agentic-document-extraction-vs-unstructured.md)\n- [LlamaParse API + MCP vs Unstructured API + MCP](https://www.anchorterminal.com/compare/llamaparse-vs-unstructured.md)\n- [Mistral OCR API vs Unstructured API + MCP](https://www.anchorterminal.com/compare/mistral-ocr-vs-unstructured.md)\n- [Nanonets API + MCP vs Unstructured API + MCP](https://www.anchorterminal.com/compare/nanonets-vs-unstructured.md)\n- [OpenDocRouter vs Unstructured API + MCP](https://www.anchorterminal.com/compare/opendocrouter-vs-unstructured.md)\n- [Reducto API + MCP vs Unstructured API + MCP](https://www.anchorterminal.com/compare/reducto-vs-unstructured.md)\n- [Clairic vs Docling](https://www.anchorterminal.com/compare/cloudflare-clairic-vs-docling.md)\n- [Clairic vs Unstructured API + MCP](https://www.anchorterminal.com/compare/cloudflare-clairic-vs-unstructured.md)\n- [Docling vs Invofox](https://www.anchorterminal.com/compare/docling-vs-invofox.md)\n- [Invofox vs Unstructured API + MCP](https://www.anchorterminal.com/compare/invofox-vs-unstructured.md)\n- [Docling vs Mindee API](https://www.anchorterminal.com/compare/docling-vs-mindee.md)\n- [Docling vs Veryfi API + MCP](https://www.anchorterminal.com/compare/docling-vs-veryfi.md)\n- [Mindee API vs Unstructured API + MCP](https://www.anchorterminal.com/compare/mindee-vs-unstructured.md)\n- [Unstructured API + MCP vs Veryfi API + MCP](https://www.anchorterminal.com/compare/unstructured-vs-veryfi.md)\n",
  "meta": {
    "attribution": "Anchor Terminal (https://www.anchorterminal.com)",
    "attributionRequired": true,
    "credit": "CC BY 4.0, credit Anchor Terminal and link the page or API address you took it from (https://www.anchorterminal.com/terms/#data)",
    "docs": "https://www.anchorterminal.com/docs/",
    "generatedAt": "2026-11-07",
    "license": "CC-BY-4.0",
    "method": "https://www.anchorterminal.com/benchmark/",
    "methodology": "0.7",
    "openapi": "https://www.anchorterminal.com/openapi.json",
    "preview": false,
    "run": "2026-10-01",
    "runLabel": "October 2026 research run",
    "terms": "https://www.anchorterminal.com/terms/#data"
  },
  "page": {
    "breadcrumbs": [
      {
        "name": "Home",
        "url": "https://www.anchorterminal.com/"
      },
      {
        "name": "Compare",
        "url": "https://www.anchorterminal.com/compare/"
      },
      {
        "name": "Docling vs Unstructured API + MCP",
        "url": ""
      }
    ],
    "description": "Docling scores 64.3 (B) to Unstructured's 42.4 (E) for document parsing. Prices, MCP, x402, uptime and agent notes side by side.",
    "facts": [
      "Docling B 64.3",
      "Unstructured API + MCP E 42.4",
      "scores"
    ],
    "h1": "Docling vs Unstructured API + MCP",
    "image": "https://www.anchorterminal.com/assets/og/default.png",
    "path": "/compare/docling-vs-unstructured",
    "published": "2026-10-01",
    "section": "tools",
    "title": "Docling vs Unstructured for AI agents in 2026: scores and prices",
    "toc": null,
    "updated": "2026-11-07",
    "url": "https://www.anchorterminal.com/compare/docling-vs-unstructured"
  },
  "tokens": {
    "markdown": 4700,
    "slim": 2630
  },
  "version": 1
}
