SQL MCP Server
SQL MCP Server
Un servidor Model Context Protocol que expone una base de datos Postgres a agentes LLM (Claude Desktop, Claude Code o cualquier cliente MCP) a través de seis herramientas de solo lectura. Apunta un agente a él y haz preguntas como "¿qué clientes realizaron más de cinco pedidos el mes pasado?" — el agente explora el esquema y consulta los datos por sí mismo, a través de las herramientas siguientes.
Herramientas
Herramienta | Descripción |
| Resumen de cada tabla: nombre, descripción, tamaño, número de columnas |
| Columnas, tipos y relaciones de clave externa de una tabla |
| Busca tablas/columnas cuyo nombre coincide con una palabra clave |
| Echa un vistazo a filas reales (5 por defecto) |
| Número de filas de una tabla |
| Ejecuta una consulta |
Related MCP server: mcp-data-gateway
Por qué esto no es "solo un envoltorio de psycopg2"
Las demostraciones de texto a SQL son habituales; la parte realmente difícil — y donde este proyecto pone su esfuerzo — es hacer que execute_select sea seguro para entregarlo a un LLM que generará SQL arbitrario:
Rol de Postgres de solo lectura. El servidor se conecta como
mcp_readonly, un rol con permisos de soloSELECT(verscripts/init_schema.sql). Ni siquiera un error en las comprobaciones a nivel de aplicación que se indican a continuación puede provocar una escritura.Aplicación de solo lectura a nivel de sesión. Cada conexión ejecuta
SET TRANSACTION READ ONLY(db.py).Validación de sentencias (
security.py): solo se permite una única sentenciaSELECT/WITH— sin sentencias apiladas (; DROP TABLE ...), sin comentarios SQL (bloquea el contrabando de sentencias a través de comentarios) y una lista negra de palabras clave cubreINSERT/UPDATE/DELETE/DDL/GRANT/etc., incluidoSELECT ... INTO(que crea una tabla silenciosamente).Validación de identificadores.
describe_table,sample_rowsycount_rowsreciben un nombre de tabla como parámetro. Dado que los identificadores SQL no se pueden parametrizar con marcadores de posición, los nombres de tabla se comprueban contra una regex estricta y una lista blanca dinámica obtenida deinformation_schema— no solo mediante el escape de cadenas.Límites de recursos. Un
statement_timeoutde Postgres evita consultas descontroladas y se aplica un tope de filas del lado del servidor a cada resultado de consulta, incluso si la consulta del LLM no especificó unLIMIT.
Inicio rápido
git clone <this-repo>
cd sql-mcp-server
pip install -r requirements.txt
# 1. Start Postgres with the sample schema
docker compose up -d
# 2. Generate sample e-commerce data (uses the postgres superuser, not mcp_readonly)
PGUSER=postgres PGPASSWORD=postgres python scripts/generate_sample_data.py
# 3. Configure the server to use the read-only role
cp .env.example .env
# edit .env if you changed the default mcp_readonly password
# 4. Run the tests
pytest
# 5. Run the server (stdio transport, for use with an MCP client)
python -m sql_mcp_server.serverConexión con Claude Desktop
Añádelo a tu configuración MCP de Claude Desktop (claude_desktop_config.json):
{
"mcpServers": {
"sql-explorer": {
"command": "python",
"args": ["-m", "sql_mcp_server.server"],
"cwd": "/absolute/path/to/sql-mcp-server",
"env": {
"PGHOST": "localhost",
"PGPORT": "5432",
"PGDATABASE": "sales",
"PGUSER": "mcp_readonly",
"PGPASSWORD": "change_me"
}
}
}
}Reinicia Claude Desktop y luego pregunta algo como "¿Qué tablas están disponibles y qué categoría de producto tiene los mayores ingresos totales?"
Esquema de ejemplo
orders → order_items → products → categories, además de customers. Los ingresos de un pedido = sum(order_items.quantity * order_items.unit_price). El generador siembra ~600 clientes, ~3.500 pedidos y un puñado de peculiaridades intencionadas en los datos (correos electrónicos faltantes, algunos pedidos atípicos al por mayor) para que las consultas parezcan tratar con datos reales.
Pruebas
tests/test_security.py y tests/test_tools.py se ejecutan sin base de datos — prueban directamente la capa de validación y las funciones de las herramientas con la capa de BD simulada. Esto es lo que ejecuta CI. db.py en sí mismo (la capa de psycopg2) se pone a prueba en la práctica ejecutando el servidor contra la instancia de Postgres de Docker; consulta Inicio rápido más arriba.
Estructura del proyecto
sql_mcp_server/
config.py Environment-based settings
security.py SQL/identifier validation (the core safety logic)
db.py psycopg2 access layer
server.py MCP tool definitions
scripts/
init_schema.sql Schema + read-only role setup
generate_sample_data.py Faker-based sample data
tests/
test_security.py Validation logic (18+ cases: injection, stacked
statements, comment smuggling, DDL/DML blocking, etc.)
test_tools.py Tool functions with mocked DBThis server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables interaction with PostgreSQL databases through MCP, allowing users to explore database structures, inspect table schemas, and execute read-only SQL queries.
- AlicenseNot gradedqualityBmaintenanceEnables AI agents to query a PostgreSQL database through a small set of controlled, read-only tools for schema inspection, row lookup, and aggregate statistics.1MIT
- FlicenseNot gradedqualityCmaintenanceEnables AI assistants to execute SQL queries and inspect PostgreSQL database schemas via MCP tools.
- AlicenseNot gradedqualityCmaintenanceA read-only natural-language database agent that exposes PostgreSQL schema-discovery and SELECT tools via MCP, enabling users to query databases in plain English.MIT
Related MCP Connectors
Query PostgreSQL databases in plain English — LLM-generated, safety-validated SQL.
Analytical memory for AI agents: a real Postgres queried in plain English over MCP. One command.
MCP server for managing Prisma Postgres.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Kenza-21/MCP-SQL-Server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server