Runs locally · Open source · MCP ready

Not a converter — a query interface for your documents

PDF, Word, Excel, PowerPoint, HTML and images go in. Markdown and JSON come out, carrying heading levels, table structure and the page every line came from. Your agent asks for the outline first, then pulls only the section it needs.

Files never leave your machine Apache-2.0 macOS & Windows CLI / desktop app / web / MCP

get_outline("annual-report.pdf")agent call
2 Business reviewp.4–11
3.2 Financial summary · 2 tablesp.12–14
4 Risk factorsp.15–22

only this section enters the context — or search across documents

get_section("annual-report.pdf", "Financial summary")
search_documents("gross margin")
Gross margin for the year was 41.2%, up 2.6 points on the prior year, driven mainly by… source: annual-report.pdf · p.12 · 3.2 Financial summary

Local only

Not one network request in the whole pipeline

The parsing engine runs on your own machine — pull the network cable and it keeps working. Contracts, medical records, financial statements, unpublished drafts: none of it should be leaving your machine in the first place.

UPLOADED 0 bytes ENGINE local LICENSE Apache-2.0

PDF
DOCX
XLSX
PPTX
HTML
IMAGE
✕ NETWORK
LOCAL ENGINE
MARKDOWN
JSON
HTML
TEXT
ANNOTATED PDF

Structure & provenance

It reads structure, not just text

Heading levels, table dimensions, the page a paragraph came from — all of it lands in the output. Turn on the quality check and it marks its own results back onto the original, so you can see exactly where it got things wrong.

Headings Body & tables Worth reviewing

These three colours aren't a designer's pick. They're the colours the quality check already uses when it annotates a PDF.

heading · h2 · p.33.2 Financial summary
paragraph · p.3
table · 4×3 · p.4
scanned? · p.5No text layer on this page — routed to OCR

In / out

Six formats in, five out

Mix them in one folder and convert the lot; scanned pages are detected and routed to OCR. Three derived products on top: RAG chunks (with page and heading path), table CSV, and a quality-check report.

Input

PDFrichest layout
Worddocx
Excelxlsx · sheet = page
PowerPointpptx · slide = page
HTMLno extra deps
Imagespng jpg tiff bmp webp gif
Layout analysis · local

Output

Markdownfor people
JSON treefor programs
HTMLwith structure tags
Plain texttxt
Annotated PDFcheck the parse

To get text out of images and scans, install the OCR service once — one command, a few GB of dependencies, still entirely local. Skip it and everything else still works; scans just come out without text.

For agents

Let the agent go look it up

A built-in MCP server: one line to register, eight tools. Documents stay on your machine; the agent takes only what it needs.

# register (Claude Code)
$ claude mcp add aimorsel -- morsel mcp

# what the agent then does on its own
get_outline("annual-report.pdf")
get_section("annual-report.pdf", "Financial summary")
search_documents("gross margin")
ToolWhat it does
get_outlineReturns the heading tree with page ranges and token estimates — the first move on a long document
get_sectionPulls one section by heading, matched loosely
search_documentsSearches across converted documents; hits carry page number and heading path
read_pdf_markdownReturns the whole body for short documents
extract_tablesReturns every table as CSV text
get_chunksRAG chunks as JSONL, each with page range and heading path
qa_checkPer-page counts, flagging blank, scanned-looking and thin pages
convert_pdfConverts and lists the output files; unchanged files hit the cache

Batch

A thousand documents, unattended

Power cut, a late addition, picking it up the next morning — it carries on where it left off.

Resumable
Converts only what's new or changed; a different output format re-runs everything
Parallel workers
Noticeably faster past a few dozen files; one bad file doesn't stop the batch
Watched folder
Drop a file in and it converts; still-copying files are left alone until they settle
Run report
One CSV per batch: status, pages, duration, reason for failure. Opens in Excel
A floor under failure
Files the engine can't parse fall back to plain text extraction rather than an empty folder

Benchmark

All 731 files converted, fidelity on par with the specialist engines

731 public documents across 8 formats, run side by side with four open-source tools: docling, pymupdf4llm, markitdown and pdfplumber. The scoring is public and identical for every engine: ground truth comes straight from the source files (LaTeX sources, HTML originals, the known structure of generated files), with no human scoring.

Five engines, three metricsSame 731-file public corpus · colour = engine

AImorseldoclingpymupdf4llmmarkitdownpdfplumber

Coverage Files converted out of 731

AImorsel731 · 100%
markitdown539 · 74%
pymupdf4llm293 · 40%
pdfplumber289 · 40%
docling300-file subset only, not charted

Text fidelity Pairwise, on documents both engines succeeded on · other vs AImorsel

doclingn=2990.841 vs 0.839
pymupdf4llmn=2930.775 vs 0.773
markitdownn=5390.715 vs 0.842
pdfplumbern=2890.574 vs 0.778

Median time Seconds per file · shorter is better

pdfplumber0.5 s
markitdown0.8 s
AImorsel1.6 s
pymupdf4llm7.2 s
docling11.2 s

Two things need saying. On the small 77-file intersection where all five engines succeed, docling and pymupdf4llm score higher than AImorsel on text similarity (0.92 vs 0.82); that subset skews to standard single-column PDFs, and AImorsel still leads on structure there. The weakest link is scans and images: digit fidelity 0.716 (0.891 with a text layer) — numbers from scans need a human second check.

Full result tables and methodology → Corpus, scripts, ground-truth generators and metric code are in bench/; a re-run reproduces the numbers within 1%.

Download

Unzip. That's the whole install.

A trimmed Java runtime ships inside, so there's no Java and no Python to install.

macOS Apple Silicon · arm64 Download .dmg v1.0.2 · 121 MB · signed & notarized
macOS Intel · x86_64 Download .dmg v1.0.2 · 122 MB · signed & notarized
Windows x64 Download .zip v1.0.2 · 116 MB · unsigned

One package holds the command line, the desktop app, the web service and the MCP server, sharing a single set of dependencies. Developers can pip install aimorsel or install from source instead — see the download page.

The open-source core stays free, complete and local. Always. Formula → LaTeX and handwriting recognition are being built as an optional local model pack — also offline.