mysql-mcp
README.md
# 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](INSTALLATION.md)
### From npm (once published)
```bash
npm install -g @your-username/mysql-mcp
```
### From source
```bash
git clone <repository-url>
cd mysql-mcp
npm install
```
## Configuration
### Option 1: Multiple Servers (Recommended)
Configure multiple MySQL servers using a JSON environment variable `MYSQL_SERVERS`:
```json
{
"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:
```bash
cp .env.example .env
```
Set 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 password
- `MYSQL_DATABASE`: Database name to connect to
## Usage with Claude Desktop
### Multiple Servers Configuration
**If installed from npm:**
```json
{
"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:**
```json
{
"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
```json
{
"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:
```javascript
// 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" server
```
## Security
This server only allows readonly operations (SELECT, SHOW, DESCRIBE) for safety. All other SQL operations are blocked.This server cannot be deployed
Maintenance
ActivityInactive
ResponsivenessNo issues