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
| Name | Required | Description | Default |
|---|---|---|---|
| folder_path | No | ||
| max_files | No |
Implementation Reference
- dropbox_server.py:213-268 (handler)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}")
- dropbox_server.py:42-50 (schema)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
- dockerfile.py:213-268 (handler)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}")
- dropbox_server.py:61-81 (helper)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}")
- dropbox_server.py:115-148 (helper)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}")