Skip to main content

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

  1. Crear entorno virtual:
python -m venv venv
.\venv\Scripts\Activate.ps1
  1. Instalar dependencias:
pip install -r requirements.txt
  1. 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 lectura
  • false = 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 SELECT
  • execute_statement(sql, params) - Ejecutar INSERT/UPDATE/DELETE (requiere READ_ONLY=false)
  • call_procedure(procedure, params) - Llamar procedimientos almacenados
  • list_tables(schema) - Listar todas las tablas
  • get_table_schema(table, schema) - Ver columnas de una tabla
  • list_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 .env existe y contiene DATABASE_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=disable en 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)

Source distribution for mcp-mysql-server-bruno 1.1.0
File Size Uploaded
mcp_mysql_server_bruno-1.1.0.tar.gz 8.5 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for mcp-mysql-server-bruno 1.1.0
File Interpreter ABI Platform
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

Release history Release notifications | RSS feed

This release

1.1.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page