{"server":{"$schema":"https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json","name":"io.github.Eszetael/postgres-mcp-hardened","description":"Read-only PostgreSQL over MCP. Writes refused at the parsed SQL, plus a READ ONLY transaction.","title":"PostgreSQL (hardened, read-only)","repository":{"url":"https://github.com/Eszetael/postgres-mcp-hardened","source":"github"},"version":"0.1.10","websiteUrl":"https://github.com/Eszetael/postgres-mcp-hardened","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"}]}]},"_meta":{"io.modelcontextprotocol.registry/official":{"status":"active","statusChangedAt":"2026-09-04T23:18:25.068686Z","publishedAt":"2026-09-04T23:18:25.068686Z","updatedAt":"2026-09-04T23:18:25.068686Z","isLatest":true}}}
