In-depth architectural comparison of the Postgres and PostgreSQL MCP Server MCP servers. Compare execution transports, security boundaries, tool capabilities, quality scores, and ready-to-paste client installation snippets for Claude, Cursor, Windsurf, and VS Code.
At a Glance & Executive Verdict
Postgres
Databases · Local stdio
Quality: 51/100 (Good) | Auth: No auth required
PostgreSQL MCP Server
Databases · Local stdio
Quality: 55/100 (Good) | Auth: No auth required
Verdict Summary: Choose Postgres if you need specialized Databases tools running via a local process. Choose PostgreSQL MCP Server if your workspace requires Databases integration with local subprocess execution. Both servers can be configured concurrently in your client's mcpServers manifest.
Which MCP Server Should You Choose?
Choose Postgres when:
You need dedicated capabilities in the Databases domain.
You prefer local stdio subprocess transport architecture.
Your security boundary fits: No auth required (Free / Open Source).
Postgres is categorized under Databases and uses a local stdio subprocess. In contrast, PostgreSQL MCP Server belongs to Databases using local stdio subprocess. Select Postgres when you need capabilities focused on databases and PostgreSQL MCP Server when you require tools for databases.
Run a SQL statement with no persistent data changes - always inside `BEGIN READ ONLY`, regardless of `ALLOW_WRITES`. The recommended tool for read access, and the one to auto-allow for ad-hoc SQL; pair it with a least-privileged role ([why](#per-tool-gating-in-the-host)).
pg_query
Run a SQL query. Writes gated by the role in `DATABASE_URL` first, `ALLOW_WRITES` second. Supports parameterized queries via `params`. Result fields include `dataTypeName` (e.g. `int4`, `jsonb`) alongside `dataTypeID`.
pg_list_schemas
List non-system schemas.
pg_list_tables
List tables (and optionally views) in a schema with estimated row counts. Paginated via `limit`/`offset`.
pg_describe_table
Kind, columns, PK, outgoing FKs, incoming FKs (`referenced_by`), CHECK / UNIQUE / EXCLUDE constraints, indexes, and partition parent/children for a relation. Generated and identity columns are flagged (`generated`, `identity`, `generation_expression`) so an agent doesn't try to write to them. Const…
pg_list_views
List views and materialized views in a schema, including their SQL definitions.
pg_list_functions
List functions, procedures, and aggregates in a schema with signatures and return types.
pg_list_extensions
List installed extensions (pgvector, postgis, pg_stat_statements, etc.) with versions.
pg_search_columns
Find columns by name pattern across all user schemas. Case-insensitive, supports SQL LIKE wildcards.
pg_explain
EXPLAIN` or `EXPLAIN ANALYZE` for a SQL statement. Text or JSON output. Planner options: `buffers` (on by default with `analyze`), `settings`, `verbose`, `wal`, `costs`, `timing`, plus `generic_plan` (PG16+, plan a parameterized query with no values) and `memory` / `serialize` (PG17+). Optional `hy…
pg_index_advisor
Recommend indexes for a workload and prove each one pays for itself first. Takes `statements` you pass or the top N from `pg_stat_statements`, harvests candidate columns from what the **planner** reports as filters / join keys / sort keys (no SQL parser - every token is intersected with the real `p…
pg_health
Server version, database size, connections against `max_connections`, active queries with wait events and transaction age, `pg_stat_database` rollup (deadlocks, temp files, cache hit ratio), table count.