create-network-storage
Create network storage for Novita AI GPU clusters to expand storage capacity. Specify cluster ID, storage name, and size in GB to provision additional storage resources.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| clusterId | Yes | The ID of the cluster to create network storage. Must be from the `list-clusters` tool result, and the cluster must have supportNetworkStorage set to true | |
| storageName | Yes | Name for the network storage. Use only letters, numbers, and hyphens | |
| storageSize | Yes | Size of the network storage in GB |
Implementation Reference
- src/tools.ts:517-527 (handler)Handler function that performs the actual work of creating network storage by sending a POST request to the Novita AI API /networkstorage/create endpoint and formatting the response.
}, async (params) => { const result = await novitaRequest("/networkstorage/create", "POST", params); return { content: [ { type: "text", text: JSON.stringify(result, null, 2), }, ], }; }); - src/tools.ts:505-516 (schema)Zod schema defining the input parameters for the create-network-storage tool: clusterId (string), storageName (nonempty trimmed string), storageSize (number >=10).
clusterId: z .string() .describe("The ID of the cluster to create network storage. Must be from the `list-clusters` tool result, and the cluster must have supportNetworkStorage set to true"), storageName: z .string() .nonempty() .trim() .describe("Name for the network storage. Use only letters, numbers, and hyphens"), storageSize: z .number() .min(10) .describe("Size of the network storage in GB"), - src/tools.ts:504-527 (registration)Registration of the create-network-storage tool using server.tool(), including the input schema and inline handler function.
server.tool("create-network-storage", { clusterId: z .string() .describe("The ID of the cluster to create network storage. Must be from the `list-clusters` tool result, and the cluster must have supportNetworkStorage set to true"), storageName: z .string() .nonempty() .trim() .describe("Name for the network storage. Use only letters, numbers, and hyphens"), storageSize: z .number() .min(10) .describe("Size of the network storage in GB"), }, async (params) => { const result = await novitaRequest("/networkstorage/create", "POST", params); return { content: [ { type: "text", text: JSON.stringify(result, null, 2), }, ], }; }); - src/utils.ts:15-55 (helper)Utility function novitaRequest used in the handler to make authenticated HTTP requests to the Novita AI API endpoints.
export async function novitaRequest( endpoint: string, method: string = "GET", body: any = null ) { // Base URL for Novita AI API const API_BASE_URL = "https://api.novita.ai/gpu-instance/openapi/v1"; // Get API key from environment variable const API_KEY = process.env.NOVITA_API_KEY; const url = `${API_BASE_URL}${endpoint}`; const headers = { Authorization: `Bearer ${API_KEY}`, "Content-Type": "application/json", }; const options: any = { method, headers, }; if (body && (method === "POST" || method === "PATCH")) { options.body = JSON.stringify(body); } try { const response = await fetch(url, options); if (!response.ok) { const errorText = await response.text(); throw new Error(`Novita AI API Error: ${response.status} - ${errorText}`); } // Some endpoints might not return JSON const contentType = response.headers.get("content-type"); if (contentType && contentType.includes("application/json")) { return await response.json(); } return { success: true, status: response.status }; } catch (error) { console.error("Error calling Novita AI API:", error); throw error; } }