doc7 converts documents into Markdown by rendering each page and passing it to your own OpenAI-compatible multimodal model, rather than by running a dedicated OCR, layout, table, and formula stack. Because the model reads the whole page, charts, formulas, diagram relationships, screenshots, and visible application state come back as searchable text, and multi-page inputs are rebuilt into one ordered document.
The model endpoint is yours: a local server such as LM Studio or Ollama, or a private or remote OpenAI-compatible deployment. The first run detects the system language, finds running local model servers, reads their real model IDs, verifies image understanding with a probe, and saves the choice on the machine; doc7 doctor re-checks format dependencies and the model, optionally against the specific document you are about to process.
One Go binary carries the interactive CLI, batch processing, a tool-calling chat agent, an MCP server with a typed converttomarkdown tool, an asynchronous HTTP service, and a Go SDK. The HTTP service accepts uploaded files and ZIP archives, returns a job id to poll, serves merged Markdown or an artifact archive, and can resume only the failed pages of a job. Each run keeps merged Markdown alongside page-level Markdown, rendered page images, metadata, and a manifest, so page-level provenance carries into retrieval pipelines and agent knowledge bases.
A published benchmark run compares two raster-only PDFs across fifteen machine-checkable visual facts, with raw outputs, digests, and scoring rules committed for inspection:
| System | Attention paper | Visual report | Combined |
|---|---|---|---|
| doc7 + qwen3.5-9b | 7/7 | 8/8 | 15/15 |
| MarkItDown 0.1.6 + OCR 0.1.0 + qwen3.5-9b | 3/7 | 6/8 | 9/15 |
| Docling 2.113.0 standard | 1/7 | 2/8 | 3/15 |
Features
- Visual page understanding: rendered pages go to a multimodal model, recovering tables, LaTeX notation, chart values, diagram ordering, and UI state as text
- Input coverage: PDF, Office and OpenDocument files, EPUB, EML, MHTML and MSG mail, Jupyter notebooks, images, plain text and data formats, URLs, and ZIP archives
- Model choice: any OpenAI-compatible multimodal endpoint, including LM Studio, Ollama, and private deployments, with no required OCR stack
- First-run setup: local endpoint discovery, model listing, an image-understanding probe, and a saved per-machine configuration
- Chat agent: a session that converts documents through a restricted tool and browses a read-only filesystem tool set inside authorized directories only
- MCP server: a typed converttomarkdown tool over stdio, accepting a path, directory, URL, or archive and returning Markdown with metadata
- HTTP service: asynchronous jobs with status polling, Markdown and artifact downloads, and resume of failed pages under the current model configuration
- Page selection: reprocess selected one-based pages or ranges with different settings into the same output
- Output layout: merged Markdown plus per-page Markdown, page images, metadata, and a manifest, with an option to drop the images
- Docker image: LibreOffice, MuPDF, Chromium, and CJK fonts, running the service as a non-root user with named volumes
- Security controls: localhost-by-default bind, bearer token for external binds, sanitized mail and notebook HTML, and archive traversal and size limits
