generateImage
Generate images from text descriptions. Provide a prompt, choose size and quality, and set an absolute output path to create custom image assets for game and web development projects.
Input 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:25-69 (registration)The tool 'generateImage' is registered via server.tool() on the McpServer instance. This is the registration point that binds the name, schema, and handler together.
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}); } } ); - src/index.ts:27-32 (schema)Zod schema definitions for the 'generateImage' tool inputs: outputPathAbsolute (string), prompt (string), quality (enum: auto/low/medium/high, optional), size (enum: 1024x1024/1024x1536/1536x1024/auto, 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:33-68 (handler)The async handler function that executes the tool logic. It calls OpenAI's images.generate API with the gpt-image-1 model, receives base64 image data, 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}); } }