Skip to main content
Glama
EgCooper

MCP MySQL

by EgCooper
README.md
# MCP Database

Servidores MCP en Python para conectar asistentes de IA (Cursor, Claude, Gemini, etc.) a **MySQL**, **Oracle**, **SQL Server**, **Informix** y **PostgreSQL**.

Hay cinco servidores independientes en el mismo repo:

| Servidor | Módulo | Entrada MCP | Driver extra en la PC |
|----------|--------|-------------|------------------------|
| MySQL | `mcp_mysql` | `mysql` | No (pip alcanza) |
| Oracle | `mcp_oracle` | `oracle` | No (pip / thin mode) |
| PostgreSQL | `mcp_postgresql` | `postgresql` | No (pip / `psycopg`) |
| SQL Server | `mcp_sqlserver` | `sqlserver` | **Sí** — ODBC Driver 17/18 |
| Informix | `mcp_informix` | `informix` | **Sí** — Client SDK / ODBC IBM |

## Requisitos

- Python 3.11+
- Acceso a la(s) base(s) que vayas a usar
- **SQL Server e Informix:** además de `pip install -e .`, debes instalar el driver nativo en cada máquina (ver sección abajo)

## Drivers adicionales (obligatorio para SQL Server e Informix)

`pip install -e .` instala `pyodbc`, pero **no** instala el driver del sistema. Sin eso, la conexión falla.

### SQL Server — ODBC Driver

1. Descarga e instala **Microsoft ODBC Driver 18 for SQL Server** (x64):  
   https://learn.microsoft.com/en-us/sql/connect/odbc/download-odbc-driver-for-sql-server
2. Si el instalador lo pide, instala también el [Visual C++ Redistributable](https://learn.microsoft.com/en-us/cpp/windows/latest-supported-vc-redist).
3. Verifica en PowerShell:

```powershell
Get-OdbcDriver | Where-Object { $_.Name -like "*SQL Server*" }
```

4. En `.env` usa el nombre exacto del driver, por ejemplo:

```env
SQLSERVER_DRIVER=ODBC Driver 18 for SQL Server
```

### Informix — Client SDK / ODBC

1. Descarga el **IBM Informix Client SDK** (incluye el ODBC Driver). Requiere cuenta/licencia IBM o HCL:  
   - https://www.ibm.com/support/pages/download-informix-products  
   - https://www.ibm.com/support/fixcentral  
   - HCL/Actian ESD: https://esd.actian.com/
2. Instala el Client SDK para **Windows x64**.
3. Verifica en *Orígenes de datos ODBC (64 bits)* que aparezca algo como `IBM INFORMIX ODBC DRIVER`.
4. En `.env`:

```env
INFORMIX_DRIVER=IBM INFORMIX ODBC DRIVER
INFORMIX_SERVER=ol_informix1410
```

`INFORMIX_SERVER` es el nombre del servidor Informix (`INFORMIXSERVER`), no solo el host.

## Instalación del proyecto

```bash
git clone <url-del-repo>
cd MCP-DATABASE
python -m venv .venv
```

Activa el entorno virtual:

```bash
# Windows (PowerShell)
.\.venv\Scripts\Activate.ps1

# Linux / macOS
source .venv/bin/activate
```

Instala el paquete (incluye los cinco servidores):

```bash
pip install -e .
```

Crea tu archivo de credenciales (no se sube a git):

```bash
# Windows
Copy-Item .env.example .env

# Linux / macOS
cp .env.example .env
```

Edita `.env` con las bases que uses (ver `.env.example`).

## Configurar el cliente MCP

Cada servidor se registra por separado (fusiona sin borrar otros MCPs):

```bash
python -m mcp_mysql setup
python -m mcp_oracle setup
python -m mcp_postgresql setup
python -m mcp_sqlserver setup
python -m mcp_informix setup
```

Opciones comunes:

```bash
python -m mcp_postgresql setup --client claude
python -m mcp_postgresql setup --dry-run
python -m mcp_postgresql setup --print
```

También: `mcp-mysql-setup` / `mcp-oracle-setup` / `mcp-postgresql-setup` / `mcp-sqlserver-setup` / `mcp-informix-setup`.

Recarga los MCP del cliente y prueba con `test_connection`.

### Claude Code (CLI)

El comando `setup` de este repo solo soporta `--client cursor` y `--client claude` (Claude **Desktop**). Si usas **Claude Code** (la CLI), regístralo con el comando nativo `claude mcp add`, ejecutado desde la raíz del repo:

**Linux / macOS:**

```bash
claude mcp add mysql -- $(pwd)/.venv/bin/python -m mcp_mysql
claude mcp add oracle -- $(pwd)/.venv/bin/python -m mcp_oracle
claude mcp add postgresql -- $(pwd)/.venv/bin/python -m mcp_postgresql
claude mcp add sqlserver -- $(pwd)/.venv/bin/python -m mcp_sqlserver
claude mcp add informix -- $(pwd)/.venv/bin/python -m mcp_informix
```

**Windows (PowerShell):**

```powershell
claude mcp add mysql -- "$PWD\.venv\Scripts\python.exe" -m mcp_mysql
claude mcp add oracle -- "$PWD\.venv\Scripts\python.exe" -m mcp_oracle
claude mcp add postgresql -- "$PWD\.venv\Scripts\python.exe" -m mcp_postgresql
claude mcp add sqlserver -- "$PWD\.venv\Scripts\python.exe" -m mcp_sqlserver
claude mcp add informix -- "$PWD\.venv\Scripts\python.exe" -m mcp_informix
```

Registra solo los motores que vayas a usar (necesitas las credenciales correspondientes ya cargadas en `.env`). Ejecuta los comandos desde la raíz del repo; si no, reemplaza `$(pwd)` / `$PWD` por la ruta absoluta al proyecto.

Verifica con:

```bash
claude mcp list
```

Y quita un servidor mal configurado con:

```bash
claude mcp remove <nombre>
```

Luego prueba con la tool `test_connection` dentro de una sesión de Claude Code.

### Oracle: varias conexiones (perfiles)

Un solo MCP `oracle` puede apuntar a varias bases. En `.env`:

```env
Multi Connection

ORACLE_CONNECTIONS=B1,B2
ORACLE_DEFAULT=B1

ORACLE_B1_USER=
ORACLE_B1_PASSWORD=
ORACLE_B1_HOST=
ORACLE_B1_PORT=
ORACLE_B1_SID=

ORACLE_B2_USER=
ORACLE_B2_PASSWORD=
ORACLE_B2_HOST=
ORACLE_B2_PORT=  
ORACLE_B2_SID=

```

Uso en tools: `list_connections`, luego `list_tables(connection="qa")`, `execute_query(..., connection="qa")`, etc.  
Si omites `connection`, se usa `ORACLE_DEFAULT`.

El modo simple (una sola DB) sigue funcionando con `ORACLE_USER` / `ORACLE_DSN` sin `ORACLE_CONNECTIONS`.

| Cliente | Archivo por defecto |
|---------|---------------------|
| Cursor Windows| `\Users\username\.cursor`  |
| Cursor Linux| `/home/user/.cursor/mcp.json`  |
| Gemini Windows | `C:\users\user_name\.gemini\config\mcp_config.json`  |
| Gemini Linux | `/home/username/.gemini/config/mcp_config.json`  |
| Claude Desktop Windows | `%APPDATA%\Claude\claude_desktop_config.json`  |
| Claude Desktop macOS/Linux | `~/Library/Application Support/Claude/claude_desktop_config.json` (macOS) / `~/.config/Claude/claude_desktop_config.json` (Linux)  |

> **Claude Code (CLI):** no uses `--client claude` para esto — ese modo apunta a Claude Desktop, no a Claude Code. Usa `claude mcp add` como se explica en la sección [Claude Code (CLI)](#claude-code-cli) arriba.

## Tools disponibles

Las mismas tools en los cinco servidores (solo lectura):

| Tool | Descripción |
|------|-------------|
| `list_connections` | Lista perfiles Oracle configurados (solo Oracle por ahora) |
| `test_connection` | Verifica la conexión |
| `list_tables` | Lista tablas |
| `list_views` | Lista vistas |
| `describe_table` | Columnas de una tabla |
| `list_indexes` | Índices de una tabla |
| `list_foreign_keys` | FKs de una tabla o de toda la DB |
| `find_column` | Busca columnas por nombre (`%` wildcard) |
| `sample_rows` | Muestra filas de ejemplo (máx. 100) |
| `count_rows` | Cuenta filas de una tabla |
| `execute_query` | SQL libre de solo lectura |

**MySQL / PostgreSQL:** `SELECT`, `SHOW`/`EXPLAIN` donde aplique, `WITH` (usa `LIMIT`).

**Oracle / SQL Server / Informix:** `SELECT` / `WITH` (límites con `FETCH FIRST` / `TOP` / `FIRST`).

`execute_query` rechaza múltiples sentencias (`;`) y keywords de escritura (`INSERT`, `UPDATE`, `DELETE`, `DROP`, etc.). En producción usa además un usuario DB read-only.

## Notas

- Los comandos `python -m mcp_*` arrancan el servidor stdio; lo lanza el cliente.
- Las credenciales viven en `.env`, no en el JSON del cliente.
- MySQL, Oracle y PostgreSQL no requieren instalador de driver aparte (en el flujo típico).
- SQL Server e Informix **sí** requieren driver/SDK instalado en el sistema además de `pyodbc`.

## Estructura

```
MCP-DATABASE/
├── pyproject.toml
├── .env.example
├── src/
│   ├── mcp_mysql/
│   ├── mcp_oracle/
│   ├── mcp_postgresql/
│   ├── mcp_sqlserver/
│   └── mcp_informix/
└── README.md
```

## Prueba

  ![Image Test](/img/test.png)