{"name":"io.github.Eszetael/postgres-mcp-hardened","slug":"eszetael-postgres-mcp-hardened","title":"PostgreSQL (hardened, read-only)","description":"Read-only PostgreSQL over MCP. Writes refused at the parsed SQL, plus a READ ONLY transaction.","url":"https://mcp.market/server/eszetael-postgres-mcp-hardened","rating":null,"grade":"C","score":68,"certified":false,"status":"active","category":"data","tags":["data"],"presence":{"score":34,"stars":3,"forks":0,"downloads_week":91,"last_push_at":"2026-09-20T00:05:55.000Z","license":"MIT"},"uptime":null,"claimed":false,"transport":"mixed","callable_via_gateway":false,"default_price_micros":0,"repository":"https://github.com/Eszetael/postgres-mcp-hardened","website":"https://github.com/Eszetael/postgres-mcp-hardened","version":"0.1.10","remotes":[],"packages":[{"registryType":"npm","identifier":"postgres-mcp-hardened","version":"0.1.10","runtimeHint":"npx","transport":{"type":"stdio"},"runtimeArguments":[{"isRequired":true,"value":"--stdio","type":"positional"}],"environmentVariables":[{"description":"Connection 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.","isRequired":true,"isSecret":true,"name":"DATABASE_URL"},{"description":"Server-side statement timeout, e.g. `5s`. A question that would pin the database is cancelled by PostgreSQL, not by hope.","name":"MCP_STATEMENT_TIMEOUT"},{"description":"Comma-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.","name":"MCP_ALLOW_TABLES"},{"description":"Path 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.","name":"MCP_AUDIT_LOG"}]},{"registryType":"oci","identifier":"ghcr.io/eszetael/postgres-mcp-hardened:0.1.10","transport":{"type":"streamable-http","url":"http://localhost:8080/mcp"},"environmentVariables":[{"description":"Connection string for a role that cannot write.","isRequired":true,"isSecret":true,"name":"DATABASE_URL"},{"description":"Address to bind, default 127.0.0.1:8080.","name":"MCP_ADDR"}]}],"tools":[],"scan":{"score":68,"grade":"C","scanned_at":"2026-09-20T11:39:45.160Z","report":{"scannerVersion":"0.1.9","scannedAt":"2026-09-20T11:39:45.109Z","components":{"code":{"score":15,"max":25,"notes":["4 source files scanned"]},"reliability":{"score":-1,"max":20,"notes":["no gateway calls yet and no remote to probe"]},"poisoning":{"score":-1,"max":15,"notes":["tools not inspected (local package is not executed); not counted"]},"auth":{"score":6,"max":15,"notes":["static API keys via environment variables"]},"maintenance":{"score":15,"max":15,"notes":["last push 0 days ago"]},"identity":{"score":8,"max":10,"notes":["registry namespace matches repository owner","GitHub account older than a year"]}},"findings":[{"id":"install.script","severity":"medium","component":"code","title":"npm install lifecycle script present"},{"id":"install.script","severity":"medium","component":"code","title":"npm install lifecycle script present","evidence":"package.json: … \"README.md\" ], \"scripts\": { \"postinstall\": \"node scripts/postinstall.js\", \"tes…"}],"inputs":{"packages":[{"registryType":"npm","identifier":"postgres-mcp-hardened","version":"0.1.10","found":true,"license":"MIT","hasInstallScripts":true,"dependencyCount":0,"publishedAt":"2026-09-04T22:48:33.059Z","repositoryUrl":"git+https://github.com/Eszetael/postgres-mcp-hardened.git","weeklyDownloads":91}],"repo":{"found":true,"owner":"Eszetael","repo":"postgres-mcp-hardened","archived":false,"pushedAt":"2026-09-20T00:05:55Z","stars":3,"forks":0,"openIssues":4,"ownerType":"User","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/166819313?v=4","ownerCreatedAt":"2024-04-12T11:07:02Z","license":"MIT"},"icon":{"url":null,"source":"none"},"presence":{"stars":3,"forks":0,"downloadsWeek":91,"license":"MIT","lastPushAt":"2026-09-20T00:05:55.000Z","score":34}}}},"grade_history":[],"reviews":[]}