Skip to main content
Glama
cindyloo
by cindyloo

list_files

Browse and view files and folders stored in your Dropbox directory to organize and access your cloud content.

Instructions

List files and folders in a Dropbox directory.

Args: folder_path: Path to the folder (empty string for root) max_files: Maximum number of items to return

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
folder_pathNo
max_filesNo

Implementation Reference

  • Handler function for the 'list_files' tool. Lists files and folders in a specified Dropbox directory using the Dropbox API, generates content previews for text files by calling get_file_content helper, and returns a list of FileInfo objects. Decorated with @mcp.tool() for automatic registration.
    @mcp.tool() def list_files(folder_path: str = "", max_files: int = 20) -> List[FileInfo]: """ List files and folders in a Dropbox directory. Args: folder_path: Path to the folder (empty string for root) max_files: Maximum number of items to return """ if not dropbox_client: initialize_dropbox_client() try: # Ensure path starts with / if not empty if folder_path and not folder_path.startswith('/'): folder_path = '/' + folder_path # List folder contents result = dropbox_client.files_list_folder( folder_path, limit=max_files ) files = [] for entry in result.entries: if isinstance(entry, dropbox.files.FileMetadata): # Get preview for text files preview = None if entry.name.lower().endswith(('.txt', '.md', '.py', '.js')): try: content = get_file_content(entry.path_lower) preview = content[:200] + "..." if len(content) > 200 else content except: preview = "[Could not load preview]" files.append(FileInfo( name=entry.name, path=entry.path_lower, size=entry.size, modified=entry.server_modified.isoformat(), is_folder=False, content_preview=preview )) elif isinstance(entry, dropbox.files.FolderMetadata): files.append(FileInfo( name=entry.name, path=entry.path_lower, size=0, modified="", is_folder=True )) return files except Exception as e: raise ValueError(f"Failed to list files: {e}")
  • Pydantic model (BaseModel) defining the output schema for file listing tools including list_files, get_file_info. Used as return type annotation.
    class FileInfo(BaseModel): """File information structure.""" name: str path: str size: int modified: str is_folder: bool content_preview: Optional[str] = None
  • Duplicate handler function for the 'list_files' tool with identical implementation to dropbox_server.py.
    @mcp.tool() def list_files(folder_path: str = "", max_files: int = 20) -> List[FileInfo]: """ List files and folders in a Dropbox directory. Args: folder_path: Path to the folder (empty string for root) max_files: Maximum number of items to return """ if not dropbox_client: initialize_dropbox_client() try: # Ensure path starts with / if not empty if folder_path and not folder_path.startswith('/'): folder_path = '/' + folder_path # List folder contents result = dropbox_client.files_list_folder( folder_path, limit=max_files ) files = [] for entry in result.entries: if isinstance(entry, dropbox.files.FileMetadata): # Get preview for text files preview = None if entry.name.lower().endswith(('.txt', '.md', '.py', '.js')): try: content = get_file_content(entry.path_lower) preview = content[:200] + "..." if len(content) > 200 else content except: preview = "[Could not load preview]" files.append(FileInfo( name=entry.name, path=entry.path_lower, size=entry.size, modified=entry.server_modified.isoformat(), is_folder=False, content_preview=preview )) elif isinstance(entry, dropbox.files.FolderMetadata): files.append(FileInfo( name=entry.name, path=entry.path_lower, size=0, modified="", is_folder=True )) return files except Exception as e: raise ValueError(f"Failed to list files: {e}")
  • Helper function to initialize the global Dropbox client used by list_files and other tools.
    def initialize_dropbox_client(): """Initialize Dropbox client with access token from environment.""" global dropbox_client access_token = os.getenv('DROPBOX_ACCESS_TOKEN') if not access_token: raise ValueError( "DROPBOX_ACCESS_TOKEN environment variable is required. " "Get your token from https://www.dropbox.com/developers/apps" ) try: dropbox_client = dropbox.Dropbox(access_token) # Test the connection dropbox_client.users_get_current_account() logger.info("Dropbox client initialized successfully") except AuthError as e: raise ValueError(f"Invalid Dropbox access token: {e}") except Exception as e: raise ValueError(f"Failed to initialize Dropbox client: {e}")
  • Helper function called by list_files to generate content previews for text files, and by read_file.
    def get_file_content(file_path: str) -> str: """Download and extract text content from a Dropbox file.""" if not dropbox_client: raise ValueError("Dropbox client not initialized") try: # Download file content _, response = dropbox_client.files_download(file_path) file_content = response.content # Extract text based on file extension file_ext = file_path.lower().split('.')[-1] if file_ext == 'pdf': return extract_text_from_pdf(file_content) elif file_ext in ['docx', 'doc']: return extract_text_from_docx(file_content) elif file_ext in ['txt', 'md', 'py', 'js', 'html', 'css', 'json', 'csv']: # Text files try: return file_content.decode('utf-8') except UnicodeDecodeError: try: return file_content.decode('latin-1') except UnicodeDecodeError: return "[Binary file - cannot display as text]" else: return f"[Unsupported file type: {file_ext}]" except ApiError as e: raise ValueError(f"Dropbox API error: {e}") except Exception as e: raise ValueError(f"Error reading file: {e}")

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/cindyloo/dropbox-mcp-server'

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