Skip to main content
Glama
Jorge-240

Universal Database MCP

by Jorge-240
README.md
# Universal Database MCP

MCP remoto para Google ADK y otros clientes MCP. Permite conectar dinámicamente MySQL, MariaDB y PostgreSQL mediante una URL y administrar bases de datos, tablas y registros.

## 1. Requisitos

- Python 3.13 recomendado.
- Una base de datos MySQL/MariaDB/PostgreSQL accesible desde el equipo donde corre el MCP.
- Para Render: la base de datos debe aceptar conexiones desde Internet o desde la red autorizada.

## 2. Ejecutar localmente

Windows PowerShell:

```powershell
py -3.13 -m venv .venv
.\.venv\Scripts\Activate.ps1
pip install -r requirements.txt
Copy-Item .env.example .env
```

Edita `.env` y cambia `MCP_API_KEY` por un secreto largo.

Ejecuta:

```powershell
uvicorn server:app --host 0.0.0.0 --port 8000 --reload
```

Health:

`http://127.0.0.1:8000/health`

MCP:

`http://127.0.0.1:8000/mcp`

## 3. Probar con MCP Inspector

En otra terminal:

```powershell
npx -y @modelcontextprotocol/inspector
```

Conecta a:

`http://127.0.0.1:8000/mcp`

En el cliente, agrega el header:

`Authorization: Bearer TU_MCP_API_KEY`

## 4. Primera conexión

Con la tool `crear_conexion`, envía por ejemplo:

`mysql+pymysql://usuario:password@host:3306/Tareas_sena`

El servidor devuelve un `connection_id`. Usa ese ID en todas las demás tools.

## 5. Importante sobre MySQL local

Un MCP desplegado en Render NO puede usar `127.0.0.1` o `localhost` para llegar al MySQL de tu PC. Desde Render, localhost significa el propio servidor de Render.

Para una BD local necesitas ejecutar un conector local que haga de puente seguro. Esta primera versión deja preparada la API remota; el Local Connector es una segunda pieza del proyecto.

## 6. Google ADK

Configura:

```powershell
$env:MCP_URL="https://TU-SERVICIO.onrender.com/mcp"
$env:MCP_API_KEY="TU_TOKEN"
```

Y usa `examples/adk_agent.py` como base.

## 7. Render

Puedes conectar este repo a Render como Web Service.

Build:

```text
pip install -r requirements.txt
```

Start:

```text
uvicorn server:app --host 0.0.0.0 --port $PORT
```

Variables:

```text
MCP_API_KEY=<tu-secreto>
MCP_REQUIRE_AUTH=true
PYTHON_VERSION=3.13.5
```

El endpoint será:

`https://TU-SERVICIO.onrender.com/mcp`

## 8. Seguridad

Esta versión usa un bearer token estático para proteger el endpoint remoto. Las URL de bases de datos se mantienen únicamente en memoria del proceso y se muestran redactadas en respuestas.

Las credenciales de la BD determinan realmente qué acciones son posibles. `ejecutar_sql_admin` puede ejecutar SQL arbitrario con los permisos de esa cuenta y por eso exige `confirmar=true`.

Para producción con múltiples usuarios/agentes se recomienda sustituir el token global por OAuth 2.1/JWT y aislar las conexiones por identidad del usuario.