create-pod
Deploy GPU-accelerated containers on RunPod by specifying Docker images, GPU configurations, storage, ports, and environment variables for scalable compute workloads.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Name for the pod | |
| imageName | Yes | Docker image to use | |
| cloudType | No | SECURE or COMMUNITY cloud | |
| gpuTypeIds | No | List of acceptable GPU types | |
| gpuCount | No | Number of GPUs | |
| containerDiskInGb | No | Container disk size in GB | |
| volumeInGb | No | Volume size in GB | |
| volumeMountPath | No | Path to mount the volume | |
| ports | No | Ports to expose (e.g., '8888/http', '22/tcp') | |
| env | No | Environment variables | |
| dataCenterIds | No | List of data centers |
Implementation Reference
- src/index.ts:209-221 (handler)The handler function for the 'create-pod' tool. It makes a POST request to the RunPod API '/pods' endpoint using the provided parameters and returns the JSON response formatted as MCP content.async (params) => { const result = await runpodRequest('/pods', 'POST', params); return { content: [ { type: 'text', text: JSON.stringify(result, null, 2), }, ], }; } );
- src/index.ts:181-208 (schema)Zod schema defining the input parameters for the 'create-pod' tool, including required fields like imageName and optional fields like gpuTypeIds, ports, env, etc.{ name: z.string().optional().describe('Name for the pod'), imageName: z.string().describe('Docker image to use'), cloudType: z .enum(['SECURE', 'COMMUNITY']) .optional() .describe('SECURE or COMMUNITY cloud'), gpuTypeIds: z .array(z.string()) .optional() .describe('List of acceptable GPU types'), gpuCount: z.number().optional().describe('Number of GPUs'), containerDiskInGb: z .number() .optional() .describe('Container disk size in GB'), volumeInGb: z.number().optional().describe('Volume size in GB'), volumeMountPath: z.string().optional().describe('Path to mount the volume'), ports: z .array(z.string()) .optional() .describe("Ports to expose (e.g., '8888/http', '22/tcp')"), env: z.record(z.string()).optional().describe('Environment variables'), dataCenterIds: z .array(z.string()) .optional() .describe('List of data centers'), },
- src/index.ts:179-221 (registration)The registration of the 'create-pod' tool using server.tool(), which includes the tool name, input schema, and inline handler function.server.tool( 'create-pod', { name: z.string().optional().describe('Name for the pod'), imageName: z.string().describe('Docker image to use'), cloudType: z .enum(['SECURE', 'COMMUNITY']) .optional() .describe('SECURE or COMMUNITY cloud'), gpuTypeIds: z .array(z.string()) .optional() .describe('List of acceptable GPU types'), gpuCount: z.number().optional().describe('Number of GPUs'), containerDiskInGb: z .number() .optional() .describe('Container disk size in GB'), volumeInGb: z.number().optional().describe('Volume size in GB'), volumeMountPath: z.string().optional().describe('Path to mount the volume'), ports: z .array(z.string()) .optional() .describe("Ports to expose (e.g., '8888/http', '22/tcp')"), env: z.record(z.string()).optional().describe('Environment variables'), dataCenterIds: z .array(z.string()) .optional() .describe('List of data centers'), }, async (params) => { const result = await runpodRequest('/pods', 'POST', params); return { content: [ { type: 'text', text: JSON.stringify(result, null, 2), }, ], }; } );
- src/index.ts:27-66 (helper)Helper function runpodRequest that performs authenticated API requests to RunPod, used by the create-pod handler and other tools.async function runpodRequest( endpoint: string, method: string = 'GET', body?: Record<string, unknown> ) { const url = `${API_BASE_URL}${endpoint}`; const headers = { Authorization: `Bearer ${API_KEY}`, 'Content-Type': 'application/json', }; const options: NodeFetchRequestInit = { 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(`RunPod 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 RunPod API:', error); throw error; } }