list-pods
Retrieve and filter your RunPod compute instances by GPU type, data center, name, and other parameters to manage cloud resources.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| computeType | No | Filter to only GPU or only CPU Pods | |
| gpuTypeId | No | Filter to Pods with any of the listed GPU types | |
| dataCenterId | No | Filter to Pods in any of the provided data centers | |
| name | No | Filter to Pods with the provided name | |
| includeMachine | No | Include information about the machine | |
| includeNetworkVolume | No | Include information about attached network volumes |
Implementation Reference
- src/index.ts:99-133 (handler)The async handler function for the 'list-pods' tool. It constructs URL query parameters from the input params and makes an API request to RunPod's /pods endpoint using the runpodRequest helper, then returns the JSON response as text content.async (params) => { // Construct query parameters const queryParams = new URLSearchParams(); if (params.computeType) queryParams.append('computeType', params.computeType); if (params.gpuTypeId) params.gpuTypeId.forEach((type) => queryParams.append('gpuTypeId', type)); if (params.dataCenterId) params.dataCenterId.forEach((dc) => queryParams.append('dataCenterId', dc) ); if (params.name) queryParams.append('name', params.name); if (params.includeMachine) queryParams.append('includeMachine', params.includeMachine.toString()); if (params.includeNetworkVolume) queryParams.append( 'includeNetworkVolume', params.includeNetworkVolume.toString() ); const queryString = queryParams.toString() ? `?${queryParams.toString()}` : ''; const result = await runpodRequest(`/pods${queryString}`); return { content: [ { type: 'text', text: JSON.stringify(result, null, 2), }, ], }; }
- src/index.ts:73-98 (schema)Zod input schema defining optional parameters for filtering and including details in the pod list: computeType, gpuTypeId, dataCenterId, name, includeMachine, includeNetworkVolume.{ computeType: z .enum(['GPU', 'CPU']) .optional() .describe('Filter to only GPU or only CPU Pods'), gpuTypeId: z .array(z.string()) .optional() .describe('Filter to Pods with any of the listed GPU types'), dataCenterId: z .array(z.string()) .optional() .describe('Filter to Pods in any of the provided data centers'), name: z .string() .optional() .describe('Filter to Pods with the provided name'), includeMachine: z .boolean() .optional() .describe('Include information about the machine'), includeNetworkVolume: z .boolean() .optional() .describe('Include information about attached network volumes'), },
- src/index.ts:71-134 (registration)Registration of the 'list-pods' MCP tool on the McpServer instance, providing the tool name, input schema, and handler function.server.tool( 'list-pods', { computeType: z .enum(['GPU', 'CPU']) .optional() .describe('Filter to only GPU or only CPU Pods'), gpuTypeId: z .array(z.string()) .optional() .describe('Filter to Pods with any of the listed GPU types'), dataCenterId: z .array(z.string()) .optional() .describe('Filter to Pods in any of the provided data centers'), name: z .string() .optional() .describe('Filter to Pods with the provided name'), includeMachine: z .boolean() .optional() .describe('Include information about the machine'), includeNetworkVolume: z .boolean() .optional() .describe('Include information about attached network volumes'), }, async (params) => { // Construct query parameters const queryParams = new URLSearchParams(); if (params.computeType) queryParams.append('computeType', params.computeType); if (params.gpuTypeId) params.gpuTypeId.forEach((type) => queryParams.append('gpuTypeId', type)); if (params.dataCenterId) params.dataCenterId.forEach((dc) => queryParams.append('dataCenterId', dc) ); if (params.name) queryParams.append('name', params.name); if (params.includeMachine) queryParams.append('includeMachine', params.includeMachine.toString()); if (params.includeNetworkVolume) queryParams.append( 'includeNetworkVolume', params.includeNetworkVolume.toString() ); const queryString = queryParams.toString() ? `?${queryParams.toString()}` : ''; const result = await runpodRequest(`/pods${queryString}`); return { content: [ { type: 'text', text: JSON.stringify(result, null, 2), }, ], }; } );
- src/index.ts:27-66 (helper)Reusable helper function for making authenticated HTTP requests to the RunPod API, used by the 'list-pods' 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; } }