Skip to main content
Glama

folder-structure

Analyze and visualize directory hierarchies to understand project organization and file relationships in codebases.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
pathNoRelative path to the directory.
depthNoDepth of folders to show

Implementation Reference

  • Handler function for the 'folder-structure' tool. Uses the 'find' command to list directories up to the specified depth, filters by depth, and returns a structured JSON response.
    async ({ path, depth }) => { try { const dirPath = resolve(process.cwd(), path); if (!existsSync(dirPath)) { throw new Error(`Directory not found: ${path}`); } const command = `find ${dirPath} -type d | sort | head -n 100 | awk 'BEGIN {FS="/"}{for(i=1;i<=NF;i++){if(i==NF){printf("%s\\n", $i)}else{printf("%s/", $i)}}}'`; let dirs = execSync(command, { encoding: "utf-8" }) .split("\n") .filter(Boolean); // Filter by depth dirs = dirs.filter((dir) => { const segments = dir.split("/"); return segments.length <= depth; }); const result = createSuccessResponse( { path, depth, count: dirs.length, directories: dirs, }, "folder-structure" ); return { content: [ { type: "text", text: JSON.stringify(result, null, 2), }, ], }; } catch (error) { return { content: [ { type: "text", text: JSON.stringify( createErrorResponse( error instanceof Error ? error.message : String(error), "folder-structure" ), null, 2 ), }, ], isError: true, }; } }
  • Input schema for the 'folder-structure' tool using Zod: path (string, default '.'), depth (number, default 2).
    { path: z.string().default(".").describe("Relative path to the directory"), depth: z.number().default(2).describe("Depth of folders to show"), },
  • Registration of the 'folder-structure' tool on the MCP server, including input schema and handler function.
    server.tool( "folder-structure", { path: z.string().default(".").describe("Relative path to the directory"), depth: z.number().default(2).describe("Depth of folders to show"), }, async ({ path, depth }) => { try { const dirPath = resolve(process.cwd(), path); if (!existsSync(dirPath)) { throw new Error(`Directory not found: ${path}`); } const command = `find ${dirPath} -type d | sort | head -n 100 | awk 'BEGIN {FS="/"}{for(i=1;i<=NF;i++){if(i==NF){printf("%s\\n", $i)}else{printf("%s/", $i)}}}'`; let dirs = execSync(command, { encoding: "utf-8" }) .split("\n") .filter(Boolean); // Filter by depth dirs = dirs.filter((dir) => { const segments = dir.split("/"); return segments.length <= depth; }); const result = createSuccessResponse( { path, depth, count: dirs.length, directories: dirs, }, "folder-structure" ); return { content: [ { type: "text", text: JSON.stringify(result, null, 2), }, ], }; } catch (error) { return { content: [ { type: "text", text: JSON.stringify( createErrorResponse( error instanceof Error ? error.message : String(error), "folder-structure" ), null, 2 ), }, ], isError: true, }; } } );

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/0xjcf/MCP_CodeAnalysis'

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