generateImage
Convert text prompts into high-quality images for game and web development projects by specifying output path, size, and quality using OpenAI’s image generation capabilities.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| outputPathAbsolute | Yes | The absolute path where the image should be written out. | |
| prompt | Yes | Text description of the desired image content | |
| quality | No | The quality of the image. | |
| size | No | Size of the generated image |
Implementation Reference
- src/index.ts:33-69 (handler)The handler function for the 'generateImage' tool. It uses OpenAI's images.generate API to create an image from the prompt, decodes the base64 response, writes it to the specified output path, and returns a success message.async ({ prompt, size = "1024x1024", quality="low", outputPathAbsolute}) => { try { const response = await openai.images.generate({ model: "gpt-image-1", prompt, n: 1, size: size, quality: quality, }); if (!response.data) { throw new Error(`API did not return any data.`); } if (!response.data[0]?.b64_json) { throw new Error('API did not return image data'); } const imageData = response.data[0].b64_json; const bytes = Buffer.from(imageData, 'base64'); writeFileSync(outputPathAbsolute, bytes) return { content: [ { type: 'text', text: `The image is now available at ${outputPathAbsolute}.` } ], message: "Image generated successfully!" }; } catch (error) { throw new Error(`Error generating image: ${JSON.stringify(error, null, 2)}`, {cause: error}); } } );
- src/index.ts:27-32 (schema)Zod schema defining the input parameters for the 'generateImage' tool: outputPathAbsolute (required), prompt (required), quality (optional), size (optional).{ outputPathAbsolute: z.string().describe('The absolute path where the image should be written out.'), prompt: z.string().describe("Text description of the desired image content"), quality: z.enum(["auto", "low", "medium", "high"]).optional().describe("The quality of the image."), size: z.enum(['1024x1024', '1024x1536', '1536x1024', 'auto']).optional().describe("Size of the generated image"), },
- src/index.ts:25-70 (registration)Registration of the 'generateImage' tool on the MCP server using server.tool(), including schema and inline handler.server.tool( 'generateImage', { outputPathAbsolute: z.string().describe('The absolute path where the image should be written out.'), prompt: z.string().describe("Text description of the desired image content"), quality: z.enum(["auto", "low", "medium", "high"]).optional().describe("The quality of the image."), size: z.enum(['1024x1024', '1024x1536', '1536x1024', 'auto']).optional().describe("Size of the generated image"), }, async ({ prompt, size = "1024x1024", quality="low", outputPathAbsolute}) => { try { const response = await openai.images.generate({ model: "gpt-image-1", prompt, n: 1, size: size, quality: quality, }); if (!response.data) { throw new Error(`API did not return any data.`); } if (!response.data[0]?.b64_json) { throw new Error('API did not return image data'); } const imageData = response.data[0].b64_json; const bytes = Buffer.from(imageData, 'base64'); writeFileSync(outputPathAbsolute, bytes) return { content: [ { type: 'text', text: `The image is now available at ${outputPathAbsolute}.` } ], message: "Image generated successfully!" }; } catch (error) { throw new Error(`Error generating image: ${JSON.stringify(error, null, 2)}`, {cause: error}); } } );