Skip to main content
Glama

SQLx MCP Server

A Model Context Protocol (MCP) server implementation in Rust that provides comprehensive database management tools using SQLx.

Rust License: 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

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"

Option 2: Build from Source

Prerequisites

  • Rust 1.70 or later

  • Git

Build Steps

git clone https://github.com/lihongjie0209/sqlx-mcp.git cd sqlx-mcp cargo build --release

πŸš€ Quick Start

1. Run as Standalone Server

# 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:

# 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.

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"] } } }

Using Built Binary:

Windows (

{ "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"] } } }

πŸ”— 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

# 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": {} }

Per-Tool Database URLs

{ "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

{ "name": "get_database_info", "arguments": { "database_url": "postgresql://user:pass@localhost/mydb" // Optional if server is pre-configured } }

List Tables with Metadata

{ "name": "list_tables", "arguments": { "database_url": "postgresql://user:pass@localhost/mydb" // Optional if server is pre-configured } }

Export Table DDL

{ "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:

{ "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

πŸ”§ 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:

# 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.

Release Management

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)

🀝 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 file for details.

πŸ™ Acknowledgments

πŸ“ž Support


Made with ❀️ and πŸ¦€ (Rust)

-
security - not tested
A
license - permissive license
-
quality - not tested

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/lihongjie0209/sqlx-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server