ΤΕΥΧΟΣ 014  ·  18 ΟΚΤΩΒΡΙΟΥ 2026 RSS
CodeCity
ΓΝΩΣΗ № 0014

MarkItDown — το έγγραφο γίνεται Markdown πριν το διαβάσει ο βοηθός

Το MarkItDown της Microsoft παίρνει PDF, Word, Excel, PowerPoint, HTML, CSV, JSON, εικόνες, ήχο και συνδέσμους YouTube, και τα κάνει καθαρό Markdown μέσα στο δικό σου μηχάνημα, δωρεάν και χωρίς κλειδί. Στη δοκιμή μας ένα PDF 159.216 bytes έγινε κείμενο **1.685 tokens** σε 2,7 δευτερόλεπτα — με δύο παγίδες που πρέπει να ξέρεις: δεν κάνει οπτική αναγνώριση σε εικόνες, και σκάει σε κατεστραμμένα αρχεία αντί να τα προσπεράσει.

MarkItDown — το έγγραφο γίνεται Markdown πριν το διαβάσει ο βοηθός

Τι κάνει

Έχεις ένα PDF. Θέλεις ο βοηθός σου να το διαβάσει και να σου απαντήσει. Του το δίνεις, και το πρώτο που μαθαίνεις είναι ότι ο βοηθός δεν βλέπει σελίδες. Βλέπει κείμενο, και μάλιστα μετράει το κείμενο σε τεμάχια — τα tokens. Ένα δυαδικό αρχείο γεμάτο εντολές διάταξης είναι, για το μοντέλο, θόρυβος με λίγα ψήγματα νοήματος μέσα.

Το MarkItDown κάνει αυτή τη δουλειά πριν το αρχείο φτάσει στο μοντέλο. Διαβάζει PDF, Word, Excel, PowerPoint, HTML, CSV, JSON, XML, εικόνες, αρχεία ήχου, ακόμη και σύνδεσμο YouTube, και γυρίζει Markdown: κείμενο με απλή σήμανση, με # για τις επικεφαλίδες, ** για την έμφαση, κάθετες για τους πίνακες. Αυτή τη μορφή την καταλαβαίνουν όλα τα μοντέλα, με ελάχιστο κόστος ανάγνωσης.

Δύο πράγματα ξεχωρίζουν από την αρχή. Πρώτο: η μετατροπή γίνεται τοπικά, στο μηχάνημά σου, χωρίς κλειδί, χωρίς λογαριασμό, χωρίς να σταλεί τίποτα έξω. Δεύτερο: πίσω από το εργαλείο είναι η Microsoft — το αποθετήριο είναι το github.com/microsoft/markitdown, με άδεια MIT, 190.809 αστέρια, 14.193 forks, 737 ανοιχτά issues και περίπου 134 συνεργάτες. Άνοιξε στις 13 Νοεμβρίου 2024 και η τελευταία ενημέρωση ήταν στις 4 Οκτωβρίου 2026, δηλαδή είναι ζωντανό και συντηρείται.

Πρόσεξε ένα σημείο, γιατί εκεί κρύβεται το κόστος: το ίδιο αποθετήριο βγάζει δύο πακέτα. Το markitdown είναι το πρόγραμμα της γραμμής εντολών. Το markitdown-mcp είναι ο server που δίνει την ίδια δουλειά σε έναν βοηθό μέσα στη συζήτηση. Το δεύτερο είναι alpha, έκδοση 0.0.1a7, και θα το ξαναπώ παρακάτω με όλη τη σημασία της λέξης.

Για ποιον είναι

Για όποιον δίνει έγγραφα στον βοηθό του. Ένα τιμολόγιο, μια δήλωση, ένα άρθρο, ένα φύλλο Excel, μια σελίδα HTML που κατέβασες, ένα βίντεο που θέλεις να συνοψιστεί. Αν το κάνεις αυτό έστω και μία φορά την εβδομάδα, το εργαλείο κερδίζει τη θέση του.

Δεν χρειάζεται να ξέρεις προγραμματισμό. Η βασική χρήση είναι μία λέξη και ένα όνομα αρχείου, και το αποτέλεσμα είναι κείμενο που το διαβάζεις και με τα μάτια σου.

Δεν έχει νόημα όταν τα αρχεία σου είναι ήδη καθαρό κείμενο — δεν υπάρχει τίποτα να καθαριστεί. Και δεν λύνει το πρόβλημα των σκαναρισμένων σελίδων, δηλαδή φωτογραφιών από χαρτί: εκεί το πρόγραμμα δεν βρίσκει γράμματα, γιατί δεν ψάχνει με εικόνα αλλά με κείμενο. Τον λόγο και τη λύση τους εξηγώ στο τέλος.

Εγκατάσταση

Η εγκατάσταση γίνεται μία φορά, από οποιονδήποτε φάκελο, με το uv:

uv tool install --python 3.13 'markitdown[all]'

Έλεγχος ότι μπήκε σωστά:

markitdown --version

Σε εμάς γύρισε 0.1.8. Η έκδοση αυτή είναι της 21ης Σεπτεμβρίου 2026, το wheel της είναι 89.737 bytes, και θέλει Python από 3.10 έως 3.15 (PyPI).

Η λέξη [all] δεν είναι διακοσμητική. Βάζει μέσα όλα τα προαιρετικά κομμάτια, ώστε να ανοίγουν όλες οι μορφές αρχείων. Χωρίς αυτήν παίρνεις έναν στενό πυρήνα. Το τίμημα είναι ο χώρος στον δίσκο, και τον μέτρησα — θα τον δεις στην ενότητα του κόστους.

Σκοπός του άρθρου είναι να εγκαταστήσεις το εργαλείο σου. Η εγκατάσταση του MCP server είναι άλλο πράγμα και γίνεται μέσα σε κάθε βοηθό, στην επόμενη ενότητα.

Χρήση σε κάθε LLM

Από τη γραμμή εντολών ο δρόμος είναι ο πιο απλός: γράφεις markitdown και μετά τη διαδρομή του αρχείου, και το Markdown τυπώνεται στην οθόνη. Δεν χρειάζεται να το θυμάσαι από εδώ — οι πραγματικές εκτελέσεις είναι στην ενότητα «Δοκιμή», με νούμερα.

Για τους βοηθούς, ο δρόμος είναι ο MCP. MCP σημαίνει πρωτόκολλο πλαισίου μοντέλου· με απλά λόγια, ένας τυπικός τρόπος να δίνεις σε έναν βοηθό εξωτερικά εργαλεία, ώστε να τα καλεί μόνος του μέσα στην κουβέντα. Ο server του MarkItDown εκθέτει ένα και μόνο εργαλείο, το convert_to_markdown. Του δίνεις ένα αρχείο, σου γυρίζει Markdown.

Μία πράξη πριν από όλα: ο server τρέχει μέσω uvx, που κατεβάζει τα πακέτα την πρώτη φορά και μετά τα κρατά. Η πρώτη κρύα εκτέλεση είναι αργή — δες τα νούμερα στη «Δοκιμή» πριν νομίσεις ότι κόλλησε.

Claude Code

Μία γραμμή, από τον φάκελο του project:

claude mcp add markitdown -- uvx markitdown-mcp

Αυτή είναι η εντολή που χρησιμοποιήσαμε. Προσθέτει τον server και τον κάνει διαθέσιμο στη συζήτηση. Μετά από αυτό, ζητάς από τον βοηθό να διαβάσει ένα αρχείο και το convert_to_markdown αναλαμβάνει.

Codex CLI

Στο Codex η ρύθμιση δεν είναι JSON. Γράφεται σε αρχείο TOML με όνομα config.toml, μέσα στον φάκελο .codex του προφίλ σου:

[mcp_servers.markitdown]
command = "uvx"
args = ["markitdown-mcp"]

Αυτό δεν το τρέξαμε, και το λέω καθαρά: δεν έχουμε Codex CLI σε αυτό το μηχάνημα. Το σχήμα είναι από την τεκμημένη διάταξη των αρχείων του Codex, όχι από μέτρηση.

Cursor

Στο Cursor η ρύθμιση μπαίνει σε αρχείο με όνομα mcp.json. Στον φάκελο .cursor του project για ένα μόνο project, ή στον φάκελο χρήστη για όλα:

{
  "mcpServers": {
    "markitdown": {
      "command": "uvx",
      "args": ["markitdown-mcp"]
    }
  }
}

Ίδιο σχήμα με το Claude Code, ίδια εντολή. Και αυτό δεν το τρέξαμε σε πραγματικό Cursor — δεν τον έχουμε εδώ. Είναι η καθιερωμένη θέση της ρύθμισης για αυτόν τον client.

Ο δρόμος του HTTP

Αν θέλεις ο server να ακούει σε διεύθυνση αντί να μιλά από την τυπική είσοδο και έξοδο:

uvx markitdown-mcp --http --host 127.0.0.1 --port 3001

Τον δηλώνεις μετά στους clients ως HTTP server στη διεύθυνση αυτή. Δική μου εκτίμηση είναι το πώς ακριβώς γράφεται η διεύθυνση σε κάθε client· αυτό που μετρήσαμε είναι ότι ο server σηκώνεται και απαντά.

Πού κερδίζει, πού χάνει

Κερδίζει στο πρώτο πρόβλημα κάθε βοηθού: πώς διαβάζει ένα έγγραφο. Το λύνει με μία εντολή, δωρεάν, τοπικά, χωρίς κλειδί.

Κερδίζει γιατί αντικαθιστά δέκα βιβλιοθήκες με ένα εργαλείο. Για κάθε μορφή αρχείου υπάρχει ξεχωριστή λύση έξω — μία για PDF, μία για φύλλα Excel, μία για παρουσιάσεις. Εδώ μία εντολή τα καλύπτει όλα.

Και κερδίζει γιατί η δουλειά γίνεται πριν φτάσει η ύλη στο μοντέλο. Το πλαίσιο της συζήτησης δεν πληρώνει σήμανση διάταξης, πληρώνει κείμενο. Τα 1.685 tokens για το PDF μας είναι η απόδειξη.

Χάνει γιατί ο δρόμος του MCP είναι alpha — 0.0.1a7, του Σεπτεμβρίου 2026 — την ώρα που ο πυρήνας είναι ώριμος. Το a στη μέση της έκδοσης σημαίνει ότι το πράγμα είναι προδοκιμαστικό και μπορεί να αλλάξει κάτω από τα πόδια σου.

Χάνει στα 140 έως 323 MB στον δίσκο, ανάλογα με τον δρόμο που θα διαλέξεις.

Χάνει γιατί δεν διαβάζει εικόνες ούτε σκαναρισμένα PDF χωρίς υπηρεσία της Microsoft με χρέωση.

Και χάνει γιατί πνίγεται και στα δύο άκρα: σε ιστοσελίδες που φρουρούν τον εαυτό τους από ρομπότ, και σε αρχεία που έχουν πειραχτεί. Στις δύο επόμενες δοκιμές τα δείχνω.

Τώρα η διαφορά από ό,τι έχουμε καλύψει σε αυτή τη στήλη. Το Context7 φέρνει τεκμηρίωση βιβλιοθηκών. Το Basic Memory κρατά ό,τι του πεις. Το ένα σου δίνει έτοιμη γνώση άλλων, το άλλο φυλάει τη δική σου — κανένα από τα δύο δεν στρώνει ένα δικό σου PDF για να το διαβάσει ο βοηθός. Εκεί παίζει μόνο του το MarkItDown, και είναι η τέταρτη καταχώρηση στη στήλη της γνώσης.

Δοκιμή

Ό,τι ακολουθεί το τρέξαμε σε Windows, με uv, χωρίς κλειδιά, με μηδέν κόστος. Τρία τεστ και τέσσερις παγίδες.

Η εγκατάσταση έγινε με την εντολή της ενότητας, με Python 3.13. Έλεγχος: markitdown --version έδωσε 0.1.8. Δεν ζήτησε τίποτα άλλο.

Τεστ ένα, HTML. Φτιάξαμε δικό μας αρχείο με επικεφαλίδα, μία έντονη λέξη και έναν πίνακα, και το τρέξαμε:

markitdown sample.html

Το αποτέλεσμα ήταν σωστό Markdown: επικεφαλίδα με #, η έντονη λέξη με **, ο πίνακας με κάθετες. Χρόνος: 1,9 δευτερόλεπτα.

Τεστ δύο, PDF 159.216 bytes:

markitdown C:/Users/user/Downloads/declaration-1.pdf

2,7 δευτερόλεπτα, 1.905 χαρακτήρες, 1.685 tokens. Αυτό είναι το όλο νόημα του εργαλείου σε ένα νούμερο: το δυαδικό αρχείο με τα δεκάδες χιλιάδες bytes δεν μπήκε ποτέ στη συζήτηση. Μπήκε το κείμενο, και ήταν λίγο.

Τεστ τρία, ο δρόμος του MCP. Το μπλοκ που δίνεις σε κάθε client είναι το ίδιο:

{"mcpServers": {"markitdown": {"command": "uvx", "args": ["markitdown-mcp"]}}}

Τι μετρήσαμε στη χειραψία. Η πρώτη κρύα φορά πήρε 16,8 δευτερόλεπτα για το initialize, γιατί κατέβαιναν εξαρτήσεις. Η ίδια κλήση μετά: 0,1 δευτερόλεπτο. Η λίστα εργαλείων έχει ένα και μόνο εργαλείο, το convert_to_markdown, και κλήση του με διεύθυνση τύπου file:// γύρισε σωστό Markdown.

Οι παγίδες

Αυτό είναι το χρήσιμο κομμάτι, και το μετρήσαμε με το κεφάλι.

Πρώτη: ο ιστός δεν είναι πάντα ανοιχτός. Δοκιμάσαμε να του δώσουμε διεύθυνση αντί για αρχείο:

markitdown https://en.wikipedia.org/wiki/Markdown

Πέφτει με «requests.exceptions.HTTPError: 403 Client Error: Forbidden». Η Wikipedia φρουράει τις σελίδες της από τον προεπιλεγμένο χρήστη που δηλώνει το εργαλείο λήψης. Δεν είναι σφάλμα του MarkItDown. Είναι τοίχος που σηκώνει ο ιστότοπος απέναντι στα ρομπότ. Για σελίδες θέλεις άλλο εργαλείο, όχι πείσμα.

Δεύτερη: το κατεστραμμένο αρχείο σε σταματά. Ένα PDF με πρόβλημα στη δομή του σκάει με «FileConversionException … PDFSyntaxError with message: No /Root object!». Δεν προσπερνά το αρχείο και συνεχίζει. Σταματά, και σε αφήνει να καταλάβεις μόνος σου ποιο από τα δέκα αρχεία σου έφταιγε.

Τρίτη: η έκδοση του MCP server γυρίζει κενή. Στη χειραψία, το πεδίο που δηλώνει την έκδοση του server έρχεται άδειο. Μη στηριχτείς σε αυτό το πεδίο για να ξέρεις τι τρέχει· δες την έκδοση του πακέτου.

Τέταρτη: η εικόνα δεν περνά από αναγνώριση χαρακτήρων. Δοκιμάσαμε ένα PNG 48.597 bytes. Το αποτέλεσμα ήταν ένας χαρακτήρας, ένα token. Δηλαδή το εργαλείο δεν διάβασε τίποτα από την εικόνα — γιατί δεν κάνει οπτική αναγνώριση από μόνο του. Αυτό το λέω και στην ενότητα του κόστους, γιατί έχει και χρέωση.

Τι δεν τρέξαμε, και το λέω καθαρά. Δεν τρέξαμε τους client Codex CLI και Cursor από την αρχή ως το τέλος, γιατί δεν τους έχουμε εδώ· η διαδρομή του MCP δοκιμάστηκε στη χειραψία με τον server, όχι μέσα σε κάθε πρόγραμμα. Δεν δοκιμάσαμε τον δρόμο του HTTP με πραγματικό client. Και δεν αγγίξαμε καθόλου τη διαδρομή της Azure, γιατί θέλει κλειδί — δεν έχουμε.

Τι κοστίζει

Η τιμή του εργαλείου είναι μηδέν. Άδεια MIT, ανοιχτός κώδικας, χωρίς κλειδί, χωρίς λογαριασμό, χωρίς σύνδεση για τη βασική δουλειά.

Και εδώ είναι το ταμείο που δεν το λένε τα περισσότερα άρθρα. Η εγκατάσταση με [all] κουβαλά μέσα της και τη σύνδεση με την Azure Document Intelligence της Microsoft (README). Αυτή είναι που διαβάζει σωστά τα σκαναρισμένα PDF και βγάζει κείμενο από εικόνα. Είναι υπηρεσία με χρέωση ανά σελίδα, δηλαδή θέλει κλειδί και λογαριασμό. Ο τοπικός δρόμος είναι δωρεάν, αλλά θέλει αρχεία που έχουν κείμενο μέσα τους. Δεν αγοράσαμε τίποτα, οπότε δεν ξέρω τιμές — ξέρω όμως ότι το όριο δεν το τραβά το εργαλείο, το τραβά το πορτοφόλι σου.

Ο χώρος στον δίσκο, από δικές μας μετρήσεις, όχι εκτιμήσεις. Η βάση πιάνει 140 MB. Με όλα τα extras 306 MB. Και το περιβάλλον που στήνει μόνο του το uvx markitdown-mcp φτάνει τα 323 MB. Πρακτικά: αν θέλεις σκέτο πρόγραμμα γραμμής εντολών, παίρνεις μόνο το markitdown και γλιτώνεις τα μισά.

Το κόστος σε πλαίσιο συνομιλίας είναι μία καταχώρηση στη λίστα εργαλείων, και τίποτα άλλο. Δεν καίει tokens μέχρι να το καλέσεις, και όταν το καλέσεις πληρώνεις το Markdown που σου επιστρέφει. Το PDF των 159.216 bytes κόστισε 1.685 tokens — χωράει άνετα σε κάθε παράθυρο συζήτησης, ακόμη και στα στενά.

Και ο χρόνος, που είναι το κρυφό κόστος των πρώτων λεπτών. Η πρώτη κρύα εκτέλεση μέσω uvx πήρε 25,1 δευτερόλεπτα, από τα οποία τα 24 πήγαν στη λήψη 53 πακέτων. Με ζεστή προσωρινή μνήμη, η ίδια δουλειά πέφτει στα 2 με 3 δευτερόλεπτα. Δηλαδή: μια φορά υπομονή, μετά αστραπή.

Τα δημόσια νούμερα, με την πηγή τους. Το markitdown έχει 14.569.559 λήψεις τον τελευταίο μήνα, 3.805.568 την εβδομάδα και 383.935 χθες (pypistats). Ο MCP server έχει 90.012 τον μήνα, 19.036 την εβδομάδα και 2.272 χθες (pypistats). Η απόσταση των δύο αριθμών είναι το πιο ενδιαφέρον στοιχείο: ο κόσμος εμπιστεύεται τον πυρήνα πολύ περισσότερο από τον server.

Και ο ρυθμός έκδοσης του πυρήνα: 0.1.8 στις 21 Σεπτεμβρίου, 0.1.7 στις 29 Ιουλίου, 0.1.6 στις 26 Μαΐου 2026. Σταθερός, όχι πυκνός — δύο μήνες μεταξύ εκδόσεων. Δεν είναι εργαλείο που αλλάζει κάθε βράδυ, και για ένα εργαλείο που μπαίνει στη ροή της δουλειάς σου αυτό είναι καλό νέο.

Ετυμηγορία

Το MarkItDown απαντά στο πιο συχνό εμπόδιο που συναντά ένας βοηθός: το έγγραφο. Δεν το κάνει με μαγεία, το κάνει με μία εντολή που δουλεύει τοπικά, δωρεάν, χωρίς κλειδί και χωρίς να στείλει τίποτα παραέξω.

Το δυνατό του σημείο είναι η αναλογία κόστους και οφέλους. 2,7 δευτερόλεπτα για να γίνει ένα PDF 159.216 bytes κείμενο 1.685 tokens αντί για ολόκληρο δυαδικό αρχείο, και μία μόνο καταχώρηση στο πλαίσιο της συζήτησης. Δεν υπάρχει άλλο σημείο στη ροή της δουλειάς με μεγαλύτερη απόδοση.

Οι αντιρρήσεις είναι συγκεκριμένες και τις ξέρεις ήδη από πάνω. Ο δρόμος του MCP είναι alpha, 0.0.1a7. Τα 140 έως 323 MB στον δίσκο. Και η εικόνα: ένας χαρακτήρας, ένα token σε PNG 48.597 bytes — χωρίς Azure, οι εικόνες και τα σκαναρισμένα PDF δεν διαβάζονται.

Αν δίνεις έγγραφα στον βοηθό σου, εγκατέστησέ το σήμερα. Πάρε το markitdown με όλα τα extras, δοκίμασέ το σε ένα δικό σου PDF, και άσε τον MCP server για αργότερα — είναι ο δρόμος που δεν έχει ωριμάσει ακόμη, και μπορείς να τον περιμένεις.

Score: 8.9/10.

Πηγές: αποθετήριο https://github.com/microsoft/markitdown · πακέτο πυρήνα https://pypi.org/project/markitdown/ · πακέτο MCP https://pypi.org/project/markitdown-mcp/ · στατιστικά λήψεων πυρήνα https://pypistats.org/packages/markitdown · στατιστικά λήψεων MCP https://pypistats.org/packages/markitdown-mcp · σύνδεση με Azure Document Intelligence https://github.com/microsoft/markitdown#readme