MySQL MCP Server

Proporciona a los agentes de IA acceso directo para consultar, buscar y analizar bases de datos MySQL.

Documentación

Servidor MCP de MySQL

Un servidor de Model Context Protocol (MCP) que proporciona a los agentes de IA acceso directo a bases de datos MySQL. Este servidor permite a los modelos de IA consultar, buscar y analizar el contenido de bases de datos MySQL a través de un conjunto de herramientas bien definidas.

Características

  • Exploración de esquemas - Lista todos los esquemas/bases de datos con paginación
  • Descubrimiento de tablas - Navega por tablas en cualquier esquema con metadatos detallados
  • Inspección de estructura - Obtén definiciones de columnas, tipos e índices
  • Consultas seguras - Ejecuta consultas SELECT con limitación automática de resultados
  • Búsqueda de texto completo - Busca valores en todas las columnas de texto de una tabla
  • Recuperación de DDL - Obtén sentencias CREATE TABLE para cualquier tabla

Inicio rápido con Docker

Ejecutar con Docker (Recomendado)

La forma más fácil de ejecutar el servidor MCP de MySQL es usando 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

Ejemplos de uso con Docker

Modo Stdio (para 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

Modo servidor HTTP

# 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

Modo interactivo (para pruebas)

# 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

Conexión a MySQL en Docker

Si tu MySQL también se ejecuta en Docker, usa la red de Docker:

# 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

Configuración de Claude Desktop

Usar Docker con Claude Desktop

Añade esto a tu archivo de configuración de Claude Desktop:

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

Usar el binario con Claude Desktop

Si prefieres usar el binario directamente:

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

Compilar desde el código fuente

Requisitos previos

  • Go 1.23 o posterior
  • Docker (opcional, para compilar imágenes Docker)

Pasos de compilación

# 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

Esto creará:

  • Binarios:
    • mysql-mcp-stdio - Para comunicación MCP basada en stdio
    • mysql-mcp-http - Modo servidor HTTP
    • mysql-mcp-interactive - Modo CLI interactivo para pruebas
  • Imágenes Docker:
    • ghcr.io/sagenkoder/go-mysql-mcp-server:stdio (también etiquetada como mysql-mcp:latest)
    • ghcr.io/sagenkoder/go-mysql-mcp-server:http
    • ghcr.io/sagenkoder/go-mysql-mcp-server:interactive

Configuración

El servidor se conecta a MySQL usando estas variables de entorno:

  • MYSQL_HOST - Hostname del servidor MySQL (predeterminado: localhost)
  • MYSQL_PORT - Puerto del servidor MySQL (predeterminado: 3306)
  • MYSQL_USER - Usuario de MySQL (predeterminado: root)
  • MYSQL_PASSWORD - Contraseña de MySQL (requerida)
  • MYSQL_DATABASE - Base de datos predeterminada (opcional)

Herramientas disponibles

list_schemas

Lista todos los esquemas/bases de datos disponibles en el servidor MySQL.

Parámetros:

  • page (opcional): Número de página para paginación (predeterminado: 1)
  • page_size (opcional): Número de elementos por página (predeterminado: 20, máximo: 100)

list_tables

Lista todas las tablas en un esquema específico con metadatos.

Parámetros:

  • schema (requerido): El nombre del esquema/base de datos
  • page (opcional): Número de página para paginación
  • page_size (opcional): Número de elementos por página

get_table_structure

Obtén información detallada de columnas e índices para una tabla.

Parámetros:

  • schema (requerido): El nombre del esquema/base de datos
  • table (requerido): El nombre de la tabla

get_table_create

Obtén la sentencia CREATE TABLE para una tabla específica.

Parámetros:

  • schema (requerido): El nombre del esquema/base de datos
  • table (requerido): El nombre de la tabla

execute_query

Ejecuta una consulta SQL (solo SELECT, SHOW, DESCRIBE, EXPLAIN).

Parámetros:

  • query (requerido): La consulta SQL a ejecutar
  • limit (opcional): Máximo de filas a devolver (predeterminado: 100)

search_table

Busca un valor en todas las columnas de texto de una tabla.

Parámetros:

  • schema (requerido): El nombre del esquema/base de datos
  • table (requerido): El nombre de la tabla
  • search_term (requerido): El término a buscar
  • limit (opcional): Máximo de filas a devolver (predeterminado: 100)

Probar la conexión

Usa el modo interactivo para probar tu conexión:

# 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

Consideraciones de seguridad

  • Solo se permiten consultas SELECT, SHOW, DESCRIBE y EXPLAIN
  • Todas las consultas se limitan automáticamente para evitar conjuntos de resultados grandes
  • Las búsquedas en tablas solo escanean columnas basadas en texto
  • Los detalles de conexión deben almacenarse de forma segura como variables de entorno
  • La imagen Docker se ejecuta como un usuario no root por seguridad

Solución de problemas

Problemas de conexión

  • Asegúrate de que MySQL esté ejecutándose y sea accesible
  • Verifica que el usuario de MySQL tenga los permisos adecuados
  • Al usar Docker, verifica la conectividad de red (--network host para MySQL local)
  • Prueba primero con el cliente CLI de mysql: mysql -h localhost -u user -p

Problemas de red con Docker

  • Usa --network host para conectarte a MySQL en la máquina host
  • Para MySQL en Docker, crea una red compartida y usa nombres de contenedor como hostnames
  • Verifica las reglas del firewall si te conectas a MySQL remoto

Licencia

Licencia MIT - consulta el archivo LICENSE para más detalles.