postgres-mcp-server
A stdio MCP server that lets MCP clients (OpenCode, Codex, Claude Code, Antigravity) read, write, and introspect several named PostgreSQL databases whose connections live in a single .env file.
Run read-only SQL with
execute_query(executed inside aBEGIN TRANSACTION READ ONLY).Explore schemas:
list_schemas,list_tables(optionalschema_name), anddescribe_table(table_name, optionalschema_name, defaultpublic) using parameterized SQL.Perform writes with
execute_dml_ddl_dcl_tcl(INSERT/UPDATE/DELETE/MERGE/COPY), which leaves the transaction pending.Finalize pending writes with
execute_commitorexecute_rollbackusing the returnedtransaction_id.Run maintenance statements with
execute_maintenance(DROP/TRUNCATE/ALTER/CREATE/VACUUM/ANALYZE/REINDEX/GRANT/REVOKE).Work across multiple named databases (e.g.
PRODUCTION,DEVELOPMENT) from one file; write and maintenance arefalseby default and enabled per database.Point different instances at different config files via
POSTGRES_ENV_PATH; config is re-read on every invocation, rotating connections and rolling back orphaned transactions.Keep credentials out of client configs—
list_databasesexposes only names, descriptions, and permissions, and logs go tostderrwhilestdoutstays reserved for MCP.
Allows querying and inspecting PostgreSQL databases with read-only operations by default, and optional write and maintenance operations, using MCP tools such as execute_query, execute_dml_ddl_dcl_tcl, and schema/table introspection.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@postgres-mcp-server list tables in the public schema"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
postgres-mcp-server
Servidor MCP stdio para varias bases PostgreSQL nombradas, con conexiones centralizadas en un archivo .env. OpenCode, Antigravity, Codex y Claude Code pueden usar el mismo archivo sin guardar URLs ni contraseñas en sus configuraciones. Lectura e introspección habilitadas; escritura y mantenimiento deshabilitados por defecto.
Instalación
npm install
npm run build
Copy-Item .env.example .envEditá .env y asigná una URL real a cada base que vayas a utilizar. El ejemplo incluye todas las opciones disponibles para cada base. El archivo .env real está ignorado por Git; guardalo con permisos de archivo adecuados.
POSTGRES_DB_PRODUCTION_URL=postgresql://USER:PASSWORD@HOST:5432/DB_NAME
POSTGRES_DB_PRODUCTION_DESCRIPTION=Produccion
POSTGRES_DB_PRODUCTION_ENABLE_WRITE=false
POSTGRES_DB_PRODUCTION_ENABLE_MAINTENANCE=false
POSTGRES_DB_DEVELOPMENT_URL=postgresql://USER:PASSWORD@localhost:5432/dev
POSTGRES_DB_DEVELOPMENT_ENABLE_WRITE=trueEl nombre de base es PRODUCTION o DEVELOPMENT en las herramientas MCP. Una instancia MCP ve todas las bases de un archivo; varias instancias pueden usar archivos distintos con POSTGRES_ENV_PATH. Sin esta variable se usa .env junto al proyecto, independientemente del directorio de trabajo. Si se indica una ruta y no existe, la instancia falla al arrancar. Para uso como paquete instalado fuera del proyecto, indicá la ruta explícitamente.
Related MCP server: postgres-mcp
OpenCode
"postgres_trabajo": {
"type": "local",
"command": ["node", "D:/work/postgres-mcp-server/dist/index.js"],
"environment": {
"POSTGRES_ENV_PATH": "D:/config/bases-trabajo.env"
},
"enabled": true,
"timeout": 60000
}Para usar .env junto al proyecto, omití environment. Si usás el paquete instalado, usá "command": ["npx", "-y", "postgres-mcp-server"] y configurá POSTGRES_ENV_PATH con ruta absoluta. Otros arneses solo necesitan el comando stdio y esa variable de ruta.
Herramientas
list_databases: devuelve nombres, descripciones y permisos sin URLs ni secretos; admitelimit(1–50) yoffsetpara paginar.execute_query: lectura en transacciónREAD ONLY; recibe{ "database": "PRODUCTION", "sql": "SELECT now()" }.execute_dml_ddl_dcl_tcl: escritura habilitada por base; devuelvetransaction_idpendiente.execute_commit/execute_rollback: reciben{ "database": "DEVELOPMENT", "transaction_id": "tx_..." }.execute_maintenance: mantenimiento si está habilitado por base; recibedatabaseysql.list_schemas,list_tables,describe_table: introspección; recibendatabasey, cuando corresponde,schema_name/table_name.
Cada invocación lee nuevamente el archivo; si cambian una URL, un permiso o un límite, se rotan las conexiones afectadas. Se dejan terminar las operaciones iniciadas, se revierten las transacciones que quedaron pendientes y se cierran los pools anteriores antes de habilitar nuevas operaciones. Un archivo inválido, inaccesible o eliminado revoca el acceso hasta corregirlo. Para editar sin interrupciones, reemplazá el archivo de forma atómica.
Seguridad
Escritura y mantenimiento se habilitan explícitamente por base; ambos permisos son
falsepor defecto.La lectura corre en
BEGIN TRANSACTION READ ONLYy la introspección parametriza sus consultas.Los logs van a
stderr;stdoutqueda reservado para el protocolo MCP.Una transacción iniciada antes de una recarga no puede confirmarse después de ella: se revierte al retirar el pool.
Desarrollo
npm ci
npm run build
npm run lint
npm test
npm run coverageLas pruebas usan pools simulados. Más detalles: docs/configuracion.md, docs/seguridad-sql.md y docs/desarrollo.md.
Available Tools
8 toolsdescribe_tableA
Describe columnas, índices y constraints de una tabla. Usa SQL parametrizado.
Inputs: table_name (required), schema_name.
execute_commitA
Confirma una transacción abierta por execute_dml_ddl_dcl_tcl.
Inputs: transaction_id (required).
execute_dml_ddl_dcl_tclA
Ejecuta escritura SQL solo si POSTGRES_ENABLE_WRITE=true. Deja la transacción pendiente hasta commit o rollback.
Inputs: sql (required).
execute_maintenanceA
Ejecuta mantenimiento SQL solo si POSTGRES_ENABLE_MAINTENANCE=true.
Inputs: sql (required).
execute_queryA
Ejecuta una consulta SQL de solo lectura. Por seguridad corre dentro de una transacción READ ONLY.
Inputs: sql (required).
execute_rollbackA
Revierte una transacción abierta por execute_dml_ddl_dcl_tcl.
Inputs: transaction_id (required).
list_schemasA
Lista esquemas visibles no internos.
Inputs: no named parameters.
list_tablesA
Lista tablas visibles, opcionalmente filtradas por esquema. Usa SQL parametrizado.
Inputs: schema_name.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 8 tools
Each tool has a distinct role: read-only queries, write operations with explicit transaction control, maintenance commands, and metadata inspection. No two tools could plausibly perform the same task, and the transaction lifecycle is clearly separated.
All tools follow a consistent verb_prefix pattern (execute_*, list_*, describe_*) in lowercase snake_case, making the API predictable and easy to navigate.
8 tools is appropriately scoped for a PostgreSQL interaction server, covering query execution, writes, maintenance, transactions, and schema metadata without redundancy.
The set covers the full lifecycle of SQL execution: reads, writes, transaction commit/rollback, maintenance operations, and essential schema discovery. It lacks some advanced catalog queries, but the core domain is well-covered.
Maintenance
Related MCP Connectors
Hosted MCP server for PostgreSQL diagnostics: slow queries, missing indexes, connection pressure.
Text-to-SQL MCP server: read-only queries on PostgreSQL, MySQL and SQL Server with your real schema
MCP server for interacting with the Supabase platform
Managed Postgres MCP: projects, SQL, docs search, and storage buckets via OAuth.
Related MCP Servers
- AlicenseBqualityDmaintenanceA lightweight Postgres MCP server for safe database exploration and query analysis, read-only by default, with multi-database support.416 PyPI4MIT
- AlicenseAqualityDmaintenanceA self-hostable PostgreSQL MCP server for exploring database schemas and running guarded read/write queries with selectable access modes (readonly, readwrite, admin), plus a dry-run confirm workflow for safety.141MIT
- AlicenseAqualityDmaintenanceA secure, read-only PostgreSQL MCP server that provides safe database introspection and querying capabilities.149 npmMIT
- AlicenseAqualityDmaintenanceRead-only PostgreSQL database MCP server for safely exploring schema, tables, relationships, and sample data without modification.10263 npmMIT