@bytebase/dbhub: DBHub

bytebase/dbhub
29

DBHub: A universal database gateway implementing the Model Context Protocol (MCP) server interface, enabling MCP-compatible clients to connect to and explore various databases like PostgreSQL, MySQL, SQL Server, and SQLite.

unknown

Author

bytebase

README

DBHub is a universal database gateway implementing the Model Context Protocol (MCP) server interface. This gateway allows MCP-compatible clients to connect to and explore different databases.

bash
+------------------+ +--------------+ +------------------+ | | | | | | | | | | | | | Claude Desktop +--->+ +--->+ PostgreSQL | | | | | | | | Cursor +--->+ DBHub +--->+ SQL Server | | | | | | | | Other MCP +--->+ +--->+ SQLite | | Clients | | | | | | | | +--->+ MySQL | | | | | | | | | | +--->+ Other Databases | | | | | | | +------------------+ +--------------+ +------------------+ MCP Clients MCP Server Databases

Demo SSE Endpoint

https://demo.dbhub.ai/sse connects a sample employee database. You can point Cursor or MCP Inspector to it to see it in action.

mcp-inspector

Supported Matrix

Database Resources

ResourceURI FormatPostgreSQLMySQLSQL ServerSQLite
Tablesdb://tables
Schemadb://schema/{tableName}

Database Tools

ToolCommand NamePostgreSQLMySQLSQL ServerSQLite
Execute Queryrun_query
List Connectorslist_connectors

Prompt Capabilities

PromptCommand NamePostgreSQLMySQLSQL ServerSQLite
Generate SQLgenerate_sql
Explain DB Elementsexplain_db

Installation

Docker

bash
# PostgreSQL example docker run --rm --init \ --name dbhub \ --publish 8080:8080 \ bytebase/dbhub \ --transport sse \ --port 8080 \ --dsn "postgres://user:password@localhost:5432/dbname?sslmode=disable"
bash
# Demo mode with sample employee database docker run --rm --init \ --name dbhub \ --publish 8080:8080 \ bytebase/dbhub \ --transport sse \ --port 8080 \ --demo

NPM

bash
# PostgreSQL example npx @bytebase/dbhub --transport sse --port 8080 --dsn "postgres://user:password@localhost:5432/dbname"
bash
# Demo mode with sample employee database npx @bytebase/dbhub --transport sse --port 8080 --demo

Note: The demo mode includes a bundled SQLite sample "employee" database with tables for employees, departments, salaries, and more.

Claude Desktop

claude-desktop

json
// claude_desktop_config.json { "mcpServers": { "dbhub-postgres-docker": { "command": "docker", "args": [ "run", "-i", "--rm", "bytebase/dbhub", "--transport", "stdio", "--dsn", // Use host.docker.internal as the host if connecting to the local db "postgres://user:password@host.docker.internal:5432/dbname?sslmode=disable" ] }, "dbhub-postgres-npx": { "command": "npx", "args": [ "-y", "@bytebase/dbhub", "--transport", "stdio", "--dsn", "postgres://user:password@localhost:5432/dbname?sslmode=disable" ] }, "dbhub-demo": { "command": "npx", "args": ["-y", "@bytebase/dbhub", "--transport", "stdio", "--demo"] } } }

Cursor

cursor

Usage

Configure your database connection

You can use DBHub in demo mode with a sample employee database for testing:

bash
pnpm dev --demo

For real databases, a Database Source Name (DSN) is required. You can provide this in several ways:

  • Command line argument (highest priority):

    bash
    pnpm dev --dsn "postgres://user:password@localhost:5432/dbname?sslmode=disable"
  • Environment variable (second priority):

    bash
    export DSN="postgres://user:password@localhost:5432/dbname?sslmode=disable" pnpm dev
  • Environment file (third priority):

    • For development: Create .env.local with your DSN
    • For production: Create .env with your DSN
    DSN=postgres://user:password@localhost:5432/dbname?sslmode=disable
    

DBHub supports the following database connection string formats:

DatabaseDSN FormatExample
PostgreSQLpostgres://[user]:[password]@[host]:[port]/[database]postgres://user:password@localhost:5432/dbname?sslmode=disable
SQLitesqlite:///[path/to/file] or sqlite::memory:sqlite:///path/to/database.db or sqlite::memory:
SQL Serversqlserver://[user]:[password]@[host]:[port]/[database]sqlserver://user:password@localhost:1433/dbname
MySQLmysql://[user]:[password]@[host]:[port]/[database]mysql://user:password@localhost:3306/dbname

Transport

  • stdio (default) - for direct integration with tools like Claude Desktop:

    bash
    npx @bytebase/dbhub --transport stdio --dsn "postgres://user:password@localhost:5432/dbname?sslmode=disable"
  • sse - for browser and network clients:

    bash
    npx @bytebase/dbhub --transport sse --port 5678 --dsn "postgres://user:password@localhost:5432/dbname?sslmode=disable"

Command line options

OptionDescriptionDefault
demoRun in demo mode with sample employee databasefalse
dsnDatabase connection stringRequired if not in demo mode
transportTransport mode: stdio or ssestdio
portHTTP server port (only applicable when using --transport=sse)8080

The demo mode uses an in-memory SQLite database loaded with the sample employee database that includes tables for employees, departments, titles, and salaries.

Development

  1. Install dependencies:

    bash
    pnpm install
  2. Run in development mode:

    bash
    pnpm dev
  3. Build for production:

    bash
    pnpm build pnpm start --transport stdio --dsn "postgres://user:password@localhost:5432/dbname?sslmode=disable"

Debug with MCP Inspector

stdio

bash
# PostgreSQL example TRANSPORT=stdio DSN="postgres://user:password@localhost:5432/dbname?sslmode=disable" npx @modelcontextprotocol/inspector node /path/to/dbhub/dist/index.js

SSE

bash
# Start DBHub with SSE transport pnpm dev --transport=sse --port=8080 # Start the MCP Inspector in another terminal npx @modelcontextprotocol/inspector

Connect to the DBHub server /sse endpoint