Skip to main content
Glama
Nam088

Multi-Database MCP Server

by Nam088
README.md9.91 kB
# @nam088/mcp-mysql MySQL/MariaDB plugin for Model Context Protocol (MCP) server. This plugin provides a comprehensive set of tools for interacting with MySQL and MariaDB databases through the MCP protocol. ## Features - 🔍 **Query Execution**: Execute SELECT queries with parameterized queries support - ✏️ **Write Operations**: INSERT, UPDATE, DELETE, and DDL operations (with mode control) - 📊 **Database Inspection**: List databases, tables, columns, indexes, constraints - 🔧 **Maintenance**: Optimize and analyze tables - 📈 **Performance**: Query execution plans with EXPLAIN - 🔒 **Process Management**: View and kill running queries - 🔄 **Triggers & Views**: List and manage triggers, views, stored procedures, and functions - 🛡️ **Mode Control**: READONLY, WRITEONLY, or FULL modes for security ## Installation ```bash npm install @nam088/mcp-mysql ``` ## Usage ### As a Standalone MCP Server Create a configuration file or use environment variables: ```json { "mcpServers": { "mysql": { "command": "npx", "args": ["-y", "@nam088/mcp-mysql"], "env": { "MYSQL_HOST": "localhost", "MYSQL_PORT": "3306", "MYSQL_USER": "root", "MYSQL_PASSWORD": "your_password", "MYSQL_DATABASE": "your_database", "MYSQL_MODE": "FULL" } } } } ``` ### Complete Configuration Examples **Basic Configuration:** ```json { "mcpServers": { "mysql": { "command": "npx", "args": ["-y", "@nam088/mcp-mysql"], "env": { "MYSQL_HOST": "localhost", "MYSQL_PORT": "3306", "MYSQL_USER": "root", "MYSQL_PASSWORD": "your_password", "MYSQL_DATABASE": "your_database", "MYSQL_MODE": "FULL" } } } } ``` **With Connection Pool Settings:** ```json { "mcpServers": { "mysql": { "command": "npx", "args": ["-y", "@nam088/mcp-mysql"], "env": { "MYSQL_HOST": "db.example.com", "MYSQL_PORT": "3306", "MYSQL_USER": "db_user", "MYSQL_PASSWORD": "your_password", "MYSQL_DATABASE": "production_db", "MYSQL_MODE": "READONLY", "MYSQL_POOL_SIZE": "10", "MYSQL_TIMEOUT": "10000" } } } } ``` **MariaDB Configuration:** ```json { "mcpServers": { "mysql": { "command": "npx", "args": ["-y", "@nam088/mcp-mysql"], "env": { "MYSQL_HOST": "mariadb.example.com", "MYSQL_PORT": "3306", "MYSQL_USER": "mariadb_user", "MYSQL_PASSWORD": "your_password", "MYSQL_DATABASE": "mariadb_database", "MYSQL_MODE": "FULL", "MYSQL_POOL_SIZE": "15", "MYSQL_TIMEOUT": "15000" } } } } ``` ### As a Plugin in Your MCP Server ```typescript import { PluginRegistry } from '@nam088/mcp-core'; import { MysqlPlugin } from '@nam088/mcp-mysql'; const registry = new PluginRegistry({ name: 'my-mcp-server', version: '1.0.0', }); // Register MySQL plugin registry.registerPlugin(new MysqlPlugin({ host: 'localhost', port: 3306, user: 'root', password: 'your_password', database: 'your_database', mode: 'FULL', // READONLY, WRITEONLY, or FULL })); await registry.start(); ``` ## Configuration ### Environment Variables - `MYSQL_HOST` - Database host (default: `localhost`) - `MYSQL_PORT` - Database port (default: `3306`) - `MYSQL_USER` - Database user (default: `root`) - `MYSQL_PASSWORD` or `MYSQL_PWD` - Database password - `MYSQL_DATABASE` or `MYSQL_DB` - Database name (default: `mysql`) - `MYSQL_MODE` - Plugin mode: `READONLY`, `WRITEONLY`, or `FULL` (default: `READONLY`) - `MYSQL_POOL_SIZE` - Connection pool size (default: `10`) - `MYSQL_TIMEOUT` - Connection timeout in milliseconds (default: `10000`) ### Plugin Configuration ```typescript new MysqlPlugin({ // Connection settings host: 'localhost', port: 3306, user: 'root', password: 'your_password', database: 'your_database', // Pool settings connectionLimit: 10, connectTimeout: 10000, waitForConnections: true, queueLimit: 0, // Plugin mode mode: 'FULL', // READONLY, WRITEONLY, or FULL }) ``` ## Plugin Modes ### READONLY Mode (Default) Only allows read operations: - `mysql_query` - Execute SELECT queries - `mysql_list_*` - List databases, tables, indexes, etc. - `mysql_describe_*` - Describe table structures - `mysql_explain_query` - Explain query execution plans - `mysql_processlist` - View running processes - `mysql_database_info` - Get database server info ### WRITEONLY Mode Only allows write operations: - `mysql_execute` - Execute INSERT, UPDATE, DELETE, DDL - `mysql_kill_query` - Kill running queries - `mysql_optimize_table` - Optimize tables - `mysql_analyze_table` - Analyze tables ### FULL Mode Allows all operations (both read and write). ## Available Tools ### Query Tools #### `mysql_query` Execute SELECT queries on the database. ```typescript { query: "SELECT * FROM users WHERE id = ?", params: [1] } ``` #### `mysql_execute` Execute INSERT, UPDATE, DELETE, or DDL queries (requires FULL or WRITEONLY mode). ```typescript { query: "INSERT INTO users (name, email) VALUES (?, ?)", params: ["John Doe", "john@example.com"] } ``` ### Database Inspection Tools #### `mysql_list_databases` List all databases in the MySQL server. ```typescript {} ``` #### `mysql_list_tables` List all tables in a database. ```typescript { database: "my_database" // optional, uses current database if not provided } ``` #### `mysql_describe_table` Get detailed information about a table structure. ```typescript { table: "users", database: "my_database" // optional } ``` #### `mysql_list_indexes` List all indexes for a table. ```typescript { table: "users", database: "my_database" // optional } ``` #### `mysql_list_constraints` List all constraints for a table (foreign keys, primary keys, unique). ```typescript { table: "users", database: "my_database" // optional } ``` #### `mysql_database_info` Get MySQL database server information. ```typescript {} ``` ### Performance Tools #### `mysql_explain_query` Explain a query execution plan. ```typescript { query: "SELECT * FROM users WHERE email = ?", format: "JSON", // TRADITIONAL, JSON, or TREE (default: TRADITIONAL) params: ["john@example.com"] } ``` #### `mysql_table_status` Get detailed status information about tables. ```typescript { table: "users", // optional, all tables if not provided database: "my_database" // optional } ``` ### Process Management Tools #### `mysql_processlist` List currently running processes/queries. ```typescript { full: true // optional, show full queries (default: false) } ``` #### `mysql_kill_query` Kill a running query by process ID (requires FULL or WRITEONLY mode). ```typescript { pid: 123, connection: false // optional, kill entire connection (default: false) } ``` ### Maintenance Tools #### `mysql_optimize_table` Optimize a table to reclaim storage and improve performance (requires FULL or WRITEONLY mode). ```typescript { table: "users", database: "my_database" // optional } ``` #### `mysql_analyze_table` Analyze a table to update index statistics (requires FULL or WRITEONLY mode). ```typescript { table: "users", database: "my_database" // optional } ``` ### Database Objects Tools #### `mysql_list_views` List all views in a database. ```typescript { database: "my_database" // optional } ``` #### `mysql_list_procedures` List all stored procedures in a database. ```typescript { database: "my_database" // optional } ``` #### `mysql_list_functions` List all stored functions in a database. ```typescript { database: "my_database" // optional } ``` #### `mysql_list_triggers` List all triggers for a table or database. ```typescript { table: "users", // optional, all triggers if not provided database: "my_database" // optional } ``` ## Security Best Practices 1. **Use READONLY mode by default** - Only enable write operations when needed 2. **Use parameterized queries** - Always use the `params` parameter to prevent SQL injection 3. **Limit database user permissions** - Use a database user with minimal required privileges 4. **Secure connection strings** - Never commit passwords to version control 5. **Use environment variables** - Store sensitive configuration in environment variables 6. **Enable SSL/TLS** - Use encrypted connections for production databases ## Examples ### Query with Parameters ```typescript // Safe - uses parameterized query await mysql_query({ query: "SELECT * FROM users WHERE email = ? AND status = ?", params: ["john@example.com", "active"] }) ``` ### List All Tables ```typescript await mysql_list_tables({ database: "my_database" }) ``` ### Explain Query Performance ```typescript await mysql_explain_query({ query: "SELECT u.*, p.* FROM users u JOIN posts p ON u.id = p.user_id WHERE u.status = 'active'", format: "JSON" }) ``` ### Optimize Table ```typescript await mysql_optimize_table({ table: "users", database: "my_database" }) ``` ### Kill Long-Running Query ```typescript // First, find the process ID await mysql_processlist({ full: true }) // Then kill the query await mysql_kill_query({ pid: 123, connection: false }) ``` ## Supported Databases - MySQL 5.7+ - MySQL 8.0+ - MariaDB 10.2+ - MariaDB 10.3+ - MariaDB 10.4+ - MariaDB 10.5+ - MariaDB 10.6+ - MariaDB 11.0+ ## Development ```bash # Install dependencies npm install # Build npm run build # Type check npm run type-check # Clean npm run clean ``` ## License MIT ## Author nam088 ## Contributing Contributions are welcome! Please feel free to submit a Pull Request. ## Changelog ### 0.1.0 - Initial release - Support for MySQL and MariaDB - 20+ tools for database operations - Mode control (READONLY, WRITEONLY, FULL) - Connection pooling - Parameterized queries - Health checks

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

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