A Model Context Protocol server that provides MySQL database operations. This server enables AI models to interact with MySQL databases through a standardized interface.
To install MySQL Database Server for Claude Desktop automatically via Smithery:
npx -y @smithery/cli install @enemyrr/mcp-mysql-server --client claude
git clone https://github.com/enemyrr/mcp-mysql-server.git
cd mcp-mysql-server
npm install
npm run build
mysqlcommandnode /absolute/path/to/mcp-mysql-server/build/index.jsNote: Replace
/absolute/path/to/with the actual path where you cloned and built the project.
You can configure the database connection in three ways:
DATABASE_URL=mysql://user:password@host:3306/database
DB_HOST=localhost
DB_USER=your_user
DB_PASSWORD=your_password
DB_DATABASE=your_database
use_mcp_tool({
server_name: "mysql",
tool_name: "connect_db",
arguments: {
url: "mysql://user:password@host:3306/database"
// OR
workspace: "/path/to/your/project" // Will use project's .env
// OR
host: "localhost",
user: "your_user",
password: "your_password",
database: "your_database"
}
});
Connect to MySQL database using URL, workspace path, or direct credentials.
Execute SELECT queries with optional prepared statement parameters.
use_mcp_tool({
server_name: "mysql",
tool_name: "query",
arguments: {
sql: "SELECT * FROM users WHERE id = ?",
params: [1]
}
});
Execute INSERT, UPDATE, or DELETE queries with optional prepared statement parameters.
use_mcp_tool({
server_name: "mysql",
tool_name: "execute",
arguments: {
sql: "INSERT INTO users (name, email) VALUES (?, ?)",
params: ["John Doe", "john@example.com"]
}
});
List all tables in the connected database.
use_mcp_tool({
server_name: "mysql",
tool_name: "list_tables"
});
Get the structure of a specific table.
use_mcp_tool({
server_name: "mysql",
tool_name: "describe_table",
arguments: {
table: "users"
}
});
Create a new table with specified fields and indexes.
use_mcp_tool({
server_name: "mysql",
tool_name: "create_table",
arguments: {
table: "users",
fields: [
{
name: "id",
type: "int",
autoIncrement: true,
primary: true
},
{
name: "email",
type: "varchar",
length: 255,
nullable: false
}
],
indexes: [
{
name: "email_idx",
columns: ["email"],
unique: true
}
]
}
});
Add a new column to an existing table.
use_mcp_tool({
server_name: "mysql",
tool_name: "add_column",
arguments: {
table: "users",
field: {
name: "phone",
type: "varchar",
length: 20,
nullable: true
}
}
});
Modify an existing column (type, nullable, default, or rename).
use_mcp_tool({
server_name: "mysql",
tool_name: "alter_column",
arguments: {
table: "users",
column: "phone",
type: "varchar",
length: 50,
nullable: false,
newName: "phone_number" // optional: rename column
}
});
Remove a column from a table.
use_mcp_tool({
server_name: "mysql",
tool_name: "drop_column",
arguments: {
table: "users",
column: "phone_number"
}
});
Delete a table (requires confirmation).
use_mcp_tool({
server_name: "mysql",
tool_name: "drop_table",
arguments: {
table: "old_table",
confirm: true
}
});
Remove all rows from a table (requires confirmation).
use_mcp_tool({
server_name: "mysql",
tool_name: "truncate_table",
arguments: {
table: "logs",
confirm: true
}
});
List all accessible databases on the server.
List all indexes on a table.
use_mcp_tool({
server_name: "mysql",
tool_name: "get_indexes",
arguments: {
table: "users"
}
});
List all foreign key relationships for a table.
use_mcp_tool({
server_name: "mysql",
tool_name: "get_foreign_keys",
arguments: {
table: "orders"
}
});
Browse database schema as resources:
| URI | Description |
|---|---|
mysql://schema |
Database overview (table count, size) |
mysql://tables |
List all tables with metadata |
mysql://tables/{name} |
Table details (columns, indexes, FKs) |
mysql://tables/{name}/columns |
Column definitions |
mysql://tables/{name}/indexes |
Index definitions |
mysql://tables/{name}/sample |
Sample 5 rows from table |
Pre-built prompts for common operations:
| Prompt | Description |
|---|---|
generate-select |
Build SELECT query for a table |
generate-insert |
Generate INSERT template |
generate-update |
Generate UPDATE template |
explain-schema |
Natural language schema explanation |
suggest-indexes |
Index recommendations for a table |
The server provides detailed error messages for: - Connection failures - Invalid queries or parameters - Missing configuration - Database errors - Schema validation errors
Contributions are welcome! Please feel free to submit a Pull Request to https://github.com/enemyrr/mcp-mysql-server
MIT
$ claude mcp add mcp-mysql-server \
-- python -m otcore.mcp_server <graph>