mcp-mysql-database
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@mcp-mysql-database create a tienda database with a productos table and add 3 sample rows"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
mcp-mysql-database
Servidor MCP que conecta Claude con bases de datos MySQL locales. Pídele a Claude en lenguaje natural que cree bases de datos y tablas, inserte, consulte, actualice o borre registros, y elige a qué conexión (dev, test, …) apuntar. MySQL corre en contenedores Docker.
"Crea una base de datos
tiendacon una tablaproductos(nombre, precio, stock) e inserta 3 productos de ejemplo." "Cámbiate a la conexióntesty muéstrame los pedidos de mayo."
Claude traduce tu petición a llamadas a las herramientas de este servidor; el servidor construye el SQL de forma segura (identificadores validados, valores siempre parametrizados).
Inicio rápido
# 1. MySQL en Docker: dos instancias (dev en :3306, test en :3307)
cp .env.example .env # opcional: cambia contraseñas/puertos
npm run db:up
# 2. Servidor MCP
npm install
npm run buildConectarlo a Claude
Claude Code — este repo incluye .mcp.json; abre Claude Code en esta carpeta y aprueba el servidor mysql. O bien:
claude mcp add mysql -- node /ruta/absoluta/mcp-mysql-database/dist/index.jsClaude Desktop — en claude_desktop_config.json:
{
"mcpServers": {
"mysql": { "command": "node", "args": ["/ruta/absoluta/mcp-mysql-database/dist/index.js"] }
}
}Related MCP server: MCP MySQL Server
Conexiones
Sin configuración, el servidor usa las dos bases de docker-compose.yml (dev → 3306, test → 3307).
Para definir las tuyas, copia connections.example.json a connections.json (ignorado por git) o apunta
MYSQL_MCP_CONFIG a otro archivo:
{
"default": "dev",
"connections": {
"dev": { "host": "127.0.0.1", "port": 3306, "user": "root", "password": "devpassword", "database": "appdb" },
"prod": { "host": "db.ejemplo.com", "user": "lector", "passwordEnv": "MYSQL_PROD_PASSWORD", "readOnly": true }
}
}passwordEnv: lee la contraseña de una variable de entorno (mejor que escribirla en el archivo).readOnly: true: la conexión rechaza cualquier escritura.Alternativa mínima: variables
MYSQL_HOST,MYSQL_PORT,MYSQL_USER,MYSQL_PASSWORD,MYSQL_DATABASE.
Herramientas
Grupo | Herramienta | Qué hace |
Conexiones |
| Ver y cambiar la conexión activa; registrar conexiones temporales |
Bases de datos |
| Gestionar bases y elegir la actual |
Tablas |
| Esquema (columnas, PK, índices, FK) |
Registros |
| CRUD con filtros estructurados |
SQL libre |
| Joins, agregaciones, |
Todas las herramientas de datos aceptan un database opcional para no depender de la base actual.
Seguridad
Identificadores (
tabla,columna, …) validados con^[A-Za-z0-9_$]{1,64}$y entrecomillados; los valores van siempre como parámetros.drop_database,drop_tableyDROP/TRUNCATEvíaexecute_sqlexigenconfirm: true(Claude debe confirmarlo contigo).update_recordsydelete_recordsexigen unwhereno vacío.run_querysolo admiteSELECT/SHOW/DESCRIBE/EXPLAIN/WITHy corre en una transacciónREAD ONLYconROLLBACK.Una sola sentencia por llamada (sin
multipleStatements); máximo 1000 filas por consulta.Las credenciales de
docker-compose.ymlson solo para desarrollo local; los puertos se publican en el host, no los expongas a internet.
Desarrollo
npm run build # compila TypeScript a dist/
npm test # prueba e2e: lanza el servidor por stdio con un cliente MCP real
npm run db:down # detiene los contenedores (los datos persisten en volúmenes)npm test necesita MySQL en 3306 y 3307 (npm run db:up); si no están accesibles, las pruebas se omiten.
Available Tools
19 toolsadd_connectionB
Registra una conexión nueva solo para esta sesión (no se guarda en disco). Opcionalmente la activa.
Inputs: host (required), name (required), user (required), ssl, +5 more.
create_databaseC
Crea una base de datos. Opcionalmente la selecciona como base actual.
Inputs: name (required), use, charset, collation, +1 more.
create_tableC
Crea una tabla a partir de una definición estructurada de columnas, índices y claves foráneas.
Inputs: table (required), columns (required), engine, indexes, +4 more.
current_connectionARead-only
Muestra la conexión activa, su base de datos actual y si es de solo lectura.
Inputs: no named parameters.
delete_recordsBDestructive
Borra registros que cumplan where (obligatorio y no vacío).
Inputs: table (required), where (required), database.
describe_tableBRead-only
Muestra columnas, índices y el CREATE TABLE de una tabla.
Inputs: table (required), database.
drop_databaseADestructive
ELIMINA una base de datos completa. Irreversible: requiere confirm=true; pide confirmación al usuario antes.
Inputs: name (required), confirm (required).
drop_tableADestructive
ELIMINA una tabla y sus datos. Irreversible: requiere confirm=true; pide confirmación al usuario antes.
Inputs: table (required), confirm (required), database.
execute_sqlADestructive
Ejecuta una sentencia SQL única que modifica datos o esquema (ALTER, UPDATE masivo, CREATE INDEX, etc.). DROP y TRUNCATE requieren confirm=true. No disponible en conexiones readOnly.
Inputs: sql (required), params, confirm, database.
insert_recordsC
Inserta uno o varios registros en una tabla (consulta parametrizada). Cada registro es un objeto columna -> valor.
Inputs: table (required), records (required), database, ignoreDuplicates.
list_connectionsARead-only
Lista las conexiones MySQL configuradas y cuál está activa.
Inputs: no named parameters.
list_databasesARead-only
Lista las bases de datos del servidor de la conexión activa.
Inputs: no named parameters.
list_tablesBRead-only
Lista las tablas de la base de datos actual (o de database).
Inputs: database.
remove_connectionBDestructive
Elimina una conexión registrada en esta sesión (no puede ser la activa).
Inputs: name (required).
run_queryARead-only
Ejecuta una consulta SQL de SOLO LECTURA (SELECT/SHOW/DESCRIBE/EXPLAIN/WITH) dentro de una transacción READ ONLY. Máx. 1000 filas devueltas. Usa ? y params para valores.
Inputs: sql (required), params, database.
select_connectionA
Cambia la conexión activa (p. ej. 'dev' o 'test'). Todas las demás herramientas usan la conexión activa. Verifica que el servidor responde.
Inputs: name (required).
select_recordsARead-only
Consulta registros de una tabla con filtros simples (igualdad / IN / IS NULL), orden y paginación. Para joins o agregaciones usa run_query.
Inputs: table (required), limit, where, offset, +3 more.
update_recordsC
Actualiza registros que cumplan where (obligatorio y no vacío).
Inputs: set (required), table (required), where (required), database.
use_databaseC
Selecciona la base de datos actual de la conexión activa.
Inputs: name (required).
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 19 tools
Each tool targets a distinct resource/action, and descriptions explicitly redirect overlaps (select_records points to run_query for joins; execute_sql notes it handles mass UPDATE/DELETE that update_records/delete_records also do). The execute_sql vs update_records/delete_records boundary and select_records vs run_query boundary are the only mild overlaps, but descriptions disambiguate well.
Nearly all tools follow a consistent snake_case verb_noun pattern (list_connections, create_database, drop_table, insert_records, run_query, execute_sql). The single deviation is current_connection, a noun-only name, which is a minor inconsistency in an otherwise predictable scheme.
19 tools is on the heavier side but each maps to a genuine operation across the connection, database, table, and record layers. The count is justified by the broad scope rather than redundant tooling, though it sits at the upper borderline.
Full lifecycle coverage: connections (list/current/select/add/remove), databases (list/create/use/drop), tables (list/describe/create/drop), records (full insert/select/update/delete CRUD), plus read-only run_query and write execute_sql for anything else. Schema alteration and advanced queries are handled via execute_sql/run_query, leaving no dead ends.
Maintenance
Related MCP Connectors
Hosted MySQL MCP server for Claude, ChatGPT and Cursor, with each action switched per account.
Query, explore, and manage your databases through natural conversation.
Query 40 databases from Claude, ChatGPT, or Cursor — on any device. Read-only, encrypted, audited.
Query Postgres, MySQL, SQL Server, Oracle, BigQuery, ClickHouse and Redshift from your AI client.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceA natural language interface that allows Claude to execute SQL queries on your local MySQL databases, enabling database interaction using natural language.5-
- AlicenseNot gradedqualityDmaintenanceEnables Claude Desktop to interact with MySQL databases through secure query execution, schema discovery, and multi-database support with configurable read/write permissions and built-in SQL injection protection.81 npmMIT
- AlicenseNot gradedqualityDmaintenanceEnables natural language querying of MySQL databases via Claude Code, allowing SELECT queries, table listing, and schema inspection.896 npmMIT
- AlicenseNot gradedqualityDmaintenanceEnables Claude to interact with a MySQL database by automatically discovering its schema and retrieving full table data for analysis.ISC