Skip to main content
Glama
cindyloo
by cindyloo

search_files

Find Dropbox files by name or content across PDF, DOCX, and text formats using search queries to locate specific documents quickly.

Instructions

Search for files in Dropbox by name or content.

Args: query: Search query (searches file names and content) file_types: File types to search ("all", "pdf", "docx", "txt", or comma-separated list) max_results: Maximum number of results to return

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
file_typesNoall
max_resultsNo
queryYes

Implementation Reference

  • The main handler function for the 'search_files' MCP tool. Registered via the @mcp.tool() decorator. Performs filename-based search in Dropbox, filtering by file types, and returns structured SearchResult objects.
    @mcp.tool() def search_files(query: str, file_types: str = "all", max_results: int = 10) -> List[SearchResult]: """ Search for files in Dropbox by name or content. Args: query: Search query (searches file names and content) file_types: File types to search ("all", "pdf", "docx", "txt", or comma-separated list) max_results: Maximum number of results to return """ if not dropbox_client: initialize_dropbox_client() results = [] extensions = [] # Parse file types if file_types.lower() == "all": extensions = ['.pdf', '.docx', '.doc', '.txt', '.md', '.py', '.js', '.html', '.css', '.json', '.csv'] elif file_types.lower() == "pdf": extensions = ['.pdf'] elif file_types.lower() == "docx": extensions = ['.docx', '.doc'] elif file_types.lower() == "txt": extensions = ['.txt', '.md'] else: # Comma-separated list extensions = [f'.{ext.strip()}' for ext in file_types.split(',')] try: # Search by filename first search_result = dropbox_client.files_search_v2( query=query, options=dropbox.files.SearchOptions( max_results=max_results * 2 # Get more to filter by extension ) ) for match in search_result.matches: if len(results) >= max_results: break metadata = match.metadata.metadata if isinstance(metadata, dropbox.files.FileMetadata): file_path = metadata.path_lower file_name = metadata.name # Check if file extension matches if any(file_path.endswith(ext) for ext in extensions): results.append(SearchResult( file_path=file_path, file_name=file_name, match_context=f"Filename match: {file_name}", file_size=metadata.size, modified=metadata.server_modified.isoformat() )) return results except Exception as e: raise ValueError(f"Search failed: {e}")
  • Pydantic BaseModel defining the output schema for each search result returned by the search_files tool.
    class SearchResult(BaseModel): """Search result structure.""" file_path: str file_name: str match_context: str file_size: int modified: str
  • The @mcp.tool() decorator registers the search_files function as an MCP tool with the name 'search_files' in the FastMCP server.
    @mcp.tool()
  • Duplicate handler for the 'search_files' tool in dockerfile.py (identical implementation).
    @mcp.tool() def search_files(query: str, file_types: str = "all", max_results: int = 10) -> List[SearchResult]: """ Search for files in Dropbox by name or content. Args: query: Search query (searches file names and content) file_types: File types to search ("all", "pdf", "docx", "txt", or comma-separated list) max_results: Maximum number of results to return """ if not dropbox_client: initialize_dropbox_client() results = [] extensions = [] # Parse file types if file_types.lower() == "all": extensions = ['.pdf', '.docx', '.doc', '.txt', '.md', '.py', '.js', '.html', '.css', '.json', '.csv'] elif file_types.lower() == "pdf": extensions = ['.pdf'] elif file_types.lower() == "docx": extensions = ['.docx', '.doc'] elif file_types.lower() == "txt": extensions = ['.txt', '.md'] else: # Comma-separated list extensions = [f'.{ext.strip()}' for ext in file_types.split(',')] try: # Search by filename first search_result = dropbox_client.files_search_v2( query=query, options=dropbox.files.SearchOptions( max_results=max_results * 2 # Get more to filter by extension ) ) for match in search_result.matches: if len(results) >= max_results: break metadata = match.metadata.metadata if isinstance(metadata, dropbox.files.FileMetadata): file_path = metadata.path_lower file_name = metadata.name # Check if file extension matches if any(file_path.endswith(ext) for ext in extensions): results.append(SearchResult( file_path=file_path, file_name=file_name, match_context=f"Filename match: {file_name}", file_size=metadata.size, modified=metadata.server_modified.isoformat() )) return results except Exception as e: raise ValueError(f"Search failed: {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