RBDC MCP Server

SQLite, MySQL, PostgreSQL ve MSSQL desteği sunan MCP tabanlı bir veritabanı sunucusu.

Dokümantasyon

RBDC MCP Server

A database server based on Model Context Protocol (MCP), supporting SQLite, MySQL, PostgreSQL, MSSQL, DuckDB, and Turso databases.

🇨🇳 中文文档 / Chinese Documentation: readme_cn.md

Advantages

  • Multiple Database Support: Seamlessly work with SQLite, MySQL, PostgreSQL, MSSQL, DuckDB, and Turso using a unified interface
  • AI Integration: Native integration with Claude AI through the Model Context Protocol
  • Zero Configuration: Automatic management of database connections and resources
  • Security: Controlled access to your database through AI-driven natural language queries
  • Simplicity: Use natural language to query and modify your database without writing SQL

Installation

🚀 Method 1: Install via Cargo (Recommended)

Prerequisites: Install Rust first.

Choose the install command based on your needs:

All drivers (default, ~10-15 minutes build)

cargo install --git https://github.com/rbatis/rbdc-mcp.git

Minimal: SQLite only (fastest build, ~2-3 minutes)

cargo install --git https://github.com/rbatis/rbdc-mcp.git --no-default-features --features sqlite

Single driver (e.g., MySQL):

cargo install --git https://github.com/rbatis/rbdc-mcp.git --no-default-features --features mysql

Multiple drivers:

cargo install --git https://github.com/rbatis/rbdc-mcp.git --no-default-features --features "mysql postgres"

💡 Build speed tip: If you only need one database (e.g., SQLite), add --no-default-features --features sqlite to skip compiling unused drivers, cutting build time from ~15 minutes to ~2 minutes.

Available Features

FeatureDriverDescription
sqliterbdc-sqliteSQLite support
mysqlrbdc-mysqlMySQL support
postgresrbdc-pgPostgreSQL support
mssqlrbdc-mssqlMSSQL/SQL Server support
duckdbrbdc-duckdbDuckDB support
tursorbdc-tursoTurso/libsql support
full(all above)Enable all database drivers

📦 Method 2: Download Pre-built Binaries

Download the latest release for your platform from GitHub Releases:

PlatformDownload
Windows (x64)rbdc-mcp-windows-x86_64.exe
macOS (Intel)rbdc-mcp-macos-x86_64
macOS (Apple Silicon)rbdc-mcp-macos-aarch64
Linux (x64)rbdc-mcp-linux-x86_64

After downloading, rename the file to rbdc-mcp (or rbdc-mcp.exe on Windows) and add it to your system PATH.

🔧 Agent Client Configuration

Configure rbdc-mcp in your MCP-compatible client by adding it to the MCP server list.

Claude Desktop

Configuration File Location:

  • Windows: %APPDATA%\Claude\claude_desktop_config.json
  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

Basic Configuration:

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

With args: [], the server starts with no database pre-configured. The AI registers databases at runtime using the add_database tool (see Dynamic Multi-Database below).

To pre-configure a database at startup:

{ "mcpServers": { "rbdc-mcp": { "command": "rbdc-mcp", "args": ["--database-url", "sqlite://./database.db"] } } }

Database Examples:

Single-Server Multi-Database Configuration

One rbdc-mcp process can host many databases. The first --database-url is registered as the default alias; pair extra URLs with --alias to declare a fixed set the AI can see immediately at startup via list_databases (see Dynamic Multi-Database). The AI can also register more databases at runtime through the add_database MCP tool.

Start a single default database (AI registers the rest at runtime):

{ "mcpServers": { "rbdc-mcp": { "command": "rbdc-mcp", "args": [ "--database-url", "sqlite://./database.db" ] } } }

Pre-declare several databases with explicit aliases (one process, multiple pools):

{ "mcpServers": { "rbdc-mcp": { "command": "rbdc-mcp", "args": [ "--database-url", "sqlite://./local.db", "--alias", "local", "--database-url", "mysql://user:password@db1:3306/orders", "--alias", "orders", "--database-url", "postgres://user:password@db2:5432/bi", "--alias", "bi", "--database-url", "duckdb://./warehouse.duckdb", "--alias", "warehouse" ] } } }

The first --alias value is ignored (the first URL always becomes default). The aliases must be unique, non-empty, and not equal to default for any URL after the first.

Legacy style — one process per database (still works, but no longer needed for multi-database access):

{ "mcpServers": { "rbdc-mcp-sqlite": { "command": "rbdc-mcp", "args": ["--database-url", "sqlite://./database.db"] }, "rbdc-mcp-mysql": { "command": "rbdc-mcp", "args": ["--database-url", "mysql://user:password@localhost:3306/database"] }, "rbdc-mcp-postgres": { "command": "rbdc-mcp", "args": ["--database-url", "postgres://user:password@localhost:5432/database"] }, "rbdc-mcp-mssql": { "command": "rbdc-mcp", "args": ["--database-url", "mssql://user:password@localhost:1433/database"] }, "rbdc-mcp-duckdb": { "command": "rbdc-mcp", "args": ["--database-url", "duckdb://path/to/database.duckdb"] }, "rbdc-mcp-turso": { "command": "rbdc-mcp", "args": ["--database-url", "turso://database-url?token=your-token"] } } }

Windows Full Path (if not in PATH)

{ "mcpServers": { "rbdc-mcp": { "command": "C:\tools\rbdc-mcp.exe", "args": ["--database-url", "sqlite://C:\path\to\database.db"] } } }

Restart: After saving, restart Claude Desktop to load the MCP server.

Test: In Claude Desktop, try asking:

  • "Show me the database connection status"
  • "What tables are in my database?"

Codex

  • Global: ~/.codex/mcp.toml
  • Project-level: .codex/mcp.toml (place in your project root)

Basic Configuration (.codex/mcp.toml or ~/.codex/mcp.toml):

[mcp_servers.rbdc-mcp] command = "rbdc-mcp" args = ["--database-url", "sqlite://./database.db"] type = "stdio" enabled = true

Database Examples (single process, multiple databases):

Pre-declare several databases with explicit aliases

[mcp_servers.rbdc-mcp] command = "rbdc-mcp" args = [ "--database-url", "sqlite://./local.db", "--alias", "local", "--database-url", "mysql://user:password@db1:3306/orders", "--alias", "orders", "--database-url", "postgres://user:password@db2:5432/bi", "--alias", "bi", "--database-url", "duckdb://./warehouse.duckdb", "--alias", "warehouse", ] type = "stdio" enabled = true

The first URL becomes the default alias (its --alias, if any, is ignored). Additional URLs must be paired with --alias in declaration order. The AI can see every registered alias at startup through the list_databases MCP tool, and can also register more databases at runtime through add_database.

Restart: After saving the config file, restart Codex to load the MCP server. If Codex is already running, run codex reconnect to force a reload.

Test: In Codex chat, try asking:

📊 Usage Examples

Natural Language Database Operations

  • Query Data: "Show me all users in the database"
  • Modify Data: "Add a new user named John with email [email protected]"
  • Get Status: "What's the database connection status?"
  • Schema Info: "What tables exist in my database?"
  • Multi-Database: "Connect to my MySQL orders database and compare its row counts with the local SQLite cache"

🗄️ Database Support

DatabaseConnection URL Format
SQLitesqlite://path/to/database.db
MySQLmysql://user:password@host:port/database
PostgreSQLpostgres://user:password@host:port/database
MSSQLmssql://user:password@host:port/database
DuckDBduckdb://path/to/database.duckdb
Tursoturso://database-url?token=your-token

⚙️ Configuration Options

ParameterDescriptionDefault
--database-url, -dDatabase connection URL. Omit to start empty (databases added at runtime via add_database). Repeat to pre-register multiple databases at startup.None (optional)
--aliasAlias for the corresponding --database-url (declaration order). The first is ignored; later aliases must be unique, non-empty, and not default.auto (db2, db3, ...)
--max-connectionsMaximum connection pool size1
--timeoutConnection timeout (seconds)30
--log-levelLog level (error/warn/info/debug)info
--read-onlyDisable sql_exec and enforce read-only SQL validationfalse

🛠️ Available Tools

  • sql_query: Execute a single read-only SQL statement. Pass optional alias to target a non-default database; defaults to default.
  • sql_exec: Execute INSERT/UPDATE/DELETE operations when the server is not in read-only mode. Pass optional alias to target a non-default database.
  • db_status: Inspect connection pool state for a database. Pass optional alias.
  • test_connection: Ping a registered database. Pass optional alias.
  • list_databases: List all registered database aliases along with their URL and detected type.
  • add_database: Register a new database connection under an alias and start a pool at runtime. Supported URL schemes: sqlite://, mysql://, pg:// / postgres://, mssql:// / sqlserver://, duckdb://, turso:// / libsql://.
  • remove_database: Unregister a previously-added alias. The reserved default alias cannot be removed.

🔌 Dynamic Multi-Database

rbdc-mcp is a multi-database server from a single process. You can start it with no database URL at all (args: [] in your MCP client config) and let the AI register databases on the fly through MCP tools. When a URL is provided via --database-url, it becomes the default alias; the AI can then register more databases at runtime and route queries to any of them by alias.

Zero-URL Startup (Dynamic Mode)

When the server starts with no --database-url, the list_databases tool returns an empty list and any operation targeting the default alias will suggest using add_database first. The AI can register the first (or any) database under any alias it chooses:

  1. add_database(alias="inventory", url="sqlite://./inventory.db") — register a database.
  2. list_databases — confirm it is now registered.
  3. sql_query({ alias: "inventory", sql: "SELECT * FROM products" }) — query it.

Tip: You can also register a database with alias="default" if you prefer to omit alias from subsequent queries.

Pre-declared Startup (Static Mode)

Tool flow the AI follows:

  1. list_databases — see all currently registered aliases.
  2. add_database(alias="orders_mysql", url="mysql://user:pass@host/orders") — register a new database and start a pool for it.
  3. sql_query({ alias: "orders_mysql", sql: "SELECT COUNT(*) FROM orders" }) — route a query to that database. Omit alias to use the default one.
  4. remove_database(alias="orders_mysql") — tear down the pool and unregister the alias when finished.

Two ways to register databases

PathWhenHow
CLI pre-declaredStable list, you want the AI to see every database at bootRepeat --database-url and pair --alias (the first URL becomes default).
Runtime add_databaseAd-hoc / exploratory / zero-URL startupThe AI calls the add_database MCP tool.

Both paths write into the same in-memory alias → pool registry, so the result is identical from the AI's point of view: list_databases returns every alias regardless of where it was registered.

Why this matters

  • One MCP server process, many databases — no need to spawn rbdc-mcp-mysql, rbdc-mcp-postgres, etc. for each database.
  • All aliases are discoverable via list_databases, so the AI can dynamically pick the right target per query.
  • When a --database-url is provided, the default alias is reserved for it and cannot be removed.
  • Each alias has its own independent connection pool — concurrent queries against different aliases do not block each other.

Example prompt you can give the AI

"Connect to my MySQL orders database at mysql://root:[email protected]/orders and tell me the total revenue by month."

The AI will call add_database(...), then sql_query(...) against that alias without restarting the MCP server — works the same whether you provided a--database-url at startup or not.

Read-Only Mode

--read-only disables the sql_exec tool, preventing any data modifications. Additionally, sql_query validates submitted SQL and rejects statements containing write keywords (INSERT, UPDATE, DELETE, etc.) or multi-statement input.

📸 Screenshots

Step 1: Configuration Configuration

Step 2: Usage in Claude Usage

License

Apache-2.0

  • Multi-Database in One Server: The AI can register additional database connections at runtime via the add_database tool and route queries to any registered database by its alias — no need to spawn extra MCP server processes | --database-url, -d | Database connection URL. Omit to start empty (databases added at runtime via add_database). Repeat to pre-register multiple databases at startup. | None (optional) |