๐ English ยท ็ฎไฝไธญๆ
Convert PDF, Word, HTML, URLs, PowerPoint, Excel, CSV, TSV, EPUB, RTF and ODT into clean, LLM-ready Markdown โ with academic-paper-grade PDF quality.
pip install everything-markdown
everything-md paper.pdf -o paper.md| everything-markdown | markitdown | docling | marker | |
|---|---|---|---|---|
| Academic PDF quality (header/footer strip, caption reattach, line-number removal) | Yes | No | Partial | Partial |
| Formats supported | 11 | 8 | 3 | 1 |
| Install size | ~150 MB | ~50 MB | ~2 GB | ~1.5 GB |
| GPU required | No | No | Optional | Optional |
| MCP server | Yes | No | No | No |
| Agent skill (SKILL.md) | Yes | No | No | No |
| Scanned PDF OCR | Yesยน | No | Yes | Yes |
| LangChain loader | Yes | No | No | No |
ยน Requires ocrmypdf + Tesseract. Auto-detected at runtime.
See docs/benchmarks.md for a detailed comparison.
from everything_markdown import convert
doc = convert("paper.pdf")
print(doc.markdown) # the full markdown text
print(doc.title) # extracted document title
print(doc.warnings) # any conversion warnings
print(doc.assets) # extracted images (Asset objects)
# Write to file with images extracted:
doc = convert("paper.pdf", output_path="paper.md", images="folder")# Basic conversion
everything-md paper.pdf # โ paper.md
everything-md report.docx -o output.md # explicit output path
everything-md https://example.com/post --stdout # stream to stdout
# Image handling
everything-md paper.pdf --images folder # extract images (default)
everything-md paper.pdf --images base64 # inline as data URIs
everything-md paper.pdf --images skip # drop imagespip install everything-markdown[mcp]Add to your MCP client config:
{
"mcpServers": {
"everything-markdown": {
"command": "everything-md-mcp"
}
}
}Or use uvx (no install needed):
{
"mcpServers": {
"everything-markdown": {
"command": "uvx",
"args": ["--from", "everything-markdown[mcp]", "everything-md-mcp"]
}
}
}pip install everything-markdown[langchain]from everything_markdown.integrations.langchain import EverythingMarkdownLoader
loader = EverythingMarkdownLoader("paper.pdf")
docs = loader.load()
# docs[0].page_content โ full markdown
# docs[0].metadata โ {"source": "paper.pdf", "title": "...", ...}No pip install needed โ the skill bundles its own code and resolves dependencies on first run.
# One-liner install:
curl -fsSL https://raw.githubusercontent.com/JustinRaoV/everything-markdown/main/install.sh | bash
# Or via Claude Code marketplace:
/plugin marketplace add JustinRaoV/everything-markdown
/plugin install convert-to-markdown@everything-markdownThen tell your agent: ๆ paper.pdf ่ฝฌๆ markdown
pip install everything-markdown # core conversion
pip install everything-markdown[mcp] # + MCP server
pip install everything-markdown[langchain]# + LangChain loader
pip install everything-markdown[ocr] # + OCR for scanned PDFs
pip install everything-markdown[all] # everythingPick whichever path matches your agent:
# Zip download (no git, no shell):
# Grab from https://github.com/JustinRaoV/everything-markdown/releases/latest
unzip convert-to-markdown-v*.zip -d ~/.claude/skills/
# One-liner:
curl -fsSL https://raw.githubusercontent.com/JustinRaoV/everything-markdown/main/install.sh | bash
# Manual:
git clone https://github.com/JustinRaoV/everything-markdown.git
# Point your agent at: <clone>/skills/convert-to-markdown/- Python 3.11+ must be on PATH.
- For agent skill mode:
uv(recommended) or plainpython3(bootstrap falls back tovenv+pip). - For OCR:
pip install everything-markdown[ocr]or installocrmypdf+ Tesseract system-wide.
| Format | Extensions | Notes |
|---|---|---|
| PDF (text) | .pdf |
pymupdf4llm + custom post-processor; paper-grade on academic PDFs; password-protected PDFs detected |
| PDF (scanned) | .pdf |
Auto-OCR via ocrmypdf when available; falls back to warning if not installed |
| HTML / URL | .html, .htm, http(s):// |
Readability + html2text; title from og/twitter/title/h1; charset meta respected |
| DOCX | .docx |
Mammoth (no legacy .doc); title from docProps/core.xml; tables as GFM |
| PPTX | .pptx |
python-pptx; bold/italic preserved; hyperlinks extracted; nested bullets; notes as blockquote |
| XLSX / CSV / TSV | .xlsx, .csv, .tsv |
One GFM table per sheet; CSV/TSV auto-detects delimiter, BOM + CJK/Western encodings |
| EPUB | .epub |
ebooklib; cross-chapter image dedup; all three image modes supported |
| RTF | .rtf |
striprtf (pure Python); plain-text extraction; paragraphs + bullets preserved |
| ODT | .odt |
odfpy (pure Python); headings/lists/tables/images; bold/italic, hyperlinks, footnotes/endnotes |
$ everything-md ~/Downloads/whitepaper.pdf
wrote: /Users/.../Downloads/whitepaper.md
+ 12 asset(s) -> whitepaper.assets
The output has paragraphs reflowed across 2-column layouts, headings inferred from font hierarchy, GFM tables, and image refs pointing at the sibling assets folder.
For academic PDFs, the post-processor strips bioRxiv line numbers, CrossMark badges, license boilerplate, and page headers/footers โ then reattaches figure captions to their images.
See examples/ for input/output pairs you can read straight on GitHub.
git clone https://github.com/JustinRaoV/everything-markdown.git
cd everything-markdown
uv sync # installs all deps
uv run pytest # 307 tests
uv run ruff check . # lint
make check # lint + tests + format checkArchitecture: docs/technical-design.md. Adding a converter: CONTRIBUTING.md.
- First run takes 30+ seconds โ expected; wheels download once.
- Scanned PDF produces empty markdown โ install
ocrmypdf+ Tesseract, orpip install everything-markdown[ocr]. - Agent skill doesn't appear โ restart your agent; confirm
~/.claude/skills/convert-to-markdown/SKILL.mdexists.
Full list: docs/troubleshooting.md.
- Can I use this in a non-Python project? Yes โ the CLI is a standalone command, and the MCP server works with any MCP client.
- Where does the markdown get written? Alongside the input by default (
paper.pdfโpaper.md); pass-oto override, or--stdoutto stream. - Can I batch-convert a directory? Loop in your shell; the converter is intentionally one-document-per-invocation.
Full list: docs/faq.md.
See CHANGELOG.md.
MIT