@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
JavaScript
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