This MCP server provides read-only access to MySQL databases. It allows you to:
- List available databases
- List tables in a database
- Describe table schemas
- Execute read-only SQL queries
- Read-only access: Only SELECT, SHOW, DESCRIBE, and EXPLAIN statements are allowed
- Query validation: Prevents SQL injection and blocks any data modification attempts
- Query timeout: Prevents long-running queries from consuming resources
- Row limit: Prevents excessive data return
# Install globally
npm install -g mysql-mcp-server
# Or install locally in your project
npm install mysql-mcp-server
# Clone the repository
git clone https://github.com/dpflucas/mysql-mcp-server.git
cd mysql-mcp-server
# Install dependencies and build
npm install
npm run build
The server requires the following environment variables:
-
MYSQL_HOST
: Database server hostname -
MYSQL_PORT
: Database server port (default: 3306) -
MYSQL_USER
: Database username -
MYSQL_PASSWORD
: Database password -
MYSQL_DATABASE
: Default database name (optional)
Add the following configuration to your MCP settings file:
If you installed via npm (Option 1):
{
"mcpServers": {
"mysql": {
"command": "npx",
"args": ["mysql-mcp-server"],
"env": {
"MYSQL_HOST": "your-mysql-host",
"MYSQL_PORT": "3306",
"MYSQL_USER": "your-mysql-user",
"MYSQL_PASSWORD": "your-mysql-password",
"MYSQL_DATABASE": "your-default-database"
},
"disabled": false,
"autoApprove": []
}
}
}
If you built from source (Option 2):
{
"mcpServers": {
"mysql": {
"command": "node",
"args": ["/path/to/mysql-mcp-server/build/index.js"],
"env": {
"MYSQL_HOST": "your-mysql-host",
"MYSQL_PORT": "3306",
"MYSQL_USER": "your-mysql-user",
"MYSQL_PASSWORD": "your-mysql-password",
"MYSQL_DATABASE": "your-default-database"
},
"disabled": false,
"autoApprove": []
}
}
}
Lists all accessible databases on the MySQL server.
Parameters: None
Example:
{
"server_name": "mysql",
"tool_name": "list_databases",
"arguments": {}
}
Lists all tables in a specified database.
Parameters:
-
database
(optional): Database name (uses default if not specified)
Example:
{
"server_name": "mysql",
"tool_name": "list_tables",
"arguments": {
"database": "my_database"
}
}
Shows the schema for a specific table.
Parameters:
-
database
(optional): Database name (uses default if not specified) -
table
(required): Table name
Example:
{
"server_name": "mysql",
"tool_name": "describe_table",
"arguments": {
"database": "my_database",
"table": "my_table"
}
}
Executes a read-only SQL query.
Parameters:
-
query
(required): SQL query (only SELECT, SHOW, DESCRIBE, and EXPLAIN statements are allowed) -
database
(optional): Database name (uses default if not specified)
Example:
{
"server_name": "mysql",
"tool_name": "execute_query",
"arguments": {
"database": "my_database",
"query": "SELECT * FROM my_table LIMIT 10"
}
}
The server includes test scripts to verify functionality with your MySQL setup:
This script creates a test database, table, and sample data:
# Set your MySQL credentials as environment variables
export MYSQL_HOST=localhost
export MYSQL_PORT=3306
export MYSQL_USER=your_username
export MYSQL_PASSWORD=your_password
# Run the setup script
npm run test:setup
This script tests each of the MCP tools against the test database:
# Set your MySQL credentials as environment variables
export MYSQL_HOST=localhost
export MYSQL_PORT=3306
export MYSQL_USER=your_username
export MYSQL_PASSWORD=your_password
export MYSQL_DATABASE=mcp_test_db
# Run the tools test script
npm run test:tools
To run both setup and tool tests:
# Set your MySQL credentials as environment variables
export MYSQL_HOST=localhost
export MYSQL_PORT=3306
export MYSQL_USER=your_username
export MYSQL_PASSWORD=your_password
# Run all tests
npm test
If you encounter issues:
- Check the server logs for error messages
- Verify your MySQL credentials and connection details
- Ensure your MySQL user has appropriate permissions
- Check that your query is read-only and properly formatted
This project is licensed under the MIT License - see the LICENSE file for details.