loading…
Search for a command to run...
loading…
Provides a unified, read-only interface for executing SQL queries across multiple database engines including SQL Server, MySQL, and PostgreSQL via CLI tools. It
Provides a unified, read-only interface for executing SQL queries across multiple database engines including SQL Server, MySQL, and PostgreSQL via CLI tools. It features automatic project configuration detection and strict query validation to ensure safe AI-driven data interactions.
A Model Context Protocol (MCP) Server that provides a unified, safe, AI-friendly interface for executing read-only database queries across multiple databases via CLI tools.
| Database | CLI Tool | Default Port |
|---|---|---|
| SQL Server | sqlcmd |
1433 |
| MySQL | mysql |
3306 |
| MariaDB | mariadb |
3306 |
| PostgreSQL | psql |
5432 |
| Oracle | sqlplus |
1521 |
npm install -g @mcp/dbcli-server
git clone https://github.com/your-org/dbcli-mcp-server.git
cd dbcli-mcp-server
npm install
npm run build
# Via npx (no install needed)
npx @mcp/dbcli-server --stdio
# Or if installed globally
dbcli-mcp-server --stdio
Use the doctor tool to verify CLI tools and configuration:
{
"serverVersion": "2.0",
"cliStatus": [
{ "dbType": "mssql", "cli": "sqlcmd", "installed": true, "version": "17.10" },
{ "dbType": "mysql", "cli": "mysql", "installed": false }
],
"issues": ["mysql not installed"]
}
// Input
{ "sql": "SELECT * FROM users LIMIT 10" }
// Output
{
"success": true,
"columns": ["id", "name", "email"],
"rows": [
{ "id": "1", "name": "Alice", "email": "[email protected]" }
],
"rowCount": 1,
"truncated": false
}
Claude Code supports MCP servers natively.
Add the server to your Claude Code MCP configuration:
claude mcp add dbcli -- npx @mcp/dbcli-server --stdio
Or manually edit ~/.claude/claude_desktop_config.json:
{
"mcpServers": {
"dbcli": {
"command": "npx",
"args": ["@mcp/dbcli-server", "--stdio"]
}
}
}
Once configured, you can ask Claude Code directly:
> Query the users table to show the first 10 records
> Check which database CLI tools are installed on my system
> Create a temporary connection to my local MySQL database
> Scan this project for database configurations
Codex CLI supports MCP protocol integration.
Add to your Codex CLI configuration file ~/.codex/config.json:
{
"mcpServers": {
"dbcli": {
"command": "npx",
"args": ["@mcp/dbcli-server", "--stdio"]
}
}
}
codex "Query the users table in my local SQL Server database"
codex "What database configurations exist in this project?"
Cursor supports MCP servers for AI-assisted development.
Ctrl+Shift+J (Windows/Linux) or Cmd+Shift+J (macOS){
"mcpServers": {
"dbcli": {
"command": "npx",
"args": ["@mcp/dbcli-server", "--stdio"]
}
}
}
Or manually edit .cursor/mcp.json in your project root:
{
"mcpServers": {
"dbcli": {
"command": "npx",
"args": ["@mcp/dbcli-server", "--stdio"]
}
}
}
In Cursor's AI chat or Composer, you can:
@dbcli Run SELECT * FROM products WHERE price > 100
@dbcli Show me the database schema for the orders table
@dbcli Create a temporary connection to postgres://localhost:5432/mydb
VS Code with GitHub Copilot supports MCP servers (requires Copilot Chat).
Ctrl+,)mcp in settingssettings.json and add:{
"github.copilot.chat.mcp.servers": {
"dbcli": {
"command": "npx",
"args": ["@mcp/dbcli-server", "--stdio"]
}
}
}
Or create .vscode/mcp.json in your project:
{
"servers": {
"dbcli": {
"command": "npx",
"args": ["@mcp/dbcli-server", "--stdio"]
}
}
}
In Copilot Chat panel:
@dbcli What database connections are configured in this project?
@dbcli Run a health check on my database setup
@dbcli SELECT COUNT(*) FROM orders WHERE status = 'pending'
GitHub Copilot CLI can leverage MCP servers.
Configure via ~/.config/github-copilot/config.json:
{
"mcpServers": {
"dbcli": {
"command": "npx",
"args": ["@mcp/dbcli-server", "--stdio"]
}
}
}
gh copilot explain "How to query my database using the dbcli MCP server"
Visual Studio 2026 supports MCP servers through its AI integration.
dbclinpx@mcp/dbcli-server --stdioOr edit .vs/mcp.json in your solution root:
{
"servers": {
"dbcli": {
"command": "npx",
"args": ["@mcp/dbcli-server", "--stdio"]
}
}
}
In the Copilot Chat window:
@dbcli Query the Customers table for records from this month
@dbcli Check if sqlcmd is installed and show install instructions if not
doctor()Returns system diagnostics including server version, CLI tool installation status, and detected issues.
Parameters: None
Response:
{
"serverVersion": "2.0",
"cliStatus": [
{ "dbType": "mssql", "cli": "sqlcmd", "installed": true, "version": "17.10", "path": "/usr/bin/sqlcmd" }
],
"issues": []
}
scanProjectDbConfigs()Scans current project directory for database configuration in common config files.
Scanned files: .env, .env.*, appsettings.json, application.yml, application.properties, docker-compose.yml
Parameters: None
Response:
[
{
"dbType": "mssql",
"host": "localhost",
"port": 1433,
"database": "ExampleDB",
"source": "appsettings.json"
}
]
initConfig()Creates or updates a persistent configuration profile in .mcp/dbcli.config.json.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
| profileName | string | Yes | Profile name (e.g., "dev") |
| dbType | string | Yes | Database type |
| host | string | Yes | Database host |
| database | string | Yes | Database name |
| port | number | No | Database port |
| username | string | No | Database username |
| password | string | No | Database password |
| timeoutSeconds | number | No | Query timeout (default: 30) |
| maxRows | number | No | Max rows returned (default: 500) |
setActiveProfile()Switches the active configuration profile.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
| profileName | string | Yes | Profile name to activate |
getInstallInstructions()Returns platform-specific installation instructions for a database CLI tool.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
| dbType | string | Yes | Database type |
Response:
{
"dbType": "mssql",
"cli": "sqlcmd",
"installed": false,
"instructions": {
"windows": "winget install Microsoft.SQLCMD",
"linux": "sudo apt install mssql-tools",
"macos": "brew install mssql-tools"
}
}
createTemporaryConnection()Creates an in-memory-only database connection that is never persisted to disk.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
| dbType | string | Yes | Database type |
| host | string | Yes | Database host |
| database | string | Yes | Database name |
| port | number | No | Database port |
| username | string | No | Database username |
| password | string | No | Database password |
Response:
{
"id": "uuid-string",
"type": "temporary",
"dbType": "mssql",
"cli": "sqlcmd",
"connection": {
"host": "localhost",
"database": "TestDB",
"password": "***"
}
}
runSelectQuery()Executes a read-only SQL query through the appropriate database CLI tool.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
| sql | string | Yes | The SELECT SQL query |
| connectionId | string | No | Temporary connection ID (uses active profile if omitted) |
Allowed SQL:
SELECT ...WITH ... SELECT ... (CTE)EXPLAIN SELECT ...Response:
{
"success": true,
"columns": ["id", "name"],
"rows": [{ "id": "1", "name": "Alice" }],
"rowCount": 1,
"truncated": false
}
| Mode | Description | Persistence |
|---|---|---|
| Project Detection | Auto-detects connection info from project files | None |
| Config Profile | Stored in .mcp/dbcli.config.json |
Disk |
| Temporary Connection | Runtime-only, created via createTemporaryConnection() |
Memory only |
{
"version": 1,
"activeProfile": "dev",
"profiles": {
"dev": {
"dbType": "mssql",
"cli": "sqlcmd",
"connection": {
"host": "localhost",
"port": 1433,
"database": "ExampleDb",
"username": "app",
"password": "${DB_PASSWORD}"
},
"limits": {
"timeoutSeconds": 30,
"maxRows": 500
}
}
}
}
maxRows prevents excessive data retrievaltimeoutSeconds kills long-running queriesexecFile (not exec), preventing shell injectionINSERT, UPDATE, DELETE, MERGE, CREATE, ALTER, DROP, TRUNCATE, EXEC, EXECUTE, CALL, GRANT, REVOKE, SELECT INTO
# Install dependencies
npm install
# Build
npm run build
# Run tests
npm test
# Run tests in watch mode
npm run test:watch
src/
├── index.ts # MCP Server entry point + tool definitions
├── types.ts # Core TypeScript types
├── server/
│ └── ConnectionStore.ts # Temporary connection memory store
├── validator/
│ └── SqlValidator.ts # SQL security validation
├── cli/
│ ├── CliManager.ts # CLI detection + install instructions
│ └── CliExecutor.ts # Safe CLI execution
├── config/
│ └── ConfigManager.ts # Configuration file management
├── scanner/
│ └── ProjectScanner.ts # Project DB config scanning
└── formatter/
└── ResultFormatter.ts # Query result formatting
AI Client (Claude Code / Cursor / VS Code / Codex CLI / ...)
│
│ MCP Protocol (JSON-RPC over stdio)
▼
┌──────────────────────────────┐
│ MCP Server Core │
│ (Tool Routing & Lifecycle) │
└──────────┬───────────────────┘
│
┌─────┼─────┬──────────┬──────────┬──────────┐
▼ ▼ ▼ ▼ ▼ ▼
Project CLI Config SQL CLI Result
Scanner Mgr Manager Validator Executor Formatter
MIT License. See LICENSE for details.
Добавь это в claude_desktop_config.json и перезапусти Claude Desktop.
{
"mcpServers": {
"db-cli-mcp-server": {
"command": "npx",
"args": []
}
}
}