PostgreSQL (hardened, read-only) MCP Server
io.github.Eszetael/postgres-mcp-hardened
What is the PostgreSQL (hardened, read-only) MCP server?
Read-only PostgreSQL over MCP. Writes refused at the parsed SQL, plus a READ ONLY transaction.
How to install PostgreSQL (hardened, read-only)
Copy-paste configuration for popular MCP clients.
DATABASE_URLrequiredsecretConnection string for the role the server connects as. Use a role that cannot write — the server refuses writes twice, but a read-only role is the layer that does not depend on us being correct. `--print-setup-sql` prints the SQL that creates one.
MCP_STATEMENT_TIMEOUTServer-side statement timeout, e.g. `5s`. A question that would pin the database is cancelled by PostgreSQL, not by hope.
MCP_ALLOW_TABLESComma-separated allowlist. A table off the list is refused by name, and hiding it inside a CTE, a view or a join does not help.
MCP_AUDIT_LOGPath to the tamper-evident audit log. Entries are chained by hash and survive a restart; `--verify-audit` checks the chain against an off-host anchor.
MCP_ADDRAddress to bind, default 127.0.0.1:8080.
{
"mcpServers": {
"postgres-mcp-hardened": {
"command": "npx",
"args": [
"-y",
"postgres-mcp-hardened",
"--stdio"
],
"env": {
"DATABASE_URL": "<YOUR_DATABASE_URL>",
"MCP_STATEMENT_TIMEOUT": "<YOUR_MCP_STATEMENT_TIMEOUT>",
"MCP_ALLOW_TABLES": "<YOUR_MCP_ALLOW_TABLES>",
"MCP_AUDIT_LOG": "<YOUR_MCP_AUDIT_LOG>",
"MCP_ADDR": "<YOUR_MCP_ADDR>"
}
}
}
}{
"mcpServers": {
"postgres-mcp-hardened": {
"command": "npx",
"args": [
"-y",
"postgres-mcp-hardened",
"--stdio"
],
"env": {
"DATABASE_URL": "<YOUR_DATABASE_URL>",
"MCP_STATEMENT_TIMEOUT": "<YOUR_MCP_STATEMENT_TIMEOUT>",
"MCP_ALLOW_TABLES": "<YOUR_MCP_ALLOW_TABLES>",
"MCP_AUDIT_LOG": "<YOUR_MCP_AUDIT_LOG>",
"MCP_ADDR": "<YOUR_MCP_ADDR>"
}
}
}
}{
"mcpServers": {
"postgres-mcp-hardened": {
"command": "npx",
"args": [
"-y",
"postgres-mcp-hardened",
"--stdio"
],
"env": {
"DATABASE_URL": "<YOUR_DATABASE_URL>",
"MCP_STATEMENT_TIMEOUT": "<YOUR_MCP_STATEMENT_TIMEOUT>",
"MCP_ALLOW_TABLES": "<YOUR_MCP_ALLOW_TABLES>",
"MCP_AUDIT_LOG": "<YOUR_MCP_AUDIT_LOG>",
"MCP_ADDR": "<YOUR_MCP_ADDR>"
}
}
}
}{
"servers": {
"postgres-mcp-hardened": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"postgres-mcp-hardened",
"--stdio"
],
"env": {
"DATABASE_URL": "<YOUR_DATABASE_URL>",
"MCP_STATEMENT_TIMEOUT": "<YOUR_MCP_STATEMENT_TIMEOUT>",
"MCP_ALLOW_TABLES": "<YOUR_MCP_ALLOW_TABLES>",
"MCP_AUDIT_LOG": "<YOUR_MCP_AUDIT_LOG>",
"MCP_ADDR": "<YOUR_MCP_ADDR>"
}
}
}
}claude mcp add postgres-mcp-hardened --env DATABASE_URL=<YOUR_DATABASE_URL> --env MCP_STATEMENT_TIMEOUT=<YOUR_MCP_STATEMENT_TIMEOUT> --env MCP_ALLOW_TABLES=<YOUR_MCP_ALLOW_TABLES> --env MCP_AUDIT_LOG=<YOUR_MCP_AUDIT_LOG> --env MCP_ADDR=<YOUR_MCP_ADDR> -- npx -y postgres-mcp-hardened --stdioRelated MCP servers
Control a real Chrome browser to complete any task: fill forms, extract data, book flights.
World Monitor
Live global intelligence: real-time markets, conflicts, country risk, chokepoints, energy. 39 tools.
Netdata
Real-time infrastructure monitoring with metrics, logs, alerts, and ML-based anomaly detection.
Trending hip-hop artist momentum scores across four cultural dimensions.
AI orchestration with hive-mind swarms, neural networks, and 87 MCP tools for enterprise dev.
Scrapling MCP Server
Give your AI agent stealth web scraping with Cloudflare bypass and CSS selection, powered by Scrapling.