Skip to main content
Glama
dockndevai

mcp-percona-pg

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.

Related MCP server: k8s-mcp-go

Security model

Layer

Flag

Effect

Access mode

PERCONA_MODE

read-onlyread-writeadmin; over-privileged tools are never registered

Namespace/cluster allowlists

PERCONA_NAMESPACE_ALLOWLIST, PERCONA_CLUSTER_ALLOWLIST

scope what the agent can touch

Protected clusters

PERCONA_PROTECTED_CLUSTERS

readable, never mutated/restored/deleted

Restore / upgrade / delete

PERCONA_ALLOW_RESTORE, PERCONA_ALLOW_UPGRADE, PERCONA_ALLOW_DELETE

separate opt-ins on top of admin mode

Confirmation

PERCONA_REQUIRE_CONFIRMATION

high-impact ops require echoing the cluster name

Dry-run / audit

PERCONA_DRY_RUN, PERCONA_AUDIT_LOG

validate-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

Available Tools

9 tools
get_clusterGet cluster (summary)A
Read-onlyIdempotent

Summary of a PerconaPGCluster: state, PostgreSQL size, PgBouncer, version, standby, host.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesPerconaPGCluster name
contextNokube-config context to target (defaults to current-context)
namespaceNoNamespace (defaults to PERCONA_NAMESPACE if set)

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint, so the safety profile is covered. The description adds the concrete contents of the summary, which is genuine value for a tool with no output schema, though it says nothing about missing-cluster errors or namespace/context fallbacks.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single tight sentence that front-loads the action and resource and then lists the payload. Nothing is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the field enumeration usefully stands in for documented return values, and annotations carry the safety profile. It is nearly sufficient, losing a point only for leaving the distinction from get_cluster_status and error behavior unstated.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and all three parameters (name, context, namespace) are documented in the schema, including defaults. The description adds no parameter-level meaning beyond that, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Summary of a PerconaPGCluster') and enumerates the content returned (state, PostgreSQL size, PgBouncer, version, standby, host). It does not explicitly distinguish itself from the nearby sibling get_cluster_status, so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use guidance, no prerequisites, and no alternative named. With get_cluster_status and get_connection_info among siblings, the agent is left to infer when a summary is preferable.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_cluster_statusGet cluster status (raw)B
Read-onlyIdempotent

The full .status of a PerconaPGCluster — Patroni members, PostgreSQL/PgBouncer readiness, host, and conditions.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesPerconaPGCluster name
contextNokube-config context to target (defaults to current-context)
namespaceNoNamespace (defaults to PERCONA_NAMESPACE if set)

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered structurally. The description adds the content shape of the status object, which is useful, but says nothing about failure modes (e.g. cluster not found) or how the raw output differs from formatted alternatives.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with an em-dash list of contents; nothing is wasted. It is slightly terse for a tool with no output schema, which keeps it from a 5.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description carries the burden of describing return values; it names the top-level sections but not their structure or nesting, which is only partially sufficient for an unstructured status object. Nothing about errors or empty results is covered.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%: name, context, and namespace are each documented in the schema. The description adds no additional meaning, syntax, or defaults beyond that, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific resource (the `.status` of a PerconaPGCluster) and enumerates what it contains — Patroni members, PostgreSQL/PgBouncer readiness, host, conditions. This makes it distinguishable in intent from `get_cluster`, though it never explicitly draws that contrast, so it falls short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to call this versus `get_cluster` or `get_connection_info`, both of which likely surface overlapping cluster information. The word 'raw' hints at a lower-level alternative but the condition for choosing it is left entirely to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_connection_infoGet connection infoA
Read-onlyIdempotent

Connection endpoints for a cluster: the primary/replica Service hosts, port, and the declared users (names only — passwords live in Secrets and are never returned).

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesPerconaPGCluster name
contextNokube-config context to target (defaults to current-context)
namespaceNoNamespace (defaults to PERCONA_NAMESPACE if set)

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so the safety profile is covered. The description adds genuinely useful non-obvious context beyond that: that only user names are exposed and passwords live in Secrets and are never returned, which prevents an agent from expecting or requesting credentials.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence that front-loads the core payload (primary/replica hosts, port, users) and appends only the one caveat that matters (passwords never returned). No filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description carries the burden of describing the return and does so adequately — endpoints, port, and user names. It could have clarified structure (e.g., how primary vs replica hosts are distinguished or whether a list is returned), but nothing essential for correct invocation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% — name, context and namespace are each documented inline (including the PERCONA_NAMESPACE default). The description adds no parameter-level detail, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a concrete verb-less but clear retrieval target — connection endpoints for a cluster — and enumerates the returned fields (primary/replica Service hosts, port, declared users), so an agent knows exactly what this returns. It does not, however, contrast itself with close siblings like get_cluster or get_cluster_status, which also operate on a cluster.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use, when-not-to-use, or alternative-tool guidance. The description only states what data is returned; an agent must infer that this is the tool for connectivity details rather than configuration or status.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_pgbouncer_configGet PgBouncer configB
Read-onlyIdempotent

The PgBouncer settings for a cluster: replicas, pool_mode, and the global pool tunables.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesPerconaPGCluster name
contextNokube-config context to target (defaults to current-context)
namespaceNoNamespace (defaults to PERCONA_NAMESPACE if set)

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, and openWorldHint, covering the safety profile. The description adds the useful detail that the config spans replicas and pool tunables, but says nothing about permissions, defaults, or failure modes on a nonexistent cluster.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single tight sentence with the resource and its contents front-loaded and zero filler. The trade-off is that it is a bare noun phrase that never states the action, making it slightly terse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description does the work of naming what is returned (replicas, pool_mode, global pool tunables), and all three parameters are schema-documented. It is nearly complete for a simple read tool, missing only notes on behavior for missing clusters or namespaces.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so name, context, and namespace are already documented in the schema. The phrase 'for a cluster' loosely ties to the required name parameter but adds no format or default detail beyond the schema. Baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States the resource clearly (PgBouncer settings for a cluster) and enumerates the content returned: replicas, pool_mode, and global pool tunables. This separates it well from get_pg_parameters and get_cluster, though the verb is only implied by the name/title.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description is a noun phrase with no when-to-use guidance, no prerequisites, and no mention of alternatives such as get_pg_parameters or get_cluster. An agent must infer its place among the sibling read tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_pg_parametersGet PostgreSQL parametersB
Read-onlyIdempotent

The tuned PostgreSQL parameters from spec.patroni.dynamicConfiguration.postgresql.parameters (the only correct place to set them — direct postgresql.conf edits are reverted by Patroni).

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesPerconaPGCluster name
contextNokube-config context to target (defaults to current-context)
namespaceNoNamespace (defaults to PERCONA_NAMESPACE if set)

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds the useful Patroni-specific behavioral fact that direct postgresql.conf edits are reverted, giving real context beyond annotations, but discloses nothing about the returned shape or failure modes.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, front-loaded sentence with a tight parenthetical; every clause adds information. Slightly dense but no waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read tool with full schema coverage and no output schema, the definition is adequate but does not describe what the returned parameters look like. An agent knows what to fetch but not the response format.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with name, context, and namespace all documented inline, so the schema carries the burden. The description adds no parameter syntax or defaults of its own; baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names the exact resource (tuned PostgreSQL parameters) and pinpoints the source path `spec.patroni.dynamicConfiguration.postgresql.parameters`, which lets an agent distinguish it from get_pgbouncer_config and get_cluster. It lacks an explicit retrieval verb, but the resource and source are specific enough to convey purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied rather than stated: the agent can infer this is the read path for PostgreSQL tuning. The 'only correct place to set them' remark hints at write semantics but never says when to prefer this tool over siblings like get_cluster or get_cluster_status, and gives no prerequisites.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_backupsList backupsB
Read-onlyIdempotent

List PerconaPGBackup resources in a namespace, with their state, repo, and completion time.

ParametersJSON Schema
NameRequiredDescriptionDefault
contextNokube-config context to target (defaults to current-context)
namespaceNoNamespace (defaults to PERCONA_NAMESPACE if set)

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint, so the safety profile is fully covered. The description adds useful value by naming the returned fields (state, repo, completion time) with no output schema present, but says nothing about pagination or filtering behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler; the scope and returned fields come before any secondary detail. Appropriately sized for a simple list tool, though slightly terse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only list with full schema coverage, complete annotations and no output schema, the description is nearly sufficient: it names the resource and the fields returned. Minor gaps remain around defaults behavior, which the schema already covers.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both 'context' and 'namespace' are fully documented in the schema. The description only obliquely references the namespace scoping and adds no format or default-syntax detail beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('List') and resource ('PerconaPGBackup resources') scoped to a namespace, and names the fields surfaced. An agent can tell it apart from list_restores and list_clusters by the resource type, though no sibling is explicitly referenced.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description only states what the tool does; it never says when to reach for it versus sibling tools like list_restores or get_cluster_status, nor any prerequisites or exclusions. Usage is left entirely to inference from the name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_clustersList PostgreSQL clustersA
Read-onlyIdempotent

List PerconaPGCluster resources (PostgreSQL + PgBouncer). Omit namespace to list across all namespaces. Results are filtered by the namespace/cluster allowlists; protected clusters are flagged.

ParametersJSON Schema
NameRequiredDescriptionDefault
contextNokube-config context to target (defaults to current-context)
namespaceNoNamespace (defaults to PERCONA_NAMESPACE if set)

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive, and openWorld, so safety is covered. The description adds real behavioral context beyond that: results are constrained by namespace/cluster allowlists and protected clusters are flagged in the output, which tells the agent results may be silently incomplete and that a protection marker should be expected.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with what the resource is before the scoping and filtering caveats. No sentence is redundant; the parenthetical and the allowlist note each carry distinct information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, but the description compensates by noting allowlist filtering and protected-cluster flagging, which is exactly the return-side nuance an agent needs. Combined with full parameter coverage and rich annotations, nothing material is missing for a list tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description goes slightly beyond the schema on `namespace`: the schema only says it defaults to PERCONA_NAMESPACE when set, whereas the description explains that omitting it widens the query to all namespaces - a meaningful semantic the schema does not state. The `context` parameter is left entirely to the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb (List) + concrete resource (PerconaPGCluster) with a parenthetical clarifying that this spans PostgreSQL and PgBouncer. The singular/plural contrast with the sibling get_cluster is immediately legible, so an agent can route between them without inspecting schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives an invocation rule ('Omit `namespace` to list across all namespaces'), which is useful, but it never states when to prefer this over get_cluster, list_contexts, or the other list_* siblings. Usage is implied by the verb rather than explicitly scoped, leaving the agent to infer the alternative-selection logic.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_contextsList kube-config contextsA
Read-onlyIdempotent

List the contexts (clusters) available in the loaded kube-config.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, openWorldHint=true, and destructiveHint=false, covering the safety profile. The description adds the useful scoping detail that it reads from the loaded kube-config, but it does not go deeper into behavior such as error cases or connection requirements. This is acceptable for a simple zero-parameter list operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single clear sentence that front-loads the action and resource. It contains no filler or redundancy and is appropriately sized for the tool's simplicity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter, read-only listing tool with safety annotations, the description is nearly complete. It clarifies the resource type and source (kube-config). Some extra context about the exact output format could help, but the absence is not a major gap given the straightforward nature of the operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, and the schema coverage is 100% (vacuously). The description adds no parameter meaning, but none is needed; per the baseline for zero-parameter tools, this is well handled.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb 'List' with the resource 'contexts (clusters)' and clarifies the scope as 'available in the loaded kube-config'. This clearly distinguishes it from sibling list tools like list_namespaces and list_pods, which operate on different resource types.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description makes the tool's purpose obvious enough that an agent can infer when to use it (when kube-config contexts are needed), but it provides no explicit guidance on when not to use it or how it compares to alternatives. The sibling names imply different resource types, yet no direct routing instruction is given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_restoresList restoresB
Read-onlyIdempotent

List PerconaPGRestore resources in a namespace, with their target cluster and state.

ParametersJSON Schema
NameRequiredDescriptionDefault
contextNokube-config context to target (defaults to current-context)
namespaceNoNamespace (defaults to PERCONA_NAMESPACE if set)

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is fully covered by structured data. The description adds that the listing includes each restore's target cluster and state, which is some useful output context but not rich behavioral detail such as pagination or error behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence with the resource and scope front-loaded and no wasted words. Nothing is redundant or padded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only listing tool, annotations cover the safety profile and the schema fully documents both parameters. With no output schema, the description usefully notes that target cluster and state are returned, leaving only minor gaps like pagination or result ordering.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both the context and namespace parameters (including their defaulting behavior) are already documented in the schema. The phrase 'in a namespace' hints at the namespace parameter but adds no syntax, format, or defaulting detail beyond what the schema provides, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (List) and resource (PerconaPGRestore resources), scoped to a namespace, and specifies what is included (target cluster and state). This clearly distinguishes it from siblings like list_backups or list_clusters, though it does not name them explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit when-to-use guidance, no prerequisites, and no mention of alternatives. Usage is only implied by the verb and resource name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 8 tool updatesv0.2.3
    • Changedget_cluster1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedget_cluster_status1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedget_connection_info1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedget_pg_parameters1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedget_pgbouncer_config1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedlist_backups1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedlist_clusters1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedlist_restores1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
  2. 9 tool updatesv0.1.1
    • First observedget_cluster
    • First observedget_cluster_status
    • First observedget_connection_info
    • First observedget_pg_parameters
    • First observedget_pgbouncer_config
    • First observedlist_backups
    • First observedlist_clusters
    • First observedlist_contexts
    • First observedlist_restores

TDQS

A3.6/5.0

Scored across 9 tools

Disambiguation3/5

get_cluster and get_cluster_status both describe cluster status and could be confused (summary vs full .status). list_clusters and list_contexts also overlap in listing clusters, though descriptions hint at a distinction. Other tools are clearly distinct.

Naming Consistency5/5

All tools follow a consistent snake_case verb_noun pattern: list_* and get_*. No naming deviations or mixed conventions.

Tool Count5/5

9 tools is well-scoped for a Kubernetes operator inspection server. Each tool maps to a distinct resource or config aspect, and nothing feels redundant by count.

Completeness3/5

The server is clearly read-only, but within that scope it lacks singular detail tools like get_backup or get_restore, and has no operations for cluster management (create/update/delete) or triggering backup/restore. Core inspection needs are covered, but notable gaps remain.

Maintenance

ActivityMaintained
ResponsivenessUnresponsive

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    C
    maintenance
    Enables querying and modifying PostgreSQL databases through MCP tools with read/write operations, schema inspection, and write-safety constraints that limit modifications to the mcp schema.
    1
    -
  • A
    license
    Not graded
    quality
    C
    maintenance
    Safe, read-only-by-default Kubernetes access for AI agents via MCP. Provides explicit readonly, readwrite, and dangerous permission modes, plus MCPB bundles for desktop clients.
    2
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Safe-write Postgres MCP server enabling secure read and write access to PostgreSQL databases with role-based separation and allowlist controls, allowing agents to query and modify data without risk of unrecoverable accidents.
    40 npm
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables MCP clients to safely query one or more PostgreSQL databases with read-only tools and explicitly approved write operations.
    63 npm
    1
    MIT