Gemini MCP Image Generation Server
by sanxfxteam
Verified
// Import required modules
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
import { GoogleGenerativeAI } from '@google/generative-ai';
import { z } from "zod";
import fs from 'fs';
import dotenv from 'dotenv';
// Load environment variables from .env file
dotenv.config();
// Initialize Gemini API with your API key from environment variables
const genAI = new GoogleGenerativeAI(process.env.GEMINI_API_KEY);
// Create MCP server instance
const server = new McpServer({
name: "ImageGenerationServer",
version: "1.0.0",
description: "Server for generating images using Gemini API with Imagen 3"
});
// Add image generation tool without zod schema
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 }
}
}
);
// Start the server
async function startServer() {
try {
const transport = new StdioServerTransport();
await server.connect(transport);
console.log("MCP Image Generation Server is running...");
console.log("Use the 'generateImage' tool with parameters: prompt, aspectRatio, outputFormat");
} catch (error) {
console.error("Server startup error:", error);
}
}
startServer();
ID: l17qmg4mfs