SQLx MCP Server

SQLx MCP Server

Provides comprehensive database management tools for PostgreSQL, MySQL, and SQLite databases. Enables querying table structures, executing read-only and write queries, exporting DDL statements, and managing database metadata through natural language.

Category
Visit Server

README

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

Option 1: NPM (Recommended)

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

Using NPM/npx (Recommended):

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

Using NPM Package (Recommended):

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

🔗 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)

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

Recommended Servers

playwright-mcp

playwright-mcp

A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.

Official
Featured
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.

Official
Featured
Local
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.

Official
Featured
Local
TypeScript
VeyraX MCP

VeyraX MCP

Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.

Official
Featured
Local
Kagi MCP Server

Kagi MCP Server

An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.

Official
Featured
Python
graphlit-mcp-server

graphlit-mcp-server

The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.

Official
Featured
TypeScript
Qdrant Server

Qdrant Server

This repository is an example of how to create a MCP server for Qdrant, a vector search engine.

Official
Featured
Neon Database

Neon Database

MCP server for interacting with Neon Management API and databases

Official
Featured
Exa Search

Exa Search

A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.

Official
Featured
E2B

E2B

Using MCP to run code via e2b.

Official
Featured