Skip to main content
Glama
larturi

PostgreSQL MCP Server

by larturi
README.md
# PostgreSQL MCP Server

Servidor MCP (Model Context Protocol) para acceso de **solo lectura** a bases de datos PostgreSQL.

## Características

Este servidor MCP proporciona herramientas para:

- 📋 **Listar tablas** disponibles en la base de datos
- 🔍 **Ver estructura** completa de tablas (columnas, tipos, constraints, índices)
- 📊 **Obtener estadísticas** de tablas (filas, tamaño, última actualización)
- 🔎 **Ejecutar queries SELECT** de solo lectura (protegido contra operaciones de escritura)

## Instalación

```bash
# Instalar dependencias
npm install

# Compilar el proyecto
npm run build
```

## Configuración en Claude Desktop

Agrega la configuración del servidor MCP en tu archivo de configuración de Claude Desktop:

### macOS

Edita: `~/Library/Application Support/Claude/claude_desktop_config.json`

### Windows

Edita: `%APPDATA%\Claude\claude_desktop_config.json`

Configuración:

```json
{
  "mcpServers": {
    "postgres-mcp": {
      "command": "node",
      "args": [
        "/ruta/absoluta/a/postgres-mcp/build/index.js"
      ],
      "env": {
        "PGHOST": "localhost",
        "PGPORT": "5432",
        "PGDATABASE": "tu_base_de_datos",
        "PGUSER": "tu_usuario",
        "PGPASSWORD": "tu_password"
      }
    }
  }
}
```

**Importante**: Reemplaza `/ruta/absoluta/a/postgres-mcp` con la ruta real donde clonaste el proyecto.

## Herramientas Disponibles

### 1. `list_tables`

Lista todas las tablas en un schema.

**Parámetros:**

- `schema` (opcional): Nombre del schema (por defecto: 'public')

**Ejemplo de uso:**

```bash
Lista todas las tablas de la base de datos
```

### 2. `describe_table`

Muestra la estructura completa de una tabla.

**Parámetros:**

- `table_name` (requerido): Nombre de la tabla
- `schema` (opcional): Nombre del schema (por defecto: 'public')

**Ejemplo de uso:**

```bash
Muéstrame la estructura de la tabla users
```

### 3. `query`

Ejecuta una consulta SELECT de solo lectura.

**Parámetros:**

- `sql` (requerido): Consulta SQL SELECT
- `limit` (opcional): Límite de filas a retornar (por defecto: 100)

**Ejemplo de uso:**

```bash
Ejecuta esta query: SELECT * FROM users WHERE active = true
```

### 4. `table_stats`

Obtiene estadísticas de una tabla.

**Parámetros:**

- `table_name` (requerido): Nombre de la tabla
- `schema` (opcional): Nombre del schema (por defecto: 'public')

**Ejemplo de uso:**

```bash
Muéstrame las estadísticas de la tabla products
```

## Seguridad

🔒 **Este servidor está diseñado para ser de solo lectura**:

- Solo permite consultas `SELECT`
- Bloquea operaciones: `INSERT`, `UPDATE`, `DELETE`, `DROP`, `CREATE`, `ALTER`, `TRUNCATE`, etc.
- Aplica límites automáticos a las consultas que no especifican `LIMIT`

## Desarrollo

```bash
# Compilar en modo watch
npm run watch

# Ejecutar en desarrollo
npm start
```

## Troubleshooting

### Error de conexión a PostgreSQL

- Verifica que PostgreSQL esté corriendo
- Confirma las credenciales en el archivo `.env`
- Verifica que el usuario tenga permisos de lectura en la base de datos

### El servidor no aparece en Claude Desktop

- Asegúrate de haber reiniciado Claude Desktop después de editar la configuración
- Verifica que la ruta al archivo `build/index.js` sea absoluta y correcta
- Revisa los logs de Claude Desktop para ver errores

### "Query no permitida"

- Solo se permiten consultas `SELECT`
- Asegúrate de no usar operaciones de escritura en tus queries