Blog

Cómo convertir archivos PDF y Word en texto para IA: MarkItDown de Microsoft

Markdown

Análisis en profundidad: cómo convertir archivos PDF y Word en texto para IA: MarkItDown de Microsoft.

Leer el artículo completo

Idea clave

MarkItDown es una utilidad gratuita de Microsoft que convierte archivos de Word, Excel, presentaciones y PDF en texto estructurado para IA. Analiza archivos de Office correctamente en una fracción de segundo. Convierte los PDF con diseños complejos en un caos y devuelve un archivo vacío con un código de salida cero cuando se trata de un escaneo. A continuación encontrarás un comando de instalación que funciona, mediciones en documentos con texto cirílico y una regla para saber cuándo usar otra herramienta.

Encontrarás más instrucciones en la documentación de Ailoot.

¿Qué es MarkItDown y para qué sirve?

Idea clave

MarkItDown es una utilidad de Python de Microsoft que lee un archivo y devuelve su contenido como texto estructurado. Los encabezados se convierten en encabezados y las tablas, en tablas. Está en un repositorio público de GitHub con licencia MIT, se instala con un solo comando y realiza todo el procesamiento en tu equipo. Tiene una sola función: preparar un documento para que una IA pueda ver no solo las palabras, sino también la estructura.

Le envías a una IA un contrato, un informe o una exportación contable y recibes una respuesta que no tiene nada que ver con el documento. Por lo general, el problema no es el modelo. El archivo contiene un formato: Word es un archivo comprimido con marcado, Excel es una hoja de cálculo con vínculos entre celdas y PDF es un conjunto de caracteres con coordenadas en una página. El modelo trabaja con texto, y alguien tiene que extraerlo.

Eso es lo que hace MarkItDown. El repositorio está en github.com/microsoft/markitdown, bajo la licencia MIT, así que puedes usarlo sin restricciones. Al 18 de agosto de 2026, tiene 174,412 estrellas y 12,756 forks; la última versión, 0.1.7, se publicó el 29 de julio. El proyecto sigue activo, aunque su enfoque ha pasado del desarrollo al mantenimiento: tiene 481 solicitudes de extracción abiertas, frente a 183 fusionadas en toda su historia.

Los desarrolladores describen así su propósito:

MarkItDown es una utilidad ligera de Python para convertir archivos de diversos formatos a Markdown y usarlos con modelos de lenguaje grandes y procesos relacionados de análisis de texto.

— Microsoft, descripción del proyecto (traducida), https://github.com/microsoft/markitdown

La siguiente frase de la descripción explica la mitad de las quejas sobre la herramienta:

Aunque el resultado suele tener un aspecto bastante decente y ser fácil de leer para las personas, está pensado para herramientas de análisis de texto y puede no ser la mejor opción para convertir con alta fidelidad documentos destinados a la lectura humana.

— Microsoft, descripción del proyecto (traducida), https://github.com/microsoft/markitdown

El resultado es materia prima para un modelo. No será un documento bonito, y el proyecto lo dice con claridad, desde la primera sección.

La descripción explica directamente por qué usa Markdown: los modelos líderes ya «hablan» este lenguaje de marcado y lo incluyen en sus respuestas sin que se les pida, porque vieron enormes cantidades durante el entrenamiento. Además, el marcado es compacto: tres almohadillas para un encabezado en lugar de una docena de líneas de metadatos.

¿En qué se diferencia MarkItDown de un conversor común?

Idea clave

Conversores como pandoc traducen un lenguaje de marcado a otro y conservan el diseño para las personas. pandoc no acepta PDF como entrada. MarkItDown resuelve el problema opuesto: extrae contenido de un archivo de Office y lo organiza para que un modelo pueda entenderlo de inmediato sin desperdiciar tokens. Su objetivo no es conservar el diseño visual, y esa es toda la diferencia.

La diferencia queda clara con un ejemplo. Toma una carpeta con veinte PDF e intenta procesarlos con pandoc. No funcionará: pandoc puede generar PDF como salida, pero no puede leerlos como entrada. Y esta situación —«tengo un montón de documentos; pásalos al modelo»— es la más habitual.

Los autores de MarkItDown se comparan con textract, una biblioteca que simplemente extrae texto de cualquier lugar. La diferencia es que MarkItDown intenta conservar la estructura: encabezados, listas, tablas y enlaces.

FunciónpandocMarkItDown
Lee PDFnosí, con salvedades
Lee Word, Excel y presentacionesparcialmentesí
Público al que se destina el resultadopersonasmodelos
Ventaja principalfidelidad del diseñoestructura y poco volumen de caracteres
Instalaciónprograma independienteun comando de Python

La conclusión práctica es sencilla. Si necesitas convertir un artículo a un diseño listo para publicar, usa pandoc. Si necesitas que una IA entienda veinte contratos, usa MarkItDown.

¿Cómo instalar MarkItDown sin acabar con la primera versión?

Idea clave

Con la versión 0.1.8, el comando de la descripción del proyecto instala la versión más reciente en Python 3.14 y 3.12; esto se ha vuelto a comprobar en ocho entornos limpios. En Python 3.15, en Mac con procesador Intel y Python 3.14, y en Mac con versiones antiguas de macOS y Python 3.13 o 3.14, todavía puede producirse una degradación silenciosa a 0.0.2, la segunda versión de la historia del proyecto. En esos casos, el instalador informa que se completó correctamente. Por tanto, usa Python 3.12, indica por nombre los formatos que necesitas y comprueba enseguida el número de versión.

Primero, el comando correcto; después, por qué lo es.

  1. Comprueba la versión de Python

    Python 3.12 es la opción más fiable: la última versión de MarkItDown se instala en todos los entornos probados con ella. El comando python3 --version muestra cuál tienes. En Mac con procesador Intel o versiones antiguas de macOS, Python 3.13 y 3.14 pueden degradar la versión sin avisar; Python 3.15 aún no es compatible, como se explica más abajo.

  2. Instala con los formatos indicados

    Ejecuta pip install 'markitdown[pdf,docx,xlsx,pptx]'. Las comillas son obligatorias, o el shell interpretará los corchetes. En un Mac con procesador Intel, añade la opción --prefer-binary después de install.

  3. Comprueba enseguida que se haya instalado

    Ejecuta markitdown --version. La respuesta debería ser markitdown 0.1.8 o una versión posterior. Un número menor significa que la instalación degradó la versión; esta sección explica por qué.

pip install 'markitdown[pdf,docx,xlsx,pptx]'
markitdown --version

La descripción del proyecto incluye pip install 'markitdown[all]' como comando principal para instalarlo todo de una vez. El 28 de septiembre de 2026, una semana después de la publicación de 0.1.8, se probaron cuatro variantes en entornos limpios de un Mac con Apple Silicon y Python 3.14.6 y 3.12.12:

ComandoInstalado en Python 3.14Instalado en 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

Las ocho instalaciones terminaron con «Successfully installed», y markitdown --version devolvió 0.1.8 en todos los casos. En agosto, cuando 0.1.7 era la versión más reciente, el tercer comando instaló 0.0.2 con Python 3.14; se publicó el 8 de marzo de 2025 y fue la segunda versión de la historia del proyecto. Ahora hay once versiones estables, de 0.0.1 a 0.1.8, y veintiséis si se incluyen las versiones preliminares.

La causa estaba en la cadena de dependencias. En 0.1.7, la opción [all] incorpora una biblioteca de subtítulos de YouTube de una serie específica de versiones, y todas las versiones de esa serie indican que no funcionan con Python 3.14. El instalador las rechaza y, como no hay una versión fijada, retrocede por las versiones de MarkItDown hasta encontrar una que pueda instalar. Encuentra 0.0.2 y la instala, poniendo en tu equipo una versión de hace un año y medio. En 0.1.8, se actualizó el requisito de la biblioteca de subtítulos a una serie compatible con 3.14, y la degradación se detuvo ahí.

El mecanismo sigue existiendo. Si el instalador no encuentra un componente necesario para tu sistema, retrocede silenciosamente a 0.0.2 de la misma manera. En las versiones recientes, ese componente es el motor onnxruntime, que se utiliza para detectar tipos de archivo. En Mac, se distribuye así: para Python 3.12, macOS 11 y versiones posteriores; para 3.13, macOS 13; para 3.14, solo Apple Silicon con macOS 14 o posterior. Si tu Mac no cumple esos requisitos, incluso el comando básico pip install markitdown instala 0.0.2. En una prueba en un Mac con procesador Intel y Python 3.14 a través de Rosetta ocurrió exactamente eso: «Successfully installed», sin advertencias y con 0.0.2 instalado.

Los Mac con procesador Intel tienen otra complicación. Desde junio de 2026, la biblioteca cryptography que se instala para leer PDF se publica sin una versión precompilada para este procesador, así que el instalador intenta compilarla desde el código fuente. Añade la opción --prefer-binary al comando y usará la versión anterior, que sí tiene un paquete precompilado. En las pruebas con Python 3.13 en Intel, se instaló 0.1.8 y se abrió el PDF. La opción instala cryptography 48.0.1, que tiene tres vulnerabilidades conocidas: en el descifrado de PKCS#7 y en la verificación de la cadena de certificados. MarkItDown solo la usa para descifrar PDF cifrados, y la lectura de documentos no llega a esas partes.

Con Python 3.15, la degradación ocurre por dos motivos. La versión 0.1.8 declara compatibilidad solo desde 3.10 hasta 3.14, y todavía no hay un motor para 3.15. La resolución del instalador para 3.15 lo confirma: tanto el comando básico como el comando con formatos instalan el mismo 0.0.2.

Una advertencia de degradación tiene este aspecto; aparece una línea por cada opción adicional del comando:

WARNING: markitdown 0.0.2 does not provide the extra 'all'

La línea se pierde entre decenas de líneas de descarga y no dice nada sobre la versión que la sustituye. Con un comando básico, sin opciones adicionales, ni siquiera hay una advertencia. El informe final es optimista: «Successfully installed».

Instalar sin opciones adicionales tampoco es una solución. El paquete básico se instala, pero no puede abrir 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]'

La propia herramienta recomienda [all] y, con la versión 0.1.8, ese consejo vuelve a funcionar con Python 3.14 y 3.12. Aun así, es mejor indicar los formatos por nombre: [all] añade unos quince paquetes más y cerca de 55 megabytes, incluida una biblioteca de Azure preliminar y precisamente la cadena de dependencias de YouTube que ya hizo fallar la instalación una vez.

El instalador se ocupa por sí solo de la versión preliminar de Azure. Normalmente, pip omite las versiones preliminares, pero en este caso el requisito indica explícitamente una versión preliminar, así que la instala. Se probaron cuatro versiones de pip, de la 23.2 a la 26.2, con Python 3.12; todas seleccionaron 0.1.8.

Atención

Inmediatamente después de la instalación, ejecuta markitdown --version. Solo lleva cinco segundos y es la única forma de saber si instalaste lo que pediste. El mensaje de instalación correcta no significa nada en este caso.

En agosto, al reinstalarlo en otro entorno limpio, se obtuvo el mismo resultado: 0.0.2 y la palabra «Successfully».

Conviene conocer de antemano algunos detalles prácticos.

Ocupa bastante espacio: la instalación básica ocupa 143 megabytes; con cuatro formatos, 303. El componente más pesado, de 81 megabytes, es el detector de tipos de archivo, que se instala incluso con la instalación básica. No importa en un portátil, pero sí en una función en la nube con un límite de tamaño.

No cuentes con los mirrors como alternativa. Un mirror probado proporcionó un índice y los archivos de MarkItDown estaban presentes, pero faltaba una dependencia necesaria, así que la instalación falló tanto con Python 3.14 como con 3.12.

La instalación es un problema menor comparado con el principal. Mucho más a menudo, una IA produce disparates porque lo que entró en su ventana de contexto era incorrecto, o estaba representado de forma incorrecta. La capacidad de decidir qué darle a un modelo antes de una tarea se llama ingeniería de contexto, y preparar documentos forma parte de ella.

¿Cómo muestra MarkItDown el texto convertido de un documento?

Idea clave

Un comando en la terminal: el nombre del programa y la ruta del archivo. De forma predeterminada, el resultado se muestra en la ventana, así que puedes guardarlo directamente en un archivo. Hay tres métodos: mostrarlo en la consola, escribirlo con una opción o pasar el archivo como flujo. Para incorporarlo a tus propios scripts, hay un envoltorio de Python de tres líneas que también acepta URL.

La opción más breve:

markitdown dogovor.docx

El texto aparece en la terminal. Para guardarlo en un archivo, hay dos formas:

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

La diferencia es insignificante en Mac y Linux, pero importa en Windows: redirigir con > puede hacer que el programa se bloquee si la salida contiene texto cirílico.

También puedes pasar un archivo como flujo; en ese caso, resulta útil indicar la extensión:

cat dogovor.docx | markitdown -x docx

Estas son las principales opciones de la ayuda de la versión 0.1.8:

OpciónQué hace
-o, --outputescribe el resultado en un archivo en lugar de mostrarlo en la ventana
-x, --extensionindica la extensión cuando el archivo se pasa como flujo
-m, --mime-typeindica el tipo de contenido
-c, --charsetindica la codificación de caracteres
-d, --use-docintelprocesa el archivo mediante el servicio de pago en la nube de Microsoft
-v, --versionmuestra la versión

La misma ayuda incluye otras tres opciones útiles que se probaron: --list-plugins muestra los complementos instalados, -p los activa para una ejecución concreta y --keep-data-uris conserva en la salida las imágenes insertadas en el documento (de forma predeterminada se recortan). Las demás son configuraciones de los servicios en la nube de Microsoft.

El envoltorio de Python ocupa tres líneas:

from markitdown import MarkItDown

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

La misma llamada acepta una URL. Una página sencilla devolvió texto limpio de 167 caracteres, incluido un encabezado y un enlace, sin el menú ni el pie de página:

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

¿Qué formatos entiende MarkItDown y qué significa eso en realidad?

Idea clave

La descripción del proyecto enumera una amplia variedad: archivos de Office, PDF, imágenes, audio, archivos comprimidos, enlaces de YouTube y libros electrónicos. Hay tres elementos que no funcionan como su nombre sugiere. La versión gratuita no reconoce texto en imágenes. El audio se envía a un motor en inglés. Los archivos que no se pudieron analizar desaparecen de los archivos comprimidos sin aviso.

Una tabla resumida de lo que se afirma y lo que sucede en la práctica.

FormatoIndicadoQué ocurre en realidad
Word, Excel y presentacionessífunciona correctamente; este es su punto fuerte
CSV, JSON, XML y HTMLsífunciona, pero CSV tiene una trampa con el delimitador
PDFsídepende del diseño: se ordena bien una columna; dos columnas se desmoronan
Imágenes«metadatos y reconocimiento»no reconoce texto; solo extrae metadatos o usa un modelo de visión de pago
Audio«transcripción del habla»se envía al motor en inglés de Google
Archivos ZIP«recorre el contenido»todo lo que no puede analizar desaparece en silencio
Enlaces de YouTubesísolo enlaces completos con el formato '<OFFICIAL_URL>'?...
Libros electrónicos EPUBsífunciona

Veamos tres elementos en detalle.

Imágenes. La descripción incluye la palabra OCR, así que la gente espera que el programa lea el texto de una foto. No lo hace. Lee los metadatos con un programa independiente, exiftool, y, si conectas un modelo de visión con tu propia clave, puede enviarle la imagen para que la describa.

Audio. Se puede transcribir el habla, pero no se indica el idioma y, de forma predeterminada, el motor espera inglés. Además, llama al endpoint gratuito no oficial de Google, limitado a unos cincuenta pedidos al día por clave.

Archivos comprimidos. El programa descomprime los ZIP y recorre los archivos que contienen, concatenando los resultados. Si no puede analizar un archivo, captura y descarta el error. El archivo simplemente no aparece en el resultado, y no te enteras.

¿Qué ocurre con los documentos que contienen texto cirílico?

Idea clave

Se procesaron tres archivos con texto cirílico mediante la última versión: un contrato de Word, una hoja de inventario de Excel y una presentación. En los tres se conservaron intactos el texto cirílico y el número. Hay tres casos problemáticos: archivos CSV que usan punto y coma, formato de moneda en celdas de Excel y la salida de la consola de Windows. Los tres tienen una solución alternativa.

Los archivos que siguen se crearon específicamente para las pruebas; sus datos son ficticios.

La hoja de inventario de Excel salió igual de limpia, y el nombre de la hoja se convirtió en encabezado:

## Stock
| Item | In stock | Reserved | Available |
| --- | --- | --- | --- |
| Coffee beans, kg | 420 | 38 | 382 |
| Loose-leaf tea, kg | 180 | 52 | 128 |

La presentación se convirtió en texto; los números de diapositiva aparecen como anotaciones y los títulos de las diapositivas, como encabezados. El texto cirílico también está intacto aquí. Es falso afirmar de forma general que «MarkItDown no entiende el cirílico».

Veamos ahora los tres casos problemáticos.

CSV con punto y coma. Se procesaron dos exportaciones de factura idénticas para compararlas. La que usaba comas produjo una tabla de cuatro columnas correcta. Con punto y coma, toda la línea queda en una sola celda.

Toda la línea terminó en una celda. La codificación se reconoció correctamente y no hubo ningún error; la opción -c no ayuda. El modelo recibirá esta tabla y no entenderá qué valor es el importe y cuál es el estado. Exporta de nuevo el archivo con un delimitador de coma explícito y la codificación correcta, conservando el original intacto. No sustituyas globalmente puntos y comas: los separadores dentro de texto entrecomillado y las comas decimales pueden formar parte del valor. Si no puedes volver a exportar, lee el original con su delimitador real y escribe otro CSV con un escritor que preserve entrecomillado y valores. Antes de analizar, compara columnas, filas y totales de control con la exportación original.

Formato de moneda en Excel. El símbolo de moneda se guarda en la configuración de visualización de la celda y no forma parte del valor. Los responsables del proyecto confirmaron la causa. En una lista de precios o una factura, esto importa: el modelo verá números sin saber a qué moneda corresponden.

Consola de Windows. Con archivos que contienen caracteres no latinos, el programa puede fallar.

El rastro del error muestra la codificación cp1251, es decir, la consola de Windows. El documento se analiza correctamente; lo que falla es mostrar el resultado en la terminal. Hay dos soluciones alternativas:

markitdown dogovor.docx -o dogovor.md
$env:PYTHONUTF8 = "1"; markitdown dogovor.docx > dogovor.md

La primera evita por completo la consola; la segunda hace que Python escriba en UTF-8. Se han enviado al menos seis correcciones para la propia herramienta: algunas propuestas se cerraron sin fusionarse y las demás siguen abiertas. Así que hay que recurrir a una solución alternativa.

En los PDF aparece un cuarto síntoma: secuencias como (cid:1090) en lugar de letras. Esto significa que el archivo tiene una tabla de fuentes no estándar y que no se pudieron decodificar sus caracteres. No tiene sentido procesar ese documento con MarkItDown; necesitas otra herramienta.

¿Por qué un PDF sale hecho un desastre?

Idea clave

Un PDF no contiene estructura, sino caracteres con coordenadas en la página. El texto de una sola columna suele ordenarse razonablemente bien. Dos columnas se convierten en un caos: se unen líneas de columnas distintas, las palabras se pegan y el diseño se transforma en tablas que no estaban en el documento. La herramienta no identifica encabezados en PDF; así lo demuestran tanto el código fuente como mediciones independientes.

Para probarlo, se procesó un artículo científico de dos columnas de 2.16 megabytes. El código de salida fue cero; tras 0.9 segundos, el resultado contenía 88,000 caracteres, casi todos disparates. Ochenta y ocho mil caracteres dan la impresión de que todo funcionó. Eso es, hasta que abres el archivo:

|     | Hybrid |          | OCR-LLM     |     | Framework  |
| --- | ------ | -------- | ----------- | --- | ---------- |
...
Informationextractionfromcopy-heavydoc-
5202 tcO 11  ]LC.sc[  1v83101.0152:viXra

Fallaron tres cosas al mismo tiempo. El diseño de dos columnas se convirtió en tablas que no aparecen en el artículo. Las palabras se pegaron sin espacios. La última línea es una barra lateral vertical de la página, extraída al revés.

Luego vino la parte divertida. El artículo de prueba resultó ser precisamente el trabajo que midió MarkItDown y lo comparó con otras herramientas. La herramienta convirtió el párrafo que informaba de sus propias mediciones en esto:

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-

Las columnas izquierda y derecha se unen línea por línea. Un modelo al que se le dé esto leerá la mitad de una frase de un párrafo y la mitad de otra.

La causa es técnica y sencilla. Word indica explícitamente «esto es un encabezado» y «esto es una celda de tabla». Un PDF indica «esto es un carácter» y «estas son sus coordenadas en la página». Reconstruir la estructura a partir de coordenadas es una tarea independiente y difícil, y MarkItDown apenas lo intenta. El código fuente del análisis de PDF no detecta encabezados: si una página no se reconoce como formulario o tabla, todo el documento pasa por una extracción básica de texto.

Los usuarios lo notifican con regularidad en el repositorio del proyecto, también en artículos científicos y tablas.

La herramienta no encuentra ni un solo encabezado en los PDF, tal como muestra su código fuente.

La cifra «MarkItDown alcanza una precisión del 82 %» circula por Internet sin metodología alguna. Rastrearla hasta la fuente original no lleva a ninguna parte: la cadena de enlaces termina en una página que no carga. No se puede considerar una medición.

¿Qué ocurre con un contrato escaneado?

Idea clave

Nada. Se procesa el archivo, el programa informa que todo salió bien y el resultado contiene cero caracteres. Sin errores ni advertencias. Se probó dos veces con un PDF creado a partir de una imagen y, por separado, con la propia imagen; el resultado fue el mismo. La herramienta extrae texto que ya está almacenado como texto en el archivo; la versión gratuita no reconoce texto en imágenes.

Este comportamiento es más peligroso que los demás porque no parece un fallo.

Para probarlo, se creó un PDF a partir de una imagen con texto; es decir, exactamente lo que se obtiene al fotografiar o escanear un contrato. Se repitió la ejecución para descartar el azar:

EntradaCódigo de salidaCaracteres en la salidaMensaje de error
PDF creado a partir de una imagen, ejecución 100ninguno
PDF creado a partir de una imagen, ejecución 200ninguno
Imagen PNG directamente01 (salto de línea)ninguno

Cero caracteres y cero errores, dos veces seguidas. Un código de salida cero significa «todo salió bien», y cualquier script que compruebe el éxito por el código de salida contará el documento como procesado. Luego la salida vacía llega al modelo, el modelo no ve nada y empieza a inventar una respuesta de la nada.

Atención

Si procesas documentos por lotes, comprueba la longitud de la salida. El código de salida no te dirá nada: un archivo vacío con código de salida cero es lo que produce un escaneo.

Hay dos soluciones alternativas y ambas son de pago. La primera es la opción -d, que envía el documento al servicio de reconocimiento en la nube de Microsoft; el texto de ayuda de la opción indica explícitamente que se necesita un endpoint de servicio válido. La segunda es un paquete adicional independiente que envía las páginas a un modelo de visión con tu clave, así que pagas al proveedor del modelo por cada página. Desde abril de 2026, en una discusión abierta sobre el segundo método se informa de que solo se procesa la primera página de un escaneo de varias páginas.

También puedes ejecutar un modelo de reconocimiento en tu propio equipo, pero eso es otro proyecto.

Para un documento puntual, es más fácil abrirlo y copiar el texto manualmente. Para un flujo de escaneos, necesitas una herramienta con reconocimiento integrado.

¿Puedes simplemente subir el archivo a un conversor en línea?

Idea clave

Técnicamente, sí: hay muchos dominios con ese nombre. Pero ninguno está afiliado a Microsoft. La afirmación «el archivo nunca sale del navegador» se puede comprobar con un clic, y no siempre es cierta. Antes de subir un contrato o una exportación con nombres de personas, comprueba por ti mismo adónde va el archivo.

«MarkItDown en línea» es una de las sugerencias de búsqueda más comunes y hay sitios que lo ofrecen. La herramienta original de Microsoft no tiene sitio web; solo está disponible como programa que instalas tú. Cualquier cosa con un nombre parecido que se abra en un navegador la creó otra persona.

Puedes comprobar un servicio así en un minuto: abre las herramientas de desarrollo en la pestaña de solicitudes de red, sube cualquier archivo inocuo y comprueba si se envía a un servidor. Si es así, la afirmación de que el procesamiento se hace en el navegador es falsa, por segura que suene en la sección de preguntas frecuentes.

Atención

Un contrato, una factura o una exportación con nombres de empleados contiene datos personales. Si envías ese archivo a un sitio web de terceros, eres tú quien lo ha transmitido. Una utilidad local evita ese problema: el archivo no sale de tu equipo.

Por eso se valora MarkItDown en lugares donde los documentos no pueden enviarse fuera de la organización. En una discusión, alguien describió su situación: en su portátil de trabajo estaban prohibidos los programas arbitrarios, pero se permitían las bibliotecas de Python, y la utilidad local resultó ser la única opción disponible.

¿Cuánto ahorra realmente MarkItDown?

Idea clave

La ventaja principal es que el modelo puede entender el documento. También hay una diferencia de tamaño: al comparar el peso del marcado dentro de los archivos de Office con el tamaño del texto extraído, se observa una reducción de entre cinco y siete veces. También elimina todo lo que el modelo no necesita leer: descripciones de fuentes, márgenes y colores de celdas.

Un archivo de Office es un archivo comprimido estructurado que contiene marcado. Si descomprimes los tres archivos de prueba y comparas el tamaño de la parte con contenido con el de la salida, obtienes esto:

ArchivoMarcado internoTexto extraídoVeces menor
Contrato de Word3,701 bytes711 bytes5.2
Hoja de cálculo de Excel1,561 bytes262 bytes6.0
Presentación2,203 bytes296 bytes7.4

Los archivos son pequeños; las proporciones serán diferentes en los más grandes y no existe una cifra única de ahorro. Cuando veas cifras redondas en artículos comparativos, pregunta cuál fue la metodología.

Los propios desarrolladores también hablan del ahorro: la descripción del proyecto dice específicamente que las convenciones de Markdown son muy económicas en caracteres. Es cierto, pero no debería ser el principal argumento de venta. La diferencia entre «el modelo recibió tres mil caracteres en vez de quince mil» y «el modelo recibió una estructura clara en vez de un revoltijo» es de otro orden. Lo primero ahorra dinero; lo segundo determina si la respuesta tendrá sentido.

Si te preocupa el uso de contexto, se trata por separado en Adónde van los tokens en Claude y cuántos incluye cada plan.

¿Cómo conectar MarkItDown al agente de inteligencia artificial Claude Code mediante MCP?

Idea clave

El proyecto tiene un paquete independiente que ejecuta un servidor MCP con un solo comando: indicas la ruta de un archivo y recibes texto. En septiembre de 2026, el paquete por fin se actualizó a 0.0.1a7, pero la compilación sigue siendo preliminar y envía telemetría a Microsoft de forma predeterminada. El comando de abajo lo conecta mediante uv, fija la versión, usa Python 3.12 y desactiva la telemetría. No tiene autenticación y, según su propia documentación, el servidor puede leer cualquier archivo disponible para el usuario que lo inició.

MCP es una forma de darle a una IA una herramienta externa que pueda usar por sí misma. Para conocer el mecanismo y otros servidores, consulta el análisis de servidores MCP para Claude Code.

El servidor de MarkItDown ofrece exactamente una herramienta: convertir un documento en texto. Acepta una ruta de archivo local, una URL de página o datos incrustados directamente en la solicitud.

Se conecta a Claude Code con un solo comando, fijando la versión del servidor. Necesitas el gestor de paquetes 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

La respuesta al segundo comando debería mostrar «Connected» para markitdown. El primer inicio descarga unos setenta paquetes y tarda hasta un minuto; después, el servidor se inicia en uno o un segundo y medio.

Estas son las salvedades, comprobadas manualmente.

La compilación 0.0.1a7 se publicó el 14 de septiembre de 2026. Antes de eso, el servidor llevaba más de un año estancado en 0.0.1a4, desde mayo de 2025. El número de la última versión sigue correspondiendo a una versión preliminar.

No se instala en todos los sistemas que tengan una versión reciente de Python. El motor onnxruntime del que depende está disponible para Python 3.14 en Mac solo en equipos con Apple Silicon y macOS 14 o posterior, así que la instalación falla en Mac con procesador Intel y en macOS 13 o anterior con Python 3.14. En un Mac con Apple Silicon, se ejecutó el servidor con Python 3.14, 3.13 y 3.12, y se instaló en las tres versiones. El comando usa UV_PYTHON=3.12: hay paquetes precompilados para Windows, Linux y Mac con Apple Silicon, y si no tienes esa versión de Python, uv la descargará. También hay una salvedad para los Mac con procesador Intel: uv compilará la biblioteca cryptography desde el código fuente porque desde junio de 2026 no hay paquetes precompilados para Intel. La instalación tarda más y puede fallar.

La versión de MarkItDown instalada depende de la versión de uv. Desde MarkItDown 0.1.6, la opción [all] requiere una biblioteca de Azure preliminar: uv 0.12 y posteriores la instalan, junto con la versión más reciente de MarkItDown, 0.1.8; las versiones anteriores de uv degradan a 0.1.5. Comprueba tu versión de uv con uv --version.

Se envían dos cosas fuera del equipo. La primera es la telemetría: en Mac y Linux, el motor onnxruntime dentro del servidor la envía a Microsoft de forma predeterminada. La variable ORT_DISABLE_TELEMETRY=1 del comando la desactiva. En las pruebas, sin ella, el servidor se conectó a los endpoints de telemetría de Microsoft. Con la variable configurada, no hubo ninguna conexión mientras se procesaban archivos del disco.

La segunda es el audio. El servidor envía archivos WAV, MP3, M4A y MP4 al servicio de reconocimiento del habla de Google para transcribirlos mediante HTTP normal, sin cifrado. Es mejor no enviarle grabaciones de conversaciones con clientes.

Un documento grande no cabe en el servidor. Una discusión abierta describe una respuesta del servidor de 51,000 tokens que alcanzó un límite de 25,000 tokens; además, la herramienta no divide los archivos en fragmentos.

Y la seguridad. La documentación del propio paquete lo dice con claridad:

El servidor no admite autenticación y se ejecuta con los permisos del usuario que lo inició. La herramienta de conversión puede utilizarse para leer cualquier archivo accesible al usuario del servidor, o cualquier dato de la red.

— Microsoft, descripción del paquete markitdown-mcp (traducida), https://github.com/microsoft/markitdown/tree/main/packages/markitdown-mcp

En otras palabras, un agente con esta herramienta puede leer cualquier cosa que tú puedas leer. Es aceptable para trabajar en tu propio equipo. No debes exponer el servidor públicamente ni dárselo a un agente no confiable.

Atención

La documentación del proyecto no incluye una configuración específica para Claude Code: solo describe Claude Desktop y el inicio mediante un contenedor. Si encuentras en Internet una configuración lista para usar que se describa como «de la documentación oficial» para Claude Code, ten en cuenta que no existe tal configuración en el repositorio.

Para el trabajo habitual, es más fácil ejecutar el programa con un comando y poner el texto resultante en el proyecto. Así, el archivo queda junto a los demás materiales, donde el modelo puede consultarlo por su cuenta.

¿Cuándo es más honesto usar otra herramienta?

Idea clave

La regla es sencilla: si la estructura ya está registrada dentro del archivo, usa MarkItDown; es la opción más rápida y es gratuita. Si hay que reconstruir la estructura a partir de una imagen de la página, usa una herramienta con modelos de diseño. Docling maneja tablas y diseños complejos, MinerU maneja fórmulas y varias columnas, y los servicios de pago en la nube ayudan cuando no hay tiempo para complicarse.

Una comparación por tareas; las estrellas de GitHub no tienen nada que ver:

HerramientaVentajaQué sacrificas
MarkItDownarchivos de Office, rapidez y gratuidadno puede manejar PDF complejos ni escaneos
Doclingtablas y diseños mediante modelos especializadosdecenas de segundos por documento
MinerUvarias columnas, fórmulas y tablas densasinstalación más difícil
Markergran precisión, fórmulas e ilustracionesrequiere una tarjeta gráfica y su licencia limita los ingresos
unstructureddevuelve la estructura del documento en fragmentos con descripcionesel resultado es más difícil de usar
Analizadores en la nubeno requieren configuracióncuestan dinero y envían el documento fuera del equipo

Hay un detalle sobre Marker que los artículos comparativos omiten. Desde julio de 2026, el código en sí tiene una licencia permisiva, mientras que los pesos del modelo tienen una licencia independiente con un umbral: el uso es gratuito si los ingresos de tu empresa no superaron los cinco millones de dólares y no captó esa misma cantidad en financiación durante el año anterior. Otra cláusula prohíbe su uso a cualquiera que esté creando un producto competidor. Esto no afecta a la mayoría de los lectores, pero es un motivo para que una empresa en crecimiento lea la licencia antes de adoptarlo.

De ahí se desprende un flujo de trabajo práctico de cuatro pasos:

  1. Procesa todo con MarkItDown: es gratuito e instantáneo.
  2. Abre el resultado y comprueba su tamaño.
  3. Si el texto tiene sentido, la tarea está hecha; no hace falta nada más.
  4. Si el resultado es un caos o está vacío, procesa ese archivo concreto con una herramienta más potente.

Así solo pagas en tiempo y complejidad por los documentos que lo necesitan.

¿Cómo integrar MarkItDown en tu flujo de trabajo?

Idea clave

La propia Anthropic enuncia la regla en las descripciones de sus skills: usa esta herramienta para leer un documento. No planifiques cambios basándote en ella. Estos son tres casos en que resulta útil desde la primera ejecución: analizar un lote de documentos similares, añadir una vez materiales de referencia permanentes a un proyecto de IA y preparar una exportación de un sistema contable para analizarla.

Anthropic usa MarkItDown en sus propias skills listas para trabajar con archivos de Office, y esas skills explican por completo el límite que deberías adoptar:

Inspección rápida de una hoja: markitdown file.xlsx. Las coordenadas de las celdas no están disponibles, así que no planifiques cambios basándote en esto.

— Anthropic, descripción de la skill para trabajar con tablas (traducida), https://github.com/anthropics/skills/blob/main/skills/xlsx/SKILL.md

En el texto se pierden las referencias a celdas y páginas, así que no puedes usarlo para modificar el archivo fuente. Estos son tres casos.

Un lote de documentos similares: actas, facturas, formularios y solicitudes. Ponlos en una carpeta y procésalos con una sola línea:

for f in dokumenty/*.docx; do markitdown "$f" -o "text/$(basename "$f" .docx).md"; done

Luego dale al modelo la carpeta de archivos de texto y pídele que reúna la información relevante en una tabla. Esto funciona con archivos digitales; los escaneos fallarán y los detectarás enseguida por su tamaño cero.

Materiales de referencia permanentes del proyecto: listas de precios, plantillas de contratos, políticas y descripciones de servicios. Conviértelos en texto una vez y guárdalos junto al proyecto. El modelo podrá leerlos con cada solicitud, así que no tendrás que adjuntar los archivos a la conversación cada vez. El artículo sobre cómo subir archivos a Claude explica en qué se diferencia de subir un archivo al chat.

Una exportación de un sistema contable. Una exportación de Excel de un programa de contabilidad o una cuenta bancaria se convierte en tabla en un tercio de segundo, y el modelo puede calcular con ella sin pasos intermedios. Comprueba que el CSV se haya exportado o leído con su delimitador real, entrecomillado y codificación; compara filas, columnas y totales de control antes de entregarlo al modelo. No normalices separadores con buscar y reemplazar. Indica además la moneda expresamente: un símbolo guardado solo en el formato de una celda Excel no sobrevive a la extracción.

Procesar PDF grandes en la terminal no está en esta lista. Es un asunto aparte relacionado con el uso de contexto, tratado en el artículo sobre PDF en Claude Code sin perder tokens. Si solo estás configurando tu espacio de trabajo, empieza por instalar Claude Code.

Para empezar ahora mismo, ejecuta pip install 'markitdown[pdf,docx,xlsx,pptx]', procesa el primer contrato de Word que encuentres y comprueba el tamaño del resultado. En medio minuto sabrás si funciona con tus archivos.

Preguntas frecuentes

¿MarkItDown es gratuito?

Sí. Tiene licencia MIT, sin restricciones para el uso comercial. Solo pagas por dos métodos opcionales: el reconocimiento en la nube de Microsoft mediante la opción -d y las descripciones de imágenes generadas por un modelo de visión con tu propia clave. Todo lo demás se ejecuta gratis en tu equipo.

¿Se envían datos a algún servidor?

Para la conversión habitual de archivos de Office y PDF, no: todo se procesa localmente. Hay tres excepciones: la transcripción de audio pasa por el servicio de Google, la opción -d envía el documento a la nube de Microsoft y las descripciones de imágenes se envían a un modelo con tu clave. Ninguno de estos métodos se activa automáticamente.

¿Por qué no encuentro el comando markitdown después de la instalación?

Lo más habitual es que el programa se haya instalado en un entorno que no está en la ruta de búsqueda. Comprueba la ruta completa del archivo dentro del entorno. Otro caso común es haberlo instalado para una versión de Python y llamarlo desde otra. Una trampa más: en versiones de Python anteriores a 3.10, se instala un paquete vacío sin que haya un error de instalación.

¿Qué debo hacer si veo (cid:1090) y cadenas similares en lugar de letras?

Se trata de una tabla de fuentes no decodificada dentro del PDF. La configuración no lo arreglará; debes procesar el archivo con otra herramienta, como Docling o MinerU. Para un documento puntual, copiar el texto manualmente desde un visor es más rápido.

¿Puedo procesar una carpeta entera de archivos a la vez?

No hay un modo de carpeta independiente, pero puedes hacerlo con un bucle de terminal de una línea: for f in papka/*.docx; do markitdown "$f" -o "$f.md"; done. Otra opción es poner todo en un ZIP y proporcionar el archivo comprimido: el programa procesará su contenido, pero los archivos que no pueda analizar desaparecerán sin aviso.

¿En qué se diferencia el resultado de copiar el texto a mano?

Conserva la estructura. Al copiar, obtienes texto plano en el que un encabezado no se distingue de un párrafo y una tabla se desarma. MarkItDown conserva encabezados, listas y tablas, así que el modelo puede distinguirlos. La diferencia es pequeña en un documento breve, pero decisiva cuando son veinte.

¿Puede MarkItDown abrir documentos protegidos con contraseña?

No. Un archivo protegido con contraseña no se abrirá y no puedes pasarle la contraseña al programa. Primero debes quitar la protección desde la aplicación que la aplicó.

Cuando quieras, conoce Ailoot.

Más detalles

Preguntas sobre MarkItDown

¿Puedo arreglar un CSV con punto y coma sustituyéndolos todos por comas?

No. Los textos entrecomillados y los formatos decimales pueden contener esos caracteres. Vuelve a exportar con el delimitador previsto o usa un lector y escritor de CSV con delimitador, codificación y entrecomillado explícitos. Compara columnas, filas y totales de control con el original.

¿Un código de salida cero significa que un PDF se convirtió de forma útil?

No. El ejemplo escaneado del artículo devolvió salida vacía sin error y un PDF complejo produjo texto ilegible. Abre el resultado y comprueba su longitud y estructura; usa una herramienta de reconocimiento o de análisis de maquetación si está vacío o corrupto.

Todos los artículos