mcp-postgres

mcp-postgres

Enables AI agents to interact with PostgreSQL databases through schema intelligence, query execution, and DBA tooling including index analysis and health monitoring. Features configurable access levels and audit logging for secure database operations.

Category
Visit Server

README

mcp-postgres

MCP server for PostgreSQL. Gives AI agents schema intelligence, query execution, and DBA tooling — through the Model Context Protocol.

Unlike generic database MCP servers, mcp-postgres is Postgres-native. It extracts table/column comments, understands Postgres-specific catalog views, provides index analysis, and ships with configurable access levels so you don't hand an LLM unrestricted database access.

Features

Schema Intelligence

  • List schemas, tables, views with sizes and row counts
  • Full table descriptions: columns, types, constraints, indexes, foreign keys
  • Extracts COMMENT ON metadata — gives the LLM semantic context about what columns mean
  • Search objects by name or comment across the entire database

Query Execution

  • Read-only query tool with automatic row limiting
  • Write-capable execute tool gated by access level
  • EXPLAIN ANALYZE with human-readable output

DBA Tooling

  • Table stats: live/dead tuples, bloat percentage, vacuum history, scan patterns
  • Index analysis: usage stats, unused index detection, missing index suggestions
  • Database health: connections, cache hit ratio, long-running queries, throughput

Safety

  • Four access levels: readonly, readwrite, admin, unrestricted
  • SQL statement classification (SELECT, DML, DDL, admin) with enforcement
  • Audit logging to stderr (JSON, one entry per query)

Quick Start

npx mcp-postgres --connection-string "postgres://user:pass@localhost:5432/mydb"

Or with environment variables:

DATABASE_URL="postgres://user:pass@localhost:5432/mydb" npx mcp-postgres

Claude Desktop

Add to your claude_desktop_config.json:

{
  "mcpServers": {
    "postgres": {
      "command": "npx",
      "args": [
        "-y",
        "mcp-postgres",
        "--connection-string",
        "postgres://user:pass@localhost:5432/mydb"
      ]
    }
  }
}

Claude Code

Add to your project's .mcp.json:

{
  "mcpServers": {
    "postgres": {
      "command": "npx",
      "args": ["-y", "mcp-postgres"],
      "env": {
        "DATABASE_URL": "postgres://user:pass@localhost:5432/mydb"
      }
    }
  }
}

Tools

Tool Description Access
list_schemas List schemas with table counts and sizes readonly
list_tables List tables with comments, row counts, sizes readonly
describe_table Full table description with columns, indexes, FKs, comments readonly
search_objects Search objects by name or comment readonly
query Execute SELECT queries readonly
execute Execute INSERT/UPDATE/DELETE/CREATE/etc varies
explain_query EXPLAIN (ANALYZE) with readable output readonly*
table_stats Table statistics, bloat, vacuum info readonly
index_analysis Index usage, unused indexes, missing index hints readonly
database_health Connections, cache ratio, long queries, bloat readonly

*explain_query with analyze=true executes the query, so it respects the statement's access level.

Resources

URI Description
postgres://schema/{name} Full DDL for a schema (CREATE TABLE statements with comments)
postgres://extensions Installed PostgreSQL extensions

Prompts

Prompt Description
explore-database Guided database exploration — schemas, tables, relationships
optimize-query Analyze a slow query with EXPLAIN, indexes, and recommendations
health-check Comprehensive database health assessment

Configuration

CLI Options

--connection-string  PostgreSQL connection URL
--access-level       readonly|readwrite|admin|unrestricted (default: readonly)
--row-limit          Max rows returned per query (default: 500)
--schema             Default schema filter (default: public)
--audit              Enable query audit logging to stderr

Environment Variables

Variable Description
DATABASE_URL PostgreSQL connection URL
POSTGRES_URL Alternative connection URL
MCP_POSTGRES_ACCESS_LEVEL Access level override
MCP_POSTGRES_ROW_LIMIT Row limit override

Access Levels

Level SELECT INSERT/UPDATE/DELETE CREATE/ALTER/DROP TRUNCATE/DROP DATABASE
readonly yes no no no
readwrite yes yes no no
admin yes yes yes no
unrestricted yes yes yes yes

Default is readonly. Use the minimum level needed.

Audit Logging

Enable with --audit. Logs every tool invocation to stderr as JSON:

{"timestamp":"2026-04-03T12:00:00.000Z","tool":"query","sql":"SELECT * FROM users","statementType":"select","accessLevel":"readonly","allowed":true,"durationMs":12,"rowCount":42}

Pipe stderr to a file to capture: mcp-postgres --audit 2>audit.log

Architecture

src/
├── index.ts             Entry point and CLI
├── server.ts            MCP server setup
├── config.ts            Configuration parsing
├── db/
│   ├── pool.ts          Connection pool management
│   └── query.ts         Query execution with timing
├── tools/
│   ├── schema.ts        Schema exploration tools
│   ├── query.ts         Query execution tools
│   └── performance.ts   DBA and health tools
├── resources/
│   └── schema.ts        Schema DDL resources
├── prompts/
│   └── index.ts         Prompt templates
└── safety/
    ├── classifier.ts    SQL statement classification
    ├── access.ts        Access level enforcement
    └── audit.ts         Audit logging

Development

npm install
npm test           # run tests
npm run build      # compile TypeScript
npm run dev -- --connection-string "postgres://..."  # run in dev mode

License

MIT

Recommended Servers

playwright-mcp

playwright-mcp

A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.

Official
Featured
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.

Official
Featured
Local
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.

Official
Featured
Local
TypeScript
VeyraX MCP

VeyraX MCP

Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.

Official
Featured
Local
graphlit-mcp-server

graphlit-mcp-server

The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.

Official
Featured
TypeScript
Kagi MCP Server

Kagi MCP Server

An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.

Official
Featured
Python
E2B

E2B

Using MCP to run code via e2b.

Official
Featured
Neon Database

Neon Database

MCP server for interacting with Neon Management API and databases

Official
Featured
Exa Search

Exa Search

A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.

Official
Featured
Qdrant Server

Qdrant Server

This repository is an example of how to create a MCP server for Qdrant, a vector search engine.

Official
Featured