Safe, audited PostgreSQL operations for AI agents: queries, migrations, EXPLAIN, containers
Connect Runs on your machine
claude mcp add pgops-mcp -e PGOPS_DSN=<PGOPS_DSN> -e PGOPS_READONLY_DSN=<PGOPS_READONLY_DSN> -e PGOPS_READ_ONLY=<PGOPS_READ_ONLY> -e PGOPS_APPROVAL_MODE=<PGOPS_APPROVAL_MODE> -e PGOPS_AUDIT_LOG=<PGOPS_AUDIT_LOG> -e PGOPS_DEFAULT_TIMEOUT_MS=<PGOPS_DEFAULT_TIMEOUT_MS> -e PGOPS_MAX_TIMEOUT_MS=<PGOPS_MAX_TIMEOUT_MS> -e PGOPS_DEFAULT_ROW_LIMIT=<PGOPS_DEFAULT_ROW_LIMIT> -- uvx pgops-mcp==0.1.9
{
"mcpServers": {
"pgops-mcp": {
"command": "uvx",
"args": [
"pgops-mcp==0.1.9"
],
"env": {
"PGOPS_DSN": "<PGOPS_DSN>",
"PGOPS_READONLY_DSN": "<PGOPS_READONLY_DSN>",
"PGOPS_READ_ONLY": "<PGOPS_READ_ONLY>",
"PGOPS_APPROVAL_MODE": "<PGOPS_APPROVAL_MODE>",
"PGOPS_AUDIT_LOG": "<PGOPS_AUDIT_LOG>",
"PGOPS_DEFAULT_TIMEOUT_MS": "<PGOPS_DEFAULT_TIMEOUT_MS>",
"PGOPS_MAX_TIMEOUT_MS": "<PGOPS_MAX_TIMEOUT_MS>",
"PGOPS_DEFAULT_ROW_LIMIT": "<PGOPS_DEFAULT_ROW_LIMIT>"
}
}
}
}
{
"mcpServers": {
"pgops-mcp": {
"command": "uvx",
"args": [
"pgops-mcp==0.1.9"
],
"env": {
"PGOPS_DSN": "<PGOPS_DSN>",
"PGOPS_READONLY_DSN": "<PGOPS_READONLY_DSN>",
"PGOPS_READ_ONLY": "<PGOPS_READ_ONLY>",
"PGOPS_APPROVAL_MODE": "<PGOPS_APPROVAL_MODE>",
"PGOPS_AUDIT_LOG": "<PGOPS_AUDIT_LOG>",
"PGOPS_DEFAULT_TIMEOUT_MS": "<PGOPS_DEFAULT_TIMEOUT_MS>",
"PGOPS_MAX_TIMEOUT_MS": "<PGOPS_MAX_TIMEOUT_MS>",
"PGOPS_DEFAULT_ROW_LIMIT": "<PGOPS_DEFAULT_ROW_LIMIT>"
}
}
}
}
{
"servers": {
"pgops-mcp": {
"type": "stdio",
"command": "uvx",
"args": [
"pgops-mcp==0.1.9"
],
"env": {
"PGOPS_DSN": "<PGOPS_DSN>",
"PGOPS_READONLY_DSN": "<PGOPS_READONLY_DSN>",
"PGOPS_READ_ONLY": "<PGOPS_READ_ONLY>",
"PGOPS_APPROVAL_MODE": "<PGOPS_APPROVAL_MODE>",
"PGOPS_AUDIT_LOG": "<PGOPS_AUDIT_LOG>",
"PGOPS_DEFAULT_TIMEOUT_MS": "<PGOPS_DEFAULT_TIMEOUT_MS>",
"PGOPS_MAX_TIMEOUT_MS": "<PGOPS_MAX_TIMEOUT_MS>",
"PGOPS_DEFAULT_ROW_LIMIT": "<PGOPS_DEFAULT_ROW_LIMIT>"
}
}
}
}
Replace the values in angle brackets with your own. Keys stay on your machine; we never see them.
Tools
This server runs locally, so its tools are listed by your MCP client once it starts.
Environment variables
| Name | Description |
|---|---|
PGOPS_DSNRequired, secret | PostgreSQL connection string for the database to operate on. |
PGOPS_READONLY_DSNOptional, secret | Optional separate DSN for the read-only pool. Use a role with no write grants to enforce read-only at the database rather than only in the server. |
PGOPS_READ_ONLYOptional | Set to 1 to withhold every mutating tool. Write tools are not registered at all, so an agent cannot call them. |
PGOPS_APPROVAL_MODEOptional | Set to 1 to register container.restart and container.exec. Off by default: Docker socket access is root-equivalent on the host. |
PGOPS_AUDIT_LOGOptional | Path to the append-only JSONL audit log. |
PGOPS_DEFAULT_TIMEOUT_MSOptional | Statement timeout applied to every query unless a tool call overrides it. |
PGOPS_MAX_TIMEOUT_MSOptional | Ceiling a caller-supplied timeout is clamped to. |
PGOPS_DEFAULT_ROW_LIMITOptional | Rows returned by query.read when the caller does not specify a limit. |
Details
| Package | [email protected] (PYPI, stdio) |
| Package | ghcr.io/arzharch/pgops-mcp:0.1.9 (OCI, stdio) |
| First published | 1 Sep 2026 |
| Last updated | 1 Sep 2026 |
| Registry name | io.github.arzharch/pgops-mcp |
More databases servers See all
Listing data from the official MCP registry. Status and tools from NestDaddy's daily check. Browse all MCP servers.
