generateImage
Create custom images using text prompts, customizable aspect ratios, and output formats via the Gemini MCP Image Generation Server to suit your visual content needs.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| aspectRatio | No | ||
| outputFormat | No | ||
| prompt | Yes |
Implementation Reference
- server.js:23-91 (registration)Full registration of the 'generateImage' MCP tool using server.tool(), including input schema, handler function, and tool metadata with parameter descriptions.server.tool( "generateImage", { prompt: z.string(), aspectRatio: z.string().optional(), outputFormat: z.string().optional() }, async (params) => { // Default values const prompt = params.prompt || "Default image prompt"; const aspectRatio = params.aspectRatio || "1:1"; const outputFormat = params.outputFormat || "png"; try { // Initialize the Imagen 3 model const model = genAI.getGenerativeModel({ model: "gemini-2.0-flash-exp-image-generation", generationConfig: { responseModalities: ['Text', 'Image'], }, }); // Generate the image const result = await model.generateContent(prompt); // Extract the generated image data (base64 encoded) for (const part of result.response.candidates[0].content.parts) { // Based on the part type, either show the text or save the image if (part.text) { console.log(part.text); return { content: [{ type: "text", text: part.text }] } } else if (part.inlineData) { const imageData = part.inlineData.data; const buffer = Buffer.from(imageData, 'base64'); fs.writeFileSync('gemini-native-image.png', buffer); console.log('Image saved as gemini-native-image.png'); return { content: [{ type: "image", data: imageData, mimeType: `image/${outputFormat}` }] }; } } } catch (error) { console.error("Image generation error:", error); return { content: [{ type: "text", text: `Error generating image: ${error.message}` }] }; } }, { description: "Generate an image using Gemini API", parameters: { prompt: { type: "string", description: "The text description of the image to generate" }, aspectRatio: { type: "string", description: "Aspect ratio of the image (e.g., '1:1', '16:9')", optional: true }, outputFormat: { type: "string", description: "Output image format ('png' or 'jpeg')", optional: true } } } );
- server.js:30-82 (handler)The handler function for 'generateImage' tool. Uses GoogleGenerativeAI (Gemini model) to generate image from prompt, handles text or image parts in response, saves image to file, and returns MCP-formatted content (text or image).async (params) => { // Default values const prompt = params.prompt || "Default image prompt"; const aspectRatio = params.aspectRatio || "1:1"; const outputFormat = params.outputFormat || "png"; try { // Initialize the Imagen 3 model const model = genAI.getGenerativeModel({ model: "gemini-2.0-flash-exp-image-generation", generationConfig: { responseModalities: ['Text', 'Image'], }, }); // Generate the image const result = await model.generateContent(prompt); // Extract the generated image data (base64 encoded) for (const part of result.response.candidates[0].content.parts) { // Based on the part type, either show the text or save the image if (part.text) { console.log(part.text); return { content: [{ type: "text", text: part.text }] } } else if (part.inlineData) { const imageData = part.inlineData.data; const buffer = Buffer.from(imageData, 'base64'); fs.writeFileSync('gemini-native-image.png', buffer); console.log('Image saved as gemini-native-image.png'); return { content: [{ type: "image", data: imageData, mimeType: `image/${outputFormat}` }] }; } } } catch (error) { console.error("Image generation error:", error); return { content: [{ type: "text", text: `Error generating image: ${error.message}` }] }; } },
- server.js:25-29 (schema)Zod schema for input validation of 'generateImage' tool parameters.{ prompt: z.string(), aspectRatio: z.string().optional(), outputFormat: z.string().optional() },
- server.js:84-89 (schema)Tool metadata including description and JSON schema-like parameter definitions for 'generateImage'.description: "Generate an image using Gemini API", parameters: { prompt: { type: "string", description: "The text description of the image to generate" }, aspectRatio: { type: "string", description: "Aspect ratio of the image (e.g., '1:1', '16:9')", optional: true }, outputFormat: { type: "string", description: "Output image format ('png' or 'jpeg')", optional: true } }