Skip to main content
Glama
sjk4425

ncloud-mcp-server

by sjk4425

ncloud_nks_create_cluster

Creates a Naver Cloud NKS Kubernetes cluster with node pools, networking, and add-ons; set dryRun=true to preview configuration before provisioning.

Instructions

Create a new NKS Kubernetes cluster. Use dryRun=true to preview without creating.

G3(KVM) cluster requirements:

  • hypervisorCode: 'KVM' (required)

  • clusterType: must contain G003 (e.g., SVR.VNKS.STAND.C004.M016.G003)

  • k8sVersion: must use nks.2 suffix (e.g., 1.35.3-nks.2)

  • lbPrivateSubnetNo: Private LB subnet number (required — returns 400 without details if missing)

  • zoneCode: Required at cluster level when isRegional=false (default). Missing causes 400 without details.

  • nodePool.softwareCode: Must use FULL value from ncloud_nks_get_server_images including pipe and image number (e.g., SW.VSVR.OS.LNX64.UBNTU.SVR22.WRKND.G003|23215604)

  • nodePool.serverSpecCode: g3 spec code (e.g., c2-g3)

  • nodePool.storageSize: 100~2000GB (required)

Server-side validations added 2026-09-17 (request fails with 400 if violated):

  • Regional cluster (isRegional=true): every nodePool.zoneCode must match the zone of the subnets assigned to that node pool (subnetNoList). Check each subnet's zone with the VPC subnet tools before creating.

  • log.audit=true requires an active Cloud Log Analytics (CLA) subscription on the account — subscribe first or leave audit off and enable later with ncloud_nks_set_audit_log.

  • Istio is now available as an add-on (1.36+ clusters): install after creation with ncloud_nks_install_addons.

G2(XEN) vs G3(KVM) differences:

  • G2: clusterType contains G002, k8sVersion suffix nks.1, hypervisorCode optional

  • G3: clusterType contains G003, k8sVersion suffix nks.2, hypervisorCode='KVM' required

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
logNoLog settings. audit=true sends the Kubernetes audit log to Cloud Log Analytics and, since 2026-09-17, is rejected (400) unless the account has an active CLA subscription
nameYesCluster name (3-30 chars, lowercase+numbers+'-')
vpcNoYesVPC number
addonsNoAdd-ons to install together with the cluster
dryRunNoIf true, returns a preview without actually creating
zoneNoNoZone number — documented alternative to zoneCode
authTypeNoCluster authentication mode. IAM access entries (ncloud_nks_*_access_entry) require API. ⚠️ Once set to API it cannot be changed back
nodePoolNoInitial node pool configurations
zoneCodeNoZone code (e.g., KR-2). Required when isRegional is false (default). API returns 400 without details if missing for single-zone clusters
kmsKeyTagNoKMS key tag for Kubernetes secret encryption (from the Key Management Service console)
isRegionalNoMulti-zone (Regional) cluster. Default: false. Public zone only (not in the Government-zone guide)
k8sVersionNoKubernetes version (from ncloud_nks_get_versions). G3/KVM uses nks.2 suffix, G2/XEN uses nks.1 suffix
regionCodeYesRegion code (e.g., KR, SGN, JPN)
subnetLbNoNoLoad balancer subnet number (legacy single LB-subnet field; conditional per the guide)
clusterTypeYesCluster type (e.g., SVR.VNKS.STAND.C004.M016.G003 for G3, SVR.VNKS.STAND.C004.M016.G002 for G2)
loginKeyNameYesLogin key name for node access
subnetNoListYesSubnet number list for the cluster
publicNetworkNoSubnet network type. true=Public, false=Private (default)
hypervisorCodeNoHypervisor code: XEN (default) or KVM. Required as 'KVM' for G3 clusters
lbPublicSubnetNoNoLoad balancer public subnet number. Required unless lbPublicSubnetNoList is given (Public zone) — the Government-zone guide lists it as required
lbPrivateSubnetNoNoLoad balancer private subnet number. Required for G3/KVM clusters (API returns 400 without details if missing)
bootstrapAccessEntryNoAuto-create an IAM access entry for the creating principal (authType=API only)
lbPublicSubnetNoListNoPublic zone only: up to 2 public LB subnet numbers in different zones (multi-zone). Alternative to lbPublicSubnetNo
lbPrivateSubnetNoListNoPublic zone only: up to 2 private LB subnet numbers in different zones (multi-zone). Alternative to lbPrivateSubnetNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed14 schema fields changedv2.0.1
    • addedInput schema / properties / addons
      Added value: +{
      +  "description": "Add-ons to install together with the cluster",
      +  "items": {
      +    "additionalProperties": false,
      +    "properties": {
      +      "addonName": {
      +        "description": "Add-on name (from ncloud_nks_list_available_addons)",
      +        "type": "string"
      +      },
      +      "configurationValues": {
      +        "additionalProperties": {},
      +        "description": "Add-on configuration values (schema from ncloud_nks_get_available_addon_version)",
      +        "type": "object"
      +      },
      +      "version": {
      +        "description": "Add-on version (from ncloud_nks_get_available_addon)",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "addonName"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • addedInput schema / properties / authType
      Added value: +{
      +  "description": "Cluster authentication mode. IAM access entries (ncloud_nks_*_access_entry) require API. ⚠️ Once set to API it cannot be changed back",
      +  "enum": [
      +    "API",
      +    "CONFIG_MAP"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / bootstrapAccessEntry
      Added value: +{
      +  "description": "Auto-create an IAM access entry for the creating principal (authType=API only)",
      +  "type": "boolean"
      +}
    • changedInput schema / properties / isRegional / description
      Previous value: -"Multi-zone (Regional) cluster. Default: false"New value: +"Multi-zone (Regional) cluster. Default: false. Public zone only (not in the Government-zone guide)"
    • addedInput schema / properties / kmsKeyTag
      Added value: +{
      +  "description": "KMS key tag for Kubernetes secret encryption (from the Key Management Service console)",
      +  "type": "string"
      +}
    • addedInput schema / properties / lbPrivateSubnetNoList
      Added value: +{
      +  "description": "Public zone only: up to 2 private LB subnet numbers in different zones (multi-zone). Alternative to lbPrivateSubnetNo",
      +  "items": {
      +    "type": "number"
      +  },
      +  "maxItems": 2,
      +  "type": "array"
      +}
    • changedInput schema / properties / lbPublicSubnetNo / description
      Previous value: -"Load balancer public subnet number"New value: +"Load balancer public subnet number. Required unless lbPublicSubnetNoList is given (Public zone) — the Government-zone guide lists it as required"
    • addedInput schema / properties / lbPublicSubnetNoList
      Added value: +{
      +  "description": "Public zone only: up to 2 public LB subnet numbers in different zones (multi-zone). Alternative to lbPublicSubnetNo",
      +  "items": {
      +    "type": "number"
      +  },
      +  "maxItems": 2,
      +  "type": "array"
      +}
    • addedInput schema / properties / nodePool / items / properties / fabricCluster
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "Fabric cluster to place the node pool in (poolName or poolNo)",
      +  "properties": {
      +    "poolName": {
      +      "description": "Fabric cluster pool name",
      +      "type": "string"
      +    },
      +    "poolNo": {
      +      "description": "Fabric cluster pool number",
      +      "type": "number"
      +    }
      +  },
      +  "type": "object"
      +}
    • addedInput schema / properties / nodePool / items / properties / subnetNo
      Added value: +{
      +  "description": "Subnet number for the node pool (single subnet)",
      +  "type": "number"
      +}
    • addedInput schema / properties / nodePool / items / properties / subnetNoList
      Added value: +{
      +  "description": "Subnet numbers for the node pool (multiple subnets)",
      +  "items": {
      +    "type": "number"
      +  },
      +  "type": "array"
      +}
    • addedInput schema / properties / subnetLbNo
      Added value: +{
      +  "description": "Load balancer subnet number (legacy single LB-subnet field; conditional per the guide)",
      +  "type": "number"
      +}
    • addedInput schema / properties / zoneNo
      Added value: +{
      +  "description": "Zone number — documented alternative to zoneCode",
      +  "type": "number"
      +}
    • changedInput schema / required
      Previous value: -[
      -  "name",
      -  "clusterType",
      -  "loginKeyName",
      -  "regionCode",
      -  "vpcNo",
      -  "subnetNoList",
      -  "lbPublicSubnetNo"
      -]New value: +[
      +  "name",
      +  "clusterType",
      +  "loginKeyName",
      +  "regionCode",
      +  "vpcNo",
      +  "subnetNoList"
      +]
  2. Changed2 schema fields changedv1.16.0
    • changedInput schema / properties / log / description
      Previous value: -"Log settings (audit log)"New value: +"Log settings. audit=true sends the Kubernetes audit log to Cloud Log Analytics and, since 2026-09-17, is rejected (400) unless the account has an active CLA subscription"
    • changedInput schema / properties / nodePool / items / properties / zoneCode / description
      Previous value: -"Zone code (required for Regional clusters)"New value: +"Zone code (e.g., KR-1). Required for Regional clusters and, since 2026-09-17, must match the zone of the subnets assigned to this node pool — a mismatch is rejected with 400"
  3. First observedv1.10.1

TDQS

A4.5/5.0
Behavior5/5

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

Annotations only declare destructiveHint=false, so the description carries the full disclosure burden and does so well: it names the exact 400-failure conditions (missing lbPrivateSubnetNo, missing zoneCode, audit without CLA, regional zone/subnet mismatch) and the hard immutability of authType=API. These are failure-mode and side-effect details the agent could not infer from the single annotation.

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?

Front-loaded with the action sentence, then cleanly sectioned into G3 requirements, new validations, and G2-vs-G3 differences; for a 24-parameter nested tool the length is justified. There is some verbatim overlap with the schema descriptions (e.g., the softwareCode pipe warning), which is minor redundancy rather than noise.

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 complex mutating create with nested nodePool/fabricCluster objects and no output schema, the description covers prerequisites, required-field pitfalls, and follow-up actions thoroughly. It does not describe the creation response or how to poll/confirm the resulting cluster (e.g., an operation handle), which is the main remaining gap given no output schema exists to cover return values.

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 description coverage is already 100%, so the baseline is 3; the description earns above that by consolidating cross-parameter constraints (clusterType/k8sVersion/hypervisorCode coupling for G3, full-pipe softwareCode value) and by pointing at the sibling tools that supply each value (ncloud_nks_get_server_images, ncloud_nks_get_versions, ncloud_nks_get_server_specs). Much of the per-field detail nevertheless duplicates the schema, so it is not 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 ('Create a new NKS Kubernetes cluster') and immediately scopes it with the dryRun preview option. This clearly separates it from adjacent tools such as ncloud_nks_create_node_pool, ncloud_nks_create_access_entry, ncloud_ses_create_cluster, and ncloud_cdss_create_cluster, which an agent can rule out from the name plus this sentence alone.

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

Usage Guidelines4/5

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

It gives concrete when-to-use context: prefer dryRun=true to preview, check subnet zones before regional creation, subscribe to CLA before enabling log.audit, and install add-ons afterward with ncloud_nks_install_addons. It stops short of explicit when-not-to-use guidance (e.g., choosing SES/CDSS over NKS, or deferring node pools to ncloud_nks_create_node_pool), but the operational routing it does provide is specific.

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

Deploy Server

Other Tools