Skip to main content
Glama

scan_directory

Scan a directory to find images and extract their metadata, supporting recursive subdirectory searches for comprehensive file analysis.

Instructions

Scan a directory for images and return metadata

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
directoryYesDirectory path to scan for images
recursiveNoWhether to scan subdirectories recursively

Implementation Reference

  • The execution logic for the scan_directory tool. It validates input, scans the directory (recursively if specified), filters for supported image formats, retrieves metadata for each image using getImageMetadata, and returns a text content block with a JSON summary of found images.
    case "scan_directory": { const { directory, recursive = false } = request.params.arguments as { directory: string, recursive?: boolean }; if (!directory) { throw new McpError(ErrorCode.InvalidParams, "Directory path is required"); } if (!fs.existsSync(directory)) { throw new McpError(ErrorCode.InvalidRequest, `Directory not found: ${directory}`); } try { // Function to scan directory recursively async function scanDir(dir: string, results: ImageMetadata[] = []): Promise<ImageMetadata[]> { // Use fs instead of fsExtra for readdir const entries = await fs.promises.readdir(dir, { withFileTypes: true }); for (const entry of entries) { const fullPath = path.join(dir, entry.name); if (entry.isDirectory() && recursive) { await scanDir(fullPath, results); } else if (entry.isFile()) { const ext = path.extname(entry.name).toLowerCase(); if (SUPPORTED_FORMATS.includes(ext)) { try { const metadata = await getImageMetadata(fullPath); results.push(metadata); } catch (error) { console.error(`Error processing ${fullPath}:`, error); } } } } return results; } const images = await scanDir(directory); return { content: [ { type: "text", text: `Found ${images.length} images in ${directory}${recursive ? ' (including subdirectories)' : ''}:\n\n` + JSON.stringify(images.map(img => ({ filename: img.filename, path: img.path, format: img.format, dimensions: `${img.width}x${img.height}`, size: `${(img.size / 1024).toFixed(2)} KB` })), null, 2) } ] }; } catch (error) { return { content: [ { type: "text", text: `Error scanning directory: ${error instanceof Error ? error.message : String(error)}` } ], isError: true }; } }
  • src/index.ts:309-326 (registration)
    Registration of the scan_directory tool in the ListToolsRequestSchema handler, including its name, description, and input schema.
    { name: "scan_directory", description: "Scan a directory for images and return metadata", inputSchema: { type: "object", properties: { directory: { type: "string", description: "Directory path to scan for images" }, recursive: { type: "boolean", description: "Whether to scan subdirectories recursively" } }, required: ["directory"] } }
  • Input schema definition for the scan_directory tool, specifying directory (required) and optional recursive flag.
    inputSchema: { type: "object", properties: { directory: { type: "string", description: "Directory path to scan for images" }, recursive: { type: "boolean", description: "Whether to scan subdirectories recursively" } }, required: ["directory"]

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/rupeedev/mcp-image-reader'

If you have feedback or need assistance with the MCP directory API, please join our Discord server