Skip to main content
Glama

webdav_get_directory_tree

Generate a recursive JSON tree structure of files and directories from a WebDAV server, with optional pattern-based exclusions for focused directory analysis.

Instructions

Get a recursive tree view of files and directories as a JSON structure

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
excludePatternsNoArray of glob patterns to exclude from the tree
pathNoRoot directory for the tree/

Implementation Reference

  • Registration of the webdav_get_directory_tree tool, including input schema (path and excludePatterns), description, and inline handler that calls the service method and returns JSON response or error.
    server.tool( "webdav_get_directory_tree", "Get a recursive tree view of files and directories as a JSON structure", { path: z.string().optional().default("/").describe( "Root directory for the tree", ), excludePatterns: z.array(z.string()).optional().default([]).describe( "Array of glob patterns to exclude from the tree", ), }, async ({ path, excludePatterns }) => { try { const tree = await webdavService.getDirectoryTree( path, excludePatterns, ); return { content: [{ type: "text", text: JSON.stringify(tree, null, 2), }], }; } catch (error) { return { content: [{ type: "text", text: `Error getting directory tree: ${(error as Error).message}`, }], isError: true, }; } }, );
  • Core handler logic in WebDAVService: computes full path, calls recursive tree builder, logs, handles errors and returns the tree structure.
    async getDirectoryTree( path: string = "/", excludePatterns: string[] = [], ): Promise<any> { const fullPath = this.getFullPath(path); logger.debug(`Getting directory tree: ${fullPath}`, { excludePatterns }); try { const tree = await this._buildDirectoryTree( fullPath, path, excludePatterns, ); logger.debug(`Directory tree built: ${fullPath}`); return tree; } catch (error) { logger.error(`Error getting directory tree ${fullPath}:`, error); throw new Error( `Failed to get directory tree: ${(error as Error).message}`, ); } }
  • Recursive helper that lists directory contents, applies exclusion patterns using minimatch, builds tree nodes, and recurses into subdirectories.
    private async _buildDirectoryTree( currentPath: string, basePath: string, excludePatterns: string[], ): Promise<any[]> { try { const items = await this.list(currentPath); const tree: any[] = []; for (const item of items) { const relativePath = item.filename.replace( this.rootPath === "/" ? "" : this.rootPath, "", ); // Check if this item should be excluded const shouldExclude = excludePatterns.some((excludePattern) => minimatch(relativePath, excludePattern, { dot: true }) ); if (shouldExclude) { continue; } const node: any = { name: item.basename, type: item.type, }; if (item.type === "directory") { node.children = await this._buildDirectoryTree( item.filename, basePath, excludePatterns, ); } tree.push(node); } return tree; } catch (error) { logger.warn(`Warning: Could not access directory ${currentPath}:`, error); return []; } }

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/masx200/mcp-webdav-server'

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