Как превратить PDF и Word в текст для ИИ: MarkItDown от Microsoft

Опубликовано 18.08.2026Обновлено 01.10.202629 мин чтенияБазовый
Документы Word, Excel и PDF втекают в MarkItDown и выходят размеченным текстом для нейросети.
Что узнаешь
  • Команда установки, которая не подсунет первую сборку двухлетней давности
  • Почему Word и Excel выходят чисто, а PDF со сложной вёрсткой рассыпается
  • Что будет со сканом договора: ноль знаков и нулевой код возврата
  • Три места, где ломаются именно русские файлы
  • Когда честнее взять Docling или MinerU вместо MarkItDown
Применить за 15 мин
Сэкономит 4 ч
Базовый
134просмотров

В 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 для использования с большими языковыми моделями и связанными конвейерами текстового анализа.

- Microsoft, описание проекта (перевод мой), https://github.com/microsoft/markitdown

Следующая фраза в описании объясняет половину претензий, которые инструменту предъявляют:

Хотя результат часто выглядит вполне прилично и по-человечески, он предназначен для потребления инструментами текстового анализа и может оказаться не лучшим вариантом для высокоточной конвертации документов, предназначенных для чтения людьми.

- Microsoft, описание проекта (перевод мой), https://github.com/microsoft/markitdown

На выходе будет сырьё для модели. Красивого документа тут не получится, и написано об этом честно, в первом же разделе.

Почему именно markdown, в описании отвечают прямо: ведущие модели изначально «говорят» на этой разметке и вставляют её в ответы без всякой просьбы, потому что видели её в огромных объёмах, когда их учили. Плюс сама разметка экономна - три решётки на заголовок вместо десятка служебных строк.

Чем MarkItDown отличается от обычного конвертера?

Разница видна на одном примере. Возьми папку с двадцатью PDF-ами и попробуй прогнать их через pandoc. Не выйдет: pandoc умеет отдавать PDF на выходе, но читать его на входе не умеет. А именно этот случай - «у меня лежит стопка документов, дай их модели» - встречается чаще всего.

Сами авторы MarkItDown сравнивают себя с textract, библиотекой, которая просто вытаскивает текст откуда угодно. Отличие в том, что MarkItDown старается сохранить структуру: заголовки, списки, таблицы, ссылки.

ПризнакpandocMarkItDown
Читает PDFнетда, с оговорками
Читает Word, Excel, презентациичастичнода
Для кого результатдля человекадля модели
Главная ценностьточность вёрсткиструктура и дешевизна по знакам
Ставитсяотдельной программойодной командой Python

Практический вывод простой. Нужно перегнать статью в вёрстку для публикации - это pandoc. Нужно, чтобы нейросеть разобралась в двадцати договорах, - это MarkItDown.

Как установить MarkItDown и не получить первую сборку?

Сначала правильная команда, дальше объясню, почему она такая.

  1. Проверить версию Python

    Надёжнее всего 3.12, на ней свежий MarkItDown встаёт везде, где я проверял. Команда python3 --version покажет, что стоит у тебя. На 3.13 и 3.14 у Mac с процессором Intel или со старой macOS бывает тихий откат, а 3.15 пока не подходит вовсе - разбор ниже.
  2. Поставить с перечислением форматов

    Выполнить pip install 'markitdown[pdf,docx,xlsx,pptx]'. Кавычки обязательны, иначе оболочка съест квадратные скобки. На Mac с процессором Intel добавь после install флаг --prefer-binary.
  3. Сразу проверить, что встало

    Выполнить markitdown --version. Ответ должен быть markitdown 0.1.8 или новее. Номер ниже означает, что установка откатилась - почему так выходит, разобрано в этом же разделе.
bash
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 markitdown0.1.80.1.8
pip install 'markitdown[pdf,docx,xlsx,pptx]'0.1.80.1.8
pip install 'markitdown[all]'0.1.80.1.8
pip install 'markitdown[all]==0.1.8'0.1.80.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.

Я, честно говоря, в августе сначала не поверил и повторил установку в другом чистом окружении. Результат был тот же: 0.0.2 и слово «Successfully».

Пара бытовых моментов, о которых стоит знать заранее.

Весит это прилично. Я замерил свои окружения после того, как установка неожиданно долго качала пакеты: голая занимает 143 мегабайта, с четырьмя форматами - 303. Самый тяжёлый кусок в 81 мегабайт - определитель типов файлов, который тянется даже в базовой сборке. Для ноутбука неважно, для облачной функции с лимитом на размер уже критично.

PyPI из России открывается не всегда. Официальной блокировки нет, но 1 июня 2026 года хранилище пакетов перестало отвечать с российских адресов: соединение рвалось на установке защищённого канала. Про зеркала как запасной путь я бы не обольщался - у того, что я проверил, индекс отдаётся и файлы MarkItDown на месте, но одной обязательной зависимости в нём не оказалось, и установка не собралась ни на Python 3.14, ни на 3.12.

Установка - мелочь на фоне главного. Гораздо чаще нейросеть выдаёт мусор из-за того, что в её окно попало не то и не в том виде. Умение решать, что положить модели перед задачей, называется контекст-инжинирингом, и подготовка документов - его часть. На практикуме за три вечера собираешь всю связку: ИИ-клон, Второй мозг и контекст-инжиниринг. Это три кита, без которых ИИ галлюцинирует.

Интенсив по Hermes-агентам
Собери свою компанию на ИИ-агентах
Три вечера: от метода одного агента до связки ролей в компании
Старт 6–8 октября  ·  2 000 ₽
Записаться на интенсив по Hermes-агентам →

Как превратить первый документ в текст?

Самый короткий вариант:

bash
markitdown dogovor.docx

Текст напечатается в терминал. Чтобы сохранить его в файл, есть два пути:

bash
markitdown dogovor.docx -o dogovor.md
markitdown dogovor.docx > dogovor.md

Разница между ними некритична на Mac и Linux, но важна на Windows: там перенаправление через > может уронить программу на кириллице.

Файл можно передать потоком, тогда пригодится подсказка о расширении:

bash
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 занимает три строки:

python
from markitdown import MarkItDown

md = MarkItDown()
print(md.convert("ostatki.xlsx").text_content)

Тот же вызов принимает и сетевой адрес. Я проверил на простой странице - вернулись чистые 167 знаков с заголовком и ссылкой, без меню и подвала:

python
r = md.convert("https://example.com")

Терминал нужен не всем. Есть сторонняя оболочка с окошком - markitdown-gui с готовыми сборками под Mac и Windows, и плагин для Obsidian, который превращает файл, перетащенный в заметку, в текст прямо внутри неё. Оба сделаны не Microsoft, так что для рабочих документов я бы сначала посмотрел, что там внутри.

Какие форматы MarkItDown понимает и что из этого правда?

Сводная таблица - что заявлено и что за этим стоит.

ФорматЗаявленоКак на самом деле
Word, Excel, презентациидаработает чисто, это сильная сторона
CSV, JSON, XML, HTMLдаработает, но у CSV есть русская ловушка
PDFдазависит от вёрстки: одна колонка собирается, две рассыпаются
Картинки«метаданные и распознавание»распознавания нет, только метаданные или платная модель зрения
Аудио«расшифровка речи»уходит в англоязычный движок Google
Архивы ZIP«обходит содержимое»что не разобралось, пропадает молча
Ссылки YouTubeдатолько полная ссылка вида youtube.com/watch?...
Электронные книги EPUBдаработает

Три пункта разберу подробнее.

Картинки. В описании стоит слово OCR, и человек ждёт, что программа прочитает текст с фотографии. Она этого не делает. Внутри лежит чтение метаданных через отдельную программу exiftool и, если подключишь модель зрения по своему ключу, отправка картинки ей на описание. В обсуждении №1170 это сформулировали прямо:

markitdown сейчас не поддерживает извлечение текста, встроенного в изображения внутри PDF, поскольку в нём нет возможностей распознавания.

- emreyesilyurt, обсуждение №1170 в репозитории (перевод мой), https://github.com/microsoft/markitdown/issues/1170#issuecomment-2785902236

Аудио. Расшифровка речи есть, но язык не передаётся, и по умолчанию движок ждёт английский. Русская речь через него осмысленно не пройдёт. Плюс это обращение к бесплатному неофициальному адресу Google с ограничением около полусотни запросов в сутки на свой ключ.

Архивы. Программа распаковывает ZIP и обходит файлы внутри, склеивая результат. Если какой-то файл разобрать не удалось, ошибка перехватывается и гасится. Файл просто не появится в результате, и ты об этом не узнаешь.

Что происходит с русскими документами?

Файлы, которые я показываю ниже, собраны мной специально под проверку, данные в них выдуманные.

Договор в Word вышел вот так, дословно:

markdown
# Договор оказания услуг №14-А

Настоящий договор заключён 12 августа 2026 года между сторонами.

## 1. Предмет договора

Исполнитель обязуется оказать информационно-консультационные услуги.

Стоимость услуг составляет 148 000 рублей.

## 2. Сроки

Срок оказания услуг - 30 календарных дней с даты подписания.

| Этап | Срок | Сумма |
| --- | --- | --- |
| Аналитика | 10 дней | 48 000 ₽ |
| Внедрение | 20 дней | 100 000 ₽ |

Таблица остатков из Excel вышла так же чисто, причём имя листа стало заголовком:

markdown
## Остатки
| Позиция | На складе | Резерв | Доступно |
| --- | --- | --- | --- |
| Кофе зерновой, кг | 420 | 38 | 382 |
| Чай листовой, кг | 180 | 52 | 128 |

Презентация превратилась в текст, где номера слайдов вынесены пометками, а заголовки слайдов стали заголовками. Кириллица цела и здесь. Утверждение «MarkItDown не понимает кириллицу» в общем виде неверно.

Теперь три места, где всё-таки ломается.

CSV с точкой с запятой. Excel в русской раскладке сохраняет CSV через точку с запятой. Я прогнал две одинаковые выгрузки счетов. С запятой получилась нормальная таблица на четыре колонки. С точкой с запятой - вот это:

markdown
| Контрагент;Номер;Сумма;Статус |
| --- |
| ООО Ромашка;114;48000;оплачен |
| ИП Петров;115;12500;ждёт |

Вся строка уехала в одну ячейку. Кодировка при этом распозналась правильно, ошибки нет, флаг -c не помогает. Модель получит такую таблицу и не поймёт, где сумма, а где статус. Лечится просто: пересохрани выгрузку с запятыми или замени точку с запятой на запятую до прогона.

Формат валюты в Excel. Ячейка, отформатированная как 2 000 ₽, приезжает в результат просто как 2000. Знак валюты хранится в настройках отображения ячейки и до самого значения не доходит. Об этом есть обсуждение №53, где сопровождающий проекта подтвердил причину. Для прейскуранта или счёта это существенно: модель увидит числа и не будет знать, рубли это или доллары.

Консоль Windows. В обсуждении №291, открытом в январе 2025 года и живом до сих пор, человек описывает падения на файлах с не-латинскими буквами:

Проблема в том, что он даже не попытался пропустить символ, просто упал, и вывод пустой, что делает инструмент бесполезным. Я тестировал на файлах на кириллице, французском и немецком, и на некоторых английских тоже. Если файл предельно простой, он справляется.

- участник обсуждения №291 в репозитории (перевод мой), https://github.com/microsoft/markitdown/issues/291

В следах ошибки видна кодировка cp1251, то есть консоль Windows. Разбор документа при этом проходит нормально, спотыкается печать результата в окно терминала. Отсюда два рабочих приёма:

powershell
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, и числа совпали до третьего знака.

ПоказательMarkItDownDocling
Общий балл0,5890,882
Порядок чтения0,8440,898
Таблицы0,2730,887
Заголовки0,0000,824
Секунд на страницу0,1140,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 из картинки, прогон 100нет
PDF из картинки, прогон 200нет
Картинка PNG напрямую01 (перевод строки)нет

Ноль знаков и ноль ошибок, второй раз подряд. Нулевой код возврата означает «всё прошло хорошо», и любой сценарий, который проверяет успех по коду, посчитает документ обработанным. Дальше пустота уедет в модель, модель не увидит ничего и начнёт выдумывать ответ из воздуха.

Пути обойти есть, и оба платные. Первый - флаг -d, который отправляет документ в облачный сервис распознавания Microsoft; в справке к флагу прямо написано, что нужен действующий адрес этого сервиса. Второй - отдельный дополнительный пакет, который шлёт страницы в модель зрения по твоему ключу, и тогда платишь за каждую страницу поставщику модели. У второго способа с апреля 2026 года висит незакрытое обсуждение о том, что из многостраничного скана берётся только первая страница.

Для российского предпринимателя оба пути неудобны: облако Microsoft просит иностранную карту. Остаётся распознавание моделью, поднятой у себя на машине, и это уже отдельная задача.

Для разового документа проще открыть его и скопировать текст руками. Для потока сканов нужен инструмент с распознаванием на борту.

Можно ли просто загрузить файл на сайт-конвертер?

Запрос «markitdown онлайн» - один из самых частых в подсказках поиска, и предложение под него есть. Оригинальный инструмент от Microsoft сайтов не имеет вовсе, он бывает только программой, которую ставишь себе. Всё, что открывается в браузере с похожим названием, сделано посторонними людьми.

Проверить такой сервис можно за минуту: открой панель разработчика на вкладке сетевых запросов, загрузи любой безобидный файл и посмотри, уходит ли он на сервер. Если уходит, обещание про браузер неверно, каким бы уверенным оно ни выглядело в разделе вопросов и ответов.

Именно так и вскрылась одна задокументированная история. В декабре 2024 года сервис-конвертер вышел на публику с обещанием, что файлы обрабатываются прямо в браузере. Читатель открыл панель разработчика и показал сетевой запрос, уходивший на сервер сервиса. Автор ответил честно: текст обещания сгенерировала нейросеть, он его не перечитал, и раздел он поправил. Домен сегодня продаётся.

За это MarkItDown и любят там, где выносить документы наружу нельзя. На одном из обсуждений человек описал свою ситуацию: на рабочем ноутбуке запрещено запускать произвольные программы, а библиотеки Python разрешены, и локальная утилита оказалась единственным доступным путём.

Сколько MarkItDown экономит на самом деле?

Офисный файл устроен как архив с разметкой внутри. Я распаковал свои три тестовых файла и сравнил вес той части, где лежит содержимое, с весом результата:

ФайлРазметка внутриГотовый текстВо сколько раз меньше
Договор в Word3 701 байт711 байт5,2
Таблица в Excel1 561 байт262 байта6,0
Презентация2 203 байта296 байт7,4

Файлы маленькие, на больших пропорция будет другой, и единой цифры экономии тут нет. Когда её называют в подборках круглым числом, спрашивай про методику.

Про экономию говорят и сами разработчики: в описании проекта есть отдельная мысль о том, что соглашения markdown очень экономны по знакам. Это правда, но ставить её на первое место я бы не стал. Разница между «модель получила три тысячи знаков вместо пятнадцати» и «модель получила понятную структуру вместо мешанины» - разного порядка. Первое экономит деньги, второе определяет, будет ответ осмысленным или нет.

Если тема расхода контекста для тебя больная, я разбирал её отдельно - куда уходят токены в Claude и сколько их даётся на тарифах.

Как подключить MarkItDown к Claude через MCP?

MCP - способ дать нейросети внешний инструмент, чтобы она могла им пользоваться сама. Про сам механизм и другие серверы я писал в разборе MCP-серверов для Claude Code.

Сервер MarkItDown отдаёт наружу ровно один инструмент - превратить документ в текст. На вход он берёт и путь к локальному файлу, и ссылку на страницу, и данные, вшитые прямо в запрос.

Подключаю его к Claude Code одной командой, версия сервера закреплена. Нужен менеджер пакетов uv:

bash
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 тысяч, а нарезки на части у инструмента нет.

И безопасность. В документации самого пакета написано без обиняков:

Сервер не поддерживает аутентификацию и работает с правами запустившего его пользователя. Инструмент преобразования может быть использован для чтения любого файла, к которому есть доступ у пользователя сервера, или любых данных из сети.

- Microsoft, описание пакета markitdown-mcp (перевод мой), https://github.com/microsoft/markitdown/tree/main/packages/markitdown-mcp

Проще говоря: агент, получивший этот инструмент, может прочитать всё, что можешь прочитать ты. Для работы на своей машине это терпимо. Выставлять такой сервер наружу или давать его непроверенному агенту нельзя.

Для регулярной работы проще вызывать программу командой и класть готовый текст в проект. Тогда файл лежит рядом с остальными материалами и становится частью Второго мозга - структуры, к которой модель обращается сама. Как её собрать, показывал в разборе про второй мозг.

Когда честнее взять другой инструмент?

Сравниваю по задачам, а звёзды на GitHub тут ни при чём:

ИнструментСильная сторонаЧем платишь
MarkItDownофисные файлы, скорость, бесплатностьсложный PDF и сканы не берёт
Doclingтаблицы и вёрстка через специальные моделидесятки секунд на документ
MinerUмногоколоночность, формулы, плотные таблицытяжелее в установке
Markerвысокая точность, формулы, рисункинужна видеокарта, и есть ограничение лицензии по выручке
unstructuredотдаёт структуру документа кусками с описаниемрезультат сложнее в применении
Облачные разборщикиничего не настраиватьденьги и отправка документа наружу

С Marker есть деталь, которую в подборках пропускают. Сам код с июля 2026 года лежит под свободной лицензией, а веса моделей - под отдельной, где прописан порог: свободно можно, если твоя компания за прошлый год не превысила пять миллионов долларов выручки и столько же привлечённых средств. Отдельным пунктом запрещено использование теми, кто делает конкурирующий продукт. Для большинства читателей это неважно, для растущего бизнеса - повод прочитать лицензию до внедрения.

Разница в скорости заметна на глаз. В независимом замере от мая 2026 года на одном и том же регламенте на 14 страниц без видеокарты MarkItDown отработал за 0,6 секунды, Docling - за 41 секунду, Marker - за 2 минуты 14 секунд. На скане MarkItDown выдал пустоту, что совпадает с тем, что получил я.

Отсюда рабочая связка из четырёх шагов:

  1. Прогони через MarkItDown всё подряд - он бесплатный и мгновенный.
  2. Открой результат и посмотри на его размер.
  3. Вышел осмысленный текст - задача решена, дальше ничего не нужно.
  4. Вышла каша или пустота - гони этот конкретный файл через тяжёлый инструмент.

Так ты платишь временем и сложностью только за те документы, которые этого требуют.

Как встроить MarkItDown в свою работу?

Anthropic использует MarkItDown в своих же готовых навыках для работы с офисными файлами, и там же прописана граница, которую стоит забрать себе целиком:

Быстро посмотреть лист: markitdown file.xlsx. Координат ячеек тут нет, поэтому не планируй по нему правки.

- Anthropic, описание навыка для работы с таблицами (перевод мой), https://github.com/anthropics/skills/blob/main/skills/xlsx/SKILL.md

Привязка к ячейкам и страницам в тексте потеряна, поэтому вносить по нему изменения в исходный файл не выйдет. Дальше три сценария.

Пачка однотипных документов - акты, счета, анкеты, отклики. Складываешь в папку и прогоняешь одной строкой:

bash
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 и посмотри на размер результата. Полминуты - и ты будешь знать, работает это на твоих файлах или нет.

Частые вопросы

Источники

Полная схема вайб-кодинга за три вечера: ИИ-клон + Второй мозг + Контекст-инжиниринг. Записи эфиров в личном кабинете, доступ минимум 30 дней.

Интенсив по Hermes-агентам
Собери свою компанию на ИИ-агентах
Три вечера: от метода одного агента до связки ролей в компании
Старт 6–8 октября  ·  2 000 ₽
Записаться на интенсив по Hermes-агентам →

Новые материалы - дайджестом, без спама

Гайды выходят регулярно. Подпишись, чтобы не пропускать: пришлю подборку в Telegram или на email. Раз в неделю или каждый день - выбираешь сам.

Была инструкция полезна?
Артемий Миллер
Автор
Артемий Миллер
Предприниматель и вайб-кодер

Артемий Миллер - предприниматель и вайб-кодер. Бывший программист, собирает продукты исключительно вместе с ИИ-агентами, без найма разработчиков.

Связанные инструкции

Как настроить Claude под себя, чтобы не объяснять всё заново

В каждом новом чате Claude тебя не помнит. Показываю четыре места, где это лечится, и даю промпт, которым он сам проведёт интервью и напишет текст для настроек.

23 мин

Как сделать анимированный сайт в Claude Code за вечер

Claude Code собирает рабочий сайт за час, но узнаётся он мгновенно - по шрифту, отступам и отсутствию движения. Показываю схему, которая это чинит, и объясняю, где анимации начинают вредить.

21 мин

GLM-5.2 догнала Claude Opus 4.8: открытая модель дешевле в 5 раз

Открытая GLM-5.2 догнала Claude Opus на рутине и стоит в разы дешевле. Где она реально заменяет Claude, где нет, и как подключить её в Claude Code.

16 мин

Codex от OpenAI: что это, как установить и доступ из России в 2026

Разбираю Codex от OpenAI по официальной документации: что это за агент, пять мест где он работает, цены и лимиты, установка за 5 минут и честный ответ про страны.

18 мин

Связанные термины

Термин

Терминал

Окно, где компьютером управляют текстовыми командами, без кнопок и мышки. Через него работают Claude Code и другие ИИ-агенты: сами набирают команды, а ты читаешь, что они запускают, и разрешаешь.

Термин

Сервер

Компьютер, который работает круглосуточно и подключён к интернету. На нём живут сайт, бот, база данных или ИИ-агент, и продуктом пользуются, даже когда твой ноутбук выключен.

Термин

GitHub

Сайт, где хранится копия проекта со всей историей правок. Оттуда хостинг сам забирает код и обновляет сайт, а ещё там лежат открытые проекты, скиллы и плагины, которые можно поставить себе.

Термин

MCP-сервер

Программа, через которую ИИ-агент подключается к внешнему сервису: почте, календарю, таблице, CRM, браузеру, хостингу. Подключил сервер, и агент сам берёт оттуда данные и выполняет действия.

Термин

Токен

Кусочек текста, которым ИИ-модель читает и пишет: часть слова, короткое слово или знак препинания. В токенах считают цену запроса, лимиты подписки и то, сколько модель держит в голове.

Термин

Вайб-кодинг

Способ строить продукты через диалог с ИИ-агентами: ты ставишь задачу словами, агент пишет код, ты проверяешь и итерируешь. Не «изучить программирование», а «получить результат руками агента».

Термин

Второй мозг

Папка business/ в проекте с базой знаний: аудитория, продукты, цели, экономика. Claude читает её перед каждой задачей и заземляет решения на реальный контекст бизнеса.

Термин

ИИ-клон

Цифровая проекция твоего мышления в виде папки ai-clone/: ценности, принципы, тон, правила, выученные через ошибки. Claude читает её перед текстами «от меня» - голос совпадает.

Термин

Контекст-инжиниринг

Дисциплина подготовки контекста для ИИ-агента: что он уже знает к моменту твоего промпта. 5 слоёв: ИИ-клон, бизнес, проект, зона задачи, сама задача.