PostgreSQL

by leixiaotian1

11 stars
204 downloads
Not rated
GitHub

About

Enables direct PostgreSQL database interaction with tools for executing SQL queries, creating tables, and listing database schema, featuring security controls like query validation and input sanitization.

Details

Author
leixiaotian1
Repository
leixiaotian1/pgsql-mcp-server
GitHub stars
11
Downloads
204
License
MIT License
Categories
Database, Other, Productivity, Developer Tools, Design, AI, Search, Frontend, Project Management, Security

Interact with Databases via AI: Enables LLMs to perform database operations through a structured protocol.
Secure Toolset: Separates read and write operations into distinct, authorizable tools (read_query, write_query).
Schema Management: Allows for table creation (create_table) and listing (list_tables).
Query Analysis: Provides a tool to analyze query execution plans (explain_query).
Multiple Transport Modes: Supports stdio, Server-Sent Events (sse), and streamableHttp for flexible client integration.
Environment-Based Configuration: Easily configurable using a .env file.

Setting up with Highlight

This MCP is not yet compatible with Highlight’s one-click setup. However, you can still use it with Highlight by following these steps:

  1. Download and install Highlight from highlightai.com/download
  2. Navigate to the plugins tab and select "Add Custom Plugin"
  3. Configure the plugin with the settings below
    Plugin Name PostgreSQL
    Command (node, npx, python, etc.) /path/to/pgsql-mcp-server
    Environment
    • DB_HOST localhost
    • DB_NAME postgres
    • DB_PORT 5432
    • DB_USER your_username
    • DB_SSLMODE disable
    • DB_PASSWORD your_password
    • SERVER_MODE stdio

    Please refer to the README for specific instructions on how to obtain API keys or other required environment variables.

  4. Enable "Start Automatically" if you want the plugin to start when Highlight launches

From the repository

./pgsql-mcp-server

To use this server with an MCP-enabled AI assistant, add the following to your MCP configuration:

{
  "mcpServers": {
    "pgsql-mcp-server": {
      "command": "/path/to/pgsql-mcp-server",
      "args": [],
      "env": {
        "DB_HOST": "localhost",
        "DB_PORT": "5432",
        "DB_NAME": "postgres",
        "DB_USER": "your_username",
        "DB_PASSWORD": "your_password",
        "DB_SSLMODE": "disable",
        "SERVER_MODE": "stdio"
      },
      "disabled": false,
      "autoApprove": []
    }
  }
}
---

<details>
<summary><strong>Click to expand Docker Deployment Guide</strong></summary>

1. Clone the project

    git clone https://github.com/leixiaotian1/pgsql-mcp-server.git
cd pgsql-mcp-server

2. Configure .env file

Create a .env file in the project root directory. This file stores database connection information. Ensure the DB_HOST value matches the database container name you'll start later.

    DB_HOST=postgres
DB_PORT=5432
DB_NAME=postgres
DB_USER=user
DB_PASSWORD=password
DB_SSLMODE=disable
SERVER_MODE=sse

3. Create Docker network

To enable communication between the application container and database container, create a shared Docker network. This command only needs to run once.

    docker network create sql-mcp-network

4. Start PostgreSQL database container

Use this command to start a PostgreSQL container and connect it to our network.

> Note:
> - --name postgres: Container name, must exactly match the DB_HOST in your .env file.
> - --network sql-mcp-network: Connect to the shared network.
> - -p 5432:5432: Maps host's 5432 port to container's 5432 port. This means you can connect from your computer (e.g., using DBeaver) via localhost:5432, while the app container will access 5432 port directly through the internal network.

    docker run -d \
      --name postgres \
      --network sql-mcp-network \
      -e POSTGRES_USER=user \
      -e POSTGRES_PASSWORD=password \
      -e POSTGRES_DB=postgres \
      -p 5432:5432 \
      postgres
    

5. Build and run the application

Now you can use commands from the Makefile to manage the application.

- Build image and run container:

      make build
make run

This will automatically stop old containers, build a new image, and start a new container.

- View application logs:

      make logs

If you see Successfully connected to database, everything is working correctly.

- Stop the application:

      make stop

</details>

---

read_query

Executes a `SELECT` SQL query. Parameters: `query` (string, required): The `SELECT` statement to execute.

write_query

Executes an `INSERT`, `UPDATE`, or `DELETE` SQL query. Parameters: `query` (string, required): The `INSERT/UPDATE/DELETE` statement to execute.

create_table

Executes a `CREATE TABLE` SQL statement. Parameters: `schema` (string, required): The `CREATE TABLE` statement.

list_tables

Lists all user-created tables in the database. Parameters: `schema` (string, optional): The schema name to filter tables by.

explain_query

Returns the execution plan for a given SQL query. Parameters: `query` (string, required): The query to explain (must start with `EXPLAIN`).

Claude Desktop / Cursor

Paste into your MCP client config file to install this server.

{
    "mcpServers": {
        "postgresql": {
            "env": {
                "DB_HOST": "localhost",
                "DB_NAME": "postgres",
                "DB_PORT": "5432",
                "DB_USER": "your_username",
                "DB_SSLMODE": "disable",
                "DB_PASSWORD": "your_password",
                "SERVER_MODE": "stdio"
            },
            "args": [],
            "command": "/path/to/pgsql-mcp-server"
        }
    }
}

Linux

{
    "env": {
        "DB_HOST": "localhost",
        "DB_NAME": "postgres",
        "DB_PORT": "5432",
        "DB_USER": "your_username",
        "DB_SSLMODE": "disable",
        "DB_PASSWORD": "your_password",
        "SERVER_MODE": "stdio"
    },
    "args": [],
    "command": "/path/to/pgsql-mcp-server"
}

Macos

{
    "env": {
        "DB_HOST": "localhost",
        "DB_NAME": "postgres",
        "DB_PORT": "5432",
        "DB_USER": "your_username",
        "DB_SSLMODE": "disable",
        "DB_PASSWORD": "your_password",
        "SERVER_MODE": "stdio"
    },
    "args": [],
    "command": "/path/to/pgsql-mcp-server"
}

Windows

{
    "env": {
        "DB_HOST": "localhost",
        "DB_NAME": "postgres",
        "DB_PORT": "5432",
        "DB_USER": "your_username",
        "DB_SSLMODE": "disable",
        "DB_PASSWORD": "your_password",
        "SERVER_MODE": "stdio"
    },
    "args": [],
    "command": "/path/to/pgsql-mcp-server"
}

PostgreSQL MCP Server

GoDoc Stars Forks

中文 | English

A Model Context Protocol (MCP) server that provides tools for interacting with a PostgreSQL database. It enables AI assistants to execute SQL queries, explain statements, create tables, and list database tables via the MCP protocol.

✨ Features

Interact with Databases via AI: Enables LLMs to perform database operations through a structured protocol.
Secure Toolset: Separates read and write operations into distinct, authorizable tools (read_query, write_query).
Schema Management: Allows for table creation (create_table) and listing (list_tables).
Query Analysis: Provides a tool to analyze query execution plans (explain_query).
Multiple Transport Modes: Supports stdio, Server-Sent Events (sse), and streamableHttp for flexible client integration.
Environment-Based Configuration: Easily configurable using a .env file.

🛠️ Available Tools

The server exposes the following tools for MCP clients to invoke:

| Tool Name | Description | Parameters |
| --------------- | ---------------------------------------------------------- | ---------------------------------------------------------------------------- |
| read_query | Executes a SELECT SQL query. | query (string, required): The SELECT statement to execute. |
| write_query | Executes an INSERT, UPDATE, or DELETE SQL query. | query (string, required): The INSERT/UPDATE/DELETE statement to execute. |
| create_table | Executes a CREATE TABLE SQL statement. | schema (string, required): The CREATE TABLE statement. |
| list_tables | Lists all user-created tables in the database. | schema (string, optional): The schema name to filter tables by. |
| explain_query | Returns the execution plan for a given SQL query. | query (string, required): The query to explain (must start with EXPLAIN).|

🚀 Quick Start

Prerequisites

- Go 1.23 or later
- A PostgreSQL database server

Installation

1. Clone the repository:

   git clone https://github.com/leixiaotian1/pgsql-mcp-server.git
cd pgsql-mcp-server

2. Install dependencies:

   go mod download

3. Build the MCP server:

   go build -o pgsql-mcp-server

Configuration

The pg-mcp-server requires database connection details to be provided via environment variables. Create a .env file in the project root with the following variables:

DB_HOST=localhost      # PostgreSQL server host
DB_PORT=5432           # PostgreSQL server port
DB_NAME=postgres       # Database name
DB_USER=your_username  # Database user
DB_PASSWORD=your_pass  # Database password
DB_SSLMODE=disable     # SSL mode (disable, require, verify-ca, verify-full)
SERVER_MODE=stdio      # Server mode (stdio, sse, streamableHttp)

Usage

Running the Server

./pgsql-mcp-server

MCP Configuration

To use this server with an MCP-enabled AI assistant, add the following to your MCP configuration:

{
  "mcpServers": {
    "pgsql-mcp-server": {
      "command": "/path/to/pgsql-mcp-server",
      "args": [],
      "env": {
        "DB_HOST": "localhost",
        "DB_PORT": "5432",
        "DB_NAME": "postgres",
        "DB_USER": "your_username",
        "DB_PASSWORD": "your_password",
        "DB_SSLMODE": "disable",
        "SERVER_MODE": "stdio"
      },
      "disabled": false,
      "autoApprove": []
    }
  }
}
---

DOCKER DEPLOYMENT

<details>
<summary><strong>Click to expand Docker Deployment Guide</strong></summary>

Prerequisites

- Docker installed

Deployment Steps

1. Clone the project

    git clone https://github.com/leixiaotian1/pgsql-mcp-server.git
cd pgsql-mcp-server

2. Configure .env file

Create a .env file in the project root directory. This file stores database connection information. Ensure the DB_HOST value matches the database container name you'll start later.

    DB_HOST=postgres
DB_PORT=5432
DB_NAME=postgres
DB_USER=user
DB_PASSWORD=password
DB_SSLMODE=disable
SERVER_MODE=sse

3. Create Docker network

To enable communication between the application container and database container, create a shared Docker network. This command only needs to run once.

    docker network create sql-mcp-network

4. Start PostgreSQL database container

Use this command to start a PostgreSQL container and connect it to our network.

> Note:
> - --name postgres: Container name, must exactly match the DB_HOST in your .env file.
> - --network sql-mcp-network: Connect to the shared network.
> - -p 5432:5432: Maps host's 5432 port to container's 5432 port. This means you can connect from your computer (e.g., using DBeaver) via localhost:5432, while the app container will access 5432 port directly through the internal network.

    docker run -d \
      --name postgres \
      --network sql-mcp-network \
      -e POSTGRES_USER=user \
      -e POSTGRES_PASSWORD=password \
      -e POSTGRES_DB=postgres \
      -p 5432:5432 \
      postgres
    

5. Build and run the application

Now you can use commands from the Makefile to manage the application.

- Build image and run container:

      make build
make run

This will automatically stop old containers, build a new image, and start a new container.

- View application logs:

      make logs

If you see Successfully connected to database, everything is working correctly.

- Stop the application:

      make stop

</details>

---

🔌 Server Modes

You can select the transport protocol by setting the SERVER_MODE environment variable.

stdio

The server communicates over standard input and output. This is the default mode and is ideal for local testing or direct integration with command-line-based MCP clients.

sse

The server communicates using Server-Sent Events (SSE). When this mode is enabled, the server will start an HTTP service and listen for connections.

SSE Endpoint: http://localhost:8088/sse
Message Endpoint: http://localhost:8088/message

streamableHttp

The server uses the Streamable HTTP transport, a more modern and flexible HTTP-based transport for MCP.

  • Endpoint: http://localhost:8088/mcp

🤝 Contributing

Contributions are welcome! If you find any bugs, have feature requests, or suggestions for improvement, please feel free to submit a Pull Request or open an Issue.

1. Fork the Project.
2. Create your Feature Branch (git checkout -b feature/AmazingFeature).
3. Commit your Changes (git commit -m 'Add some AmazingFeature').
4. Push to the Branch (git push origin feature/AmazingFeature).
5. Open a Pull Request.

📄 License

This project is open source and is licensed under the MIT License.

No reviews yet — be the first

Sign in to leave a review

Use Google, GitHub, or an email account so ratings stay tied to real people.

Email sign in

No reviews posted yet.