update-endpoint
Modify a RunPod API endpoint's configuration, including worker scaling, idle timeout, and name settings.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| endpointId | Yes | ID of the endpoint to update | |
| name | No | New name for the endpoint | |
| workersMin | No | New minimum number of workers | |
| workersMax | No | New maximum number of workers | |
| idleTimeout | No | New idle timeout in seconds | |
| scalerType | No | Scaler type | |
| scalerValue | No | Scaler value |
Implementation Reference
- src/index.ts:449-466 (handler)The handler function that executes the tool logic: destructures endpointId from params, makes a PATCH request to RunPod API endpoint `/endpoints/${endpointId}` using the helper runpodRequest, and returns the result as formatted text content.async (params) => { const { endpointId, ...updateParams } = params; const result = await runpodRequest( `/endpoints/${endpointId}`, 'PATCH', updateParams ); return { content: [ { type: 'text', text: JSON.stringify(result, null, 2), }, ], }; } );
- src/index.ts:437-448 (schema)Zod schema defining the input parameters and their descriptions for the update-endpoint tool.{ endpointId: z.string().describe('ID of the endpoint to update'), name: z.string().optional().describe('New name for the endpoint'), workersMin: z.number().optional().describe('New minimum number of workers'), workersMax: z.number().optional().describe('New maximum number of workers'), idleTimeout: z.number().optional().describe('New idle timeout in seconds'), scalerType: z .enum(['QUEUE_DELAY', 'REQUEST_COUNT']) .optional() .describe('Scaler type'), scalerValue: z.number().optional().describe('Scaler value'), },
- src/index.ts:435-466 (registration)Registration of the 'update-endpoint' tool on the MCP server using server.tool(name, inputSchema, handlerFunction).server.tool( 'update-endpoint', { endpointId: z.string().describe('ID of the endpoint to update'), name: z.string().optional().describe('New name for the endpoint'), workersMin: z.number().optional().describe('New minimum number of workers'), workersMax: z.number().optional().describe('New maximum number of workers'), idleTimeout: z.number().optional().describe('New idle timeout in seconds'), scalerType: z .enum(['QUEUE_DELAY', 'REQUEST_COUNT']) .optional() .describe('Scaler type'), scalerValue: z.number().optional().describe('Scaler value'), }, async (params) => { const { endpointId, ...updateParams } = params; const result = await runpodRequest( `/endpoints/${endpointId}`, 'PATCH', updateParams ); return { content: [ { type: 'text', text: JSON.stringify(result, null, 2), }, ], }; } );
- src/index.ts:27-66 (helper)Shared helper function that makes authenticated HTTP requests to the RunPod API, used by the update-endpoint 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; } }