SagenKoder/go-mysql-mcp-server
If you are the rightful owner of go-mysql-mcp-server and would like to certify it and/or have it hosted online, please leave a comment on the right or send an email to henry@mcphub.com.
The MySQL MCP Server is a Model Context Protocol server that allows AI agents to interact directly with MySQL databases, enabling efficient querying and analysis.
list_schemas
List all schemas/databases available in the MySQL server.
list_tables
List all tables in a specific schema with metadata.
get_table_structure
Get detailed column and index information for a table.
get_table_create
Get the CREATE TABLE statement for a specific table.
execute_query
Execute a SQL query (SELECT, SHOW, DESCRIBE, EXPLAIN only).
search_table
Search for a value across all text columns in a table.
MySQL MCP Server
A Model Context Protocol (MCP) server that provides AI agents with direct access to MySQL databases. This server enables AI models to query, search, and analyze MySQL database content through a set of well-defined tools.
Features
- Schema exploration - List all schemas/databases with pagination
- Table discovery - Browse tables in any schema with detailed metadata
- Structure inspection - Get column definitions, types, and indexes
- Safe querying - Execute SELECT queries with automatic result limiting
- Full-text search - Search for values across all text columns in a table
- DDL retrieval - Get CREATE TABLE statements for any table
Quick Start with Docker
Running with Docker (Recommended)
The easiest way to run the MySQL MCP server is using Docker:
# Pull the latest image (stdio mode by default)
docker pull ghcr.io/sagenkoder/go-mysql-mcp-server:latest
# Or pull a specific mode
docker pull ghcr.io/sagenkoder/go-mysql-mcp-server:stdio
docker pull ghcr.io/sagenkoder/go-mysql-mcp-server:http
docker pull ghcr.io/sagenkoder/go-mysql-mcp-server:interactive
Docker Usage Examples
Stdio mode (for Claude Desktop)
# Connect to MySQL on host machine
docker run -i --rm \
--network host \
-e MYSQL_HOST=localhost \
-e MYSQL_USER=your_user \
-e MYSQL_PASSWORD=your_password \
-e MYSQL_DATABASE=your_database \
ghcr.io/sagenkoder/go-mysql-mcp-server:stdio
HTTP server mode
# Run HTTP server on port 8080
docker run -d \
--name mysql-mcp-http \
--network host \
-p 8080:8080 \
-e MYSQL_HOST=localhost \
-e MYSQL_USER=your_user \
-e MYSQL_PASSWORD=your_password \
ghcr.io/sagenkoder/go-mysql-mcp-server:http
Interactive mode (for testing)
# Run in interactive mode
docker run -it --rm \
--network host \
-e MYSQL_HOST=localhost \
-e MYSQL_USER=your_user \
-e MYSQL_PASSWORD=your_password \
ghcr.io/sagenkoder/go-mysql-mcp-server:interactive
Connecting to MySQL in Docker
If your MySQL is also running in Docker, use Docker networking:
# Create a network
docker network create myapp
# Run MySQL (example)
docker run -d \
--name mysql \
--network myapp \
-e MYSQL_ROOT_PASSWORD=rootpass \
-e MYSQL_DATABASE=mydb \
mysql:8
# Run MCP server
docker run -i --rm \
--network myapp \
-e MYSQL_HOST=mysql \
-e MYSQL_USER=root \
-e MYSQL_PASSWORD=rootpass \
-e MYSQL_DATABASE=mydb \
ghcr.io/sagenkoder/go-mysql-mcp-server:stdio
Claude Desktop Configuration
Using Docker with Claude Desktop
Add this to your Claude Desktop configuration file:
{
"mcpServers": {
"mysql": {
"command": "docker",
"args": [
"run", "-i", "--rm",
"--network", "host",
"-e", "MYSQL_HOST=localhost",
"-e", "MYSQL_USER=your_user",
"-e", "MYSQL_PASSWORD=your_password",
"-e", "MYSQL_DATABASE=your_database",
"ghcr.io/sagenkoder/go-mysql-mcp-server:stdio"
]
}
}
}
Using Binary with Claude Desktop
If you prefer to use the binary directly:
{
"mcpServers": {
"mysql": {
"command": "/path/to/mysql-mcp-stdio",
"env": {
"MYSQL_HOST": "localhost",
"MYSQL_PORT": "3306",
"MYSQL_USER": "your_user",
"MYSQL_PASSWORD": "your_password",
"MYSQL_DATABASE": "your_database"
}
}
}
}
Building from Source
Prerequisites
- Go 1.23 or later
- Docker (optional, for building Docker images)
Build Steps
# Clone the repository
git clone https://github.com/sagenkoder/go-mysql-mcp-server.git
cd go-mysql-mcp-server
# Build all binaries
./build.sh
# Build Docker images
./build.sh docker
This will create:
- Binaries:
mysql-mcp-stdio
- For stdio-based MCP communicationmysql-mcp-http
- HTTP server modemysql-mcp-interactive
- Interactive CLI mode for testing
- Docker images:
ghcr.io/sagenkoder/go-mysql-mcp-server:stdio
(also tagged asmysql-mcp:latest
)ghcr.io/sagenkoder/go-mysql-mcp-server:http
ghcr.io/sagenkoder/go-mysql-mcp-server:interactive
Configuration
The server connects to MySQL using these environment variables:
MYSQL_HOST
- MySQL server hostname (default: localhost)MYSQL_PORT
- MySQL server port (default: 3306)MYSQL_USER
- MySQL username (default: root)MYSQL_PASSWORD
- MySQL password (required)MYSQL_DATABASE
- Default database (optional)
Available Tools
list_schemas
List all schemas/databases available in the MySQL server.
Parameters:
page
(optional): Page number for pagination (default: 1)page_size
(optional): Number of items per page (default: 20, max: 100)
list_tables
List all tables in a specific schema with metadata.
Parameters:
schema
(required): The schema/database namepage
(optional): Page number for paginationpage_size
(optional): Number of items per page
get_table_structure
Get detailed column and index information for a table.
Parameters:
schema
(required): The schema/database nametable
(required): The table name
get_table_create
Get the CREATE TABLE statement for a specific table.
Parameters:
schema
(required): The schema/database nametable
(required): The table name
execute_query
Execute a SQL query (SELECT, SHOW, DESCRIBE, EXPLAIN only).
Parameters:
query
(required): The SQL query to executelimit
(optional): Maximum rows to return (default: 100)
search_table
Search for a value across all text columns in a table.
Parameters:
schema
(required): The schema/database nametable
(required): The table namesearch_term
(required): The term to search forlimit
(optional): Maximum rows to return (default: 100)
Testing the Connection
Use the interactive mode to test your connection:
# With Docker
docker run -it --rm \
--network host \
-e MYSQL_HOST=localhost \
-e MYSQL_USER=test \
-e MYSQL_PASSWORD=test \
ghcr.io/sagenkoder/go-mysql-mcp-server:interactive
# With binary
MYSQL_USER=test MYSQL_PASSWORD=test ./mysql-mcp-interactive
Security Considerations
- Only SELECT, SHOW, DESCRIBE, and EXPLAIN queries are allowed
- All queries are automatically limited to prevent large result sets
- Table searches only scan text-based columns
- Connection details should be stored securely as environment variables
- The Docker image runs as a non-root user for security
Troubleshooting
Connection Issues
- Ensure MySQL is running and accessible
- Check that the MySQL user has appropriate permissions
- When using Docker, verify network connectivity (
--network host
for local MySQL) - Test with mysql CLI client first:
mysql -h localhost -u user -p
Docker Network Issues
- Use
--network host
to connect to MySQL on the host machine - For MySQL in Docker, create a shared network and use container names as hostnames
- Check firewall rules if connecting to remote MySQL
License
MIT License - see LICENSE file for details.