mcp_imagen_generate
Generate high-quality images from English text prompts using the Google Imagen 3 model. Supports photorealistic, artistic, and specific style outputs, with SynthID watermarking included. Ideal for creating custom visuals with controlled aspects like ratios and person generation.
Instructions
Google Imagen 3 모델을 사용하여 텍스트 프롬프트에서 고품질 이미지를 생성합니다. Imagen 3은 포토리얼리즘, 예술적 디테일, 특정 예술 스타일(인상주의, 애니메이션 등)에 탁월합니다. 생성된 이미지에는 항상 SynthID 워터마크가 포함됩니다. 현재 영어 프롬프트만 지원됩니다.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| aspectRatio | No | 이미지 가로세로 비율 | 1:1 |
| fileName | No | 저장할 이미지 파일 이름 (확장자 제외) | |
| model | No | 사용할 Imagen 모델 ID (예: imagen-3.0-generate-002) | imagen-3.0-generate-002 |
| numberOfImages | No | 생성할 이미지 수 (1-4) | |
| personGeneration | No | 사람 이미지 생성 허용 여부 (DONT_ALLOW: 사람 이미지 생성 차단, ALLOW_ADULT: 성인 이미지만 생성 허용) | ALLOW_ADULT |
| prompt | Yes | 이미지 생성을 위한 텍스트 프롬프트. 영어로 작성하세요. | |
| saveDir | No | 이미지를 저장할 디렉토리 | ./temp |
Implementation Reference
- src/tools/index.ts:1395-1422 (handler)Handler function for the 'mcp_imagen_generate' tool. Validates that an Imagen model is used and delegates image generation to geminiService.generateImage, returning the result as JSON.
async handler(args: any): Promise<ToolResponse> { try { // generateImage 메서드를 사용하지만, Imagen 모델로 고정 const modelName = args.model || 'imagen-3.0-generate-002'; if (!modelName.includes('imagen')) { throw new Error('이 도구는 Imagen 모델만 지원합니다. 모델 이름에 "imagen"이 포함되어야 합니다.'); } const result = await geminiService.generateImage({ ...args, model: modelName }); return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }; } catch (error) { return { content: [{ type: 'text', text: `Imagen 이미지 생성 오류: ${error instanceof Error ? error.message : String(error)}` }] }; } } - src/tools/index.ts:1352-1393 (schema)Input schema for 'mcp_imagen_generate' defining parameters like prompt, model, numberOfImages, aspectRatio, etc.
inputSchema: { type: 'object', properties: { model: { type: 'string', description: '사용할 Imagen 모델 ID (예: imagen-3.0-generate-002)', default: 'imagen-3.0-generate-002', }, prompt: { type: 'string', description: '이미지 생성을 위한 텍스트 프롬프트. 영어로 작성하세요.', }, numberOfImages: { type: 'number', description: '생성할 이미지 수 (1-4)', default: 1, minimum: 1, maximum: 4, }, aspectRatio: { type: 'string', description: '이미지 가로세로 비율', default: '1:1', enum: ['1:1', '3:4', '4:3', '9:16', '16:9'] }, personGeneration: { type: 'string', description: '사람 이미지 생성 허용 여부 (DONT_ALLOW: 사람 이미지 생성 차단, ALLOW_ADULT: 성인 이미지만 생성 허용)', default: 'ALLOW_ADULT', enum: ['DONT_ALLOW', 'ALLOW_ADULT'] }, saveDir: { type: 'string', description: '이미지를 저장할 디렉토리', default: './temp', }, fileName: { type: 'string', description: '저장할 이미지 파일 이름 (확장자 제외)', } }, required: ['prompt'] - src/index.ts:51-51 (registration)Tool capability registration in MCP server capabilities object (disabled with false).
mcp_imagen_generate: false, - Core helper function generateImageWithImagen that makes the actual API call to Google Imagen for image generation and saves the images to disk.
private async generateImageWithImagen({ model, prompt, numberOfImages = 1, aspectRatio = '1:1', personGeneration = 'ALLOW_ADULT', saveDir = './temp', fileName = `imagen-${Date.now()}`, }: { model: string; prompt: string; numberOfImages?: number; aspectRatio?: string; personGeneration?: string; saveDir?: string; fileName?: string; }) { const config = this.getRequestConfig(); const url = `${this.baseUrl}/models/${model}:generateImages`; const response = await axios.post( url, { prompt, config: { numberOfImages, aspectRatio, personGeneration } }, config ); // 이미지 응답 처리 const generatedImages = response.data.generatedImages || []; const savedFiles = []; const fs = await import('fs'); const path = await import('path'); // 저장 디렉토리가 없으면 생성 if (!fs.existsSync(saveDir)) { fs.mkdirSync(saveDir, { recursive: true }); } // 이미지 저장 for (let i = 0; i < generatedImages.length; i++) { const imageData = generatedImages[i]?.image?.imageBytes; if (imageData) { const buffer = Buffer.from(imageData, 'base64'); const filePath = path.join(saveDir, `${fileName}-${i + 1}.png`); fs.writeFileSync(filePath, buffer); savedFiles.push(filePath); } } return { model: model, prompt: prompt, images: savedFiles, count: savedFiles.length, text: [], }; } - src/tools/index.ts:1349-1423 (registration)Full tool registration object for 'mcp_imagen_generate' in the exported tools array.
{ name: 'mcp_imagen_generate', description: 'Google Imagen 3 모델을 사용하여 텍스트 프롬프트에서 고품질 이미지를 생성합니다. Imagen 3은 포토리얼리즘, 예술적 디테일, 특정 예술 스타일(인상주의, 애니메이션 등)에 탁월합니다. 생성된 이미지에는 항상 SynthID 워터마크가 포함됩니다. 현재 영어 프롬프트만 지원됩니다.', inputSchema: { type: 'object', properties: { model: { type: 'string', description: '사용할 Imagen 모델 ID (예: imagen-3.0-generate-002)', default: 'imagen-3.0-generate-002', }, prompt: { type: 'string', description: '이미지 생성을 위한 텍스트 프롬프트. 영어로 작성하세요.', }, numberOfImages: { type: 'number', description: '생성할 이미지 수 (1-4)', default: 1, minimum: 1, maximum: 4, }, aspectRatio: { type: 'string', description: '이미지 가로세로 비율', default: '1:1', enum: ['1:1', '3:4', '4:3', '9:16', '16:9'] }, personGeneration: { type: 'string', description: '사람 이미지 생성 허용 여부 (DONT_ALLOW: 사람 이미지 생성 차단, ALLOW_ADULT: 성인 이미지만 생성 허용)', default: 'ALLOW_ADULT', enum: ['DONT_ALLOW', 'ALLOW_ADULT'] }, saveDir: { type: 'string', description: '이미지를 저장할 디렉토리', default: './temp', }, fileName: { type: 'string', description: '저장할 이미지 파일 이름 (확장자 제외)', } }, required: ['prompt'] }, async handler(args: any): Promise<ToolResponse> { try { // generateImage 메서드를 사용하지만, Imagen 모델로 고정 const modelName = args.model || 'imagen-3.0-generate-002'; if (!modelName.includes('imagen')) { throw new Error('이 도구는 Imagen 모델만 지원합니다. 모델 이름에 "imagen"이 포함되어야 합니다.'); } const result = await geminiService.generateImage({ ...args, model: modelName }); return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }; } catch (error) { return { content: [{ type: 'text', text: `Imagen 이미지 생성 오류: ${error instanceof Error ? error.message : String(error)}` }] }; } } },