@saturninoadrales/mysql-mcp
v1.0.0
Published
MySQL MCP Server - Model Context Protocol server for readonly MySQL database operations in Claude Desktop
Maintainers
Readme
MySQL MCP Server
A Model Context Protocol (MCP) server that provides readonly MySQL database operations for AI agents with support for multiple database servers.
Features
- list_servers: Show all configured MySQL servers
- list_tables: List all tables in the database
- describe_table: Show table structure and column information
- query: Execute SELECT queries (readonly only)
- show_databases: List available databases
- use_database: Switch to a different database on a server
Installation
For detailed installation instructions, see INSTALLATION.md
From npm (once published)
npm install -g @saturninoadrales/mysql-mcpFrom source
git clone <repository-url>
cd mysql-mcp
npm installConfiguration
Option 1: Multiple Servers (Recommended)
Configure multiple MySQL servers using a JSON environment variable MYSQL_SERVERS:
{
"production": {
"host": "prod.example.com",
"port": 3306,
"user": "prod_user",
"password": "prod_password",
"database": "prod_db"
},
"staging": {
"host": "staging.example.com",
"port": 3306,
"user": "staging_user",
"password": "staging_password",
"database": "staging_db"
},
"local": {
"host": "localhost",
"port": 3306,
"user": "root",
"password": "local_password",
"database": "test_db"
}
}Option 2: Single Server (Backward Compatible)
Copy .env.example to .env and configure your MySQL connection:
cp .env.example .envSet the following environment variables:
MYSQL_HOST: MySQL server host (default: localhost)MYSQL_PORT: MySQL server port (default: 3306)MYSQL_USER: MySQL username (default: root)MYSQL_PASSWORD: MySQL passwordMYSQL_DATABASE: Database name to connect to
Usage with Claude Desktop
Multiple Servers Configuration
If installed from npm:
{
"mcpServers": {
"mysql": {
"command": "mysql-mcp",
"env": {
"MYSQL_SERVERS": "{\"production\":{\"host\":\"prod.example.com\",\"port\":3306,\"user\":\"prod_user\",\"password\":\"prod_password\",\"database\":\"prod_db\"},\"staging\":{\"host\":\"staging.example.com\",\"port\":3306,\"user\":\"staging_user\",\"password\":\"staging_password\",\"database\":\"staging_db\"}}"
}
}
}
}If running from source:
{
"mcpServers": {
"mysql": {
"command": "node",
"args": ["path/to/mysql-mcp/server.js"],
"env": {
"MYSQL_SERVERS": "{\"production\":{\"host\":\"prod.example.com\",\"port\":3306,\"user\":\"prod_user\",\"password\":\"prod_password\",\"database\":\"prod_db\"},\"staging\":{\"host\":\"staging.example.com\",\"port\":3306,\"user\":\"staging_user\",\"password\":\"staging_password\",\"database\":\"staging_db\"}}"
}
}
}
}Single Server Configuration
{
"mcpServers": {
"mysql": {
"command": "node",
"args": ["path/to/mysql-mcp/server.js"],
"env": {
"MYSQL_HOST": "localhost",
"MYSQL_PORT": "3306",
"MYSQL_USER": "your_username",
"MYSQL_PASSWORD": "your_password",
"MYSQL_DATABASE": "your_database"
}
}
}
}Using Multiple Servers
When multiple servers are configured, all tools accept an optional server parameter:
// List tables from production server
await list_tables({ server: "production" })
// Query staging server
await query({
sql: "SELECT * FROM users LIMIT 10",
server: "staging"
})
// Describe table on local server
await describe_table({
table_name: "products",
server: "local"
})
// If no server is specified, "default" is used
await list_tables() // Uses "default" serverSecurity
This server only allows readonly operations (SELECT, SHOW, DESCRIBE) for safety. All other SQL operations are blocked.
