The difference from a read-only Postgres server is that changes can actually be made; the difference from a psql session is that they sit in an isolated transaction until a separate commit call. Query classification and transaction timeouts mean an abandoned session rolls back rather than leaving work half applied.
A PostgreSQL MCP server with full read-write access, in contrast to the read-only official one. Queries are classified as DQL, DML, DDL, DCL or TCL, safe reads run with read-only enforced, and everything else runs inside an isolated transaction that has to be committed explicitly — with a timeout and automatic rollback if it is not.
- Read queries executed with read-only semantics enforced (execute_query)
- INSERT, UPDATE, DELETE and DDL run inside an isolated transaction (execute_dml_ddl_dcl_tcl)
- A two-step commit: nothing lands until it is committed (execute_commit), and it can be abandoned instead (execute_rollback)
- Maintenance operations that cannot run inside a transaction (execute_maintenance)
- Rich schema information: column types and descriptions, max length, nullability, primary keys, foreign key relationships, index type and uniqueness, and row count estimates
- Transaction timeout monitoring with automatic rollback, and configurable safety limits
A PostgreSQL connection and a database user whose grants match what you intend to allow — the server's controls sit on top of the database's own permissions, not in place of them. A Docker image is published. Choosing Allow Once rather than Allow Always in Claude Desktop keeps a person in the loop on every write.
One command — npx -y mcp-postgres-full-access postgresql://username:password@localhost:5432/database
