About Rbdc Mcp
An MCP database server supporting SQLite, MySQL, PostgreSQL, MSSQL, DuckDB and Turso from one process. It suits users who want AI assistants to query and modify databases, and it can register several databases at runtime.
Key features
- 01Unified interface for six database types
- 02Runtime registration and removal of databases
- 03Routing queries to databases by alias
- 04Read-only mode disables write operations
- 05Optional driver selection to shorten builds
Use cases
- 01Querying tables and data using natural language
- 02Comparing row counts across two databases
- 03Connecting local databases from Claude Desktop or Codex
MCP support
This project is an MCP server that provides tools such as sql_query, sql_exec and list_databases to MCP clients.
Configuration
Local server config is the same for every client. Copy it into your client’s MCP config file.
We haven’t collected a package or remote endpoint for this server. Follow the instructions in the project README.
Tools
Local servers expose tools only once running on your machine, and the maintainer has not provided a tool list.
Details
From the project READMERBDC 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
| Feature | Driver | Description |
|---|---|---|
sqlite | rbdc-sqlite | SQLite support |
mysql | rbdc-mysql | MySQL support |
postgres | rbdc-pg | PostgreSQL support |
mssql | rbdc-mssql | MSSQL/SQL Server support |
duckdb | rbdc-duckdb | DuckDB support |
turso | rbdc-turso | Turso/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:
| Platform | Download |
|---|---|
| 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
Configuration File Location:
- 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:
- "Show me the database connection status"
- "What tables are in my database?"
📊 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
| Database | Connection URL Format |
|---|---|
| SQLite | sqlite://path/to/database.db |
| MySQL | mysql://user:password@host:port/database |
| PostgreSQL | postgres://user:password@host:port/database |
| MSSQL | mssql://user:password@host:port/database |
| DuckDB | duckdb://path/to/database.duckdb |
| Turso | turso://database-url?token=your-token |
⚙️ Configuration Options
| Parameter | Description | Default |
|---|---|---|
--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) |
--alias | Alias 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-connections | Maximum connection pool size | 1 |
--timeout | Connection timeout (seconds) | 30 |
--log-level | Log level (error/warn/info/debug) | info |
--read-only | Disable sql_exec and enforce read-only SQL validation | false |
🛠️ Available Tools
sql_query: Execute a single read-only SQL statement. Pass optionalaliasto target a non-default database; defaults todefault.sql_exec: Execute INSERT/UPDATE/DELETE operations when the server is not in read-only mode. Pass optionalaliasto target a non-default database.db_status: Inspect connection pool state for a database. Pass optionalalias.test_connection: Ping a registered database. Pass optionalalias.list_databases: List all registered database aliases along with their URL and detected type.add_database: Register a new database connection under analiasand 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 reserveddefaultalias 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:
add_database(alias="inventory", url="sqlite://./inventory.db")— register a database.list_databases— confirm it is now registered.sql_query({ alias: "inventory", sql: "SELECT * FROM products" })— query it.
Tip: You can also register a database with
alias="default"if you prefer to omitaliasfrom subsequent queries.
Pre-declared Startup (Static Mode)
Tool flow the AI follows:
list_databases— see all currently registered aliases.add_database(alias="orders_mysql", url="mysql://user:pass@host/orders")— register a new database and start a pool for it.sql_query({ alias: "orders_mysql", sql: "SELECT COUNT(*) FROM orders" })— route a query to that database. Omitaliasto use thedefaultone.remove_database(alias="orders_mysql")— tear down the pool and unregister the alias when finished.
Two ways to register databases
| Path | When | How |
|---|---|---|
| CLI pre-declared | Stable list, you want the AI to see every database at boot | Repeat --database-url and pair --alias (the first URL becomes default). |
Runtime add_database | Ad-hoc / exploratory / zero-URL startup | The 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-urlis provided, thedefaultalias 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]/ordersand 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

Step 2: Usage in Claude

License
Apache-2.0
- Multi-Database in One Server: The AI can register additional database connections at runtime via the
add_databasetool and route queries to any registered database by itsalias— no need to spawn extra MCP server processes |--database-url, -d| Database connection URL. Omit to start empty (databases added at runtime viaadd_database). Repeat to pre-register multiple databases at startup. |None(optional) |
Comments
New to MCP?
From what the protocol is to installing your first server, these answers cover most first questions.
An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.