Skip to content

MCP tools

This is the product’s contract: the complete set of mcp__kubrain__* tools an agent drives. Every tool also exists as a kubrain CLI verb — same engine, identical results. Each tool carries its own current parameter docs; read the tool’s own description before first use — the tables below are the map, not a substitute for it.

Conventions used below:

  • Mutatesno tools are always safe to call; yes tools change infra or spend. Create/set tools are idempotent (safe to repeat to “ensure” state).
  • Cost-aware tools have a dry path (dry_run, or a dedicated estimate/plan).
  • Public tools need no tenant token (the pre-signup quote surface); everything else authorizes against your tenant, funds, and quota on every call.

Networking (VPCs)

A VPC is a regional, tenant-isolated network. Clusters in the same VPC talk to each other region-wide; different VPCs are isolated.

ToolMutatesWhat it does
create_vpc(name, region?)yesEnsure a VPC exists (idempotent).
get_network(name)noShow one VPC (CIDR, gateway, region).
list_networks()noAll your VPCs.
delete_vpc(name)yesTear down the VPC’s network.

Clusters

ToolMutatesWhat it does
list_versions()noSelectable Kubernetes versions (+ the Talos image version).
get_regions()noRegions/zones that actually exist, with coarse free capacity.
create_cluster(name, vpc?, tier?, ram?, nodes?, k8s?, dry_run?)yesPlan (dry-run, the default) or provision a cluster. Dry-run returns IPs, public endpoint, and cost, applying nothing.
list_clusters()noYour clusters with state, tier, VPC, node count, public hostname.
get_cluster(name)noOne cluster’s status (state, shape, network, endpoint, recent Events).
get_kubeconfig(name, output_file)noWrite a kubeconfig (server set to the public endpoint) to a file.
scale_cluster(name, nodes)yesAdd/remove worker nodes (normal/ha). Async.
resize_cluster(name, ram)yesChange per-node RAM; rolls the worker pool. Async.
upgrade_cluster(name, k8s)yesUpgrade Kubernetes — control plane first, then workers. Async.
reapply_cluster(name)yesRe-render the manifest unchanged to pick up platform features (may roll the CP once).
delete_cluster(name)yesTear down (cascades to VMs), free the network block. Confirm first.

Tiers. dev (1 schedulable control plane, 0+ workers — prototypes) · normal (1 dedicated control plane, 1+ workers — small non-critical apps) · ha (3 control planes across ≥3 zones, 1+ workers — production). ram is GiB per node (the billed dimension); region is inherited from the VPC.

Add-ons

ToolMutatesWhat it does
list_addons() (public)noThe curated catalogue with pinned versions + cost impact.
install_addon(cluster, addon, issuer_email?, dry_run?)yesInstall a pinned add-on (idempotent). Dry-run returns monthly_delta_eur.
uninstall_addon(cluster, addon)yesRemove it; uninstalling ingress-nginx releases its LB IP (charge stops).

Catalogue: ingress-nginx (HTTP(S) ingress behind a dedicated LB IP, +€3.50/mo) · cert-manager (free Let’s Encrypt TLS; pass issuer_email) · metrics-server (free; kubectl top, HPA) · redis (free in-cluster cache; publishes a redis-auth Secret you reference with addon: redis).

Cost & quota

ToolMutatesWhat it does
pricing() (public)noThe rate card: RAM €/GiB-h, volume €/GiB-mo (+ free allowance), LB IP €/mo, tier shapes.
estimate(tier, ram, nodes, volume_gib?, lb_ips?) (public)noExact €/hour and €/month for a shape, with a per-dimension breakdown. Creates nothing.
get_quota()noLimits and usage per dimension + €/month burn and spend cap.
usage(month?)noMonth-to-date consumption: GiB-hours + € per dimension and per resource, including deleted ones. month=YYYY-MM for a past month.

Deployments

An app is a deployment — a named handle on a cluster you ship releases to. Its name is also its namespace, kbn-<name>.

ToolMutatesWhat it does
create_deployment(name, cluster, repo?, branch?)yesCreate the handle (idempotent). repo/branch binds Git for auto-builds.
list_deployments()noInventory + state.
get_deployment(name)noRelease ledger, current pointer, rollout status, secret names (never values).
deploy(name, dir?/image?)yesShip a release: build local source in the cloud → push → roll out, or roll out a prebuilt image.
rollback_deployment(name, release?)yesRe-point to a prior release and re-apply its exact manifests (no rebuild).
promote_deployment(src, to, release?)yesShip one deployment’s tested image on another — no rebuild (e.g. staging → prod).
set_trigger(name, spec)yesAuto-build policy for a Git deployment: manual, commit:<glob>, tag:<glob>, schedule:<cron>.
get_deploy_key(name)noThe read-only ed25519 public deploy key to add to your Git repo.
delete_deployment(name)yesTear down the app’s namespace. Confirm first.

Build helpers (client-local)

These run on your machine — stack detection and manifest authoring against the same render engine the cloud uses. They upload nothing.

ToolMutatesWhat it does
detect(path)noReport the detected stack (language, ports, existing files).
scaffold(path)no*Write a starter kubrain.yaml (+ Dockerfile); never clobbers.
validate(path)noLint kubrain.yaml (+ templates) with the cloud’s exact checks.

Secrets

ToolMutatesWhat it does
set_secret(name, key, value_file)yesWrite an app env secret into the cluster’s Secret; only the key name is recorded centrally, never the value.
unset_secret(name, key)yesRemove a secret key.

Registry

ToolMutatesWhat it does
get_registry()noPush coordinates (host + your <tenant>/ namespace + login). Clusters pull with no imagePullSecrets.

DNS

ToolMutatesWhat it does
create_zone(domain)yesHost a domain (free, idempotent); returns the NS set to delegate at your registrar.
list_zones() / delete_zone(domain)no / yesList hosted zones / stop hosting (removes all records).
set_record(zone, name, type, value, ttl?)yesUpsert an RRset (A, AAAA, CNAME, TXT, MX, SRV, CAA). Live on both nameservers immediately.
list_records(zone) / delete_record(...)no / yesList / delete a record set.

Object storage (buckets)

ToolMutatesWhat it does
create_bucket(name, public?)yesAn S3-compatible bucket; public (fixed at creation) = anonymous read.
list_buckets() / delete_bucket(name)no / yesInventory with live object count + size / delete (empty buckets only).
get_bucket_credentials(output_file)noWrite the tenant’s S3 key pair to a file — one pair opens all your buckets.

Observability

ToolMutatesWhat it does
get_metrics(name, component?, window?, by?)noGolden signals — request rate, 5xx error rate (0..1), p95 latency (ms) — with zero app instrumentation.
set_alert(deployment, …, notify)yesThreshold on a signal (metric / pod health / ingress uptime+TLS); fires a webhook or email on breach and recovery. Idempotent per rule.
list_alerts(deployment)noEach rule’s live state (ok/pending/firing) and last sampled value.

Blueprints (declarative fleet)

Manage the whole tenant as one versioned, diffable document.

ToolMutatesWhat it does
export_blueprint(refs?)noSnapshot current resources as an intent spec (status fields left out).
estimate_blueprint(file)noPrice the whole document.
plan_blueprint(file)noDiff spec vs. live — create / update / delete / no-op per resource.
apply_blueprint(file, prune?)yesConverge live state to the document. prune also deletes undeclared resources (confirm first).

See also

  • CLI — the same surface as kubrain commands.
  • kubrain.yaml — the manifest deploy ships.