Image Generation MCP Server

import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"; import { z } from "zod"; import { ImageGenerationService } from './imageService.js'; import dotenv from 'dotenv'; import { promises as fs } from 'fs'; // Load environment variables dotenv.config(); const imageService = new ImageGenerationService(); const server = new McpServer({ name: "image-generator", version: "1.0.0" }); // Register the image generation tool server.tool( "generate-image", "Generate an image based on a prompt", { prompt: z.string(), output_dir: z.string().describe("Full absolute path to output directory. For Windows, use double backslashes like 'C:\\\\Users\\\\name\\\\path'. For Unix/Mac use '/path/to/dir'. Always use the proper path otherwise you will get an error."), filename: z.string().optional().describe("Base filename to save the image(s) with"), go_fast: z.boolean().optional(), megapixels: z.enum(["1", "2", "4"]).optional(), num_outputs: z.number().min(1).max(4).optional(), aspect_ratio: z.enum(["1:1", "4:3", "16:9"]).optional(), output_format: z.enum(["webp", "png", "jpeg"]).optional(), output_quality: z.number().min(1).max(100).optional(), num_inference_steps: z.number().min(4).max(20).optional() }, async (params) => { try { const result = await imageService.generateImages(params); return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] }; } catch (error: any) { return { content: [{ type: "text", text: `Error: ${error.message}` }] }; } } ); async function main() { const transport = new StdioServerTransport(); await server.connect(transport); console.error("Image Generation MCP Server running on stdio"); } main().catch(async (error) => { const fs = require('fs').promises; await fs.appendFile('server.log', `${new Date().toISOString()} - ${error.stack || error}\n`); console.error(error); process.exit(1); });