generate_image
Create custom images via text prompts on the BFL MCP Server using the FLUX.1 Kontext model. Specify aspect ratio, seed, safety tolerance, and output format for tailored results.
Instructions
Generate an image using FLUX.1 Kontext model based on a text prompt
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| aspect_ratio | No | Aspect ratio of the image (e.g., "1:1", "16:9", "9:16") | 1:1 |
| output_format | No | Output image format | jpeg |
| prompt | Yes | Text description of the image to generate | |
| safety_tolerance | No | Safety tolerance level (0-6) | |
| seed | No | Seed for reproducible generation |
Implementation Reference
- src/index.ts:139-156 (handler)MCP tool handler case for 'generate_image': extracts input arguments, calls bflClient.generateImage, and returns the generated image URL in the response.case 'generate_image': { const imageUrl = await bflClient.generateImage({ prompt: args.prompt as string, aspect_ratio: args.aspect_ratio as string | undefined, seed: args.seed as number | undefined, safety_tolerance: args.safety_tolerance as number | undefined, output_format: args.output_format as 'jpeg' | 'png' | undefined, }); return { content: [ { type: 'text', text: `Image generated successfully! URL: ${imageUrl}\n\nNote: The URL is valid for 10 minutes.`, }, ], }; }
- src/types.ts:6-12 (schema)TypeScript interface defining the input parameters for generateImage request.export interface GenerateImageRequest { prompt: string; aspect_ratio?: string; seed?: number; safety_tolerance?: number; output_format?: 'jpeg' | 'png'; }
- src/index.ts:38-72 (registration)Tool registration definition including name, description, and input schema for 'generate_image'.{ name: 'generate_image', description: 'Generate an image using FLUX.1 Kontext model based on a text prompt', inputSchema: { type: 'object', properties: { prompt: { type: 'string', description: 'Text description of the image to generate', }, aspect_ratio: { type: 'string', description: 'Aspect ratio of the image (e.g., "1:1", "16:9", "9:16")', default: '1:1', }, seed: { type: 'number', description: 'Seed for reproducible generation', }, safety_tolerance: { type: 'number', description: 'Safety tolerance level (0-6)', minimum: 0, maximum: 6, }, output_format: { type: 'string', enum: ['jpeg', 'png'], description: 'Output image format', default: 'jpeg', }, }, required: ['prompt'], }, },
- src/bfl-client.ts:101-132 (helper)Core implementation of image generation: submits API request to BFL endpoint and polls for completion using pollForResult.async generateImage(request: GenerateImageRequest): Promise<string> { try { // Step 1: Submit generation request const response = await this.makeRequest('/v1/flux-kontext-pro', { prompt: request.prompt, aspect_ratio: request.aspect_ratio || '1:1', seed: request.seed, safety_tolerance: request.safety_tolerance, output_format: request.output_format || 'jpeg', }); if (!response.id) { throw new Error('No request ID received from BFL API'); } // Log the polling URL if provided if (response.polling_url) { console.log(`[BFL] Using polling URL: ${response.polling_url}`); } // Step 2: Poll for result const result = await this.pollForResult(response.id, response.polling_url); if (!result.result?.sample) { throw new Error('No image URL in response'); } return result.result.sample; } catch (error) { throw new Error(`Image generation failed: ${error instanceof Error ? error.message : 'Unknown error'}`); } }