@sqlx-mcp/sqlx-mcp
Version:
Rust MCP server for SQLx database management
383 lines (289 loc) • 11.1 kB
Markdown
# SQLx MCP Server
A Model Context Protocol (MCP) server implementation in Rust that provides comprehensive database management tools using SQLx.
[](https://www.rust-lang.org)
[](https://opensource.org/licenses/MIT)
## 🚀 Features
This server provides 6 powerful MCP tools for database management:
1. **🔍 get_database_info** - Get basic database information
2. **📋 list_tables** - List all tables with metadata (comments, row counts, etc.)
3. **🏗️ get_table_structure** - Get detailed table structure information
4. **📜 get_table_ddl** - Export table DDL (CREATE TABLE statements)
5. **👁️ execute_readonly_query** - Execute read-only SQL queries safely
6. **✏️ execute_write_query** - Execute write SQL operations
### 🎯 Smart Configuration Management
- **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
## 🗄️ Supported Databases
- **PostgreSQL** - Full support with native features
- **MySQL** - Complete functionality including engine-specific features
- **SQLite** - Comprehensive support for embedded database operations
## 🔧 Installation
### Option 1: NPM (Recommended)
Install globally via npm:
```bash
npm install -g @sqlx-mcp/sqlx-mcp
```
Or use directly with npx (no installation needed):
```bash
npx @sqlx-mcp/sqlx-mcp --database-url "postgresql://user:pass@localhost/mydb"
```
### Option 2: Build from Source
#### Prerequisites
- Rust 1.70 or later
- Git
#### Build Steps
```bash
git clone https://github.com/lihongjie0209/sqlx-mcp.git
cd sqlx-mcp
cargo build --release
```
## 🚀 Quick Start
### 1. Run as Standalone Server
#### Using NPM/npx (Recommended):
```bash
# 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
```
#### Using Built Binary:
```bash
# 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"
```
### 2. Integrate with Claude Desktop
Add to your Claude Desktop configuration. The server will automatically notify Claude about the current database configuration status.
#### Using NPM Package (Recommended):
**With Environment Variable (Recommended):**
```json
{
"mcpServers": {
"sqlx-mcp": {
"command": "npx",
"args": ["@sqlx-mcp/sqlx-mcp"],
"env": {
"DATABASE_URL": "postgresql://user:pass@localhost/mydb"
}
}
}
}
```
**With Command Line Argument:**
```json
{
"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):**
```json
{
"mcpServers": {
"sqlx-mcp": {
"command": "npx",
"args": ["@sqlx-mcp/sqlx-mcp"]
}
}
}
```
#### Using Built Binary:
**Windows (`%APPDATA%\Claude\claude_desktop_config.json`):**
```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:**
```json
{
"mcpServers": {
"sqlx-mcp": {
"command": "/path/to/sqlx-mcp/target/release/sqlx-mcp",
"args": ["--database-url", "postgresql://user:pass@localhost/mydb"]
}
}
}
```
## 🔗 Database Configuration
The server provides intelligent database configuration management with automatic detection and client notification.
### Configuration Priority
The server resolves database connections with the following priority:
1. **Tool Parameter** (highest) - `database_url` parameter in individual tool calls
2. **Command Line** - `--database-url` argument at server startup
3. **Environment Variable** (lowest) - `DATABASE_URL` environment variable
### Auto-Detection & Client Notification
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
#### Example Client Notifications:
**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.
```
### Flexible Usage Patterns
#### Pre-configured Server (Recommended)
```bash
# 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:
```json
{
"name": "list_tables",
"arguments": {}
}
```
#### Per-Tool Database URLs
```json
{
"name": "list_tables",
"arguments": {
"database_url": "postgresql://user:pass@different-host/other-db"
}
}
```
This allows flexible connection management for multiple databases.
## 🛠️ Tool Usage Examples
### Get Database Information
```json
{
"name": "get_database_info",
"arguments": {
"database_url": "postgresql://user:pass@localhost/mydb" // Optional if server is pre-configured
}
}
```
### List Tables with Metadata
```json
{
"name": "list_tables",
"arguments": {
"database_url": "postgresql://user:pass@localhost/mydb" // Optional if server is pre-configured
}
}
```
### Export Table DDL
```json
{
"name": "get_table_ddl",
"arguments": {
"database_url": "postgresql://user:pass@localhost/mydb", // Optional if server is pre-configured
"table_name": "users"
}
}
```
### Execute Safe Read-Only Queries
Supports SELECT, WITH (CTE), SHOW, DESCRIBE, EXPLAIN:
```json
{
"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.
## 🔒 Security Features
- **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
## 🏗️ Architecture
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
## 📚 Documentation
- [Detailed Usage Guide](README_USAGE.md)
- [Database Configuration Guide](DATABASE_CONFIG_VERIFICATION.md)
- [DDL Export Feature](DDL_EXPORT_FEATURE.md)
- [List Tables Feature](LIST_TABLES_FEATURE.md)
- [Improvements Summary](IMPROVEMENTS_SUMMARY.md)
- [Deployment Guide](DEPLOYMENT_SUMMARY.md)
- [PowerShell Environment Setup](scripts/POWERSHELL_ENV_SETUP.md)
## 🔧 Development & Release
This project includes an advanced automated release system powered by AI:
### Environment Setup
For Windows PowerShell users who want to use the automated release features:
```powershell
# 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](scripts/POWERSHELL_ENV_SETUP.md).
### Release Management
The project includes a comprehensive release script with AI-powered commit message generation:
```bash
# 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)
## 🤝 Contributing
1. Fork the repository
2. Create a feature branch (`git checkout -b feature/amazing-feature`)
3. Commit your changes (`git commit -m 'Add some amazing feature'`)
4. Push to the branch (`git push origin feature/amazing-feature`)
5. Open a Pull Request
## 📄 License
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
## 🙏 Acknowledgments
- [Model Context Protocol](https://modelcontextprotocol.io/) for the protocol specification
- [SQLx](https://github.com/launchbadge/sqlx) for the excellent SQL toolkit
- [rmcp](https://github.com/modelcontextprotocol/rust-mcp-sdk) for the Rust MCP SDK
## 📞 Support
- Create an [Issue](https://github.com/lihongjie0209/sqlx-mcp/issues) for bug reports
- Start a [Discussion](https://github.com/lihongjie0209/sqlx-mcp/discussions) for questions
- Check the [Documentation](README_USAGE.md) for detailed guides
---
Made with ❤️ and 🦀 (Rust)