PodWarden Hub
AI & MCP Integration

Available Tools

Complete reference of MCP tools available in PodWarden

This page is the reference for the tools PodWarden offers, grouped into sections below. How many are callable depends on your instance's tier settings: the tools your PodWarden instance offers. To see the exact list, connect a PodWarden Core to your account, or ask your AI client to run list_tool_categories. A connected model is announced only the facade's own tools — find_tools, describe_tools, list_tool_categories, load_skill, and the execute_read / execute_mutate / execute_destroy doors — and discovers and calls everything else through them, so the full catalog never bloats the model's context. Tools are classified as read-only, mutating (create/update/deploy), or destructive (delete). The instance-wide tier switch (Settings → MCP) controls which of those tiers are exposed, and is the only setting that restricts what a connected model may call — a token's role does not. See What gates a tool call.

Removed and merged tools: Earlier versions of PodWarden carried alias and duplicate tools. They were removed in favour of the canonical tools below, and an agent that calls an old name is told the replacement. The old workload aliases (list_workload_definitions, get_workload_assignment, and the rest) are now list_stacks, get_deployment, and so on; list_system_apps / get_system_app became list_components / get_component; get_settings became get_system_config; the *_hub_ddns_* tools became list_hub_parent_domains, allocate_hub_domain, list_domains with sync_hub_domains, and delete_domain; list_cloudflare_dns_records became import_cloudflare_domain followed by list_domain_records. Three pairs were merged: cancel_host_provisioning into cancel_provisioning_job, set_domain_ddns into update_domain, and mark_all_system_messages_read into mark_system_message_read (omit message_id to mark all).

Infrastructure overview

ToolTypeDescription
get_infrastructure_overviewReadHigh-level summary: cluster count, host count, GPU totals, workload status, recent deployments
find_gpu_capacityReadFind available GPU capacity across all hosts and clusters, grouped by GPU model
check_cluster_capacityReadCheck available CPU and memory capacity across clusters, compare against deployed workloads
troubleshoot_workloadReadDiagnose issues: fetches deployment, stack, cluster status, pod events, and logs

Clusters

ToolTypeDescription
list_clustersReadList all Kubernetes clusters with node counts, network types, and live status
get_clusterReadDetailed cluster info including nodes, managers, and live Kubernetes status
get_cluster_extendedReadExtended live info: K8s version, namespaces, node details with CPU/memory/GPU, running pods
get_cluster_storage_classesReadList StorageClasses available in a cluster
get_cluster_affectedReadGet resources that would be affected by deleting a cluster (hosts, deployments, endpoints)
get_network_healthReadCheck network health of a cluster
list_node_taintsReadList all taints on a Kubernetes node
create_clusterMutatingCreate a new cluster — provide kubeconfig directly or fetch via SSH from a control-plane node
update_clusterMutatingUpdate cluster settings: name, kubeconfig, namespace, SSH fetch host, protection
cordon_nodeMutatingMark a node as unschedulable
drain_nodeMutatingDrain a node — evict all pods so it can be taken offline for maintenance
taint_nodeMutatingAdd a taint to a Kubernetes node (taints repel pods that don't tolerate them)
uncordon_nodeMutatingMark a node as schedulable again (undo cordon)
untaint_nodeMutatingRemove a taint from a Kubernetes node by key
delete_clusterDestructiveDelete a cluster record from PodWarden (does NOT uninstall K8s from hosts)
delete_cluster_nodeDestructiveRemove a stale node from a Kubernetes cluster (deletes the K8s node object)
delete_namespaceDestructiveDelete an empty PodWarden-managed pw-* namespace (e.g. one an undeploy left behind)

Components

Platform-level components (operators and add-ons) installed on a cluster, such as Longhorn or the backup operator. list_components / get_component replace the old list_system_apps / get_system_app.

ToolTypeDescription
get_componentReadGet the full detail of one component on a cluster, as JSON
list_componentsReadList the components of a cluster with their versions
disable_componentMutatingSet a component's desired-state to disabled (declarative; no run_remove)
enable_componentMutatingSet a component's desired-state to enabled (declarative; no run_ensure)
install_componentMutatingInstall a component and set its desired-state to enabled
restart_componentMutatingRestart (reconcile-now) a component — generation bump, NOT a rollout
upgrade_componentMutatingUpgrade a component to a target version (version-targeted reapply)
uninstall_componentDestructiveUninstall a component and set its desired-state to disabled

See the System Apps guide for installation and detection details.

Hosts

ToolTypeDescription
list_hostsReadList all managed hosts with hardware info, status, GPU details, cluster membership
get_hostReadFull host details including hardware specs, GPU info, cluster assignment
update_hostMutatingUpdate host metadata: display name, notes, network types
probe_hostMutatingSSH into a host to gather hardware info (CPU, RAM, disk, GPU) and detect Kubernetes
set_gateway_roleMutatingEnable or disable the gateway role on a host (ingress entry point)
detect_host_public_ipMutatingDetect the public IP of a host via SSH (for DNS validation)
add_hostMutatingAdd a host manually by IP or hostname
provision_hostMutatingInstall K3s agent and join the host to a cluster (runs in background)
wipe_hostDestructiveRemove K3s from a host and reset to discovered state (runs in background)
register_cluster_from_hostMutatingRegister an existing K3s/K8s installation on a host as a PodWarden cluster
provision_as_control_planeMutatingInstall K3s server on a host and create a new cluster (runs in background)
detach_host_from_clusterMutatingRemove a worker node from its cluster (K8s + PodWarden DB)
probe_host_networkMutatingProbe a host's network topology via SSH
reconfigure_host_networkingMutatingNon-destructive k3s networking reconfiguration
reset_host_statusMutatingReset a stuck host from 'provisioning' or 'error' back to 'discovered'
delete_hostDestructiveDelete a manually-added host from PodWarden

Stacks

Templates that define what to deploy (image, resources, GPU requirements).

ToolTypeDescription
list_stacksReadList all stacks with resource summaries
get_stackReadFull stack details including env schema, volume mounts, registry credentials
create_stackMutatingCreate a new stack (container template)
update_stackMutatingUpdate an existing stack — only provided fields are changed
delete_stackDestructivePermanently delete a stack

Deployments

Bindings of stacks to clusters — the actual deployments.

ToolTypeDescription
list_deploymentsReadList deployments with status, cluster, stack, and deploy info
get_deploymentReadFull deployment details including env values, resolved volumes, deployment log
get_workload_logsReadGet container logs and pod status from a deployed workload
check_network_compatibilityReadPre-flight check: verify workload network requirements match cluster capabilities
create_deploymentMutatingBind a stack to a cluster (starts in "pending" status)
update_deploymentMutatingUpdate deployment config — changes take effect on next deploy
deploy_workloadMutatingDeploy a deployment to its target Kubernetes cluster (runs in background)
undeploy_workloadDestructiveRemove a workload from Kubernetes — deletes Deployment and non-retained PVCs
update_config_templateMutatingUpdate a single config template in a deployment without resending all config_values
run_in_podMutatingExecute a command inside a running pod belonging to a managed deployment
proxy_to_serviceMutatingSend an HTTP request to a deployment's ClusterIP service via in-cluster proxy
migrate_workloadMutatingMigrate a deployed workload to a different node (pre-flight PV affinity checks)
restart_deploymentMutatingRestart a deployment by triggering a Kubernetes rollout restart
delete_deploymentDestructiveDelete a deployment record (does NOT undeploy — undeploy first)

Apps

ToolTypeDescription
list_appsReadList apps with their stacks, deployments, and current status
get_appReadFull app details including stack config, deployment status, and history

Ingress rules

ToolTypeDescription
list_ingress_rulesReadList all ingress rules with domain, backend, gateway, and status
get_ingress_ruleReadFull ingress rule details including DNS check results and proxy status
create_ingress_ruleMutatingCreate a new ingress rule — supports managed (K8s) and manual (IP:port) backends
update_ingress_ruleMutatingUpdate an existing ingress rule — only provided fields are changed
check_ingress_dnsMutatingCheck DNS resolution — resolves domain A record and compares to gateway IP
check_ingress_httpMutatingHTTP health check — verifies the full chain: DNS → gateway → ingress → backend
check_ingress_tlsMutatingCheck TLS certificate validity: issuer, expiration date, days remaining
apply_ingress_ruleMutatingGenerate and deploy proxy config for a single ingress rule
apply_all_ingress_rulesMutatingRegenerate and deploy the full proxy config for a gateway host
delete_ingress_ruleDestructivePermanently delete an ingress rule and remove its proxy config

DDNS

ToolTypeDescription
list_ddns_configsReadList all DDNS configurations with provider, status, current IP, and last update
get_ddns_configReadFull DDNS config details (sensitive fields like API tokens are masked)
get_ddns_statusReadCurrent public IP and status summary of all DDNS configurations
create_ddns_configMutatingCreate a new DDNS config (Cloudflare, DuckDNS, Webhook, or Hub provider)
update_ddns_configMutatingUpdate a DDNS config — use "***" for token fields to preserve existing values
test_ddns_configMutatingForce a DNS record update to verify credentials and provider connectivity
delete_ddns_configDestructiveDelete a DDNS config (DNS records are NOT removed — clean up at provider)

Hub catalog

Browse and import stack templates from PodWarden Hub.

ToolTypeDescription
test_hub_connectionReadTest connectivity to the configured PodWarden Hub
list_hub_categoriesReadList template categories (e.g. "AI & Machine Learning", "Databases")
list_hub_templatesReadBrowse templates with search and category filtering
get_hub_templateReadFull template details: image, resources, env schema, ports, volumes
check_hub_updatesReadCheck for updates on Hub-imported stacks
import_hub_templateMutatingImport a Hub template as a local stack

Domains

The domain registry, Cloudflare DNS records, and domains allocated through PodWarden Hub. These replace the old *_hub_ddns_* tools.

ToolTypeDescription
list_domain_recordsReadList DNS records from Cloudflare for a domain
list_domainsReadList all registered domains with type, DNS status, and ingress rule counts
list_hub_parent_domainsReadList the parent zones PodWarden Hub offers for allocating a Hub domain
allocate_hub_domainMutatingAllocate a subdomain on PodWarden Hub and register it as a domain (e.g. myapp.podwarden.com)
check_domain_dnsMutatingCheck DNS resolution for a domain and compare with gateway IP
create_domainMutatingRegister a domain in the domain registry
create_domain_recordMutatingCreate a DNS record in Cloudflare for a domain
import_cloudflare_domainMutatingImport a domain from a Cloudflare DDNS configuration, then use list_domain_records to see its DNS records (replaces list_cloudflare_dns_records)
publish_domainMutatingPublish the current gateway public IP to this domain's DNS provider now
sync_hub_domainsMutatingReconcile the local domain registry with the subdomains allocated on PodWarden Hub (use with list_domains)
update_domainMutatingUpdate a domain: notes, ddns_mode, and the gateway it is bound to (gateway_host_id, or clear_gateway to unbind). Replaces set_domain_ddns
update_domain_recordMutatingUpdate a DNS record in Cloudflare
delete_domainDestructivePermanently delete a domain from the registry (for a Hub domain this releases the subdomain)
delete_domain_recordDestructiveDelete a DNS record from Cloudflare

Storage

ToolTypeDescription
list_storage_connectionsReadList all storage connections (NFS/S3 backends) with config and status
get_storage_connectionReadStorage connection details including connectivity test results
test_storage_connectionMutatingTest connectivity — NFS: TCP/RPC/export/mount+speed test; S3: endpoint/upload/download speed
create_storage_connectionMutatingCreate a new storage connection (NFS or S3)
update_storage_connectionMutatingUpdate an existing storage connection — only provided fields are changed
create_nfs_storage_classMutatingDeploy NFS provisioner to a cluster and create a StorageClass from an NFS storage connection
delete_storage_connectionDestructiveDelete a storage connection (workloads using it will lose access)

Backups

Restic-based backup policies for deployed workloads.

ToolTypeDescription
get_backup_policyReadGet details of a backup policy including recent snapshots
list_backup_policiesReadList backup policies
list_backup_snapshotsReadList Restic snapshots for a backup policy
create_backup_policyMutatingCreate a backup policy for a deployed workload
restore_backup_snapshotDestructiveRestore a workload from a Restic backup snapshot
resume_backup_policyMutatingResume a suspended backup policy's CronJob
run_backup_nowMutatingTrigger an immediate backup for a policy (creates a one-off K8s Job)
suspend_backup_policyMutatingSuspend a backup policy's CronJob (prevent new scheduled backups)
update_backup_policyMutatingUpdate a backup policy
delete_backup_policyDestructiveDelete a backup policy and its K8s CronJob

Network zones

Group nodes by network reachability.

ToolTypeDescription
get_zoneReadGet full details of a network zone including member hosts
list_zonesReadList all network zones with host counts and subnet configuration
create_zoneMutatingCreate a network zone for grouping nodes by network reachability
update_zoneMutatingUpdate a network zone's properties
delete_zoneDestructiveDelete a network zone

Registry connections

Encrypted pull credentials for private container registries.

ToolTypeDescription
list_registry_connectionsReadList private container-registry connections — passwords are never returned
create_registry_connectionMutatingCreate a registry connection: encrypted pull credentials a stack or deployment names in registry_credentials
test_registry_connectionMutatingTest a registry connection: reachability and credential authentication
update_registry_connectionMutatingUpdate a registry connection
delete_registry_connectionDestructivePermanently delete a registry connection

Volume migrations

Move a stack's volume data to a different PVC.

ToolTypeDescription
get_volume_migrationReadGet status and progress for a single volume migration job
list_volume_migrationsReadList all volume migration jobs for a stack (workload definition)
cancel_volume_migrationMutatingCancel a pending or running volume migration job
retry_volume_migrationMutatingRetry a failed or cancelled volume migration job
start_volume_migrationMutatingStart a new volume migration job — tars source data over SSH into a PVC

Workload updates

Available updates for deployed workloads.

ToolTypeDescription
list_workload_updatesReadList available workload updates from the local cache
apply_workload_updateMutatingApply an available update to a workload (async — returns immediately)
dismiss_workload_updateMutatingDismiss the current available update for a workload

Longhorn

Longhorn distributed storage on a cluster.

ToolTypeDescription
get_longhorn_nodesReadGet Longhorn storage nodes for a cluster
get_longhorn_settingsReadGet global Longhorn storage settings for a cluster
get_longhorn_volumesReadGet Longhorn volumes for a cluster
install_longhornMutatingInstall Longhorn distributed storage on an existing K3s cluster
update_longhorn_node_schedulingMutatingEnable or disable scheduling on a Longhorn storage node
update_longhorn_settingsMutatingUpdate global Longhorn storage settings on a cluster

Node access

Time-limited, human-approved SSH access to managed nodes. See Node SSH access.

ToolTypeDescription
request_node_accessMutatingRequest time-limited SSH access to a node — returns an approval URL a human must open
revoke_node_accessMutatingRevoke an SSH access grant, immediately terminating access
run_node_commandMutatingExecute a command on a node via an approved SSH access grant

System messages

Health check alerts and infrastructure issues.

ToolTypeDescription
get_system_messages_summaryReadGet a quick summary of unread system messages by severity
list_system_messagesReadList system messages (health check alerts and infrastructure issues)
mark_system_message_readMutatingMark one system message as read, or every active one when message_id is omitted (replaces mark_all_system_messages_read)
run_health_checkMutatingTrigger an immediate health check run
delete_system_messageDestructiveDelete a system message permanently

Appliance

ToolTypeDescription
get_deploy_statusReadGet the honest deploy status from the appliance launcher

Discovery and execution

The facade tools a connected model sees first. Everything else is found with find_tools and run through the three execute_* doors, one per tier.

ToolTypeDescription
describe_toolsReadGet the full description and JSON argument schema for named tools
execute_readReadRun a read-only PodWarden tool found via find_tools
find_toolsReadSearch PodWarden's tools and skills, and return what matches
list_tool_categoriesReadList the categories of tools PodWarden offers, with how many are in each
load_skillReadFetch a skill procedure by name, with its declared tier and version range
execute_mutateMutatingRun a PodWarden tool that creates or changes infrastructure
execute_destroyDestructiveRun a PodWarden tool that permanently deletes something

Provisioning jobs

ToolTypeDescription
list_provisioning_jobsReadList provisioning jobs with status, host, playbook, and timing
get_provisioning_jobReadFull job details including stdout and stderr output
cancel_provisioning_jobMutatingRequest cancellation of a running provisioning job — by job_id (preferred) or by host_id (replaces cancel_host_provisioning)
cleanup_provisioning_jobsDestructiveDelete all completed provisioning jobs (non-running/pending)

Users

ToolTypeDescription
list_usersReadList system users with role, status, and last active time
get_userReadFull user details
create_userMutatingCreate a new system user with email and role
update_userMutatingUpdate a user's name, email, role, or status
set_user_passwordMutatingSet or change a user's local password (8-72 characters)
delete_userDestructiveRemove a system user

Secrets

ToolTypeDescription
list_secretsReadList all secret keys — values are NOT returned, only key names and metadata
list_ssh_key_pairsReadList SSH key pair names (each pair is {name}_ssh_private + {name}_ssh_public)
get_secret_addressReadCompute where a workload secret is stored: its Config v2 scope and store key
get_secret_usageReadShow every deployment's variables and which tier and stored secret wins for each
list_stack_secretsReadList all env vars for a stack: declared secrets and plain compose env vars
get_secretMutatingGet a decrypted secret value by key (handle with care)
set_secretMutatingCreate or update a secret — value is encrypted at rest (AES-256-GCM)
generate_ssh_key_pairMutatingGenerate a new SSH key pair and store both halves in secrets
add_stack_secretMutatingAdd a new secret to a stack: stores it where the stack is deployed
copy_secretsMutatingCopy workload secrets to other addresses server-side; values never leave the store
generate_secretsMutatingReplace workload secrets with fresh random values generated server-side (rotation)
get_deployment_variablesMutatingList every variable a deployment's containers receive and where each one resolves
promote_env_valueMutatingEncrypt a deployment's inline (plaintext) env value into the secret store
delete_secretDestructiveDelete a secret by key — cannot delete SSH keys in use by provisioned hosts
delete_secretsDestructiveDelete several stored workload secrets at once
move_secretsDestructiveMove or rename workload secrets server-side: copy, then delete the source
remove_stack_secretDestructiveRemove a secret declaration from a stack schema and delete its stored value

Settings

ToolTypeDescription
update_settingsMutatingUpdate registry default settings

System configuration

ToolTypeDescription
get_system_configReadGet system configuration (including the registry defaults) and the running Core version (env vars override DB values; replaces get_settings)
update_system_configMutatingUpdate system config — only pass sections to change (SMTP, OIDC, Hub)
test_smtpMutatingSend a test email using the configured SMTP settings
test_oidcMutatingTest OIDC discovery — validates issuer URL, fetches provider metadata

What gates a tool call

There is no per-token permission model. Earlier versions of this page described a viewer / operator / admin matrix in which mutating and destructive tools returned 403 Forbidden to a lower-privileged token. No such gate exists. PodWarden Core's authorization model is flat: every authenticated caller has the same access, secret values included. The role stored on an MCP token (admin or readonly) is displayed in the UI but is read by no authorization check.

Selecting a role does not limit a token. If you need to limit what an AI assistant can do, the control is the instance-wide tier switch below — or the decision not to mint the token at all.

Three things actually decide whether a tool call succeeds. None of them is the token's role.

1. Authentication

The request must carry a valid Bearer pwm_… token that is still active and unexpired. Anything else is rejected before tool gating runs. An MCP path whose identity cannot be resolved fails closed and exposes nothing.

2. The instance-wide tier switch

Set in Settings → MCP. This is the only gate that works at tool granularity:

TierCoversDefault
readRead tools — list_*, get_*, logs, capacity and health checksEnabled
mutateCreate / update / deploy tools — and get_secret, deliberately classified as mutating so a read-only instance cannot disclose secret valuesDisabled
destroyDelete / release toolsDisabled

It is an operator switch for the whole deployment, not a per-principal permission: it applies identically to every caller, and a token whose stored role reads admin is capped by it exactly like any other. If the setting cannot be read, it fails safe to read-only.

Because the tier filter runs before the facade is announced, a Core with mutate and destroy off does not announce the execute_mutate and execute_destroy doors at all — the connected model is offered only the read door.

A tool outside an enabled tier returns an MCP error frame rather than an HTTP status, carrying a stable reason code:

ReasonMeaning
tier_disabledThe tool exists, but its tier is switched off for this instance
unknown_toolNo tool by that name is registered

3. Credential-class rules

These key on how you authenticated, not on what role you hold — so they are not a role system returning by another name, and they apply to every MCP token equally. An MCP token is a machine credential, and machine credentials are refused (403 Forbidden) on the surfaces that administer other credentials:

SurfaceEffect on an MCP token
create_user, update_user, set_user_password, delete_userRefused. Reading users (list_users, get_user) is unaffected
Creating or modifying MCP tokensRefused — a token cannot mint itself a more capable successor
The terminal and runtime sections of update_system_configRefused. The other sections are unaffected
Environment inventoryRefused
Approving or extending a node-access grantRefused — approval requires an interactive human

One genuine per-token setting exists: node_ssh_access, disabled by default, which grants a root shell on managed nodes. An operator turns it on for an individual token, and it is re-validated live against the database on every use. See Node SSH access.

Scope an MCP token by whether you mint it, not by how you configure it. Within the enabled tiers, any valid token can read every secret the instance holds and change everything it manages. This posture is only appropriate while everyone who can authenticate to the instance is trusted with full administrative access to it; it is not a model for a deployment with users of differing trust.

Available Tools | PodWarden Hub