Skip to main content
Glama

comfy_wait_for_completion

Monitor ComfyUI image generation progress and retrieve final outputs. This tool blocks execution until workflows complete or fail, returning image paths for synchronous processing.

Instructions

Block until a generation completes or fails. Returns final outputs with image paths. Useful for synchronous workflows.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
prompt_idYes
timeoutNo
poll_intervalNo

Implementation Reference

  • The core handler function for 'comfy_wait_for_completion'. Polls ComfyUI's history for the specified prompt_id until completion or timeout, then extracts and returns image output paths.
    export async function handleWaitForCompletion(input: WaitForCompletionInput) { try { const client = getComfyUIClient(); const config = getConfig(); const pollInterval = input.poll_interval || config.comfyui.poll_interval; const timeout = input.timeout || config.comfyui.timeout; const startTime = Date.now(); // Poll for completion while (true) { const elapsed = (Date.now() - startTime) / 1000; if (elapsed > timeout) { return { content: [{ type: "text", text: JSON.stringify({ prompt_id: input.prompt_id, status: "timeout", execution_time: elapsed, message: `Timeout after ${timeout} seconds` }, null, 2) }] }; } // Check history const history = await client.getHistory(input.prompt_id); if (history[input.prompt_id]) { // Completed const historyItem = history[input.prompt_id]; const outputs: any[] = []; if (historyItem.outputs) { for (const [nodeId, output] of Object.entries(historyItem.outputs)) { if (output.images) { const imagePaths = output.images.map((img: any) => client.getOutputPath(img.filename) ); outputs.push({ images: imagePaths, node_id: nodeId, filename: output.images.map((img: any) => img.filename).join(', ') }); } } } return { content: [{ type: "text", text: JSON.stringify({ prompt_id: input.prompt_id, status: "completed", outputs, execution_time: elapsed }, null, 2) }] }; } // Wait before next poll await new Promise(resolve => setTimeout(resolve, pollInterval * 1000)); } } catch (error: any) { if (error.error) { return { content: [{ type: "text", text: JSON.stringify(error, null, 2) }], isError: true }; } return { content: [{ type: "text", text: JSON.stringify(ComfyUIErrorBuilder.executionError(error.message), null, 2) }], isError: true }; } }
  • Zod schema defining the input parameters for the tool: prompt_id (required string), timeout (optional number, default 300s), poll_interval (optional number, default 2s).
    // Wait for Completion Tool export const WaitForCompletionSchema = z.object({ prompt_id: z.string(), timeout: z.number().optional().default(300), poll_interval: z.number().optional().default(2) });
  • src/server.ts:82-86 (registration)
    Tool registration in the MCP server's listTools handler, specifying name, description, and input schema.
    { name: 'comfy_wait_for_completion', description: 'Block until a generation completes or fails. Returns final outputs with image paths. Useful for synchronous workflows.', inputSchema: zodToJsonSchema(WaitForCompletionSchema) as any, },
  • src/server.ts:158-159 (registration)
    Dispatch case in the CallToolRequest handler that routes calls to the implementation.
    case 'comfy_wait_for_completion': return await handleWaitForCompletion(args as any);

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Nikolaibibo/claude-comfyui-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server