
PostgreSQL
STREAMABLE HTTPMCP server for PostgreSQL database interaction with dual transport support.
MCP server for PostgreSQL database interaction with dual transport support.
A Model Context Protocol (MCP) server that provides both HTTP and Stdio transports for interacting with PostgreSQL databases. This server exposes database resources and tools through both transport methods, allowing for flexible integration in different environments.
The database credentials must be passed as:
# PostgreSQL Database Configuration export POSTGRES_USERNAME=your_username export POSTGRES_PASSWORD=your_password export POSTGRES_HOST=localhost export POSTGRES_DATABASE=your_database # HTTP Server Configuration # Following are the default values export PORT=3000 export HOST=0.0.0.0 # CORS Configuration (comma-separated list of allowed origins) # Following are the default values export CORS_ORIGIN=http://localhost:8080,http://localhost:3000 # Environment # Following are the default values export NODE_ENV=development
npx
command will be run):
create a .env
file (the package uses dotenv
package)# .env.example # PostgreSQL Database Configuration POSTGRES_USERNAME=your_username POSTGRES_PASSWORD=your_password POSTGRES_HOST=localhost POSTGRES_DATABASE=your_database # HTTP Server Configuration PORT=3000 HOST=0.0.0.0 # CORS Configuration (comma-separated list of allowed origins) CORS_ORIGIN=http://localhost:8080,http://localhost:3000 # Environment NODE_ENV=development
npx
npx @ahmedmustahid/postgres-mcp-server # or npx @ahmedmustahid/postgres-mcp-server --port 3000 --verbose
npx @ahmedmustahid/postgres-mcp-server stdio # npx @ahmedmustahid/postgres-mcp-server stdio --verbose
Copy environment template
cp .env.example .env
Edit your database credentials
nano .env
uv
from hereuv add podman-compose
(or uv sync
to sync packages in pyproject.toml
)#get the environment variables set -a source .env set +a podman machine start make podman-up
First, install node.js and npm, build the project following the above instructions.
Edit your claude_desktop_config.json
{ "mcpServers": { "postgres-mcp-server": { "command": "npx", "args": [ "@ahmedmustahid/postgres-mcp-server", "stdio" ], "env": { "POSTGRES_USERNAME": "your-username", "POSTGRES_PASSWORD": "your-password", "POSTGRES_HOST": "hostname", "POSTGRES_DATABASE": "database-name" } } } }
Verify from Claude Desktop Window
Prompt: Show sales
table from last year.
First, install node.js and npm, build the project following the above instructions. Install MCP Inspector: instructions: here
npx @modelcontextprotocol/inspector npx @ahmedmustahid/postgres-mcp-server stdio
First, run the server (shell where environment has been configured):
npx @ahmedmustahid/postgres-mcp-server
Run the mcp inspector from another terminal
npx @modelcontextprotocol/inspector
After selecting Streamable HTTP
from drop down menu, insert http://localhost:3000/mcp
(default) into URL.
MCP tools:
MCP Resource:
You have to specify these inside the .env file.
Variable | Description | Default | Required |
---|---|---|---|
POSTGRES_USERNAME | PostgreSQL username | - | Yes |
POSTGRES_PASSWORD | PostgreSQL password | - | Yes |
POSTGRES_HOST | PostgreSQL host | - | Yes |
POSTGRES_DATABASE | PostgreSQL database name | - | Yes |
PORT | HTTP server port | 3000 | No |
HOST | HTTP server host | 0.0.0.0 | No |
CORS_ORIGIN | Allowed CORS origins (comma-separated) | localhost:8080,localhost:3000 | No |
NODE_ENV | Environment mode | development | No |
hello://world
)A simple greeting message for testing.
database://tables
)Lists all tables in the public schema with their schema URIs.
database://tables/{tableName}/schema
)Returns column information for a specific table.
Execute read-only SQL queries against the database.
Parameters:
sql
(string): The SQL query to executeFeature | HTTP Transport | Stdio Transport |
---|---|---|
Session Management | ✅ Stateful sessions | ❌ Stateless |
Concurrent Connections | ✅ Multiple clients | ❌ Single process |
Web Integration | ✅ REST API compatible | ❌ CLI only |
Interactive Use | ✅ Via HTTP clients | ✅ Direct stdio |
Docker Deployment | ✅ Web service | ✅ CLI container |
The HTTP server includes a basic health check endpoint accessible at the /health
endpoint with a GET request (returns 405 Method Not Allowed, confirming the server is responsive).
Database Connection Errors
# Check your database credentials in .env # Ensure PostgreSQL is running and accessible
Port Already in Use
# Change PORT in .env or stop conflicting services lsof -i :3000
Docker Build Issues
# Clean Docker cache npm run docker:clean docker system prune -a
Session Management (HTTP)
# Sessions are stored in memory and will reset on server restart # For production, consider implementing persistent session storage
src/resources/
src/server/server.ts
src/tools/
src/server/server.ts
MIT
Please read the contributing guidelines and submit pull requests to the main repository.