Un servidor MCP (Model Context Protocol) que permite a los agentes de Claude interactuar con bases de datos MySQL.
- query_database: Ejecuta consultas SELECT
- execute_statement: Ejecuta INSERT, UPDATE, DELETE
- get_tables: Lista todas las tablas de la base de datos
- get_table_schema: Obtiene la estructura (columnas) de una tabla
- Python 3.13+
- MySQL Server (local o remoto)
- pip o uv
-
Instalar dependencias:
pip install -r requirements.txt # o si usas uv: uv sync -
Configurar variables de entorno:
Crea un archivo
.envo establece las variables:# Windows PowerShell $env:DB_HOST = "localhost" $env:DB_USER = "tu_usuario" $env:DB_PASSWORD = "tu_contraseña" $env:DB_NAME = "tu_base_datos" $env:DB_PORT = "3306"
O edita directamente en
main.pylos valores por defecto.
-
Inicia el servidor:
python main.py
El servidor estará disponible en
http://127.0.0.1:9000 -
Configura Claude para usar este MCP:
En tu
claude_desktop_config.json(macOS/Linux:~/.claude_desktop_config.jsono Windows:%APPDATA%\Claude\claude_desktop_config.json):{ "mcpServers": { "mysql": { "command": "python", "args": ["C:/path/to/main.py"] } } }
Ejecuta una consulta SELECT en MySQL.
Ejemplo:
query_database("SELECT * FROM usuarios WHERE edad > 18 LIMIT 10")
Respuesta:
{
"success": true,
"rows_count": 5,
"data": [
{"id": 1, "nombre": "Juan", "edad": 25},
...
]
}Ejecuta INSERT, UPDATE o DELETE.
Ejemplo:
execute_statement("UPDATE usuarios SET edad = 30 WHERE id = 1")
Respuesta:
{
"success": true,
"affected_rows": 1
}Obtiene la lista de todas las tablas.
Ejemplo:
get_tables()
Respuesta:
{
"success": true,
"tables": ["usuarios", "productos", "pedidos"]
}Obtiene la estructura de una tabla.
Ejemplo:
get_table_schema("usuarios")
Respuesta:
{
"success": true,
"table": "usuarios",
"columns": [
{
"Field": "id",
"Type": "int",
"Null": "NO",
"Key": "PRI",
"Default": null,
"Extra": "auto_increment"
},
...
]
}- Usa variables de entorno para credenciales
- No hardcodees contraseñas en el código
- Considera usar SSL para conexiones remotas
- Implementa validación de entrada en Claude para prevenir SQL injection
Conexión rechazada:
- Verifica que MySQL esté corriendo
- Comprueba las credenciales
- Verifica el host y puerto
Base de datos no encontrada:
- Asegúrate de crear la base de datos:
CREATE DATABASE tu_base_datos; - Verifica el nombre en
DB_NAME
Errores de caracteres:
- El servidor usa
utf8mb4por defecto - Asegúrate de que tu base de datos también usa este charset