PostgreSQL MCP Server

PostgreSQL MCP servers enable AI models to interact with PostgreSQL databases, providing capabilities for structured data operations, SQL queries, transaction management, and advanced data indexing.

GitHub starsnpm versionnpm downloads

Overview

The MCP Postgres Server bridges AI and databases by letting language models (LLMs) work directly with PostgreSQL. It's part of the Model Context Protocol (MCP) system, providing a safe and standard way to connect AI with data.

Created by:

Developed by Anton Orlov

Key Features

🗂️

Database Structure Inspection

View and understand database schemas, tables, and their relationships

💬

Natural Language to SQL

Convert natural language queries into SQL commands seamlessly

Efficient Query Handling

Execute and manage query results with prepared statements support

📊

Smart Data Formatting

Format and present data in readable, AI-friendly formats

Available Tools

Quick Reference

ToolPurposeCategory
connect_dbEstablish database connectionConnection
queryExecute SELECT queriesRead
executeExecute INSERT/UPDATE/DELETEWrite
list_schemasList all database schemasSchema
list_tablesList tables in a schemaSchema
describe_tableGet table structure detailsSchema

Detailed Usage

connect_db

Warning:

only use when requested or if other commands fail

Establish connection to PostgreSQL database using provided credentials.

use_mcp_tool({
  server_name: "postgres",
  tool_name: "connect_db",
  arguments: {
    host: "localhost",
    port: 5432,
    user: "your_user",
    password: "your_password",
    database: "your_database"
  }
});
query

Execute SELECT queries with optional prepared statement parameters. Supports both PostgreSQL-style ($1, $2) and MySQL-style (?) parameter placeholders.

use_mcp_tool({
  server_name: "postgres",
  tool_name: "query",
  arguments: {
    sql: "SELECT * FROM users WHERE id = $1",
    params: [1]
  }
});
execute

Execute INSERT, UPDATE, or DELETE queries with optional prepared statement parameters. Supports both PostgreSQL-style ($1, $2) and MySQL-style (?) parameter placeholders.

use_mcp_tool({
  server_name: "postgres",
  tool_name: "execute",
  arguments: {
    sql: "INSERT INTO users (name, email) VALUES ($1, $2)",
    params: ["John Doe", "[email protected]"]
  }
});
list_schemas

List all schemas in the database

use_mcp_tool({
  server_name: "postgres",
  tool_name: "list_schemas",
  arguments: {}
});
list_tables

List tables in the connected database. Accepts an optional schema parameter (defaults to 'public').

// List tables in the 'public' schema (default)
use_mcp_tool({
  server_name: "postgres",
  tool_name: "list_tables",
  arguments: {}
});

// List tables in a specific schema
use_mcp_tool({
  server_name: "postgres",
  tool_name: "list_tables",
  arguments: {
    schema: "my_schema"
  }
});
describe_table

Get the structure of a specific table. Accepts an optional schema parameter (defaults to 'public').

// Describe a table in the 'public' schema (default)
use_mcp_tool({
  server_name: "postgres",
  tool_name: "describe_table",
  arguments: {
    table: "users"
  }
});

// Describe a table in a specific schema
use_mcp_tool({
  server_name: "postgres",
  tool_name: "describe_table",
  arguments: {
    table: "users",
    schema: "my_schema"
  }
});

Installation

{
  "mcpServers": {
    "postgres": {
      "type": "stdio",
      "command": "npx",
      "args": [
        "-y",
        "mcp-postgres-server"
      ],
      "env": {
        "PG_HOST": "your_host",
        "PG_PORT": "5432",
        "PG_USER": "your_user",
        "PG_PASSWORD": "your_password",
        "PG_DATABASE": "your_database"
      }
    }
  }
}

Sources