Si estás construyendo un pipeline de RAG, un asistente con IA, o cualquier flujo donde un LLM necesita leer documentos reales, ya chocaste contra el mismo muro: tus datos no están limpios. Son un Word de RRHH, un PDF del proveedor, un PowerPoint de la planificación del trimestre pasado. Nada de eso está listo para un LLM por defecto.
Microsoft tiene una respuesta para eso. MarkItDown es una librería Python open-source que convierte prácticamente cualquier formato de documento en Markdown limpio y estructurado — el formato que los LLMs realmente entienden bien. Nació dentro de Microsoft Research como herramienta interna para el framework multi-agente AutoGen, se publicó como open-source a fines de 2024 y desde entonces acumuló más de 91.000 estrellas en GitHub. La última versión estable, v0.1.5, salió el 20 de febrero de 2026.
¿Por qué Markdown para LLMs?
No es arbitrario. Markdown ocupa un lugar intermedio ideal: es cercano al texto plano (poco overhead de tokens), pero preserva la estructura del documento — encabezados, listas, tablas, enlaces. Los modelos mainstream están entrenados extensamente en Markdown y lo manejan de forma nativa. Cuando le mandás a un LLM un PDF crudo lleno de espacios en blanco desordenados y jerarquía perdida, la calidad de recuperación cae. Cuando le mandás Markdown limpio, el chunking, el embedding y las citas funcionan mucho mejor.
El trabajo de MarkItDown es tender ese puente entre el material fuente desordenado y un input confiable para el LLM.
Qué Convierte
La librería maneja una amplia variedad de formatos de entrada:
- Documentos Office: DOCX, PPTX, XLSX, XLS
- PDFs: vía pdfminer (PDFs con capa de texto; el OCR requiere el plugin)
- Imágenes: JPG, PNG — con descripción generada por LLM cuando proveés un cliente
- Audio: WAV, MP3 — vía transcripción de voz
- Contenido web: HTML, URLs
- Datos estructurados: CSV, JSON, XML
- Archivos comprimidos: ZIP (procesa el contenido de forma recursiva)
La arquitectura es limpia: cada formato tiene una clase DocumentConverter dedicada, registrada al arrancar. El procesamiento ocurre completamente en memoria — sin archivos temporales — lo que importa tanto para el rendimiento como para la seguridad.
Empezar en 4 Líneas
pip install 'markitdown[all]'
from markitdown import MarkItDown
md = MarkItDown()
result = md.convert("informe_q4.xlsx")
print(result.text_content)
Eso es todo. result.text_content te devuelve Markdown estructurado, preservando nombres de hojas, filas de tabla y cualquier encabezado.
Uso por CLI
MarkItDown también viene como herramienta de línea de comandos, útil para preprocesamiento en batch:
# Convertir un archivo individual
markitdown documento.pdf -o output.md
# Convertir y pipear a otra herramienta
markitdown reporte.docx | grep "## "
Descripción de Imágenes con un Cliente LLM
Para imágenes (y audio), MarkItDown puede llamar a un LLM para generar una descripción — útil cuando necesitás que las imágenes dentro de un documento sean semánticamente buscables:
from markitdown import MarkItDown
from openai import OpenAI
client = OpenAI()
md = MarkItDown(llm_client=client, llm_model="gpt-4o")
result = md.convert("diagrama_arquitectura.png")
print(result.text_content)
# Devuelve una descripción estructurada del contenido de la imagen
Esto funciona con cualquier cliente compatible con OpenAI — no estás atado a OpenAI específicamente.
El Plugin de OCR
Para PDFs y archivos Office que contienen imágenes con texto incrustado, el plugin markitdown-ocr extiende la librería base con OCR basado en LLM Vision:
pip install 'markitdown[all]' markitdown-ocr
from markitdown import MarkItDown
from openai import OpenAI
md = MarkItDown(
enable_plugins=True,
llm_client=OpenAI(),
llm_model="gpt-4o",
)
result = md.convert("contrato_escaneado.pdf")
print(result.text_content)
Si no se provee llm_client, el plugin carga pero silenciosamente cae de vuelta al extractor de texto estándar.
Servidor MCP: MarkItDown Dentro de Claude Desktop
Una de las incorporaciones más interesantes del ciclo v0.1.x: MarkItDown ahora viene con un servidor MCP oficial (markitdown-mcp), lo que significa que podés exponer la conversión de documentos como una herramienta dentro de Claude Desktop o cualquier cliente compatible con MCP.
En la práctica: en lugar de preprocesar archivos manualmente antes de mandárselos a Claude, tu configuración de MCP maneja la conversión al vuelo. Claude puede llamar a MarkItDown, obtener Markdown estructurado de vuelta, y razonar sobre el contenido sin que vos manejés el paso del pipeline de forma manual.
Dónde Encaja MarkItDown (y Dónde No)
MarkItDown es la herramienta correcta cuando necesitás conversión rápida y liviana para consumo por LLM — pipelines de RAG, indexación de documentos, asistentes de IA que necesitan leer archivos de negocio.
No es la herramienta correcta cuando:
- Necesitás formato de alta fidelidad para lectores humanos → usá Pandoc en cambio
- Tus documentos son PDFs científicos complejos con tablas, ecuaciones y desafíos de orden de lectura → Docling (IBM) los maneja mejor
- Estás construyendo un pipeline ETL de documentos a gran escala con 40+ conectores → Unstructured.io es más apropiado ahí
Saber dónde termina cada herramienta es tan útil como saber qué hace.
v0.1.5: Qué Cambió
La última versión (20 de febrero de 2026) atendió dos dependencias de seguridad:
- Actualiza
mammotha 1.11.0 para resolver CVE-2025-11849 - Actualiza
pdfminer.sixa 20251107 para resolver GHSA-wf5f-4jwr-ppcp
También en versiones recientes: cambio de minidom a defusedxml para el parsing de XML — otro movimiento de hardening de seguridad. Si venís corriendo una versión más antigua de MarkItDown en cualquier entorno que procesa documentos no confiables, vale la pena actualizar.
La Conclusión Práctica
El paso de preprocesamiento en pipelines de IA es aburrido, pero es donde se gana o se pierde mucha calidad. MarkItDown es una librería bien mantenida, con licencia MIT, de un equipo que la construyó para uso real en producción dentro de uno de los grupos de investigación de IA más grandes del mundo. Maneja la capa de conversión desordenada para que puedas enfocarte en lo que el LLM hace con los datos.
Instalala, apuntala a tu pila de documentos, y mandále a tu LLM algo con lo que realmente pueda trabajar.
pip install 'markitdown[all]'
GitHub: microsoft/markitdown
¿Cómo estás manejando el preprocesamiento de documentos en tus proyectos de IA? ¿Estás armando algo custom o te apoyás en librerías como esta? Compartí tu experiencia en los comentarios ![]()
