Everyone talks about the model.
Hardly anyone talks about what you feed it.
And that's where almost everything is won or lost.
What it is
MarkItDown is a Python tool published by Microsoft that converts all kinds of files (PDF, Word, Excel, PowerPoint, HTML and more) to Markdown. The goal isn't a pretty result, but one a language model can read and understand: headings, lists and tables with their structure intact.
You use it from the command line or from code, in one line. And it has an MCP server so AI assistants can use it directly.
Why I find it interesting
Because it tackles the problem almost nobody wants to look at.
When a company wants to "use AI with its documents", it imagines the spectacular part: asking an assistant and getting answers from its contracts, quotes or manuals.
What it doesn't imagine is that those documents come in twenty different formats, with broken tables, headings that aren't headings and PDFs that are scanned photos. If the model gets rubbish, it answers confidently about rubbish.
A good model with badly prepared data gives convincing, wrong answers. Which is worse than no answers at all.
The way of thinking behind it
This isn't only about AI. It happens in any project.
The flashy part, the one in the demos, almost always depends on a boring part nobody wants to do: sorting, cleaning, converting, documenting. When a project fails, it's often not because of the spectacular part. It's because nobody did the boring part properly.
MarkItDown is exactly that: a tool for the boring part. Which is why I think it's one of the most useful.
What I'd use it for
- Preparing internal documentation before building an assistant that answers questions about it.
- Converting old quotes or reports into a format you can search and compare.
- Turning spreadsheets into structured text so a model can summarise them.
An honest warning: it doesn't work miracles with scanned or badly laid-out documents. For those you'll need OCR or other tools. And if you process files that aren't yours, be careful what you open: the project itself warns that it runs with the permissions of whoever executes it.
What this repository teaches
That there's a lot of value in doing one small thing well. It isn't a huge product. It's a converter. And that's precisely why it has become a piece so many people use.
P.S. Before asking yourself which model to use, ask what state your documents are in. The answer to the first almost always depends on the second.