A Model Context Protocol (MCP) server that provides secure database access to PostgreSQL through Kysely ORM. This server enables Claude Desktop to interact with PostgreSQL databases using natural language.
- MCP Tools: Query execution, table listing, schema inspection, and constraint information
- Type Safety: Full TypeScript support with typed inputs/outputs
- Connection Pooling: Configurable connection limits with idle timeout
- Error Handling: Graceful error messages for connection and query issues
- Security: Parameterized queries to prevent SQL injection
npx postgres-mcp-serverCreate a .env file with your database credentials:
DB_HOST=127.0.0.1
DB_PORT=5432
DB_USER=postgres
DB_PASSWORD=your_password_here
DB_NAME=postgres
DB_SSL=true| Tool | Description | Required Parameters | Optional Parameters |
|---|---|---|---|
query |
Execute SQL queries with pagination support | sql (string) |
pageSize (1-500), offset (number), parameters (array) |
describe_table |
Get table structure and column details | schema (string), table (string) |
- |
list_tables |
List all tables in a schema | schema (string) |
- |
list_schemas |
List all schemas in the database | - | includeSystemSchemas (boolean) |
get_constraints |
Get table constraints (PK, FK, etc.) | schema (string), table (string) |
- |
list_indexes |
List indexes for a table or schema | schema (string) |
table (string) |
list_views |
List views in a schema | schema (string) |
- |
list_functions |
List functions and procedures | schema (string) |
- |
explain_query |
Get query execution plan | sql (string) |
analyze (boolean), format (text/json/xml/yaml) |
get_table_stats |
Get table size and statistics | schema (string) |
table (string) |
- Pagination: Query tool supports up to 500 rows per page with automatic LIMIT/OFFSET handling
- Security: Parameterized queries prevent SQL injection, READ_ONLY mode by default
- Type Safety: Full TypeScript support with Zod schema validation
Add this server to your Claude Desktop configuration file:
Edit claude_desktop_config.json:
{
"mcpServers": {
"postgres-mcp-server": {
"command": "npx",
"args": ["postgres-mcp-server"],
"env": {
"DB_HOST": "127.0.0.1",
"DB_PORT": "5432",
"DB_USER": "postgres",
"DB_PASSWORD": "your_password_here",
"DB_NAME": "your_database_name",
"DB_SSL": "true"
}
}
}
}- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json
# Clone and install dependencies
git clone https://github.com/abiswas97/postgres-mcp-server.git
cd postgres-mcp-server
npm install
# Run in development mode with hot reload
npm run dev
# Build for production
npm run build
# Run tests
npm run test
# Run specific test suites
npm run test:unit
npm run test:integration| Variable | Default | Description |
|---|---|---|
DB_HOST |
127.0.0.1 |
PostgreSQL host |
DB_PORT |
5432 |
PostgreSQL port |
DB_USER |
postgres |
Database user |
DB_PASSWORD |
required | Database password |
DB_NAME |
postgres |
Database name |
DB_SSL |
true |
Enable SSL connection |
READ_ONLY |
true |
Restrict to SELECT/WITH/EXPLAIN queries |
QUERY_TIMEOUT |
30000 |
Query timeout in milliseconds |
MAX_PAGE_SIZE |
500 |
Maximum rows per page |
DEFAULT_PAGE_SIZE |
100 |
Default page size when not specified |
ISC