UNPKG

@dondonudonjp/vertexai-imagen-mcp-server

Version:

[DEPRECATED] MCP Server for Vertex AI Imagen image generation. Imagen endpoints shut down 2026-06-30; migrate to the nanoBanana MCP Server (Gemini image models).

60 lines 2.33 kB
import fs from 'fs/promises'; import path from 'path'; import { getDefaultOutputDirectory, validatePathWithinBase } from '../utils/path.js'; export async function listGeneratedImages(_context, args) { const defaultDir = getDefaultOutputDirectory(); // Resolve target directory (default to base directory) let targetDir; if (args.directory) { // If directory is specified, resolve it relative to default directory targetDir = path.isAbsolute(args.directory) ? args.directory : path.join(defaultDir, args.directory); } else { // Default to base directory targetDir = defaultDir; } // Security: Validate path is within base directory (prevent path traversal) validatePathWithinBase(targetDir, defaultDir); try { const files = await fs.readdir(targetDir); const imageExtensions = ['.png', '.jpg', '.jpeg', '.gif', '.webp']; const imageFiles = files.filter((file) => imageExtensions.some((ext) => file.toLowerCase().endsWith(ext))); if (imageFiles.length === 0) { return { content: [ { type: 'text', text: `No image files found in directory: ${targetDir}`, }, ], }; } const fileDetails = await Promise.all(imageFiles.map(async (file) => { const filePath = path.join(targetDir, file); const stats = await fs.stat(filePath); return { name: file, path: path.resolve(filePath), size: stats.size, modified: stats.mtime.toISOString(), }; })); const fileList = fileDetails .map((file) => `• ${file.name} (${file.size} bytes, modified: ${file.modified})`) .join('\n'); return { content: [ { type: 'text', text: `Found ${imageFiles.length} image file(s) in ${targetDir}:\n\n${fileList}`, }, ], }; } catch (error) { throw new Error(`Failed to list images: ${error instanceof Error ? error.message : String(error)}`); } } //# sourceMappingURL=listGeneratedImages.js.map