MCPcopy Index your code
hub / github.com/ericzakariasson/pg-mcp-server

github.com/ericzakariasson/pg-mcp-server @v0.3.0

Chat with this repo
repository ↗ · DeepWiki ↗ · release v0.3.0 ↗ · + Follow
75 symbols 165 edges 15 files 20 documented · 27%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

Postgres MCP Server

A Model Context Protocol server for PostgreSQL databases. Enables LLMs to query and analyze PostgreSQL databases through a controlled interface.

https://github.com/user-attachments/assets/6571c20c-91c9-4a6e-8332-13b587b79fbf

Installation

Install MCP Server

Add to your MCP client settings:

{
  "mcpServers": {
    "postgres": {
      "command": "npx",
      "args": ["--yes", "pg-mcp-server", "--transport", "stdio"],
      "env": {
        "DATABASE_URL": "postgresql://postgres:postgres@localhost:5432/postgres"
      }
    }
  }
}

Configuration

  • DATABASE_URL - PostgreSQL connection string (required)
  • DANGEROUSLY_ALLOW_WRITE_OPS - Enable writes (default: false)
  • DEBUG - Enable debug logging (default: false)
  • PG_SSL_ROOT_CERT - Optional path to a TLS CA bundle (e.g., AWS RDS global bundle)

Usage

Transports

  • Default transport is stdio. Switch to HTTP with the --transport flag.
  • HTTP mode serves the MCP Streamable HTTP endpoint at /mcp on PORT (default 3000).
  • Clients that support Streamable HTTP should connect to http://localhost:3000/mcp.

Start commands:

# stdio transport (default, via installed CLI)
pg-mcp-server --transport=stdio

# http transport
pg-mcp-server --transport=http

Tools

  • query - Execute SQL queries json { "sql": "SELECT * FROM users WHERE active = true LIMIT 10" }

Resources

  • postgres://tables - List all tables
  • postgres://table/{schema}/{table} - Get table schema and sample data

Example Prompts

Here's an example prompt to test if your MCP server is working:

Show me the first 5 users from the database

Data Analysis & Notebooks

For data analysis and exploration, I've added a Cursor rule for using the MCP server together with notebooks in .cursor/rules/notebooks.mdc:

Quick Start with Docker

# Start PostgreSQL with sample data
bun run db:start

# Test with MCP Inspector
bun run inspector

# Stop PostgreSQL
bun run db:stop

Sample tables included: users, products, orders, order_items

Development

# Clone and install
git clone https://github.com/ericzakariasson/pg-mcp-server.git
cd pg-mcp-server
bun install

# Run (stdio transport)
bun run index.ts -- --transport=stdio
DEBUG=true bun run index.ts -- --transport=stdio

# Run (http transport)
bun run index.ts -- --transport=http
DEBUG=true bun run index.ts -- --transport=http
bun test                      # Run tests

Use local build in MCP client settings:

bun run build:js
{
  "mcpServers": {
    "postgres": {
      "command": "node",
      "args": ["/absolute/path/to/pg-mcp-server/lib/index.js", "--transport", "stdio"],
      "env": {
        "DATABASE_URL": "postgresql://postgres:postgres@localhost:5432/postgres"
      }
    }
  }
}

Releases

This repo auto-creates a GitHub Release when you push a tag that matches the version in package.json:

  1. Update CHANGELOG.md and bump the version in package.json.
  2. Commit the changes on main (or your release branch).
  3. Create and push a matching tag:
VERSION=$(jq -r .version package.json)
git tag v"$VERSION"
git push origin v"$VERSION"

The GitHub Actions workflow will validate that the tag (e.g. v0.1.0) matches package.json, then use gh to create a release with generated notes, and publish to npm.

License

MIT - see LICENSE

Extension points exported contracts — how you extend this code

Logger (Interface)
(no doc) [4 implementers]
src/logger.ts
SslConfig (Interface)
* SSL configuration type compatible with postgres library SSL options * Based on Node.js TLS options
src/database.ts
PostgresMcpDeps (Interface)
(no doc)
src/mcp-core.ts
TableInfo (Interface)
(no doc)
src/types.ts
PostgresLibraryError (Interface)
* PostgreSQL error shape from the postgres library
src/database.ts
PostgresMcp (Interface)
(no doc)
src/mcp-core.ts
ColumnInfo (Interface)
(no doc)
src/types.ts
TableSchema (Interface)
(no doc)
src/types.ts

Core symbols most depended-on inside this repo

validate
called by 30
src/query-validator.ts
error
called by 15
src/logger.ts
loadConfig
called by 14
src/config.ts
validateConfig
called by 10
src/config.ts
info
called by 10
src/logger.ts
debug
called by 7
src/logger.ts
booleanFromEnv
called by 6
src/config.ts
extractErrorDetails
called by 5
src/database.ts

Shape

Method 35
Class 14
Function 13
Interface 12
Enum 1

Languages

TypeScript100%

Modules by API surface

src/database.ts18 symbols
src/types.ts16 symbols
src/logger.ts14 symbols
src/query-validator.ts8 symbols
tests/query-validator-extra.test.ts6 symbols
src/mcp-core.ts4 symbols
src/config.ts4 symbols
src/mcp-server-stdio.ts2 symbols
src/mcp-server-http.ts2 symbols
index.ts1 symbols

Datastores touched

postgresDatabase · 1 repos

For agents

$ claude mcp add pg-mcp-server \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact

Ask about this repo answers extend the page