postgresql-mcp
postgresql-mcp
A Model Context Protocol (MCP) server for PostgreSQL with full read-write support, atomic transactions, and schema inspection. Works with Claude Desktop, Cursor, Windsurf, and any MCP-compatible AI client.
Connect any PostgreSQL database — local, Supabase, AWS RDS, or self-hosted — to your AI assistant in seconds.
Features
Full read-write SQL access (
SELECT,INSERT,UPDATE,DELETE,CREATE,DROP)Atomic multi-statement transactions with automatic rollback on failure
Schema inspection: columns, types, nullability, defaults, primary keys
Optional read-only mode via
?mode=readonlyNo cloud lock-in — works with any standard PostgreSQL connection string
Single file, minimal dependencies
Why this exists
There are two other PostgreSQL MCP servers worth knowing about, and neither fully covers the general-purpose use case:
Anthropic's official @modelcontextprotocol/server-postgres is strictly read-only — it exposes only a single query tool that runs inside a READ ONLY transaction. No writes, no DDL, no transactions. It was also deprecated and archived in July 2025.
Microsoft's azure-postgresql-mcp does support writes and DDL, but it is built specifically for Azure Database for PostgreSQL Flexible Server. While it technically accepts standard PG* environment variables (so a local connection may work), local use is untested and unsupported. Several tools require Microsoft Entra authentication and Azure-specific APIs that won't function outside Azure. It also pulls in Azure SDK dependencies you don't need for a non-Azure setup. It is currently in Preview.
This server is the alternative for everything else: local PostgreSQL, self-hosted, Supabase, RDS, or any standard PostgreSQL instance. It is a single dependency-light file with no cloud lock-in, full read-write support, atomic multi-statement transactions, and an optional ?mode=readonly flag when you want to restrict access.
Requirements
Node.js 18+
A running PostgreSQL database
Installation
npm install -g @sarmadparvez/postgresql-mcpOr run directly without installing (requires npm 7+ / Node.js 18+):
npx @sarmadparvez/postgresql-mcp <postgresql-connection-string>Usage
postgresql-mcp <postgresql-connection-string>Examples:
# Read-write access
postgresql-mcp postgresql://user:pass@localhost:5432/mydb
# Read-only mode (disables execute and transaction tools)
postgresql-mcp postgresql://user:pass@localhost:5432/mydb?mode=readonlyOr with npx (requires npm 7+ / Node.js 18+):
npx @sarmadparvez/postgresql-mcp postgresql://user:pass@localhost:5432/mydb
npx @sarmadparvez/postgresql-mcp postgresql://user:pass@localhost:5432/mydb?mode=readonlyTools
Tool | Available in | Description |
| Always | Execute a read-only |
| Read-write mode | Execute a write SQL statement ( |
| Always | List columns, types, nullability, defaults, and primary keys for tables in a given schema. Optionally filter to a specific table. |
| Always | List all base tables in a schema with their disk size. |
| Read-write mode | Execute multiple SQL statements atomically. Rolls back all statements if any one fails. |
Read-Only Mode
Append ?mode=readonly to the connection string to start the server in read-only mode. This disables the execute and transaction tools, leaving only query, schema, and list_tables.
Claude Desktop Configuration
First, install the package globally:
npm install -g @sarmadparvez/postgresql-mcpThen find the paths to node and the installed script:
which node
# e.g. /usr/local/bin/node
# nvm users: /Users/yourname/.nvm/versions/node/v22.12.0/bin/node
npm root -g
# e.g. /usr/local/lib/node_modules
# nvm users: /Users/yourname/.nvm/versions/node/v22.12.0/lib/node_modulesAdd this to your claude_desktop_config.json:
Replace
commandwith the output ofwhich nodeReplace the prefix of the script path with the output of
npm root -g— the suffix/@sarmadparvez/postgresql-mcp/index.jsstays the same
{
"mcpServers": {
"postgres": {
"command": "/usr/local/bin/node",
"args": [
"/usr/local/lib/node_modules/@sarmadparvez/postgresql-mcp/index.js",
"postgresql://user:pass@localhost:5432/mydb"
]
}
}
}For read-only access, append ?mode=readonly to the connection string:
{
"mcpServers": {
"postgres-readonly": {
"command": "/usr/local/bin/node",
"args": [
"/usr/local/lib/node_modules/@sarmadparvez/postgresql-mcp/index.js",
"postgresql://user:pass@localhost:5432/mydb?mode=readonly"
]
}
}
}Compatible AI Clients
This MCP server works with any client that supports the Model Context Protocol:
Claude Desktop (Anthropic)
Any other MCP-compatible client
Dependencies
@modelcontextprotocol/sdk— MCP server frameworkpg— PostgreSQL clientzod— Schema validation for tool inputs
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/sarmadparvez/postgresql-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server