A Model Context Protocol (MCP) server implementation in Rust that provides comprehensive database management tools using SQLx.
This server provides 6 powerful MCP tools for database management:
- π get_database_info - Get basic database information
- π list_tables - List all tables with metadata (comments, row counts, etc.)
- ποΈ get_table_structure - Get detailed table structure information
- π get_table_ddl - Export table DDL (CREATE TABLE statements)
- ποΈ execute_readonly_query - Execute read-only SQL queries safely
- βοΈ execute_write_query - Execute write SQL operations
- Auto-Configuration Detection: Server automatically detects and reports database configuration at startup
- Client Notification: Clients receive configuration status via MCP protocol initialization
- Flexible URL Management: Optional database URL parameters when server is pre-configured
- Secure Display: Database credentials are automatically masked for security
- PostgreSQL - Full support with native features
- MySQL - Complete functionality including engine-specific features
- SQLite - Comprehensive support for embedded database operations
Install globally via npm:
npm install -g @sqlx-mcp/sqlx-mcp
Or use directly with npx (no installation needed):
npx @sqlx-mcp/sqlx-mcp --database-url "postgresql://user:pass@localhost/mydb"
- Rust 1.70 or later
- Git
git clone https://github.com/lihongjie0209/sqlx-mcp.git
cd sqlx-mcp
cargo build --release
# Install globally and run
npm install -g @sqlx-mcp/sqlx-mcp
sqlx-mcp --database-url "postgresql://user:pass@localhost/mydb"
# Or run directly with npx (no installation needed)
npx @sqlx-mcp/sqlx-mcp --database-url "postgresql://user:pass@localhost/mydb"
# With environment variable
export DATABASE_URL="postgresql://user:pass@localhost/mydb"
npx @sqlx-mcp/sqlx-mcp
# With environment variable
export DATABASE_URL="postgresql://user:pass@localhost/mydb"
./target/release/sqlx-mcp
# With command line argument
./target/release/sqlx-mcp --database-url "postgresql://user:pass@localhost/mydb"
Add to your Claude Desktop configuration. The server will automatically notify Claude about the current database configuration status.
With Environment Variable (Recommended):
{
"mcpServers": {
"sqlx-mcp": {
"command": "npx",
"args": ["@sqlx-mcp/sqlx-mcp"],
"env": {
"DATABASE_URL": "postgresql://user:pass@localhost/mydb"
}
}
}
}
With Command Line Argument:
{
"mcpServers": {
"sqlx-mcp": {
"command": "npx",
"args": ["@sqlx-mcp/sqlx-mcp", "--database-url", "postgresql://user:pass@localhost/mydb"]
}
}
}
Without Pre-configuration (require database_url in each tool call):
{
"mcpServers": {
"sqlx-mcp": {
"command": "npx",
"args": ["@sqlx-mcp/sqlx-mcp"]
}
}
}
Windows (%APPDATA%\Claude\claude_desktop_config.json
):
{
"mcpServers": {
"sqlx-mcp": {
"command": "D:\\path\\to\\sqlx-mcp\\target\\release\\sqlx-mcp.exe",
"args": ["--database-url", "postgresql://user:pass@localhost/mydb"]
}
}
}
macOS/Linux:
{
"mcpServers": {
"sqlx-mcp": {
"command": "/path/to/sqlx-mcp/target/release/sqlx-mcp",
"args": ["--database-url", "postgresql://user:pass@localhost/mydb"]
}
}
}
The server provides intelligent database configuration management with automatic detection and client notification.
The server resolves database connections with the following priority:
- Tool Parameter (highest) -
database_url
parameter in individual tool calls - Command Line -
--database-url
argument at server startup - Environment Variable (lowest) -
DATABASE_URL
environment variable
When clients connect to the MCP server, they automatically receive configuration information:
- Configuration Status: Whether a database is pre-configured
- Connection Source: How the database was configured (command line, environment, or none)
- Masked URL: Database connection string with credentials safely hidden
- Usage Guidance: Whether
database_url
parameter is required in tool calls
No Configuration:
Current database configuration: No database configured. Please provide database_url parameter in tool calls or set DATABASE_URL environment variable.
Environment Variable Configuration:
Current database configuration: Database configured via environment variable: postgresql://user:***@localhost:5432/mydb
If a database is already configured, you can omit the database_url parameter in tool calls.
Command Line Configuration:
Current database configuration: Database configured via command line: mysql://root:***@localhost:3306/testdb
If a database is already configured, you can omit the database_url parameter in tool calls.
# Set up database via environment variable
export DATABASE_URL="postgresql://user:pass@localhost/mydb"
npx @sqlx-mcp/sqlx-mcp
# Or via command line
npx @sqlx-mcp/sqlx-mcp --database-url "postgresql://user:pass@localhost/mydb"
Then use tools without database_url parameter:
{
"name": "list_tables",
"arguments": {}
}
{
"name": "list_tables",
"arguments": {
"database_url": "postgresql://user:pass@different-host/other-db"
}
}
This allows flexible connection management for multiple databases.
{
"name": "get_database_info",
"arguments": {
"database_url": "postgresql://user:pass@localhost/mydb" // Optional if server is pre-configured
}
}
{
"name": "list_tables",
"arguments": {
"database_url": "postgresql://user:pass@localhost/mydb" // Optional if server is pre-configured
}
}
{
"name": "get_table_ddl",
"arguments": {
"database_url": "postgresql://user:pass@localhost/mydb", // Optional if server is pre-configured
"table_name": "users"
}
}
Supports SELECT, WITH (CTE), SHOW, DESCRIBE, EXPLAIN:
{
"name": "execute_readonly_query",
"arguments": {
"database_url": "postgresql://user:pass@localhost/mydb", // Optional if server is pre-configured
"query": "WITH recent_users AS (SELECT * FROM users WHERE created_at > '2024-01-01') SELECT count(*) FROM recent_users"
}
}
Note: When the server is pre-configured with a database (via command line or environment variable), the database_url
parameter becomes optional in all tool calls. The server will notify clients about the current configuration status during MCP initialization.
- Query Validation: Strict read-only query enforcement for safe operations
- SQL Injection Protection: Parameterized queries where possible
- Connection Security: Supports SSL/TLS encrypted connections
- Access Control: Respects database user permissions
- Credential Protection: Database passwords automatically masked in logs and client notifications
- Secure Configuration Display: Connection strings shown with sensitive information hidden
Built with modern Rust ecosystem:
- rmcp - Rust MCP SDK for protocol compliance
- SQLx - Async SQL toolkit with compile-time checked queries
- Tokio - Async runtime for high performance
- Serde - Serialization framework for JSON handling
- Tracing - Structured logging and debugging
- Detailed Usage Guide
- Database Configuration Guide
- DDL Export Feature
- List Tables Feature
- Improvements Summary
- Deployment Guide
- PowerShell Environment Setup
This project includes an advanced automated release system powered by AI:
For Windows PowerShell users who want to use the automated release features:
# Quick setup using .env file (recommended)
Copy-Item ".env.template" ".env"
notepad .env # Add your OPENROUTER_API_KEY
# Or set environment variable for current session
$env:OPENROUTER_API_KEY = "your-api-key-here"
For detailed PowerShell environment setup, see PowerShell Environment Setup Guide.
The project includes a comprehensive release script with AI-powered commit message generation:
# Create automated release with AI-generated commit messages
npm run release
# The script will:
# - Bump version numbers
# - Generate intelligent commit messages using AI
# - Update package files
# - Create git commits and tags
# - Push to repository
Features:
- π€ AI-powered commit message generation using OpenRouter
- π¦ Automatic version management
- π Multi-file synchronization (Cargo.toml β package.json)
- π Git automation (commit, tag, push)
- π₯οΈ Cross-platform support (Windows, macOS, Linux)
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature
) - Commit your changes (
git commit -m 'Add some amazing feature'
) - Push to the branch (
git push origin feature/amazing-feature
) - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
- Model Context Protocol for the protocol specification
- SQLx for the excellent SQL toolkit
- rmcp for the Rust MCP SDK
- Create an Issue for bug reports
- Start a Discussion for questions
- Check the Documentation for detailed guides
Made with β€οΈ and π¦ (Rust)