Skip to main content
Glama

update_node_group

Destructive

Update an existing worker node group of an Ankra-provisioned self-managed cluster. Provide any combination of autoscaling ({enabled, min_count, max_count}; enabling installs the Ankra-managed Cluster Autoscaler on first use and requires a recent cluster agent and the current count within max_count; min_count 0 scales the group to zero when idle), labels (replaces the group's node labels) and taints (replaces the group's node taints) - they are applied in that order in one call - OR new_instance_type on its own (drains and power-cycles every node in the group, not reversible; refused when the group's pods cannot fit the new type, and when the group is set to scale to zero and the new instance type cannot be sized; when the resize preflight finds risks - the group is the only schedulable worker, it hosts the Ankra agent, a PodDisruptionBudget blocks the drain, a pod's ReadWriteOnce volume must move - it is refused naming them until the user accepts them and the call carries acknowledge_risks=true) OR abandon_pending_resize=true on its own (cancels a resize the group still has pending, for example one whose drain a PodDisruptionBudget blocks: the servers keep the type they run and nothing is drained). This scales NODES; to scale a workload's pods use its chart's autoscaling values or an HPA manifest through the stack draft. Instance type/label/taint changes flip the group's nodes to updating and roll out in the background. Call list_node_groups first for the group names and current values.

Input Schema

NameRequiredDescriptionDefault
labelsNoReplacement Kubernetes node labels for the group. Exactly one aspect per call.
taintsNoReplacement Kubernetes node taints for the group, each {key, value, effect}. Exactly one aspect per call.
cluster_idNoUUID of the target cluster. Optional when a cluster is selected.
group_nameYesNode group to update (from list_node_groups).
autoscalingNoNew autoscaling settings: {enabled, min_count, max_count}. Bounds default to 1 and 100. min_count 0 parks the group at zero nodes when idle and provisions it again when a pod needs it - the cost-saving setting for a warm standby pool - and is allowed only when Ankra can size the group's instance_type, refused naming the instance type when it cannot. A max_count below the group's current node count is accepted: the group scales down to max_count, least busy nodes first, each drained once the pipeline steps on it finish; a min_count above the count scales the group up to min_count. Exactly one aspect per call.
cluster_nameNoExact name of the target cluster. Optional when a cluster is selected.
acknowledge_risksNoSet true only after telling the user every risk the resize preflight named for this new_instance_type and the user explicitly accepted them. Never set it on your own judgement.
new_instance_typeNoNew provider instance type for every node in the group. Exactly one aspect per call. Right-size from the group's pod requests, then call list_instance_types with cluster_id and pick the cheapest type with available=true that fits the busiest node: an out-of-stock type is refused before the card is raised, naming the cheapest in-stock types that fit the group's current requests.
abandon_pending_resizeNoSet true to ABANDON the resize this group has pending (a resize that keeps failing, or whose drain a PodDisruptionBudget blocks): each server goes back to the type it actually runs, with nothing drained or powered off. Exactly one aspect per call; a group with no pending resize is refused.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedInput schema / properties / new_instance_type / description
      Previous value: -"New provider instance type for every node in the group. Exactly one aspect per call."New value: +"New provider instance type for every node in the group. Exactly one aspect per call. Right-size from the group's pod requests, then call list_instance_types with cluster_id and pick the cheapest type with available=true that fits the busiest node: an out-of-stock type is refused before the card is raised, naming the cheapest in-stock types that fit the group's current requests."
  2. Changed1 schema field changed
    • changedInput schema / properties / autoscaling / description
      Previous value: -"New autoscaling settings: {enabled, min_count, max_count}. Bounds default to 1 and 100. min_count 0 parks the group at zero nodes when idle and provisions it again when a pod needs it - the cost-saving setting for a warm standby pool - and is allowed only when Ankra can size the group's instance_type, refused naming the instance type when it cannot. Exactly one aspect per call."New value: +"New autoscaling settings: {enabled, min_count, max_count}. Bounds default to 1 and 100. min_count 0 parks the group at zero nodes when idle and provisions it again when a pod needs it - the cost-saving setting for a warm standby pool - and is allowed only when Ankra can size the group's instance_type, refused naming the instance type when it cannot. A max_count below the group's current node count is accepted: the group scales down to max_count, least busy nodes first, each drained once the pipeline steps on it finish; a min_count above the count scales the group up to min_count. Exactly one aspect per call."
  3. Changed1 schema field changed
    • addedInput schema / properties / acknowledge_risks
      Added value: +{
      +  "description": "Set true only after telling the user every risk the resize preflight named for this new_instance_type and the user explicitly accepted them. Never set it on your own judgement.",
      +  "type": "boolean"
      +}
  4. Changed1 schema field changed
    • addedInput schema / properties / abandon_pending_resize
      Added value: +{
      +  "description": "Set true to ABANDON the resize this group has pending (a resize that keeps failing, or whose drain a PodDisruptionBudget blocks): each server goes back to the type it actually runs, with nothing drained or powered off. Exactly one aspect per call; a group with no pending resize is refused.",
      +  "type": "boolean"
      +}
  5. First observed

TDQS

A4.6/5.0
Behavior5/5

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

Annotations declare a destructive, non-idempotent write, and the description adds far more than that: a resize 'drains and power-cycles every node in the group, not reversible', refusals are explained (pods not fitting, scale-to-zero sizing, out-of-stock types), the risk-preflight acceptance flow with acknowledge_risks is spelled out, and the side effect that nodes 'flip to updating and roll out in the background' is disclosed. This is exactly the behavioral context annotations cannot express.

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

Conciseness3/5

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

The purpose is front-loaded and no sentence is filler, but it is delivered as a single enormous paragraph with deeply nested parentheticals that make it hard to parse at a glance. The information is valuable; the packaging is not concise.

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 9-parameter destructive mutation with no output schema, the description covers modes, exclusivity, refusal conditions, ordering and background rollout, which is nearly everything an agent needs before calling. It never indicates what a successful response looks like, a gap that matters slightly more because no output schema exists.

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 would be 3, but the description adds ordering semantics not present in the schema ('applied in that order in one call') and reinforces the combination rule that governs which parameters may travel together. The per-parameter details largely restate the schema's own verbose descriptions, which keeps it short of a 5.

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 first sentence states a specific verb and resource ('Update an existing worker node group of an Ankra-provisioned self-managed cluster') and the description goes on to name the exact aspects it can change. It also explicitly disambiguates from pod-level scaling ('This scales NODES; to scale a workload's pods use its chart's autoscaling values or an HPA manifest'), so an agent can separate it from scale_workers, update_managed_node_pool and add_node_group.

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

Usage Guidelines5/5

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

Each mode is gated with explicit conditions: autoscaling/labels/taints may be combined, whereas new_instance_type and abandon_pending_resize are valid 'on its own' only. The description also names prerequisites ('requires a recent cluster agent', 'Call list_node_groups first for the group names and current values') and a sibling alternative for pod scaling.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources