PodWarden Hub
AI & MCP Integration

Available Tools

Complete reference of MCP tools available in PodWarden

PodWarden offers 184 tools across 27 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.

Renamed tools: The list_workload_definitions / get_workload_definition / etc. tools have been renamed to list_stacks / get_stack / etc. Similarly, list_workload_assignments / get_workload_assignment / etc. are now list_deployments / get_deployment / etc. The old names still work as backward-compatible aliases.

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

System Apps

Read-only tools for inspecting platform-level add-ons (operators) installed on a cluster, such as Longhorn or the backup operator.

ToolTypeDescription
list_system_appsReadList all system apps registered on a cluster with namespace, status, version, token state, and capabilities
get_system_appReadFull details for a single system app (e.g. longhorn, backup-operator) including live status

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_hostMutatingRemove 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)
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_workloadMutatingRemove 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)
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
rollback_deploymentMutatingRollback to a previous deployment version — updates the K8s deployment image tag

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

Hub DDNS

Manage DDNS subdomains allocated through PodWarden Hub.

ToolTypeDescription
list_hub_ddns_domainsReadList available DDNS domains from Hub (e.g. podwarden.com)
list_hub_ddns_subdomainsReadList allocated subdomains with current IP addresses
allocate_hub_ddns_subdomainMutatingAllocate a new subdomain (e.g. "myapp.podwarden.com")
update_hub_ddns_subdomain_ipMutatingUpdate the IP address for an allocated subdomain
delete_hub_ddns_subdomainDestructiveRelease a Hub DDNS subdomain (stops resolving, cannot be undone)

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)

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

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_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
delete_secretDestructiveDelete a secret by key — cannot delete SSH keys in use by provisioned hosts

Settings

ToolTypeDescription
get_settingsReadGet registry default settings (default registry URL and image tag)
update_settingsMutatingUpdate registry default settings

System configuration

ToolTypeDescription
get_system_configReadGet SMTP, OIDC, and Hub settings (env vars override DB values)
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