Skip to main content
Glama

MySQL MCP Server

by adamosk
README.md7.76 kB
# MySQL MCP Server A sophisticated Model Context Protocol (MCP) server that provides secure, multi-database MySQL access with configurable security levels, lazy loading, and hot reload capabilities. ## 🚀 Features - **🗄️ Multi-Database Support**: Configure and access multiple MySQL databases simultaneously - **🔒 Configurable Security**: Four security levels from read-only to full access - **⚡ Lazy Loading**: Connection pools created only when needed for optimal resource usage - **🔄 Hot Reload**: Database configuration updates without server restart - **📊 Complete Schema Information**: Full table definitions with indexes, foreign keys, and constraints - **🛡️ Explicit Database Selection**: Required database parameter prevents accidental operations - **🎯 MCP Protocol Integration**: Native VS Code integration with resource browsing ## 🔧 Installation 1. **Clone and Install** ```bash git clone <your-repository-url> cd mysql-mcp-server npm install ``` 2. **Configure Multi-Database Setup** Copy the example configuration file and customize it: ```bash cp .env.example .env ``` Edit `.env` with your database configurations: ```env # Multi-Database Configuration (JSON Array) MYSQL_DATABASES='[ { "name": "primary_db", "host": "localhost", "user": "your_username", "password": "your_password", "database": "your_database" }, { "name": "analytics_db", "host": "analytics.example.com", "user": "analytics_user", "password": "analytics_password", "database": "analytics" } ]' # Security Configuration # Options: (default), extended, all, or custom comma-separated list # MYSQL_ALLOWED_COMMANDS=extended # Connection Pool Settings MYSQL_CONNECTION_LIMIT=4 MYSQL_WAIT_FOR_CONNECTIONS=true # Server Metadata MCP_SERVER_NAME=mysql-mcp-server MCP_SERVER_VERSION=1.0.0 ``` 3. **Add to VS Code MCP Configuration** Add to your VS Code `settings.json` under MCP servers: ```json { "mcp": { "mcpServers": { "mysql-mcp-server": { "command": "node", "args": ["C:/path/to/mysql-mcp-server/mcp-mysql-lite.js"], "env": {} } } } } ``` ## 🔒 Security Levels Configure `MYSQL_ALLOWED_COMMANDS` in your `.env` file: ### Default (Recommended) ```env # MYSQL_ALLOWED_COMMANDS not set or commented out ``` **Allowed Commands**: `SELECT`, `SHOW`, `DESCRIBE`, `DESC`, `EXPLAIN`, `ANALYZE` **Use Case**: Safe read-only access for data analysis and exploration ### Extended ```env MYSQL_ALLOWED_COMMANDS=extended ``` **Allowed Commands**: All default commands plus `CREATE TABLE`, `ALTER TABLE`, `DROP TABLE`, `INSERT`, `UPDATE`, `DELETE`, `TRUNCATE`, etc. **Use Case**: Development environments where schema and data modifications are needed ### All (⚠️ Use with Extreme Caution) ```env MYSQL_ALLOWED_COMMANDS=all ``` **Allowed Commands**: No restrictions - all SQL commands permitted **Use Case**: Trusted environments requiring full database administration capabilities ### Custom ```env MYSQL_ALLOWED_COMMANDS="SELECT,INSERT,UPDATE,CREATE TABLE" ``` **Allowed Commands**: User-defined comma-separated list **Use Case**: Specific operational requirements with tailored permissions ## 🛠️ Available Tools All tools require explicit database selection for security. ### `query_database` Execute SQL queries with security validation and explicit database selection. - **Parameters**: - `sql` (string, **required**) - The SQL query to execute - `database` (string, **required**) - Database name to target (security requirement) - **Security**: Commands validated against current security level - **Returns**: Query results with execution metadata ### `describe_table` Get complete table structure using `SHOW CREATE TABLE` for comprehensive schema information. - **Parameters**: - `table_name` (string, **required**) - Name of the table to describe - `database` (string, **required**) - Database containing the table (security requirement) - **Returns**: Full table definition including columns, indexes, foreign keys, and engine details ### `list_databases` Display all configured databases and their connection status. - **Parameters**: None required - **Returns**: Database configurations with connection pool status and default database indicator ## 📚 Available Resources Tables from the default database are exposed as MCP resources with URIs like: ```text mysql://database_name/table/table_name ``` Browse table schemas directly through VS Code's resource explorer. ## 💡 Usage Examples ### Basic Database Query ```sql -- Query with explicit database selection (security requirement) SELECT COUNT(*) FROM users WHERE active = 1 ``` **Database**: `primary_db` ### Multi-Database Operations ```sql -- Analytics query on different database SELECT DATE(created_at), COUNT(*) FROM events WHERE event_type = 'purchase' GROUP BY DATE(created_at) ORDER BY DATE(created_at) DESC LIMIT 7 ``` **Database**: `analytics_db` ### Table Schema Exploration Use `describe_table` tool: - **Table**: `users` - **Database**: `primary_db` Returns complete table definition with foreign keys, indexes, and constraints. ### Database Discovery Use `list_databases` tool to see all configured databases and their connection status: ```json [ { "name": "primary_db", "host": "localhost", "database": "app_production", "user": "app_user", "isDefault": true, "poolCreated": true }, { "name": "analytics_db", "host": "analytics.company.com", "database": "analytics", "user": "analytics_user", "isDefault": false, "poolCreated": false } ] ``` ## 🔄 Hot Reload Feature Update database configurations in `.env` file - they'll be automatically reloaded: - ✅ **Credential updates**: New passwords/users applied immediately - ✅ **New databases**: Added to available list (restart VS Code to update tool schemas) - ✅ **Configuration changes**: Host/port updates applied on next connection - 🔄 **Existing connections**: Remain active until naturally recycled ## ⚡ Lazy Loading Connection pools are created only when needed: - 📊 **Resource efficient**: No unnecessary database connections - 🚀 **Fast startup**: Server starts immediately regardless of database availability - 🔍 **Status visibility**: `list_databases` shows which pools are active - 🛡️ **Failure isolation**: One database issue doesn't affect others ## 🏗️ Architecture ```text VS Code MCP Client ↓ (stdio) MySQL MCP Server ↓ (lazy loading) Connection Pools ↓ (MySQL protocol) Multiple Databases ``` Key design principles: - **Multi-Database**: Each database has independent configuration and connection pool - **Security**: Command validation before execution, explicit database selection required - **Performance**: Lazy loading + connection pooling for optimal resource usage - **Reliability**: Hot reload + error isolation for production stability ## 🚀 Development ### Running the Server ```bash npm start ``` ### Testing Configuration ```bash # Test connection to all configured databases node mcp-mysql-lite.js ``` ### Environment Variables - `MYSQL_DATABASES`: JSON array of database configurations - `MYSQL_ALLOWED_COMMANDS`: Security level (default/extended/all/custom) - `MYSQL_CONNECTION_LIMIT`: Max connections per pool (default: 4) - `MYSQL_WAIT_FOR_CONNECTIONS`: Wait for available connections (default: true) ## 📄 License MIT License - see LICENSE file for details. --- Built with ❤️ for the Model Context Protocol ecosystem

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/adamosk/mysql-mcp-server'

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