MySQL MCP Server

by xiangma9712
Verified

hybrid server

The server is able to function both locally and remotely, depending on the configuration or use case.

MySQL MCP Server

An MCP server for interacting with MySQL databases.

This server supports executing read-only queries (query) and write queries that are ultimately rolled back (test_execute).

Setup

Environment Variables

Add the following environment variables to ~/.mcp/.env:

MYSQL_HOST=host.docker.internal # Hostname to access host services from Docker container MYSQL_PORT=3306 MYSQL_USER=root MYSQL_PASSWORD=your_password

Note: host.docker.internal is a special DNS name for accessing host machine services from Docker containers. Use this setting when connecting to a MySQL server running on your host machine. If connecting to a different MySQL server, change to the appropriate hostname.

mcp.json Configuration

{ "mcpServers": { "mysql": { "command": "docker", "args": [ "run", "-i", "--rm", "--add-host=host.docker.internal:host-gateway", "--env-file", "/Users/username/.mcp/.env", "my-mcp/mysql" ] } } }

Usage

Starting the Server

docker run -i --rm --add-host=host.docker.internal:host-gateway --env-file ~/.mcp/.env my-mcp/mysql

Note: If you're using OrbStack, host.docker.internal is automatically supported, so the --add-host option can be omitted. While Docker Desktop also typically supports this automatically, adding the --add-host option is recommended for better reliability.

Available Commands

1. Execute Read-only Query

{ "type": "query", "payload": { "sql": "SELECT * FROM your_table" } }

Response:

{ "success": true, "data": [ { "id": 1, "name": "example" } ] }

2. Test Query Execution

{ "type": "test_execute", "payload": { "sql": "UPDATE your_table SET name = 'updated' WHERE id = 1" } }

Response:

{ "success": true, "data": "The UPDATE SQL query can be executed." }

3. List Tables

{ "type": "list_tables" }

Response:

{ "success": true, "data": ["table1", "table2", "table3"] }

4. Describe Table

{ "type": "describe_table", "payload": { "table": "your_table" } }

Response:

{ "success": true, "data": [ { "Field": "id", "Type": "int(11)", "Null": "NO", "Key": "PRI", "Default": null, "Extra": "" }, { "Field": "name", "Type": "varchar(255)", "Null": "YES", "Key": "", "Default": null, "Extra": "" } ] }

Implementation Details

  • Implemented in TypeScript
  • Uses mysql2 package
  • Runs as a Docker container
  • Accepts JSON commands through standard input
  • Returns JSON responses through standard output
  • Uses host.docker.internal to connect to host MySQL (compatible with both OrbStack and Docker Desktop)

Security Considerations

  • Uses environment variables for sensitive information management
  • SQL injection prevention is the implementer's responsibility
  • Proper network configuration required for production use
  • Appropriate firewall settings needed when connecting to host machine services

You must be authenticated.

A
security – no known vulnerabilities
A
license - permissive license
A
quality - confirmed to work

Enables interaction with a MySQL database via JSON commands, supporting read-only queries, test execution of write queries, and table information retrieval through Docker.

  1. Setup
    1. Environment Variables
      1. mcp.json Configuration
      2. Usage
        1. Starting the Server
          1. Available Commands
            1. 1. Execute Read-only Query
              1. 2. Test Query Execution
                1. 3. List Tables
                  1. 4. Describe Table
                2. Implementation Details
                  1. Security Considerations