MySQL Database Access

Proporciona acceso de solo lectura a bases de datos MySQL.

Documentación

mysql-mcp-server MCP server

npm version

Servidor MCP de Acceso a Base de Datos MySQL

Este servidor MCP proporciona acceso de solo lectura a bases de datos MySQL. Le permite:

  • Listar bases de datos disponibles
  • Listar tablas en una base de datos
  • Describir esquemas de tablas
  • Ejecutar consultas SQL de solo lectura

Características de Seguridad

  • Acceso de solo lectura: Solo se permiten sentencias SELECT, SHOW, DESCRIBE y EXPLAIN; se rechazan las formas de SELECT INTO y LOAD_FILE con capacidad de archivos
  • Validación de consultas: Previene la inyección SQL y bloquea cualquier intento de modificación de datos
  • Tiempo de espera de consultas: Evita que consultas de larga duración consuman recursos
  • Límite de filas: Evita la devolución excesiva de datos
  • Números grandes exactos: Los valores BIGINT y DECIMAL se devuelven como cadenas para evitar pérdida de precisión

Instalación

1. Instale usando uno de estos métodos:

Instalar desde NPM

# Install globally
npm install -g mysql-mcp-server

# Or install locally in your project
npm install mysql-mcp-server

Compilar desde el Código Fuente

# Clone the repository
git clone https://github.com/dpflucas/mysql-mcp-server.git
cd mysql-mcp-server

# Install dependencies and build
npm install
npm run build

2. Configure las variables de entorno

El servidor requiere las siguientes variables de entorno:

  • MYSQL_HOST: Nombre de host del servidor de base de datos
  • MYSQL_PORT: Puerto del servidor de base de datos (predeterminado: 3306)
  • MYSQL_USER: Nombre de usuario de la base de datos
  • MYSQL_PASSWORD: Contraseña de la base de datos (opcional, pero recomendada para conexiones seguras)
  • MYSQL_DATABASE: Nombre de la base de datos predeterminada (opcional)

3. Agregar a la configuración de MCP

Agregue la siguiente configuración a su archivo de configuración de MCP:

Si instaló mediante npm (Opción 1):

{
  "mcpServers": {
    "mysql": {
      "command": "npx",
      "args": ["mysql-mcp-server"],
      "env": {
        "MYSQL_HOST": "your-mysql-host",
        "MYSQL_PORT": "3306",
        "MYSQL_USER": "your-mysql-user",
        "MYSQL_PASSWORD": "your-mysql-password",
        "MYSQL_DATABASE": "your-default-database"
      },
      "disabled": false,
      "autoApprove": []
    }
  }
}

Si compiló desde el código fuente (Opción 2):

{
  "mcpServers": {
    "mysql": {
      "command": "node",
      "args": ["/path/to/mysql-mcp-server/build/index.js"],
      "env": {
        "MYSQL_HOST": "your-mysql-host",
        "MYSQL_PORT": "3306",
        "MYSQL_USER": "your-mysql-user",
        "MYSQL_PASSWORD": "your-mysql-password",
        "MYSQL_DATABASE": "your-default-database"
      },
      "disabled": false,
      "autoApprove": []
    }
  }
}

Herramientas Disponibles

list_databases

Lista todas las bases de datos accesibles en el servidor MySQL.

Parámetros: Ninguno

Ejemplo:

{
  "server_name": "mysql",
  "tool_name": "list_databases",
  "arguments": {}
}

list_tables

Lista todas las tablas en una base de datos especificada.

Parámetros:

  • database (opcional): Nombre de la base de datos (usa la predeterminada si no se especifica)

Ejemplo:

{
  "server_name": "mysql",
  "tool_name": "list_tables",
  "arguments": {
    "database": "my_database"
  }
}

describe_table

Muestra el esquema de una tabla específica.

Parámetros:

  • database (opcional): Nombre de la base de datos (usa la predeterminada si no se especifica)
  • table (requerido): Nombre de la tabla

Ejemplo:

{
  "server_name": "mysql",
  "tool_name": "describe_table",
  "arguments": {
    "database": "my_database",
    "table": "my_table"
  }
}

execute_query

Ejecuta una consulta SQL de solo lectura.

Parámetros:

  • query (requerido): Consulta SQL (solo se permiten sentencias SELECT, SHOW, DESCRIBE y EXPLAIN)
  • database (opcional): Nombre de la base de datos (usa la predeterminada si no se especifica)

Ejemplo:

{
  "server_name": "mysql",
  "tool_name": "execute_query",
  "arguments": {
    "database": "my_database",
    "query": "SELECT * FROM my_table LIMIT 10"
  }
}

Configuración Avanzada del Grupo de Conexiones

Para un mayor control sobre el comportamiento del grupo de conexiones MySQL, puede configurar parámetros adicionales:

{
  "mcpServers": {
    "mysql": {
      "command": "npx",
      "args": ["mysql-mcp-server"],
      "env": {
        "MYSQL_HOST": "your-mysql-host",
        "MYSQL_PORT": "3306",
        "MYSQL_USER": "your-mysql-user",
        "MYSQL_PASSWORD": "your-mysql-password",
        "MYSQL_DATABASE": "your-default-database",
        
        "MYSQL_CONNECTION_LIMIT": "10",
        "MYSQL_QUEUE_LIMIT": "0",
        "MYSQL_CONNECT_TIMEOUT": "10000",
        "MYSQL_IDLE_TIMEOUT": "60000",
        "MYSQL_MAX_IDLE": "10"
      },
      "disabled": false,
      "autoApprove": []
    }
  }
}

Estas opciones avanzadas le permiten:

  • MYSQL_CONNECTION_LIMIT: Controlar el número máximo de conexiones en el grupo (predeterminado: 10)
  • MYSQL_QUEUE_LIMIT: Establecer el número máximo de solicitudes de conexión en cola (predeterminado: 0, ilimitado)
  • MYSQL_CONNECT_TIMEOUT: Ajustar el tiempo de espera de conexión en milisegundos (predeterminado: 10000)
  • MYSQL_IDLE_TIMEOUT: Configurar cuánto tiempo puede estar inactiva una conexión antes de ser liberada (en milisegundos)
  • MYSQL_MAX_IDLE: Establecer el número máximo de conexiones inactivas para mantener en el grupo

Pruebas

El servidor incluye scripts de prueba para verificar la funcionalidad con su configuración de MySQL:

1. Configurar la Base de Datos de Prueba

Este script crea una base de datos de prueba, una tabla y datos de muestra:

# Set your MySQL credentials as environment variables
export MYSQL_HOST=localhost
export MYSQL_PORT=3306
export MYSQL_USER=your_username
export MYSQL_PASSWORD=your_password

# Run the setup script
npm run test:setup

2. Probar las Herramientas MCP

Este script prueba cada una de las herramientas MCP contra la base de datos de prueba:

# Set your MySQL credentials as environment variables
export MYSQL_HOST=localhost
export MYSQL_PORT=3306
export MYSQL_USER=your_username
export MYSQL_PASSWORD=your_password
export MYSQL_DATABASE=mcp_test_db

# Run the tools test script
npm run test:tools

3. Ejecutar Todas las Pruebas

Para ejecutar tanto la configuración como las pruebas de herramientas:

# Set your MySQL credentials as environment variables
export MYSQL_HOST=localhost
export MYSQL_PORT=3306
export MYSQL_USER=your_username
export MYSQL_PASSWORD=your_password

# Run all tests
npm test

Solución de Problemas

Si encuentra problemas:

  1. Revise los registros del servidor para ver mensajes de error
  2. Verifique sus credenciales de MySQL y los detalles de conexión
  3. Asegúrese de que su usuario de MySQL tenga los permisos adecuados
  4. Compruebe que su consulta sea de solo lectura y esté correctamente formateada

Licencia

Este proyecto está licenciado bajo la Licencia MIT - consulte el archivo LICENSE para más detalles.