MySQL

Interactúa con y administra bases de datos MySQL. Requiere detalles de conexión configurados mediante variables de entorno.

Documentación

Servidor MCP MySQL

Un servidor MCP para interactuar con bases de datos MySQL.

Este servidor admite la ejecución de consultas de solo lectura (query) y consultas de escritura que finalmente se revierten (test_execute).

MySQL Server MCP server

Configuración

Variables de Entorno

Agregue las siguientes variables de entorno a ~/.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

Nota: host.docker.internal es un nombre DNS especial para acceder a los servicios de la máquina host desde contenedores Docker. Use esta configuración al conectarse a un servidor MySQL que se ejecuta en su máquina host. Si se conecta a un servidor MySQL diferente, cambie al nombre de host apropiado.

Configuración de mcp.json

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

Uso

Iniciando el Servidor

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

Nota: Si está usando OrbStack, host.docker.internal se admite automáticamente, por lo que la opción --add-host se puede omitir. Aunque Docker Desktop también suele admitir esto automáticamente, se recomienda agregar la opción --add-host para una mayor confiabilidad.

Comandos Disponibles

1. Ejecutar Consulta de Solo Lectura

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

Respuesta:

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

2. Probar Ejecución de Consulta

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

Respuesta:

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

3. Listar Tablas

{
  "type": "list_tables"
}

Respuesta:

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

4. Describir Tabla

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

Respuesta:

{
  "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": ""
    }
  ]
}

Detalles de Implementación

  • Implementado en TypeScript
  • Usa el paquete mysql2
  • Se ejecuta como un contenedor Docker
  • Acepta comandos JSON a través de la entrada estándar
  • Devuelve respuestas JSON a través de la salida estándar
  • Usa host.docker.internal para conectarse al MySQL del host (compatible con OrbStack y Docker Desktop)

Consideraciones de Seguridad

  • Usa variables de entorno para la gestión de información sensible
  • La prevención de inyección SQL es responsabilidad del implementador
  • Se requiere una configuración de red adecuada para uso en producción
  • Se necesitan configuraciones de firewall apropiadas al conectarse a los servicios de la máquina host