ΤΕΥΧΟΣ 010  ·  15 ΟΚΤΩΒΡΙΟΥ 2026 RSS
CodeCity
ΑΝΑΠΤΥΞΗ № 0010

DBHub — δύο εργαλεία και ένα κείμενο σύνδεσης, και ο βοηθός σου ρωτά τη βάση σου

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

DBHub — δύο εργαλεία και ένα κείμενο σύνδεσης, και ο βοηθός σου ρωτά τη βάση σου

Τι κάνει

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

Βάση δεδομένων είναι το πρόγραμμα που κρατά τα στοιχεία της δουλειάς σου σε γραμμές: τους πελάτες, τις παραγγελίες, τις πληρωμές, τους μισθούς. Δεν είναι αρχείο κειμένου. Είναι μια υπηρεσία με δική της γλώσσα, την SQL, και δικά της δικαιώματα πρόσβασης. Όταν λες «θέλω τους πελάτες που δεν πλήρωσαν», κάποιος πρέπει να γράψει αυτό το ερώτημα σωστά.

Ο όρος MCP σημαίνει «πρωτόκολλο για τη σύνδεση εργαλείων με έναν βοηθό». Σκέψου μια πρίζα. Ο βοηθός σου έχει μία υποδοχή, και κάθε εργαλείο που ταιριάζει στην υποδοχή τού δίνει νέες ικανότητες. Ο MCP server είναι η συσκευή που μπαίνει στην πρίζα.

Το DBHub είναι ένας τέτοιος MCP server, και κάνει μία δουλειά: ενώνει τον βοηθό σου με έξι διαφορετικές βάσεις — PostgreSQL, MySQL, MariaDB, SQL Server, Oracle, SQLite — από την ίδια διεπαφή. Λέει ο κατασκευαστής ότι είναι ελάχιστος, και εννοεί κάτι συγκεκριμένο: αντί για είκοσι οκτώ εργαλεία που γεμίζουν το μυαλό του βοηθού πριν καν ρωτήσεις, αυτός εδώ εκθέτει δύο (execute_sql και search_objects).

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

Πώς συνδέεται; Με ένα κείμενο σύνδεσης, που στον χώρο λέγεται DSN (Data Source Name). Είναι μία γραμμή που τα λέει όλα με τη σειρά: τι τύπου βάση είναι, με ποιον χρήστη μπαίνεις, στο ποιο μηχάνημα, στην ποια πόρτα, σε ποια βάση. Δες τη μορφή:

postgres://user:password@localhost:5432/mydb

Διαβάζεται: PostgreSQL, χρήστης user, κωδικός password, μηχάνημα localhost, πόρτα 5432, βάση mydb. Αν έχεις δουλέψει με βάσεις, την ξέρεις. Αν όχι, αυτή η μία γραμμή είναι όλη η ρύθμιση.

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

Για όποιον έχει δεδομένα σε βάση και περνάει τη μέρα του ρωτώντας τα με το χέρι.

Αν ανοίγεις ένα πρόγραμμα διαχείρισης βάσης και γράφεις ερωτήματα μόνος σου, ή αν στέλνεις μήνυμα στον προγραμματιστή για ένα απλό «πόσοι πελάτες αγόρασαν αυτόν τον μήνα», αυτό το εργαλείο είναι για σένα. Θα ρωτήσεις τον βοηθό σου, εκείνος θα δει τη δομή, θα γράψει το ερώτημα και θα σου δώσει τα αποτελέσματα.

Είναι χρήσιμο και για μια δεύτερη, πιο ήσυχη δουλειά: επαλήθευση. Έχεις ένα πρόγραμμα που συμπληρώνει τη βάση. Θέλεις να ξέρεις αν έγραψε ό,τι έπρεπε. Ρωτάς αντί να ανοίγεις το εργαλείο και να ψάχνεις.

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

Δεν έχει νόημα αν τα δεδομένα σου ζουν σε φύλλα εργασίας. Η SQL δεν είναι το δυνατό σημείο εκεί, και το DBHub δεν κάνει τίποτα γι’ αυτό.

Εγκατάσταση

Το πακέτο λέγεται @bytebase/dbhub, ζει στο npm, και η σταθερή έκδοση είναι η 1.5.0, δημοσιευμένη στις 9 Οκτωβρίου 2026. Η άδειά του είναι MIT, δηλαδή από τις πιο ελεύθερες που υπάρχουν: την χρησιμοποιείς και σε εμπορική δουλειά χωρίς υποχρέωση να δώσεις τον δικό σου κώδικα. Είναι γραμμένο σε TypeScript, από τη Bytebase.

Θέλει Node στο μηχάνημα, έκδοση 22.5.0 ή νεότερη, γιατί στηρίζεται στην ενσωματωμένη υποστήριξη SQLite του Node. Ελέγχεις τι έχεις, από όποιον φάκελο θέλεις:

node --version

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

npx -y @bytebase/dbhub@latest --demo --transport stdio

Αυτό το τρέχουμε παρακάτω και δείχνουμε τι απαντά. Το --transport stdio σημαίνει ότι ο server μιλάει με τον client μέσω της εισόδου και της εξόδου του τερματικού, χωρίς δίκτυο. Είναι η προεπιλογή, το γράφουμε για να είναι φανερό.

Για την πραγματική σου βάση, η μία γραμμή είναι αυτή:

npx @bytebase/dbhub@latest --transport stdio --dsn "postgres://user:***@localhost:5432/mydb"

Αν έχεις παραπάνω από μία βάσεις, ή αν θέλεις ρυθμίσεις ανά εργαλείο, το κάνεις με αρχείο TOML που περνάς με --config. Το --dsn και το --config δεν συνδυάζονται, διαλέγεις ένα. Οι κωδικοί μένουν έξω από το αρχείο με τη μορφή ${VAR}, που είναι ο τρόπος που προτείνει η τεκμηρίωση.

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

[[tools]]
name = "execute_sql"
source = "production"
readonly = true

Με αυτό το readonly = true ο βοηθός σου ρωτά, δεν πειράζει. Η τεκμηρίωση λέει ότι ο περιορισμός εφαρμόζεται σε δύο επίπεδα: κάθε πρόταση περνά έλεγχο σε λίστα επιτρεπτών λέξεων, και η ίδια η βάση μπαίνει σε λειτουργία μόνο για ανάγνωση. Ο διακόπτης θα μπορούσε να γράφει και false, και τότε ο βοηθός σου αποκτά δικαίωμα να διαγράψει πίνακα με ένα λάθος της στιγμής. Εσύ διαλέγεις, αλλά τώρα ξέρεις ότι διαλέγεις.

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

Το DBHub είναι MCP server, οπότε η εντολή που θα δώσεις είναι ίδια σε όλα τα προγράμματα. Αυτό που αλλάζει είναι πού μπαίνει η ρύθμιση. Σημείωση που ισχύει για όλα: το DBHub είναι το επίσημο παράδειγμα της τεκμηρίωσης του Claude Code για σύνδεση με PostgreSQL, που είναι καλή σύσταση από μόνη της.

Claude Code

Η ρύθμιση ζει σε ένα αρχείο JSON με όνομα .mcp.json, μέσα στον φάκελο του project. Το περιεχόμενό του είναι αυτό:

{
  "mcpServers": {
    "dbhub": {
      "command": "npx",
      "args": ["-y", "@bytebase/dbhub@latest", "--transport", "stdio", "--dsn", "postgres://user:password@localhost:5432/mydb"]
    }
  }
}

Βάλε το δικό σου κείμενο σύνδεσης στη θέση του παραδείγματος. Μετά ανοίγεις το Claude Code στον φάκελο του project. Θα δει τη ρύθμιση, θα συνδέσει τον server, και από εκεί και πέρα μπορείς να του πεις «δείξε μου τη δομή της βάσης» ή «πόσοι πελάτες γράφτηκαν τον τελευταίο μήνα».

Codex CLI

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

[mcp_servers.dbhub]
command = "npx"
args = ["-y", "@bytebase/dbhub@latest", "--transport", "stdio", "--dsn", "postgres://user:password@localhost:5432/mydb"]

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

Cursor

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

{
  "mcpServers": {
    "dbhub": {
      "command": "npx",
      "args": ["-y", "@bytebase/dbhub@latest", "--transport", "stdio", "--dsn", "postgres://user:password@localhost:5432/mydb"]
    }
  }
}

Ίδιο σχήμα με το Claude Code, ίδια εντολή. Ανοίγεις το Cursor και ο server εμφανίζεται συνδεδεμένος.

Μία ειλικρινής σημείωση για τα τρία παραπάνω. Δοκιμάσαμε τον server τον ίδιο, μέσω stdio, και είδαμε ακριβώς τι απαντά. Δεν τρέξαμε και τους τρεις clients από την αρχή ως το τέλος. Οι θέσεις των αρχείων είναι οι καθιερωμένες κάθε προγράμματος. Αν κάτι δεν δουλέψει σε σένα, ξεκίνα από εκεί.

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

Κερδίζει στο πιο απλό σημείο, και αυτό δεν είναι μικρό. Μία ρύθμιση, δύο εργαλεία, έξι βάσεις. Δεν μαθαίνεις ένα καινούργιο εργαλείο κάθε φορά που αλλάζει η βάση.

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

Κερδίζει στο πιο πρακτικό πράγμα από όλα: τα λάθη επιστρέφουν ως δεδομένα. Όταν ζητήσαμε πίνακα που δεν υπάρχει, ο agent δεν έπεσε. Πήρε πίσω ένα καθαρό μήνυμα λάθους με κωδικό. Αυτό σημαίνει ότι ο βοηθός σου μπορεί να διορθωθεί μόνος του, γιατί βλέπει τι πήγε στραβά αντί να κολλήσει.

Κερδίζει και στην υγεία του. Το αποθετήριο στο github.com/bytebase/dbhub έχει 3.643 αστέρια και 318 forks, με τελευταία ενημέρωση χθες, 13 Οκτωβρίου 2026, και δεν είναι αρχειοθετημένο. Στο npm μετρά 178.238 λήψεις τον τελευταίο μήνα. Είναι δηλαδή εργαλείο σε χρήση, όχι πείραμα.

Τώρα τα σημεία που πονάνε, και τα λέω όλα.

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

npx skills add bytebase/dbhub

Δεύτερο, στον SQL Server δεν υπάρχει integrated security. Δηλαδή δεν μπορείς να μπεις με τον λογαριασμό των Windows σου χωρίς κωδικό, όπως κάνουν τα εργαλεία της Microsoft. Η τεκμηρίωση το λέει καθαρά: ο driver είναι καθαρή JavaScript και δεν έχει Kerberos, οπότε θέλει όνομα και κωδικό, ή Azure AD. Όποιος έρχεται από εργαλεία των Windows θα το πατήσει αυτό, και καλό είναι να το ξέρει πριν, όχι μετά.

Τρίτο, και αυτό θέλει προσοχή. Αν σηκώσεις το DBHub με HTTP transport, χωρίς άλλη ρύθμιση ακούει σε όλες τις διεπαφές του μηχανήματος — η προεπιλεγμένη διεύθυνση είναι 0.0.0.0, το είδαμε στην τεκμηρίωση των παραμέτρων. Δηλαδή αν είσαι σε δίκτυο, η βάση σου είναι ανοιχτή σε όποιον βρει την πόρτα. Η τεκμηρίωση το προειδοποιεί η ίδια και προτείνει να περιορίσεις τη διεύθυνση και να βάλεις κλειδί:

npx @bytebase/dbhub@latest --transport http --host 127.0.0.1 --port 8080 --auth-token "s3cr3t-token" --dsn "postgres://user:password@localhost:5432/mydb"

Το κλειδί που ζητά είναι ένα κοινόχρηστο μυστικό, όχι ταυτότητα χρήστη. Η τεκμηρίωση το λέει και αυτό, με τα λόγια της. Δεν είναι σύστημα με ρόλους και ιστορικό· απαντά μόνο στο «έχεις το μυστικό ή όχι».

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

Πέμπτο, και το λέω και εδώ γιατί είναι το σημαντικότερο: όλα τα παραπάνω τα κανονίζει το readonly. Το DBHub μπορεί να είναι ο βοηθός που εξερευνά τη βάση σου ή ο βοηθός που της αλλάζει δεδομένα. Η διαφορά δεν είναι άλλο εργαλείο, δεν είναι άλλο πακέτο, δεν είναι άλλη άδεια. Είναι μία γραμμή στο αρχείο ρύθμισης. Βάλε την αληθινή πριν αφήσεις τον βοηθό σου μέσα.

Δοκιμή

Έτρεξε στ’ αλήθεια, σε αυτό το μηχάνημα, Windows 11, με Node 26.7, και χωρίς βάση δεδομένων στημένη πουθενά, με τη λειτουργία επίδειξης.

Σήκωσα τον server μέσω stdio με «npx -y @bytebase/dbhub@latest –demo –transport stdio». Στο πρώτο μήνυμα, το initialize, απάντησε ότι είναι ο DBHub MCP Server, έκδοση 1.5.0, με πρωτόκολλο 2025-06-18. Η εκκίνηση πήρε περίπου δύο δευτερόλεπτα, γιατί δεν χτίζει τίποτα πριν απαντήσει.

Ζήτησα τη λίστα των εργαλείων. Γύρισε ακριβώς δύο: execute_sql και search_objects. Ούτε ένα περισσότερο.

Μετά ζήτησα από το search_objects τους πίνακες με τύπο «table». Γύρισε έξι, τους πίνακες του δείγματος: department, dept_emp, dept_manager, employee, salary, title. Δηλαδή ο βοηθός βλέπει πραγματικά τη δομή, δεν τη μαντεύει.

Τρίτο, ζήτησα δεδομένα με το execute_sql, το ερώτημα «SELECT * FROM department LIMIT 3». Η απάντηση ήταν success: true και τρεις γραμμές: Marketing, Finance, Human Resources. Καθαρά δεδομένα, σε δομή που ο βοηθός διαβάζει χωρίς κόπο.

Το τέταρτο είναι αυτό που έχει τη μεγαλύτερη σημασία, και το είδαμε στην πράξη. Ζήτησα πίνακα που δεν υπάρχει: «SELECT * FROM employees LIMIT 3». Ο server δεν κατέρρευσε, ούτε έκλεισε τη σύνδεση. Γύρισε αυτό:

{"success": false, "error": "no such table: employees", "code": "EXECUTION_ERROR"}

Δηλαδή το λάθος είναι δεδομένο. Ο agent το διαβάζει, καταλαβαίνει τι έκανε λάθος, και διορθώνεται στην επόμενη κίνηση. Αυτό είναι η διαφορά ανάμεσα σε έναν βοηθό που δουλεύει και σε έναν που σε αφήνει να μαντεύεις γιατί κόλλησε.

Τι δεν τρέξαμε, και το λέω καθαρά. Δεν έστησα πραγματική βάση PostgreSQL, οπότε ό,τι γράφω για το DSN και τα έξι συστήματα προέρχεται από την τεκμηρίωση του κατασκευαστή, που τη διάβασα, όχι από δική μας σύνδεση. Δεν δοκίμασα το TOML με πολλές πηγές, ούτε το HTTP transport με κλειδί, ούτε τη λειτουργία readonly στην πράξη. Δεν έβαλα τον server μέσα στους τρεις clients ως το τέλος. Ό,τι έτρεξε, έτρεξε με τη λειτουργία επίδειξης, και τα νούμερα που δίνω για το αποθετήριο και τις λήψεις τα τράβηξα σήμερα από το GitHub και το npm.

Ετυμηγορία

Το DBHub παίρνει μια δύσκολη δουλειά και την κάνει μία γραμμή ρύθμισης. Ένα DSN, δύο εργαλεία, και ο βοηθός σου διαβάζει τη βάση σου — οποιαδήποτε από τις έξι.

Το πιο δυνατό σημείο δεν είναι ότι είναι μικρό. Είναι ότι τα λάθη γυρίζουν ως δεδομένα. Ο βοηθός δεν πέφτει, διορθώνεται. Και είναι το επίσημο παράδειγμα του Claude Code για PostgreSQL, που σημαίνει ότι κάποιος από την Anthropic διάβασε τον κώδικα και τον ενέκρινε.

Οι ενστάσεις είναι σοβαρές και τις ξέρεις τώρα. Στον SQL Server δεν μπαίνεις με τον λογαριασμό των Windows. Στο HTTP transport ακούει σε όλες τις διεπαφές αν δεν του πεις το αντίθετο. Και θέλει Node, καινούργιο μάλιστα.

Τίποτα από αυτά δεν αγγίζει τον πυρήνα, γιατί ο πυρήνας είναι ένα εργαλείο που κάνει το ελάχιστο σωστά — και το ελάχιστο είναι ακριβώς το ζητούμενο όταν μιλάς με τη βάση της δουλειάς σου. Ξεκίνα με τη λειτουργία επίδειξης, βάλε readonly = true πριν αγγίξεις παραγωγή, και μετά άφησέ τον μέσα.

Score: 8.6/10.

Πηγές: https://github.com/bytebase/dbhub · https://www.npmjs.com/package/@bytebase/dbhub · https://dbhub.ai/ · https://dbhub.ai/config/command-line · https://dbhub.ai/config/toml · https://dbhub.ai/tools/execute-sql · https://code.claude.com/docs/en/mcp · https://github.com/bytebase/dbhub/blob/main/skills/dbhub/SKILL.md