mcpField
M
mcp-percona-pg

mcp-percona-pg

Local
github.com/dockndevaiDatabases1Updated 3d ago

About mcp-percona-pg

mcp-percona-pg is an MCP server for operating Percona PostgreSQL clusters and PgBouncer on Kubernetes. It provides read-only access by default, with scoped permissions and separate safeguards for high-impact changes.

Key features

  1. 01Inspect cluster topology and status
  2. 02Manage PgBouncer pooling settings
  3. 03Read and update PostgreSQL parameters
  4. 04Scale, pause, and resume clusters
  5. 05Create backups and manage recovery
  6. 06Guard upgrades and destructive actions

Use cases

  1. 01Check cluster readiness and connection endpoints
  2. 02Adjust pooling or PostgreSQL tuning
  3. 03Create backups or restore to a point in time
  4. 04Limit agent actions to approved clusters

MCP support

Exposes Kubernetes cluster discovery, configuration, lifecycle, backup, recovery, and upgrade tools to MCP clients. Access modes, allowlists, and confirmation gates control which operations are available.

Configuration

Local server config is the same for every client. Copy it into your client’s MCP config file.

mcp.json · Universal config
{
"mcpServers": {
"dockndevai-mcp-percona-pg": {
"command": "npx",
"args": [
"-y",
"@dockndevai/mcp-percona-pg"
],
"env": {
"KUBECONFIG_PATH": "<KUBECONFIG_PATH>",
"PERCONA_MODE": "<PERCONA_MODE>",
"PERCONA_NAMESPACE": "<PERCONA_NAMESPACE>"
}
}
}
}
Run commandnpx -y @dockndevai/mcp-percona-pg
Environment variables to set
KUBECONFIG_PATHPath to a kube-config file that can reach the Percona Operator namespaces (empty = default resolution).
PERCONA_MODEAccess mode: read-only | read-write | admin.
PERCONA_NAMESPACEDefault namespace for PerconaPGCluster resources when a tool omits one.

Local servers need a runtime on your machine (e.g. Node.js 18+). Config file locations differ by client; see your client’s docs.

Packages
npm@dockndevai/mcp-percona-pg0.3.3

Tools

9

Saved tool list · updated 2d ago

This tool takes no parameters.

Details

From the project README

mcp-percona-pg

CI License: MIT npm

A Model Context Protocol server for the Percona Operator for PostgreSQL. It lets an MCP-capable client (Claude Desktop, Claude Code, Cursor, …) operate PostgreSQL + PgBouncer clusters on Kubernetes — topology, connection pooling, tuning, backups/PITR, DR, extensions, and lifecycle — with behaviour controlled entirely by flags.

It drives the operator's custom resources (PerconaPGCluster, PerconaPGBackup, PerconaPGRestore, PerconaPGUpgrade) through your kube-config, so the model works the way you already do: "scale dev-pg to 3 replicas", "switch pooling to transaction mode", "restore prod-pg to 12:00 UTC".

Safe by default: it starts read-only, can be scoped to an allowlist of namespaces and clusters, protects critical clusters from mutation, gates restore / upgrade / delete behind separate opt-ins, and requires typed confirmation for high-impact actions. It never reads or returns database credentials.

Features

  • Discovery & status — list clusters, per-cluster summary and raw .status (Patroni members, PostgreSQL/PgBouncer readiness), connection endpoints, backups and restores.
  • Connection pooling — read and update PgBouncer pool_mode and the global pool tunables (default_pool_size, max_client_conn, …).
  • PostgreSQL tuning — read/merge parameters via spec.patroni.dynamicConfiguration (the only Patroni-safe path).
  • Lifecycle — scale PostgreSQL/PgBouncer, pause/resume, toggle built-in extensions, on-demand backups.
  • DR & recovery — restore / point-in-time recovery, promote a standby, major-version upgrades — each individually gated.

Security model

LayerFlagEffect
Access modePERCONA_MODEread-only → read-write → admin; over-privileged tools are never registered
Namespace/cluster allowlistsPERCONA_NAMESPACE_ALLOWLIST, PERCONA_CLUSTER_ALLOWLISTscope what the agent can touch
Protected clustersPERCONA_PROTECTED_CLUSTERSreadable, never mutated/restored/deleted
Restore / upgrade / deletePERCONA_ALLOW_RESTORE, PERCONA_ALLOW_UPGRADE, PERCONA_ALLOW_DELETEseparate opt-ins on top of admin mode
ConfirmationPERCONA_REQUIRE_CONFIRMATIONhigh-impact ops require echoing the cluster name
Dry-run / auditPERCONA_DRY_RUN, PERCONA_AUDIT_LOGvalidate-only; JSON audit line per guarded op
Interactive confirmation(automatic)destructive & high-impact ops prompt the human to approve via MCP elicitation before running; fall back to the PERCONA_ALLOW_* gates when the client can't elicit

Tools

Read (read-only+): list_contexts, list_clusters, get_cluster, get_cluster_status, get_connection_info, get_pgbouncer_config, get_pg_parameters, list_backups, list_restores

Write (read-write+): scale_cluster, set_pgbouncer_config, set_pg_parameters, pause_cluster, toggle_builtin_extension, create_backup

Admin (admin): restore_cluster (needs PERCONA_ALLOW_RESTORE), upgrade_cluster (needs PERCONA_ALLOW_UPGRADE), promote_standby, delete_backup / delete_cluster (need PERCONA_ALLOW_DELETE)

Quickstart — add to your agent

Published on npm as @dockndevai/mcp-percona-pg. No clone or build needed — your MCP client runs it on demand with npx. Start in read-only mode; see .env.example for every variable and docs/CLIENTS.md for the full per-client guide.

Claude Code (CLI)

claude mcp add percona-pg -e PERCONA_MODE="read-only" -e PERCONA_NAMESPACE="postgres-operator" -- npx -y @dockndevai/mcp-percona-pg

Claude Desktop · Cursor · Windsurf — same block in claude_desktop_config.json, .cursor/mcp.json, or ~/.codeium/windsurf/mcp_config.json:

{
  "mcpServers": {
    "percona-pg": {
      "command": "npx",
      "args": ["-y", "@dockndevai/mcp-percona-pg"],
      "env": {
        "PERCONA_MODE": "read-only",
        "PERCONA_NAMESPACE": "postgres-operator"
      }
    }
  }
}

OpenAI Codex CLI — in ~/.codex/config.toml:

[mcp_servers.percona-pg]
command = "npx"
args = ["-y", "@dockndevai/mcp-percona-pg"]
env = { PERCONA_MODE = "read-only", PERCONA_NAMESPACE = "postgres-operator" }

Example prompts

  • "List the PostgreSQL clusters and show me the status of dev-pg."
  • "What pool_mode is dev-pg using, and how big is the default pool?" → get_pgbouncer_config
  • "Set dev-pg PgBouncer to transaction pooling with default_pool_size 25." (needs read-write)
  • "Bump shared_buffers to 512MB on dev-pg." (needs read-write)
  • "Take a full backup of dev-pg to repo1." (needs read-write)
  • "Restore dev-pg to 2026-08-30 12:00:00+00." (needs admin + PERCONA_ALLOW_RESTORE + confirmation)

Prerequisites

  • A Kubernetes cluster running the Percona Operator for PostgreSQL v2 (pgv2.percona.com/v2).
  • A kube-config the server can read. For safety, use a ServiceAccount/RBAC scoped to the operator's namespaces and to the pgv2.percona.com resources you want the agent to see.

Run from source (development)

Prefer the published package above. To run from a clone:

npm install
npm run build
node dist/index.js   # with the environment variables set

Develop

npm run dev
npm test          # security policy + annotations
npm run typecheck

Publishing

This server ships a server.json for the official MCP registry and an mcpName for npm ownership validation. See PUBLISHING.md.

License

MIT

Comments

Markdown supported

New to MCP?

From what the protocol is to installing your first server, these answers cover most first questions.

An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.