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
Metadata
Release files for mcp-mysql-server-bruno 1.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| mcp_mysql_server_bruno-1.1.0.tar.gz | 8.5 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| mcp_mysql_server_bruno-1.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 17.6 kB
Release files / mcp_mysql_server_bruno-1.1.0.tar.gz
| Download URL | mcp_mysql_server_bruno-1.1.0.tar.gz |
|---|---|
| Size | 8.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
0b1a5d57099e0f35d1ae5364689446036b744399588ae797a6e51e66478aa335
|
|
BLAKE2b-256 checksum How to use checksums |
975592d78adefbd9af5faf3cf6a4d4ced0aaa90cd41beacb7218298010113f91
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.5
|
Release files / mcp_mysql_server_bruno-1.1.0-py3-none-any.whl
| Download URL | mcp_mysql_server_bruno-1.1.0-py3-none-any.whl |
|---|---|
| Size | 9.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
dd26398f38d5d51e50def45bf940d9866747a510abd9432ba7bb1c0690f09bdc
|
|
BLAKE2b-256 checksum How to use checksums |
f0c63a3d00b0c785d2ddc26afe0ae1d8fafb443e180b9e98cd3b63fe1cdb87fd
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.5
|