Skip to main content
Glama
pdogra1299
by pdogra1299

list_directory_content

Access and display files and directories within a specified repository path on Bitbucket, enabling easy navigation and management of repository content.

Instructions

List files and directories in a repository path

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
branchNoBranch name (optional, defaults to default branch)
pathNoDirectory path (optional, defaults to root, e.g., "src/components")
repositoryYesRepository slug (e.g., "my-repo")
workspaceYesBitbucket workspace/project key (e.g., "PROJ")

Implementation Reference

  • The core handler function that implements the list_directory_content tool. It validates arguments, queries the Bitbucket API (supporting both Cloud and Server), processes the directory listing, and returns a formatted JSON response with file/directory details.
    async handleListDirectoryContent(args: any) {
      if (!isListDirectoryContentArgs(args)) {
        throw new McpError(
          ErrorCode.InvalidParams,
          'Invalid arguments for list_directory_content'
        );
      }
    
      const { workspace, repository, path: dirPath = '', branch } = args;
    
      try {
        let apiPath: string;
        let params: any = {};
        let response: any;
    
        if (this.apiClient.getIsServer()) {
          // Bitbucket Server API
          apiPath = `/rest/api/1.0/projects/${workspace}/repos/${repository}/browse`;
          if (dirPath) {
            apiPath += `/${dirPath}`;
          }
          if (branch) {
            params.at = `refs/heads/${branch}`;
          }
          
          response = await this.apiClient.makeRequest<any>('get', apiPath, undefined, { params });
        } else {
          // Bitbucket Cloud API
          const branchOrDefault = branch || 'HEAD';
          apiPath = `/repositories/${workspace}/${repository}/src/${branchOrDefault}`;
          if (dirPath) {
            apiPath += `/${dirPath}`;
          }
          
          response = await this.apiClient.makeRequest<any>('get', apiPath);
        }
    
        // Format the response
        let contents: any[] = [];
        let actualBranch = branch;
    
        if (this.apiClient.getIsServer()) {
          // Bitbucket Server response
          const entries = response.children?.values || [];
          contents = entries.map((entry: BitbucketServerDirectoryEntry) => ({
            name: entry.path.name,
            type: entry.type === 'FILE' ? 'file' : 'directory',
            size: entry.size,
            path: dirPath ? `${dirPath}/${entry.path.name}` : entry.path.name
          }));
          
          // Get the actual branch from the response if available
          if (!branch && response.path?.components) {
            // Server returns default branch info in the response
            actualBranch = 'default';
          }
        } else {
          // Bitbucket Cloud response
          const entries = response.values || [];
          contents = entries.map((entry: BitbucketCloudDirectoryEntry) => ({
            name: entry.path.split('/').pop() || entry.path,
            type: entry.type === 'commit_file' ? 'file' : 'directory',
            size: entry.size,
            path: entry.path
          }));
          
          // Cloud returns the branch in the response
          actualBranch = branch || response.commit?.branch || 'main';
        }
    
        return {
          content: [
            {
              type: 'text',
              text: JSON.stringify({
                path: dirPath || '/',
                branch: actualBranch,
                contents,
                total_items: contents.length
              }, null, 2),
            },
          ],
        };
      } catch (error) {
        return this.apiClient.handleApiError(error, `listing directory '${dirPath}' in ${workspace}/${repository}`);
      }
    }
  • Official tool definition including name, description, and input schema used for tool discovery and validation.
    {
      name: 'list_directory_content',
      description: 'List files and directories in a repository path',
      inputSchema: {
        type: 'object',
        properties: {
          workspace: {
            type: 'string',
            description: 'Bitbucket workspace/project key (e.g., "PROJ")',
          },
          repository: {
            type: 'string',
            description: 'Repository slug (e.g., "my-repo")',
          },
          path: {
            type: 'string',
            description: 'Directory path (optional, defaults to root, e.g., "src/components")',
          },
          branch: {
            type: 'string',
            description: 'Branch name (optional, defaults to default branch)',
          },
        },
        required: ['workspace', 'repository'],
      },
    },
  • Type guard function used in the handler to validate and type-check input arguments for the list_directory_content tool.
    export const isListDirectoryContentArgs = (
      args: any
    ): args is {
      workspace: string;
      repository: string;
      path?: string;
      branch?: string;
    } =>
      typeof args === 'object' &&
      args !== null &&
      typeof args.workspace === 'string' &&
      typeof args.repository === 'string' &&
      (args.path === undefined || typeof args.path === 'string') &&
      (args.branch === undefined || typeof args.branch === 'string');
  • src/index.ts:134-135 (registration)
    Registration and dispatch logic in the main MCP server that maps tool calls for 'list_directory_content' to the appropriate handler method.
    case 'list_directory_content':
      return this.fileHandlers.handleListDirectoryContent(request.params.arguments);

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/pdogra1299/bitbucket-mcp-server'

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