PostgreSQL SSH MCP Server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| PORT | No | HTTP server port | 3000 |
| MAX_ROWS | No | Maximum rows returned per query | 1000 |
| MCP_HOST | No | HTTP server bind address | 0.0.0.0 |
| SSH_HOST | No | SSH server hostname | |
| SSH_PORT | No | SSH server port | 22 |
| SSH_USER | No | SSH username | |
| READ_ONLY | No | Block data modifications. Set false to allow writes. | true |
| SSH_ENABLED | No | Set true to enable SSH tunneling | false |
| AUTH0_DOMAIN | No | Auth0 tenant domain (e.g., tenant.us.auth0.com) | |
| DATABASE_SSL | No | true or false. Auto-enabled for non-localhost. | auto |
| DATABASE_URI | No | Full connection string (e.g., postgresql://user:pass@host:5432/db) | |
| SSH_PASSWORD | No | SSH password (alternative to key) | |
| DATABASE_HOST | No | Database hostname | |
| DATABASE_NAME | No | Database name | |
| DATABASE_PORT | No | Database port | 5432 |
| DATABASE_USER | No | Database username | |
| MCP_AUTH_MODE | No | Authentication mode: none or oauth | none |
| MCP_STATELESS | No | Stateless mode (each request re-initializes) | true |
| QUERY_TIMEOUT | No | Query timeout in milliseconds | 30000 |
| AUTH0_AUDIENCE | No | Auth0 API identifier / audience | |
| DATABASE_SSL_CA | No | Path to CA certificate bundle | |
| DATABASE_PASSWORD | No | Database password | |
| MCP_ALLOWED_HOSTS | No | Comma-separated allowed Host headers | |
| MCP_ALLOWED_ORIGINS | No | Comma-separated allowed CORS origins (* for any) | |
| SSH_STRICT_HOST_KEY | No | Verify host key against known_hosts | true |
| MCP_SERVER_POOL_SIZE | No | Server instances for stateless mode | 4 |
| SSH_KNOWN_HOSTS_PATH | No | Custom known_hosts file | ~/.ssh/known_hosts |
| SSH_PRIVATE_KEY_PATH | No | Path to private key file | |
| POOL_DRAIN_TIMEOUT_MS | No | Timeout for draining pool during reconnect | 5000 |
| MAX_CONCURRENT_QUERIES | No | Maximum concurrent queries | 10 |
| SSH_KEEPALIVE_INTERVAL | No | Keepalive interval in milliseconds | 10000 |
| SSH_TRUST_ON_FIRST_USE | No | Auto-add unknown hosts (when strict is enabled) | true |
| MCP_SESSION_TTL_MINUTES | No | Session TTL for stateful mode | 30 |
| MCP_RESOURCE_DOCUMENTATION | No | URL to API documentation (RFC 9728) | |
| SSH_MAX_RECONNECT_ATTEMPTS | No | Max reconnect attempts (-1 for unlimited) | 5 |
| SSH_PRIVATE_KEY_PASSPHRASE | No | Passphrase for encrypted keys | |
| MCP_SESSION_CLEANUP_INTERVAL_MS | No | Session cleanup interval | 300000 |
| DATABASE_SSL_REJECT_UNAUTHORIZED | No | Set false to allow self-signed certificates | true |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| execute_queryB | Execute SQL with optional parameters. Results are capped by MAX_ROWS and include a truncated flag. |
| explain_queryB | Return an EXPLAIN plan for a query. ANALYZE executes the query. |
| list_schemasA | List schemas (excludes system schemas by default). |
| list_tablesA | List tables in a schema with estimated row counts and sizes. |
| describe_tableA | Describe a table (columns, constraints, indexes). |
| list_databasesA | List databases with owner, encoding, and size. |
| get_connection_statusA | Get connection status, pool stats, and tunnel state. |
| list_active_connectionsB | List active connections from pg_stat_activity. |
| list_long_running_queriesC | List queries running longer than a threshold. |
| get_database_versionA | Get PostgreSQL server version. |
| get_database_sizeB | Get database size and largest tables. |
| get_table_statsA | Get table statistics (rows, vacuum/analyze, scan counts). |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 12 tools
Each tool has a clear, distinct purpose covering different aspects of PostgreSQL management: schema description, query execution, planning, connections, database info, stats, and monitoring. No overlaps or ambiguities.
All tool names follow a consistent verb_noun pattern with verbs like describe, execute, explain, get, and list. The naming is predictable and uniform.
With 12 tools, the server is well-scoped for its intended domain of PostgreSQL monitoring and management. Each tool earns its place without being excessive or sparse.
The tool set covers essential operations for database exploration and performance monitoring, including schema inspection, query execution, explain plans, and active query tracking. Minor gaps exist, such as lack of tools for modifying database objects or managing connections, but these are reasonable given the server's likely read-oriented purpose.