the recordCopied from the official MCP registry, exactly as it holds it.
{
"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.9",
"websiteUrl": "https://github.com/Eszetael/postgres-mcp-hardened",
"packages": [
{
"registryType": "npm",
"identifier": "postgres-mcp-hardened",
"version": "0.1.9",
"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.9",
"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-08-18T14:23:23.689513Z",
"publishedAt": "2026-08-18T14:23:23.689513Z",
"updatedAt": "2026-08-18T14:23:23.689513Z",
"isLatest": true
}
}
}
Make it installable
Draft an Agent Plugin from this
An MCP server is raw capability: some tools, wired to something. An Agent Plugin is the packaging that says what job it does, what it leaves behind and where it stops. The prompt below carries this record and asks for the packaging; your own assistant writes it, and nothing here is sent anywhere.
What this is
MCP server
application/mcp-server-record+jsonlocal · you run it yourselfversion 0.1.9last seen 2026-08-23
These are the publisher's own words, filed by them with the official MCP registry and mirrored here. This catalog did not read them from the publisher and has not run, called or installed anything.