PostgreSQL
STDIOPostgreSQL数据库交互SQL操作服务器
PostgreSQL数据库交互SQL操作服务器
中文 | 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.
read_query, write_query).create_table) and listing (list_tables).explain_query).stdio, Server-Sent Events (sse), and streamableHttp for flexible client integration..env file.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). | 
Clone the repository:
git clone https://github.com/leixiaotian1/pgsql-mcp-server.git cd pgsql-mcp-server
Install dependencies:
go mod download
Build the MCP server:
go build -o pgsql-mcp-server
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)
./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": [] } } }
Clone the project
git clone https://github.com/leixiaotian1/pgsql-mcp-server.git cd pgsql-mcp-server
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
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
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 theDB_HOSTin your.envfile.--network sql-mcp-network: Connect to the shared network.-p 5432:5432: Maps host's5432port to container's5432port. This means you can connect from your computer (e.g., using DBeaver) vialocalhost:5432, while the app container will access5432port 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
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
You can select the transport protocol by setting the SERVER_MODE environment variable.
stdioThe 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.
sseThe server communicates using Server-Sent Events (SSE). When this mode is enabled, the server will start an HTTP service and listen for connections.
http://localhost:8088/ssehttp://localhost:8088/messagestreamableHttpThe server uses the Streamable HTTP transport, a more modern and flexible HTTP-based transport for MCP.
http://localhost:8088/mcpContributions 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.
git checkout -b feature/AmazingFeature).git commit -m 'Add some AmazingFeature').git push origin feature/AmazingFeature).This project is open source and is licensed under the MIT License.