MySQL Mcp

Servidor MCP seguro para producción que otorga a los agentes de IA acceso directo a bases de datos MySQL.

Documentación

mysql-mcp

Un servidor de Model Context Protocol (MCP) que brinda a los agentes de IA acceso directo a bases de datos MySQL.

Qué Puede Hacer

Consulta y Mutación de Datos

  • execute_query — Ejecuta sentencias SELECT, INSERT, UPDATE o DELETE con soporte de consultas parametrizadas (placeholders ?)
  • execute_transaction — Ejecuta múltiples sentencias como un lote atómico; si alguna falla, toda la transacción se revierte automáticamente

Gestión de Esquemas

  • create_table — Crea una nueva tabla
  • alter_table — Agrega/elimina columnas, renombra columnas, agrega índices y más
  • drop_table — Elimina una tabla (requiere ALLOW_DESTRUCTIVE_DDL=true)
  • show_tables — Lista todas las tablas en una base de datos
  • describe_table — Muestra la estructura de columnas de una tabla

Gestión de Bases de Datos

  • list_databases — Lista todas las bases de datos de usuario (excluye las bases de datos del sistema)
  • create_database — Crea una nueva base de datos con juego de caracteres y cotejamiento opcionales
  • drop_database — Elimina una base de datos (requiere ALLOW_DESTRUCTIVE_DDL=true)

Introspección

  • ping — Verifica el estado de la conexión MySQL
  • show_columns — Muestra información detallada de columnas para una tabla
  • get_server_info — Devuelve la versión de MySQL, el juego de caracteres y el cotejamiento (solo lectura)

Soporte Multi-Base de Datos

Cada herramienta acepta un parámetro database. Puedes consultar diferentes bases de datos dentro de la misma sesión sin configuración adicional.


Qué No Puede Hacer

Las siguientes operaciones están bloqueadas permanentemente por el filtro de seguridad y no se pueden eludir bajo ninguna circunstancia:

CategoríaComandos Bloqueados
Configuración de MySQLSET GLOBAL, SET @@global.*, SET @@SESSION.sql_mode
Gestión de usuariosCREATE USER, DROP USER, ALTER USER, RENAME USER
Gestión de privilegiosGRANT, REVOKE
Comandos del sistemaFLUSH, KILL, SHUTDOWN
ReplicaciónRESET MASTER/REPLICA, START/STOP SLAVE/REPLICA, CHANGE MASTER
Acceso a archivosLOAD DATA INFILE, SELECT INTO OUTFILE/DUMPFILE
PluginsINSTALL PLUGIN, UNINSTALL PLUGIN

Restricciones adicionales:

  • Múltiples sentencias separadas por ; en una sola llamada no están permitidas — usa execute_transaction en su lugar
  • drop_table y drop_database están deshabilitados por defecto y devolverán un error a menos que ALLOW_DESTRUCTIVE_DDL=true esté configurado
  • Los resultados de consultas están limitados a MAX_ROWS filas (por defecto: 1000); agrega una cláusula LIMIT para tablas grandes

Instalación

Requisitos: Node.js 20+

git clone https://github.com/turkeryildirim/mysql-mcp
cd mysql-mcp
npm install
npm run build

Copia el archivo de entorno de ejemplo y completa tus credenciales:

cp .env.example .env
MYSQL_HOST=localhost
MYSQL_PORT=3306
MYSQL_USER=mcp_user
MYSQL_PASSWORD=your_password

# Optional
MYSQL_DATABASE=default_db
MYSQL_POOL_SIZE=10
MAX_ROWS=1000
ALLOW_DESTRUCTIVE_DDL=false

Crear un Usuario MySQL Dedicado (Recomendado)

Crea un usuario MySQL con privilegios mínimos para el servidor MCP:

CREATE USER 'mcp_user'@'localhost' IDENTIFIED BY 'your_password';
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, ALTER, INDEX
  ON *.* TO 'mcp_user'@'localhost';
FLUSH PRIVILEGES;

No otorgues SUPER, FILE, RELOAD ni GRANT OPTION.


Integración con Claude Desktop

Abre el archivo de configuración de Claude Desktop:

  • Windows: %APPDATA%\Claude\claude_desktop_config.json
  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

Agrega el siguiente bloque bajo mcpServers:

{
  "mcpServers": {
    "mysql": {
      "command": "node",
      "args": ["/absolute/path/to/mysql-mcp/dist/index.js"],
      "env": {
        "MYSQL_HOST": "localhost",
        "MYSQL_PORT": "3306",
        "MYSQL_USER": "mcp_user",
        "MYSQL_PASSWORD": "your_password",
        "MYSQL_DATABASE": "",
        "MAX_ROWS": "1000",
        "ALLOW_DESTRUCTIVE_DDL": "false"
      }
    }
  }
}

Reinicia Claude Desktop. Deberías ver el servidor mysql listado en el panel de herramientas.


Integración con Claude CLI

Opción 1: .mcp.json — Alcance de proyecto (Recomendado)

Crea un archivo .mcp.json en la raíz de tu proyecto:

{
  "mcpServers": {
    "mysql": {
      "type": "stdio",
      "command": "node",
      "args": ["/absolute/path/to/mysql-mcp/dist/index.js"],
      "env": {
        "MYSQL_HOST": "localhost",
        "MYSQL_PORT": "3306",
        "MYSQL_USER": "mcp_user",
        "MYSQL_PASSWORD": "your_password",
        "ALLOW_DESTRUCTIVE_DDL": "false"
      }
    }
  }
}

El servidor se carga automáticamente cada vez que ejecutas claude desde ese directorio.

Opción 2: Configuración global

claude mcp add mysql -- node /absolute/path/to/mysql-mcp/dist/index.js

Para incluir variables de entorno:

claude mcp add mysql \
  -e MYSQL_HOST=localhost \
  -e MYSQL_USER=mcp_user \
  -e MYSQL_PASSWORD=your_password \
  -- node /absolute/path/to/mysql-mcp/dist/index.js

Verifica la configuración:

claude mcp list
claude mcp get mysql

Ejemplos de Prompts

Una vez conectado, puedes indicar al agente en lenguaje natural:

Show me the structure of the users table in testdb
Fetch the last 10 orders from testdb.orders
Create a products table in testdb with id, name, price, and stock columns
Run the following two INSERTs as a single transaction: ...

Desarrollo

npm run dev        # Watch mode (rebuilds on change)
npm test           # Unit tests (no MySQL connection required)
npm run build      # Production build → dist/