---
bezeichner: "io.github.Eszetael/postgres-mcp-hardened"
art: "mcp_server"
slug: "io-github-eszetael-postgres-mcp-hardened"
paketkoordinate: "npm:postgres-mcp-hardened"
status: "aktiv"
homepage: "https://github.com/Eszetael/postgres-mcp-hardened"
erhebungsstand: "2026-10-11T01:17:01.851Z"
namensraum: "io.github.Eszetael"
registerseite: "https://tracevero.com/mcp/io-github-eszetael-postgres-mcp-hardened"
abgerufen_am: "2026-10-11"
zugangsdaten_erforderlich: true
ausfuehrungsort: "lokal"
dateisystem_pfadargument: false
quelloffen_einsehbar: true
einsatzgebiet: "datenbank"
roh_beschreibung: "Read-only PostgreSQL over MCP. Writes refused at the parsed SQL, plus a READ ONLY transaction."
version: "0.1.10"
roh_umgebungsvariablen: "DATABASE_URL, MCP_STATEMENT_TIMEOUT, MCP_ALLOW_TABLES, MCP_AUDIT_LOG, DATABASE_URL, MCP_ADDR"
roh_geheime_pflichtvariablen: "DATABASE_URL, DATABASE_URL"
roh_transportarten: "stdio, streamable-http"
roh_pfadargumente: ""
roh_repository_url: "https://github.com/Eszetael/postgres-mcp-hardened"
roh_paketquellen: "npm, oci"
roh_geheime_pflichtkopfzeilen: ""
roh_pfad_umgebungsvariablen: ""
roh_remote_adressen: ""
roh_remote_hosts: ""
roh_statusmeldung: ""
roh_veroeffentlicht_am: "2026-09-04"
roh_aktualisiert_am: "2026-09-04"
roh_schemafassung: "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json"
roh_bereitstellungsform: "paket"
roh_repository_quelle: "github"
roh_repository_unterordner: ""
roh_paketbezeichner: "ghcr.io/eszetael/postgres-mcp-hardened:0.1.10, postgres-mcp-hardened"
roh_paketversionen: "0.1.10"
roh_laufzeithinweise: "npx"
roh_umgebungsformate: ""
roh_umgebungsbeschreibungen: "DATABASE_URL=Connection string for a role that cannot write. · DATABASE_URL=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. · MCP_ADDR=Address to bind, default 127.0.0.1:8080. · MCP_ALLOW_TABLES=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. · MCP_AUDIT_LOG=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. · MCP_STATEMENT_TIMEOUT=Server-side statement timeout, e.g. `5s`. A question that would pin the database is cancelled by PostgreSQL, not by hope."
roh_symbolformate: ""
roh_verbindungswege: "{\"packages\":[{\"registryType\":\"npm\",\"identifier\":\"postgres-mcp-hardened\",\"version\":\"0.1.10\",\"runtimeHint\":\"npx\",\"transport\":\"stdio\",\"environment\":[{\"name\":\"DATABASE_URL\",\"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.\",\"required\":true,\"secret\":true},{\"name\":\"MCP_STATEMENT_TIMEOUT\",\"description\":\"Server-side statement timeout, e.g. `5s`. A question that would pin the database is cancelled by PostgreSQL, not by hope.\",\"required\":false,\"secret\":false},{\"name\":\"MCP_ALLOW_TABLES\",\"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.\",\"required\":false,\"secret\":false},{\"name\":\"MCP_AUDIT_LOG\",\"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.\",\"required\":false,\"secret\":false}],\"additional_arguments_declared\":true},{\"registryType\":\"oci\",\"identifier\":\"ghcr.io/eszetael/postgres-mcp-hardened:0.1.10\",\"transport\":\"streamable-http\",\"environment\":[{\"name\":\"DATABASE_URL\",\"description\":\"Connection string for a role that cannot write.\",\"required\":true,\"secret\":true},{\"name\":\"MCP_ADDR\",\"description\":\"Address to bind, default 127.0.0.1:8080.\",\"required\":false,\"secret\":false}],\"additional_arguments_declared\":false}],\"remotes\":[]}"
---

# PostgreSQL (hardened, read-only)

## Measured values

| Property | Value | Source | Collected on | Level of trust | Raw declaration |
| --- | --- | --- | --- | --- | --- |
| Required secrets declared | true | MCP-Register | 2026-08-10T01:17:01.536Z | abgeleitet | roh_geheime_pflichtvariablen: DATABASE_URL, DATABASE_URL; roh_geheime_pflichtkopfzeilen: |
| Execution location | lokal | MCP-Register | 2026-08-10T01:17:01.536Z | abgeleitet | roh_transportarten: stdio, streamable-http |
| Path argument present | false | MCP-Register | 2026-08-10T01:17:01.536Z | abgeleitet | roh_pfadargumente: ; roh_pfad_umgebungsvariablen: |
| Repository URL listed | true | MCP-Register | 2026-08-10T01:17:01.536Z | abgeleitet | roh_repository_url: https://github.com/Eszetael/postgres-mcp-hardened |
| Field of use, derived from the vendor description | datenbank | MCP-Register | 2026-08-26T16:45:01.514Z | abgeleitet | roh_beschreibung: Read-only PostgreSQL over MCP. Writes refused at the parsed SQL, plus a READ ONLY transaction. |
| Description (raw) | Read-only PostgreSQL over MCP. Writes refused at the parsed SQL, plus a READ ONLY transaction. | MCP-Register | 2026-08-26T16:45:01.514Z | selbstauskunft |  |
| Declared version | 0.1.10 | MCP-Register | 2026-09-05T01:17:01.571Z | selbstauskunft |  |
| Environment variables (raw) | DATABASE_URL, MCP_STATEMENT_TIMEOUT, MCP_ALLOW_TABLES, MCP_AUDIT_LOG, DATABASE_URL, MCP_ADDR | MCP-Register | 2026-08-10T01:17:01.536Z | selbstauskunft |  |
| Required secret variables (raw) | DATABASE_URL, DATABASE_URL | MCP-Register | 2026-08-10T01:17:01.536Z | selbstauskunft |  |
| Transports (raw) | stdio, streamable-http | MCP-Register | 2026-08-10T01:17:01.536Z | selbstauskunft |  |
| Path arguments (raw) |  | MCP-Register | 2026-08-10T01:17:01.536Z | selbstauskunft |  |
| Repository (raw) | https://github.com/Eszetael/postgres-mcp-hardened | MCP-Register | 2026-08-10T01:17:01.536Z | selbstauskunft |  |
| Package registries (raw) | npm, oci | MCP-Register | 2026-08-10T01:17:01.536Z | selbstauskunft |  |
| Required secret headers (raw) |  | MCP-Register | 2026-08-16T01:17:01.420Z | selbstauskunft |  |
| Path environment variables (raw) |  | MCP-Register | 2026-08-16T01:17:01.420Z | selbstauskunft |  |
| Remote URLs (raw) |  | MCP-Register | 2026-08-16T01:17:01.420Z | selbstauskunft |  |
| Remote hosts (raw) |  | MCP-Register | 2026-08-16T01:17:01.420Z | selbstauskunft |  |
| Registry status message (raw) |  | MCP-Register | 2026-08-16T01:17:01.420Z | selbstauskunft |  |
| First listed in the registry (raw) | 2026-09-04 | MCP-Register | 2026-09-05T01:17:01.571Z | selbstauskunft |  |
| Last changed in the registry (raw) | 2026-09-04 | MCP-Register | 2026-09-05T01:17:01.571Z | selbstauskunft |  |
| Schema version of the raw record (raw) | https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json | MCP-Register | 2026-08-16T01:17:01.420Z | selbstauskunft |  |
| Delivery form (raw) | paket | MCP-Register | 2026-08-16T01:17:01.420Z | selbstauskunft |  |
| Repository platform (raw) | github | MCP-Register | 2026-08-16T01:17:01.420Z | selbstauskunft |  |
| Repository subfolder (raw) |  | MCP-Register | 2026-08-16T01:17:01.420Z | selbstauskunft |  |
| Package identifiers (raw) | ghcr.io/eszetael/postgres-mcp-hardened:0.1.10, postgres-mcp-hardened | MCP-Register | 2026-09-05T01:17:01.571Z | selbstauskunft |  |
| Package versions (raw) | 0.1.10 | MCP-Register | 2026-09-05T01:17:01.571Z | selbstauskunft |  |
| Runtime hints (raw) | npx | MCP-Register | 2026-08-16T01:17:01.420Z | selbstauskunft |  |
| Environment variable formats (raw) |  | MCP-Register | 2026-08-16T01:17:01.420Z | selbstauskunft |  |
| Environment variable descriptions (raw) | DATABASE_URL=Connection string for a role that cannot write. · DATABASE_URL=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. · MCP_ADDR=Address to bind, default 127.0.0.1:8080. · MCP_ALLOW_TABLES=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. · MCP_AUDIT_LOG=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. · MCP_STATEMENT_TIMEOUT=Server-side statement timeout, e.g. `5s`. A question that would pin the database is cancelled by PostgreSQL, not by hope. | MCP-Register | 2026-08-16T01:17:01.420Z | selbstauskunft |  |
| Icon formats (raw) |  | MCP-Register | 2026-08-16T01:17:01.420Z | selbstauskunft |  |
| Connection paths (source structure) | {"packages":[{"registryType":"npm","identifier":"postgres-mcp-hardened","version":"0.1.10","runtimeHint":"npx","transport":"stdio","environment":[{"name":"DATABASE_URL","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.","required":true,"secret":true},{"name":"MCP_STATEMENT_TIMEOUT","description":"Server-side statement timeout, e.g. `5s`. A question that would pin the database is cancelled by PostgreSQL, not by hope.","required":false,"secret":false},{"name":"MCP_ALLOW_TABLES","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.","required":false,"secret":false},{"name":"MCP_AUDIT_LOG","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.","required":false,"secret":false}],"additional_arguments_declared":true},{"registryType":"oci","identifier":"ghcr.io/eszetael/postgres-mcp-hardened:0.1.10","transport":"streamable-http","environment":[{"name":"DATABASE_URL","description":"Connection string for a role that cannot write.","required":true,"secret":true},{"name":"MCP_ADDR","description":"Address to bind, default 127.0.0.1:8080.","required":false,"secret":false}],"additional_arguments_declared":false}],"remotes":[]} | MCP-Register | 2026-09-08T01:17:01.649Z | selbstauskunft |  |

## Links

- Namespace: [[namensraum/io-github-eszetael|io.github.Eszetael]]

---

- Registry page: <https://tracevero.com/mcp/io-github-eszetael-postgres-mcp-hardened>
- Retrieved on: 2026-10-11
