ks_create_cluster
Creates a new Kubernetes cluster with specified name, datacenter, and machine type on IBM Cloud.
Instructions
Create a new Kubernetes cluster
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| datacenter | Yes | Zone e.g. dal10 | |
| machine_type | Yes | Worker machine type | |
| worker_num | No | ||
| kube_version | No | ||
| resource_group_id | No | ||
| provider | No | ||
| vpc_id | No | ||
| subnet_id | No |
Implementation Reference
- src/tools/kubernetes/index.ts:24-31 (handler)The handler function for the ks_create_cluster tool. It calls assertWriteAllowed to check write permissions, then sends a POST request to the IBM Cloud Kubernetes API endpoint /v2/createCluster with the provided parameters (name, datacenter, machine_type, worker_num, kube_version, provider, vpc_id, subnet_id, resource_group_id). Uses safeTool wrapper for error handling.
}, async (p) => safeTool(async () => { w(); return client.post(`${base}/v2/createCluster`, { name:p.name, dataCenter:p.datacenter, machineType:p.machine_type, workerNum:p.worker_num||1, kubeVersion:p.kube_version, provider:p.provider||"vpc-gen2", vpcID:p.vpc_id, subnetID:p.subnet_id, resourceGroup:p.resource_group_id, }); })); - src/tools/kubernetes/index.ts:18-23 (schema)The schema/input parameter definitions for ks_create_cluster. Defines the Zod validation schema with required fields (name, datacenter, machine_type) and optional fields (worker_num, kube_version, resource_group_id, provider with enum ['classic','vpc-gen2'], vpc_id, subnet_id).
server.tool("ks_create_cluster", "Create a new Kubernetes cluster", { name: z.string(), datacenter: z.string().describe("Zone e.g. dal10"), machine_type: z.string().describe("Worker machine type"), worker_num: z.number().optional(), kube_version: z.string().optional(), resource_group_id: z.string().optional(), provider: z.enum(["classic","vpc-gen2"]).optional(), vpc_id: z.string().optional(), subnet_id: z.string().optional(), - src/tools/kubernetes/index.ts:18-31 (registration)The tool registration via server.tool() call. The ks_create_cluster tool is registered inside the registerKubernetesTools function (line 7) which is called from src/server.ts line 56. The tool name is 'ks_create_cluster' with description 'Create a new Kubernetes cluster'.
server.tool("ks_create_cluster", "Create a new Kubernetes cluster", { name: z.string(), datacenter: z.string().describe("Zone e.g. dal10"), machine_type: z.string().describe("Worker machine type"), worker_num: z.number().optional(), kube_version: z.string().optional(), resource_group_id: z.string().optional(), provider: z.enum(["classic","vpc-gen2"]).optional(), vpc_id: z.string().optional(), subnet_id: z.string().optional(), }, async (p) => safeTool(async () => { w(); return client.post(`${base}/v2/createCluster`, { name:p.name, dataCenter:p.datacenter, machineType:p.machine_type, workerNum:p.worker_num||1, kubeVersion:p.kube_version, provider:p.provider||"vpc-gen2", vpcID:p.vpc_id, subnetID:p.subnet_id, resourceGroup:p.resource_group_id, }); })); - src/lib/utils.ts:70-77 (helper)The safeTool helper function wraps the handler to catch errors and return proper MCP text content responses (success or error). Also, assertWriteAllowed (line 14-18) is called as w() inside the handler to enforce read-only mode when writes are disabled.
export async function safeTool<T>(fn: () => Promise<T>): Promise<ReturnType<typeof successContent> | ReturnType<typeof errorContent>> { try { const result = await fn(); return successContent(result); } catch (error) { return errorContent(error); } } - src/config.ts:26-37 (helper)The KUBERNETES endpoint constant used by the tool. The base URL is 'https://containers.cloud.ibm.com/global', and the tool appends '/v2/createCluster' to it.
export const IBM_ENDPOINTS = { IAM: "https://iam.cloud.ibm.com", IAM_IDENTITY: "https://iam.cloud.ibm.com/v1", IAM_ACCESS_GROUPS: "https://iam.cloud.ibm.com/v2", IAM_POLICY: "https://iam.cloud.ibm.com/v1", USER_MANAGEMENT: (accountId: string) => `https://user-management.cloud.ibm.com/v2/accounts/${accountId}`, VPC: (region: string) => `https://${region}.iaas.cloud.ibm.com/v1`, KUBERNETES: "https://containers.cloud.ibm.com/global",