В Telegram-канале - что нового в вайб-кодинге: инструменты, находки, ошибки. Подпишись.
Что такое MarkItDown и зачем он нужен?
Ты скидываешь нейросети договор, отчёт или выгрузку из бухгалтерии и получаешь ответ, который к документу отношения не имеет. Причина обычно не в модели. Внутри файла лежит формат: Word - архив с разметкой, Excel - таблица со ссылками между ячейками, PDF - набор символов с координатами на странице. Модель работает с текстом, и кто-то должен этот текст оттуда достать.
Этим MarkItDown и занимается. Репозиторий живёт по адресу github.com/microsoft/markitdown, лицензия MIT, то есть брать в работу можно без оговорок. На 18 августа 2026 года у него 174 412 звёзд и 12 756 ответвлений, последний выпуск 0.1.7 вышел 29 июля. Проект живой, хотя темп сместился с развития на обслуживание: открытых предложений с правками там 481 против 183 влитых за всю историю.
Разработчики описывают задачу так:
MarkItDown - лёгкая утилита на Python для преобразования разных файлов в Markdown для использования с большими языковыми моделями и связанными конвейерами текстового анализа.
Следующая фраза в описании объясняет половину претензий, которые инструменту предъявляют:
Хотя результат часто выглядит вполне прилично и по-человечески, он предназначен для потребления инструментами текстового анализа и может оказаться не лучшим вариантом для высокоточной конвертации документов, предназначенных для чтения людьми.
На выходе будет сырьё для модели. Красивого документа тут не получится, и написано об этом честно, в первом же разделе.
Почему именно markdown, в описании отвечают прямо: ведущие модели изначально «говорят» на этой разметке и вставляют её в ответы без всякой просьбы, потому что видели её в огромных объёмах, когда их учили. Плюс сама разметка экономна - три решётки на заголовок вместо десятка служебных строк.
Чем MarkItDown отличается от обычного конвертера?
Разница видна на одном примере. Возьми папку с двадцатью PDF-ами и попробуй прогнать их через pandoc. Не выйдет: pandoc умеет отдавать PDF на выходе, но читать его на входе не умеет. А именно этот случай - «у меня лежит стопка документов, дай их модели» - встречается чаще всего.
Сами авторы MarkItDown сравнивают себя с textract, библиотекой, которая просто вытаскивает текст откуда угодно. Отличие в том, что MarkItDown старается сохранить структуру: заголовки, списки, таблицы, ссылки.
| Признак | pandoc | MarkItDown |
|---|---|---|
| Читает PDF | нет | да, с оговорками |
| Читает Word, Excel, презентации | частично | да |
| Для кого результат | для человека | для модели |
| Главная ценность | точность вёрстки | структура и дешевизна по знакам |
| Ставится | отдельной программой | одной командой Python |
Практический вывод простой. Нужно перегнать статью в вёрстку для публикации - это pandoc. Нужно, чтобы нейросеть разобралась в двадцати договорах, - это MarkItDown.
Как установить MarkItDown и не получить первую сборку?
Сначала правильная команда, дальше объясню, почему она такая.
Проверить версию Python
Надёжнее всего 3.12, на ней свежий MarkItDown встаёт везде, где я проверял. Командаpython3 --versionпокажет, что стоит у тебя. На 3.13 и 3.14 у Mac с процессором Intel или со старой macOS бывает тихий откат, а 3.15 пока не подходит вовсе - разбор ниже.Поставить с перечислением форматов
Выполнитьpip install 'markitdown[pdf,docx,xlsx,pptx]'. Кавычки обязательны, иначе оболочка съест квадратные скобки. На Mac с процессором Intel добавь послеinstallфлаг--prefer-binary.Сразу проверить, что встало
Выполнитьmarkitdown --version. Ответ должен бытьmarkitdown 0.1.8или новее. Номер ниже означает, что установка откатилась - почему так выходит, разобрано в этом же разделе.
pip install 'markitdown[pdf,docx,xlsx,pptx]'
markitdown --versionВ описании проекта основной командой стоит pip install 'markitdown[all]' - поставить всё сразу. 28 сентября 2026 года, через неделю после выхода 0.1.8, я прогнал четыре варианта в чистых окружениях на Mac с Apple Silicon, на Python 3.14.6 и 3.12.12:
| Команда | Что встало на Python 3.14 | Что встало на Python 3.12 |
|---|---|---|
pip install markitdown | 0.1.8 | 0.1.8 |
pip install 'markitdown[pdf,docx,xlsx,pptx]' | 0.1.8 | 0.1.8 |
pip install 'markitdown[all]' | 0.1.8 | 0.1.8 |
pip install 'markitdown[all]==0.1.8' | 0.1.8 | 0.1.8 |
Все восемь установок закончились словами «Successfully installed», и markitdown --version везде ответил 0.1.8. В августе, когда последней была 0.1.7, третья строка на Python 3.14 давала 0.0.2 - версию от 8 марта 2025 года, вторую от начала истории проекта. Стабильных выпусков там сейчас одиннадцать, от 0.0.1 до 0.1.8, а с предвыпусками двадцать шесть.
Причина была в цепочке зависимостей. Набор [all] у 0.1.7 тянет за собой библиотеку для субтитров YouTube строго определённой линейки, и все выпуски этой линейки объявляют, что не работают на Python 3.14. Установщик их отбрасывает и, раз версия не закреплена, отматывается назад по версиям самого MarkItDown, пока не найдёт ту, что собирается. Находит 0.0.2 и ставит её, то есть на машину приезжает сборка полуторагодовой давности. В 0.1.8 требование к библиотеке субтитров подняли до линейки, которая работает и на 3.14, и в этом месте откат ушёл.
Сам механизм остался. Стоит установщику не найти под твою систему одну обязательную деталь, и он так же молча отматывается до 0.0.2. У свежих версий такая деталь - движок onnxruntime, на котором работает определитель типов файлов. Для Mac его собирают так: под Python 3.12 начиная с macOS 11, под 3.13 с macOS 13, под 3.14 только для Apple Silicon с macOS 14 и новее. Если твой Mac под это не подходит, даже голая команда pip install markitdown ставит 0.0.2. Я запустил на своём Mac Python 3.14 для Intel через Rosetta и получил ровно это: «Successfully installed», ни одного предупреждения, внутри 0.0.2.
На Mac с процессором Intel есть ещё одна деталь. Библиотеку шифрования, которую тянет чтение PDF, с июня 2026 года выпускают без готовой сборки под этот процессор, и установщик берётся собирать её из исходников. Добавь в команду флаг --prefer-binary, тогда он возьмёт предыдущую версию с готовой сборкой. Под Python 3.13 для Intel у меня так встала 0.1.8, и PDF открылся. Флаг ставит cryptography 48.0.1, у которой три известные уязвимости: в расшифровке по стандарту PKCS#7 и в проверке цепочек сертификатов. MarkItDown берёт из неё только расшифровку зашифрованных PDF, и до этих мест чтение документов не доходит.
С Python 3.15 откат приходит с двух сторон. Версия 0.1.8 объявляет поддержку только с 3.10 по 3.14, а движка под 3.15 пока нет. Я прогнал расчёт установщика под 3.15: и голая команда, и команда с форматами получают ту же 0.0.2.
Предупреждение при откате выглядит так, по строке на каждое дополнение из команды:
WARNING: markitdown 0.0.2 does not provide the extra 'all'Строка теряется среди десятков строк загрузки, а про подмену версии в ней не сказано ничего. У голой команды без дополнений нет даже её. Финальный отчёт бодрый: «Successfully installed».
Ставить совсем без дополнений тоже не выход. Голый пакет встанет, но PDF не откроет:
PdfConverter recognized the input as a potential .pdf file, but the
dependencies needed to read .pdf files have not been installed. To resolve
this error, include the optional dependency [pdf] or [all] when installing
MarkItDown. For example:
* pip install 'markitdown[pdf]'
* pip install 'markitdown[all]'Сам инструмент советует [all], и с 0.1.8 этот совет на Python 3.14 и 3.12 снова рабочий. Я всё равно перечисляю форматы поимённо: [all] добавляет к ним ещё полтора десятка пакетов и около 55 мегабайт, среди них предвыпускную сборку библиотеки Azure и ту самую связку для YouTube, которая уже раз ломала установку.
С этой предвыпускной сборкой Azure установщик справляется сам. Обычно pip предвыпуски пропускает, но здесь требование называет предвыпуск прямо, и он его берёт. Я проверил на Python 3.12 четыре версии pip, от 23.2 до 26.2: все выбирают 0.1.8.
Первым делом после установки прогони markitdown --version. Это пять секунд, и это единственный способ узнать, что встало именно то, что ты просил. Отчёт об успехе тут ничего не значит.
Я, честно говоря, в августе сначала не поверил и повторил установку в другом чистом окружении. Результат был тот же: 0.0.2 и слово «Successfully».
Пара бытовых моментов, о которых стоит знать заранее.
Весит это прилично. Я замерил свои окружения после того, как установка неожиданно долго качала пакеты: голая занимает 143 мегабайта, с четырьмя форматами - 303. Самый тяжёлый кусок в 81 мегабайт - определитель типов файлов, который тянется даже в базовой сборке. Для ноутбука неважно, для облачной функции с лимитом на размер уже критично.
PyPI из России открывается не всегда. Официальной блокировки нет, но 1 июня 2026 года хранилище пакетов перестало отвечать с российских адресов: соединение рвалось на установке защищённого канала. Про зеркала как запасной путь я бы не обольщался - у того, что я проверил, индекс отдаётся и файлы MarkItDown на месте, но одной обязательной зависимости в нём не оказалось, и установка не собралась ни на Python 3.14, ни на 3.12.
Установка - мелочь на фоне главного. Гораздо чаще нейросеть выдаёт мусор из-за того, что в её окно попало не то и не в том виде. Умение решать, что положить модели перед задачей, называется контекст-инжинирингом, и подготовка документов - его часть. На практикуме за три вечера собираешь всю связку: ИИ-клон, Второй мозг и контекст-инжиниринг. Это три кита, без которых ИИ галлюцинирует.
Как превратить первый документ в текст?
Самый короткий вариант:
markitdown dogovor.docxТекст напечатается в терминал. Чтобы сохранить его в файл, есть два пути:
markitdown dogovor.docx -o dogovor.md
markitdown dogovor.docx > dogovor.mdРазница между ними некритична на Mac и Linux, но важна на Windows: там перенаправление через > может уронить программу на кириллице.
Файл можно передать потоком, тогда пригодится подсказка о расширении:
cat dogovor.docx | markitdown -x docxВот главные флаги из справки версии 0.1.8:
| Флаг | Что делает |
|---|---|
-o, --output | записать результат в файл вместо вывода в окно |
-x, --extension | подсказка о расширении, когда файл приходит потоком |
-m, --mime-type | подсказка о типе содержимого |
-c, --charset | подсказка о кодировке |
-d, --use-docintel | распознавание через платное облако Microsoft |
-v, --version | показать версию |
В той же справке есть ещё три флага, которые пригодятся, и я проверил каждый: --list-plugins показывает установленные дополнения, -p включает их для конкретного запуска, а --keep-data-uris оставляет в результате картинки, вшитые в документ (по умолчанию они обрезаются). Остальное там - настройки облачных сервисов Microsoft.
Обвязка на Python занимает три строки:
from markitdown import MarkItDown
md = MarkItDown()
print(md.convert("ostatki.xlsx").text_content)Тот же вызов принимает и сетевой адрес. Я проверил на простой странице - вернулись чистые 167 знаков с заголовком и ссылкой, без меню и подвала:
r = md.convert("https://example.com")Терминал нужен не всем. Есть сторонняя оболочка с окошком - markitdown-gui с готовыми сборками под Mac и Windows, и плагин для Obsidian, который превращает файл, перетащенный в заметку, в текст прямо внутри неё. Оба сделаны не Microsoft, так что для рабочих документов я бы сначала посмотрел, что там внутри.
Какие форматы MarkItDown понимает и что из этого правда?
Сводная таблица - что заявлено и что за этим стоит.
| Формат | Заявлено | Как на самом деле |
|---|---|---|
| Word, Excel, презентации | да | работает чисто, это сильная сторона |
| CSV, JSON, XML, HTML | да | работает, но у CSV есть русская ловушка |
| да | зависит от вёрстки: одна колонка собирается, две рассыпаются | |
| Картинки | «метаданные и распознавание» | распознавания нет, только метаданные или платная модель зрения |
| Аудио | «расшифровка речи» | уходит в англоязычный движок Google |
| Архивы ZIP | «обходит содержимое» | что не разобралось, пропадает молча |
| Ссылки YouTube | да | только полная ссылка вида youtube.com/watch?... |
| Электронные книги EPUB | да | работает |
Три пункта разберу подробнее.
Картинки. В описании стоит слово OCR, и человек ждёт, что программа прочитает текст с фотографии. Она этого не делает. Внутри лежит чтение метаданных через отдельную программу exiftool и, если подключишь модель зрения по своему ключу, отправка картинки ей на описание. В обсуждении №1170 это сформулировали прямо:
markitdown сейчас не поддерживает извлечение текста, встроенного в изображения внутри PDF, поскольку в нём нет возможностей распознавания.
Аудио. Расшифровка речи есть, но язык не передаётся, и по умолчанию движок ждёт английский. Русская речь через него осмысленно не пройдёт. Плюс это обращение к бесплатному неофициальному адресу Google с ограничением около полусотни запросов в сутки на свой ключ.
Архивы. Программа распаковывает ZIP и обходит файлы внутри, склеивая результат. Если какой-то файл разобрать не удалось, ошибка перехватывается и гасится. Файл просто не появится в результате, и ты об этом не узнаешь.
Что происходит с русскими документами?
Файлы, которые я показываю ниже, собраны мной специально под проверку, данные в них выдуманные.
Договор в Word вышел вот так, дословно:
# Договор оказания услуг №14-А
Настоящий договор заключён 12 августа 2026 года между сторонами.
## 1. Предмет договора
Исполнитель обязуется оказать информационно-консультационные услуги.
Стоимость услуг составляет 148 000 рублей.
## 2. Сроки
Срок оказания услуг - 30 календарных дней с даты подписания.
| Этап | Срок | Сумма |
| --- | --- | --- |
| Аналитика | 10 дней | 48 000 ₽ |
| Внедрение | 20 дней | 100 000 ₽ |Таблица остатков из Excel вышла так же чисто, причём имя листа стало заголовком:
## Остатки
| Позиция | На складе | Резерв | Доступно |
| --- | --- | --- | --- |
| Кофе зерновой, кг | 420 | 38 | 382 |
| Чай листовой, кг | 180 | 52 | 128 |Презентация превратилась в текст, где номера слайдов вынесены пометками, а заголовки слайдов стали заголовками. Кириллица цела и здесь. Утверждение «MarkItDown не понимает кириллицу» в общем виде неверно.
Теперь три места, где всё-таки ломается.
CSV с точкой с запятой. Excel в русской раскладке сохраняет CSV через точку с запятой. Я прогнал две одинаковые выгрузки счетов. С запятой получилась нормальная таблица на четыре колонки. С точкой с запятой - вот это:
| Контрагент;Номер;Сумма;Статус |
| --- |
| ООО Ромашка;114;48000;оплачен |
| ИП Петров;115;12500;ждёт |Вся строка уехала в одну ячейку. Кодировка при этом распозналась правильно, ошибки нет, флаг -c не помогает. Модель получит такую таблицу и не поймёт, где сумма, а где статус. Лечится просто: пересохрани выгрузку с запятыми или замени точку с запятой на запятую до прогона.
Формат валюты в Excel. Ячейка, отформатированная как 2 000 ₽, приезжает в результат просто как 2000. Знак валюты хранится в настройках отображения ячейки и до самого значения не доходит. Об этом есть обсуждение №53, где сопровождающий проекта подтвердил причину. Для прейскуранта или счёта это существенно: модель увидит числа и не будет знать, рубли это или доллары.
Консоль Windows. В обсуждении №291, открытом в январе 2025 года и живом до сих пор, человек описывает падения на файлах с не-латинскими буквами:
Проблема в том, что он даже не попытался пропустить символ, просто упал, и вывод пустой, что делает инструмент бесполезным. Я тестировал на файлах на кириллице, французском и немецком, и на некоторых английских тоже. Если файл предельно простой, он справляется.
В следах ошибки видна кодировка cp1251, то есть консоль Windows. Разбор документа при этом проходит нормально, спотыкается печать результата в окно терминала. Отсюда два рабочих приёма:
markitdown dogovor.docx -o dogovor.md
$env:PYTHONUTF8 = "1"; markitdown dogovor.docx > dogovor.mdПервый обходит консоль вообще, второй заставляет Python писать в кодировке UTF-8. Правки, закрывающие проблему в самом инструменте, люди присылали минимум шесть раз - часть предложений закрыли, не влив, остальные висят открытыми. Так что чинить приходится обходом.
Четвёртый русский симптом встречается в PDF - последовательности вида (cid:1090) вместо букв. Это значит, что в файле нестандартная шрифтовая таблица и символы не расшифровались. Такой документ через MarkItDown гнать бесполезно, нужен другой инструмент.
Почему PDF выходит кашей?
Я взял научную статью на 2,16 мегабайта в две колонки и прогнал её. Код возврата нулевой, за 0,9 секунды на выходе 88 тысяч знаков, и почти все они мусорные. Восемьдесят восемь тысяч знаков дают ощущение, что всё получилось. Пока не откроешь файл:
| | Hybrid | | OCR-LLM | | Framework |
| --- | ------ | -------- | ----------- | --- | ---------- |
...
ilardocumentsdaily(Gagieetal.,2017;Navarro,
Informationextractionfromcopy-heavydoc-
5202 tcO 11 ]LC.sc[ 1v83101.0152:viXraТут три поломки сразу. Двухколоночная вёрстка превратилась в таблицы, которых в статье нет. Слова склеились без пробелов. Последняя строка - вертикальная плашка на полях страницы, приехавшая задом наперёд.
Дальше вышло смешное. Статья, которую я скармливал, оказалась той самой работой, где MarkItDown замеряли и сравнивали с другими инструментами. Абзац с результатами замера сам инструмент превратил вот во что:
cues. This name-matching error could be miti- OCRpreprocessingoverhead(0.056s),whileDo-
gatedthroughpromptengineeringtoprovidemore clingandMinerUadoptmorecomputationallyin-
explicit matching instructions or fine-tuning the tensive strategies with OCR latencies of approxi-Левая и правая колонки склеены построчно. Модель, которой это достанется, прочитает половину фразы из одного абзаца и половину из другого.
Причина техническая и простая. Word хранит явно: вот заголовок, вот ячейка таблицы. PDF хранит: вот символ, вот его координаты на листе. Восстановить из координат структуру - отдельная сложная задача, и MarkItDown её почти не решает. В исходном коде разбора PDF нет ни строчки про определение заголовков: если страница не опознана как форма или таблица, весь документ уходит в простое извлечение текста.
Люди пишут об этом регулярно. Обсуждение №2226 от июля 2026 года так и называется - плохое качество конвертации научной статьи, и в нём перечислено ровно то, что увидел я. Обсуждение №1419 про таблицы открыто с сентября 2025 года и живо до сих пор.
Есть и цифры. Открытый стенд сравнения разборщиков гоняет их на корпусе из двухсот PDF; MarkItDown там прогоняли дважды с разницей в три месяца, на версиях 0.1.5 и 0.1.6, и числа совпали до третьего знака.
| Показатель | MarkItDown | Docling |
|---|---|---|
| Общий балл | 0,589 | 0,882 |
| Порядок чтения | 0,844 | 0,898 |
| Таблицы | 0,273 | 0,887 |
| Заголовки | 0,000 | 0,824 |
| Секунд на страницу | 0,114 | 0,762 |
Ноль по заголовкам - не округление. Инструмент не находит в PDF ни одного заголовка, и это ровно то, что видно в его исходниках. По скорости он при этом обгоняет Docling в шесть с половиной раз, и вот это его настоящее преимущество.
Стенд публикует проект, чей собственный разборщик стоит в том же списке первым. Цифры MarkItDown перепроверила другая команда на том же наборе и получила те же значения, но и набор документов, и способ подсчёта - их собственные. Держи это в голове, когда смотришь на таблицу.
Научное сравнение на 3 576 документах подтверждает то же самое на другом наборе: на статьях с arXiv средний балл MarkItDown 35,2 против 73,1 у MinerU, а по заголовкам снова около нуля. На простых текстовых файлах с GitHub, которые тоже входят в этот набор, он обгоняет Docling - 62,1 против 49,9. Спотыкается он именно на сложной вёрстке.
По сети гуляет цифра «MarkItDown даёт 82% точности» без всякой методики. Я пробовал дойти до первоисточника: цепочка ссылок упирается в страницу, которая не открывается. Считать её замером нельзя.
На офисных форматах картина обратная. Авторы той самой двухколоночной статьи прогнали 400 документов в четырёх форматах и намерили на Word предельную точность за 0,54 секунды, на Excel - предельную за 0,30 секунды. Excel из сравниваемых инструментов поддерживал вообще только MarkItDown, и офисные форматы остаются его законной территорией.
Замер узкий: синтетические документы одного типа, задача - достать из них две конкретные величины. Переносить эти цифры на любые свои файлы нельзя. Переносится вывод о природе: там, где структура записана внутри файла, инструмент точен, а там, где смысл живёт в расположении на странице, он рассыпается.
Что будет со сканом договора?
Эта особенность опаснее прочих, потому что не выглядит как поломка.
Я собрал PDF из картинки с текстом - то есть ровно то, что получается, когда договор сфотографировали или пропустили через сканер. Первый пустой файл я счёл случайностью и прогнал ещё раз:
| Что подавал | Код возврата | Знаков на выходе | Сообщение об ошибке |
|---|---|---|---|
| PDF из картинки, прогон 1 | 0 | 0 | нет |
| PDF из картинки, прогон 2 | 0 | 0 | нет |
| Картинка PNG напрямую | 0 | 1 (перевод строки) | нет |
Ноль знаков и ноль ошибок, второй раз подряд. Нулевой код возврата означает «всё прошло хорошо», и любой сценарий, который проверяет успех по коду, посчитает документ обработанным. Дальше пустота уедет в модель, модель не увидит ничего и начнёт выдумывать ответ из воздуха.
Если гоняешь документы пачкой, проверяй длину результата. Код возврата тут ничего не покажет: пустой файл при нулевом коде и есть скан.
Пути обойти есть, и оба платные. Первый - флаг -d, который отправляет документ в облачный сервис распознавания Microsoft; в справке к флагу прямо написано, что нужен действующий адрес этого сервиса. Второй - отдельный дополнительный пакет, который шлёт страницы в модель зрения по твоему ключу, и тогда платишь за каждую страницу поставщику модели. У второго способа с апреля 2026 года висит незакрытое обсуждение о том, что из многостраничного скана берётся только первая страница.
Для российского предпринимателя оба пути неудобны: облако Microsoft просит иностранную карту. Остаётся распознавание моделью, поднятой у себя на машине, и это уже отдельная задача.
Для разового документа проще открыть его и скопировать текст руками. Для потока сканов нужен инструмент с распознаванием на борту.
Можно ли просто загрузить файл на сайт-конвертер?
Запрос «markitdown онлайн» - один из самых частых в подсказках поиска, и предложение под него есть. Оригинальный инструмент от Microsoft сайтов не имеет вовсе, он бывает только программой, которую ставишь себе. Всё, что открывается в браузере с похожим названием, сделано посторонними людьми.
Проверить такой сервис можно за минуту: открой панель разработчика на вкладке сетевых запросов, загрузи любой безобидный файл и посмотри, уходит ли он на сервер. Если уходит, обещание про браузер неверно, каким бы уверенным оно ни выглядело в разделе вопросов и ответов.
Именно так и вскрылась одна задокументированная история. В декабре 2024 года сервис-конвертер вышел на публику с обещанием, что файлы обрабатываются прямо в браузере. Читатель открыл панель разработчика и показал сетевой запрос, уходивший на сервер сервиса. Автор ответил честно: текст обещания сгенерировала нейросеть, он его не перечитал, и раздел он поправил. Домен сегодня продаётся.
Договор, счёт, выгрузка с фамилиями сотрудников - в них лежат персональные данные. Отправляя такой файл на сторонний сайт, ты становишься тем, кто их передал. Локальная утилита эту проблему снимает: файл не покидает машину.
За это MarkItDown и любят там, где выносить документы наружу нельзя. На одном из обсуждений человек описал свою ситуацию: на рабочем ноутбуке запрещено запускать произвольные программы, а библиотеки Python разрешены, и локальная утилита оказалась единственным доступным путём.
Сколько MarkItDown экономит на самом деле?
Офисный файл устроен как архив с разметкой внутри. Я распаковал свои три тестовых файла и сравнил вес той части, где лежит содержимое, с весом результата:
| Файл | Разметка внутри | Готовый текст | Во сколько раз меньше |
|---|---|---|---|
| Договор в Word | 3 701 байт | 711 байт | 5,2 |
| Таблица в Excel | 1 561 байт | 262 байта | 6,0 |
| Презентация | 2 203 байта | 296 байт | 7,4 |
Файлы маленькие, на больших пропорция будет другой, и единой цифры экономии тут нет. Когда её называют в подборках круглым числом, спрашивай про методику.
Про экономию говорят и сами разработчики: в описании проекта есть отдельная мысль о том, что соглашения markdown очень экономны по знакам. Это правда, но ставить её на первое место я бы не стал. Разница между «модель получила три тысячи знаков вместо пятнадцати» и «модель получила понятную структуру вместо мешанины» - разного порядка. Первое экономит деньги, второе определяет, будет ответ осмысленным или нет.
Если тема расхода контекста для тебя больная, я разбирал её отдельно - куда уходят токены в Claude и сколько их даётся на тарифах.
Как подключить MarkItDown к Claude через MCP?
MCP - способ дать нейросети внешний инструмент, чтобы она могла им пользоваться сама. Про сам механизм и другие серверы я писал в разборе MCP-серверов для Claude Code.
Сервер MarkItDown отдаёт наружу ровно один инструмент - превратить документ в текст. На вход он берёт и путь к локальному файлу, и ссылку на страницу, и данные, вшитые прямо в запрос.
Подключаю его к Claude Code одной командой, версия сервера закреплена. Нужен менеджер пакетов uv:
claude mcp add --scope user --env 'ORT_DISABLE_TELEMETRY=1' --env 'UV_PYTHON=3.12' --transport stdio markitdown -- uvx markitdown-mcp@0.0.1a7
claude mcp listУ markitdown в ответе второй команды должно стоять «Connected». Первый запуск качает около семидесяти пакетов и длится до минуты, дальше сервер поднимается за секунду-полторы.
Дальше оговорки, каждую из которых я проверил руками.
Сборку 0.0.1a7 выложили 14 сентября 2026 года, до неё сервер больше года стоял на 0.0.1a4 от мая 2025-го. Номер у свежей по-прежнему предвыпускной.
На свежем Python он встанет не везде. Движок onnxruntime, который сервер тянет за собой, под Python 3.14 на Mac выпущен только для Apple Silicon с macOS 14 и новее, поэтому на Mac с процессором Intel и на macOS 13 и старше с Python 3.14 установка не собирается. Я запускал сервер на Mac с Apple Silicon на Python 3.14, 3.13 и 3.12, на всех трёх он встал. В команде стоит UV_PYTHON=3.12: под 3.12 готовые сборки есть на Windows, Linux и Mac с Apple Silicon, а если такого Python у тебя нет, uv скачает его сам. Для Mac с процессором Intel и тут есть оговорка: библиотеку cryptography uv будет собирать из исходников, потому что готовой сборки под Intel у неё с июня 2026 года нет. Установка там дольше и может не получиться.
Какой MarkItDown приедет внутри, решает версия uv. Начиная с MarkItDown 0.1.6 его набор [all] требует предвыпускную библиотеку Azure: uv 0.12 и новее её берёт и ставит свежий MarkItDown 0.1.8, более старый uv откатывается до 0.1.5. Свою версию uv покажет командой uv --version.
Наружу уходят две вещи. Первая - статистика: на Mac и Linux её по умолчанию шлёт в Microsoft движок onnxruntime внутри сервера. Выключает её переменная ORT_DISABLE_TELEMETRY=1 из команды. На проверке без неё сервер соединялся с адресами статистики Microsoft. С переменной, пока я гонял файлы с диска, соединений не было ни одного.
Вторая - аудио. Файлы WAV, MP3, M4A и MP4 сервер отправляет на расшифровку в сервис распознавания речи Google, причём по обычному http, без шифрования. Записи разговоров с клиентами я бы через него не отправлял.
Большой документ через него не пролезет. Есть открытое обсуждение, где ответ сервера в 51 тысячу токенов упёрся в ограничение в 25 тысяч, а нарезки на части у инструмента нет.
И безопасность. В документации самого пакета написано без обиняков:
Сервер не поддерживает аутентификацию и работает с правами запустившего его пользователя. Инструмент преобразования может быть использован для чтения любого файла, к которому есть доступ у пользователя сервера, или любых данных из сети.
Проще говоря: агент, получивший этот инструмент, может прочитать всё, что можешь прочитать ты. Для работы на своей машине это терпимо. Выставлять такой сервер наружу или давать его непроверенному агенту нельзя.
Конфигурации именно для Claude Code в документации проекта нет - там описан только Claude Desktop и запуск через контейнер. Если встретишь в сети готовый конфиг «из официальной документации» для Claude Code, знай: в репозитории такого нет.
Для регулярной работы проще вызывать программу командой и класть готовый текст в проект. Тогда файл лежит рядом с остальными материалами и становится частью Второго мозга - структуры, к которой модель обращается сама. Как её собрать, показывал в разборе про второй мозг.
Когда честнее взять другой инструмент?
Сравниваю по задачам, а звёзды на GitHub тут ни при чём:
| Инструмент | Сильная сторона | Чем платишь |
|---|---|---|
| MarkItDown | офисные файлы, скорость, бесплатность | сложный PDF и сканы не берёт |
| Docling | таблицы и вёрстка через специальные модели | десятки секунд на документ |
| MinerU | многоколоночность, формулы, плотные таблицы | тяжелее в установке |
| Marker | высокая точность, формулы, рисунки | нужна видеокарта, и есть ограничение лицензии по выручке |
| unstructured | отдаёт структуру документа кусками с описанием | результат сложнее в применении |
| Облачные разборщики | ничего не настраивать | деньги и отправка документа наружу |
С Marker есть деталь, которую в подборках пропускают. Сам код с июля 2026 года лежит под свободной лицензией, а веса моделей - под отдельной, где прописан порог: свободно можно, если твоя компания за прошлый год не превысила пять миллионов долларов выручки и столько же привлечённых средств. Отдельным пунктом запрещено использование теми, кто делает конкурирующий продукт. Для большинства читателей это неважно, для растущего бизнеса - повод прочитать лицензию до внедрения.
Разница в скорости заметна на глаз. В независимом замере от мая 2026 года на одном и том же регламенте на 14 страниц без видеокарты MarkItDown отработал за 0,6 секунды, Docling - за 41 секунду, Marker - за 2 минуты 14 секунд. На скане MarkItDown выдал пустоту, что совпадает с тем, что получил я.
Отсюда рабочая связка из четырёх шагов:
- Прогони через MarkItDown всё подряд - он бесплатный и мгновенный.
- Открой результат и посмотри на его размер.
- Вышел осмысленный текст - задача решена, дальше ничего не нужно.
- Вышла каша или пустота - гони этот конкретный файл через тяжёлый инструмент.
Так ты платишь временем и сложностью только за те документы, которые этого требуют.
Как встроить MarkItDown в свою работу?
Anthropic использует MarkItDown в своих же готовых навыках для работы с офисными файлами, и там же прописана граница, которую стоит забрать себе целиком:
Быстро посмотреть лист: markitdown file.xlsx. Координат ячеек тут нет, поэтому не планируй по нему правки.
Привязка к ячейкам и страницам в тексте потеряна, поэтому вносить по нему изменения в исходный файл не выйдет. Дальше три сценария.
Пачка однотипных документов - акты, счета, анкеты, отклики. Складываешь в папку и прогоняешь одной строкой:
for f in dokumenty/*.docx; do markitdown "$f" -o "text/$(basename "$f" .docx).md"; doneДальше отдаёшь модели папку с текстом и просишь свести нужное в таблицу. Работает это на цифровых файлах - сканы отвалятся, и по нулевому размеру ты их сразу увидишь.
Постоянные материалы проекта - список цен, шаблон договора, регламент, описание услуг. Один раз перегоняешь в текст и кладёшь рядом с проектом. Дальше модель читает их сама при каждом запросе, и не нужно каждый раз прикреплять файлы к разговору. Чем это отличается от загрузки файла в чат, я разбирал в материале про загрузку файлов в Claude.
Выгрузка из учётной системы. Excel из бухгалтерии или из личного кабинета банка превращается в таблицу за треть секунды, и модель считает по ней без промежуточных плясок. Только проверь две вещи: разделитель в CSV должен быть запятой, а знак валюты из формата ячейки в текст не попадёт.
Работа с тяжёлыми PDF внутри терминала в этот список не входит. Там своя история с расходом контекста, и я разбирал её отдельно в материале про PDF в Claude Code без потери токенов. А если ты только собираешь себе рабочее место, начни с установки Claude Code.
С чего начать прямо сейчас: выполни pip install 'markitdown[pdf,docx,xlsx,pptx]', прогони первый попавшийся договор в Word и посмотри на размер результата. Полминуты - и ты будешь знать, работает это на твоих файлах или нет.
Частые вопросы
Источники
- MarkItDown - репозиторий проекта на GitHub
- MarkItDown на PyPI - версии и даты выпуска
- markitdown-mcp - описание MCP-сервера
- Anthropic Skills - как MarkItDown применяют для таблиц
- Обсуждение №53 - из Excel пропадает формат валюты
- Обсуждение №291 - падение на не-латинских символах в консоли Windows
- Обсуждение №1170 - в проекте нет распознавания текста на картинках
- Обсуждение №1419 - таблицы из PDF не извлекаются
- Обсуждение №2226 - качество конвертации научной статьи
- Обсуждение №1333 - ответ MCP-сервера не влезает в окно модели
- Открытый стенд сравнения разборщиков документов
- READoc - научное сравнение на 3 576 документах, arXiv:2409.05137
- Zilong Wang, Xiaoyu Shen - замер точности извлечения по форматам, arXiv:2510.10138
- Сравнение MarkItDown, Docling и Marker на реальных документах
- Docling - разбор документов моделями вёрстки
- MinerU - разбор сложной вёрстки PDF
- Marker - лицензия на веса моделей
- pandoc - конвертер разметки
Полная схема вайб-кодинга за три вечера: ИИ-клон + Второй мозг + Контекст-инжиниринг. Записи эфиров в личном кабинете, доступ минимум 30 дней.
Новые материалы - дайджестом, без спама
Гайды выходят регулярно. Подпишись, чтобы не пропускать: пришлю подборку в Telegram или на email. Раз в неделю или каждый день - выбираешь сам.

