Servidor MCP para MySQL - Model Context Protocol
Project description
MCP MySQL Server
Servidor MySQL que implementa el Model Context Protocol (MCP) para integración con LLMs vía stdio.
Características
- ✅ Consultas de lectura (SELECT, SHOW, DESCRIBE, EXPLAIN)
- ✅ Operaciones de escritura (INSERT, UPDATE, DELETE)
- ✅ Llamadas a procedimientos almacenados
- ✅ Exploración de metadatos (esquemas, tablas, columnas)
- ✅ Modo READ_ONLY configurable
- ✅ Pool de conexiones
- ✅ Limitador de filas en consultas
- ✅ Validación de SQL básica
- ✅ Comunicación stdio para MCP
Requisitos
- Python 3.10+ (requerido por fastmcp)
- MySQL 5.7+ / MariaDB 10.2+
Instalación
- Crear entorno virtual:
python -m venv venv
.\venv\Scripts\Activate.ps1
- Instalar dependencias:
pip install -r requirements.txt
- Configurar variables de entorno:
cp .env.example .env
# Editar .env con tus credenciales
Configuración
Variables de entorno (.env)
DATABASE_URL (requerido):
DATABASE_URL=mysql://usuario:password@host:puerto/base_datos?sslmode=disable
Importante: Si tu contraseña contiene caracteres especiales (@, #, %, etc.), debes URL-encodearlos:
@→%40#→%23&→%26:→%3A/→%2F
Ejemplo:
# Password: P@ss#123
DATABASE_URL=mysql://user:P%40ss%23123@localhost:3306/mydb?sslmode=disable
READ_ONLY (opcional, default: true):
true= Solo consultas de lecturafalse= Permite escritura y procedimientos
Otras variables:
DB_POOL_SIZE: Tamaño del pool de conexiones (default: 5)DB_POOL_NAME: Nombre del pool (default: mcp_mysql_pool)PORT: Puerto del servidor (default: 8000)HOST: Host del servidor (default: 0.0.0.0)
Ejecutar
Modo 1: Servidor HTTP (FastAPI)
Para API REST tradicional:
## Ejecutar
### Modo interactivo (pruebas):
```powershell
python mcp_server.py
Configuración en Claude Desktop:
Edita %APPDATA%\Claude\claude_desktop_config.json:
{
"mcpServers": {
"mysql": {
"command": "python",
"args": ["c:/Users/bruno.izaguirre/Documents/mysqlMCP/mcp_server.py"],
"env": {
"DATABASE_URL": "mysql://user:pass@host:3306/dbname?sslmode=disable",
"READ_ONLY": "true"
}
}
}
}
Configuración en LibreChat:
{
"mcpServers": {
"mysql": {
"command": "python",
"args": ["c:/ruta/al/proyecto/mcp_server.py"],
"env": {
"DATABASE_URL": "mysql://user:pass@host:3306/dbname?sslmode=disable",
"READ_ONLY": "true"
}
}
}
}
Herramientas MCP disponibles
El servidor expone estas herramientas para interactuar con MySQL:
query_database(sql, params, limit)- Ejecutar consultas SELECTexecute_statement(sql, params)- Ejecutar INSERT/UPDATE/DELETE (requiere READ_ONLY=false)call_procedure(procedure, params)- Llamar procedimientos almacenadoslist_tables(schema)- Listar todas las tablasget_table_schema(table, schema)- Ver columnas de una tablalist_schemas()- Listar bases de datos disponibles
POST /execute
{
"sql": "INSERT INTO usuarios (nombre) VALUES (?)",
"params": ["Juan"]
}
## Seguridad
⚠️ **Importante**:
- Las credenciales de base de datos deben estar en `.env` (nunca en git)
- En producción configura `READ_ONLY=true` si no necesitas escritura
- Valida permisos de usuario MySQL según tus necesidades
- El servidor usa conexión stdio (solo accesible por el proceso padre)
## Testing
Prueba el servidor ejecutándolo directamente:
```powershell
python mcp_server.py
El servidor se comunicará vía stdio. Para pruebas, úsalo desde un cliente MCP como Claude Desktop.
Troubleshooting
Error: "Se requiere la variable de entorno DATABASE_URL"
- Verifica que
.envexiste y contieneDATABASE_URL - Las variables se cargan automáticamente con
python-dotenv
Error: "No module named 'fastmcp'"
- Ejecuta:
pip install -r requirements.txt
Error de conexión SSL
- Usa
?sslmode=disableen DATABASE_URL para desarrollo local - Para producción, configura certificados SSL apropiados
Error: "Access denied for user"
- Verifica que el usuario MySQL tenga permisos desde tu IP
- El administrador debe ejecutar:
GRANT ALL ON database.* TO 'user'@'%'
Error: "No se permiten punto y coma"
- El servidor bloquea múltiples sentencias SQL por seguridad
- Ejecuta una sentencia a la vez
Licencia
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file mcp_mysql_server_bruno-1.1.0.tar.gz.
File metadata
- Download URL: mcp_mysql_server_bruno-1.1.0.tar.gz
- Upload date:
- Size: 8.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0b1a5d57099e0f35d1ae5364689446036b744399588ae797a6e51e66478aa335
|
|
| MD5 |
6ac806b8113f65ed06b81178075b936f
|
|
| BLAKE2b-256 |
975592d78adefbd9af5faf3cf6a4d4ced0aaa90cd41beacb7218298010113f91
|
File details
Details for the file mcp_mysql_server_bruno-1.1.0-py3-none-any.whl.
File metadata
- Download URL: mcp_mysql_server_bruno-1.1.0-py3-none-any.whl
- Upload date:
- Size: 9.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
dd26398f38d5d51e50def45bf940d9866747a510abd9432ba7bb1c0690f09bdc
|
|
| MD5 |
c64e220b8328c854c273ccc1b2918fe4
|
|
| BLAKE2b-256 |
f0c63a3d00b0c785d2ddc26afe0ae1d8fafb443e180b9e98cd3b63fe1cdb87fd
|