MCP server with decorators, unified logging, and multiple transports for Google Drive file management and operations
This server demonstrates good foundational quality with well-named tools, comprehensive descriptions, and proper input schemas. All 9 tools follow the verb_noun naming convention (list_accounts, switch_account, delete_file, move_file, create_folder, get_file_info, search_files, list_folder, download_file). Descriptions are substantive (ranging from 200-600+ characters) and include context about prerequisites, parameter constraints, and when to use each tool. Input schemas are present and typed for all parameters. However, there are notable gaps: output schemas are not documented, making it unclear what fields agents should expect from responses; parameter descriptions occasionally contain example values that could be reused literally by LLMs; and there is limited guidance on error recovery paths. The server handles multi-account scenarios well and acknowledges destructive operations in descriptions, but lacks structured error classification and confirmation patterns for irreversible actions.
Create a new folder on Google Drive. Before calling this tool, ask the user where to create the folder. Use list_folder to show available locations, then confirm the destination. Only use parent_folder_id="root" if the user explicitly says to create it in My Drive root. Args: folder_name: Name for the new folder parent_folder_id: Parent folder ID. Ask the user where to create the folder and use list_folder to discover available locations before calling. Use "root" only if the user explicitly confirms they want it in My Drive root. account_email: Google account to use. Leave empty to use the default account. ctx: MCP context Returns: Confirmation with the new folder's Drive ID and link
Delete a file or folder from Google Drive. By default, moves the file to trash (recoverable). Set permanent=True to permanently delete without recovery option. IMPORTANT: Deleting a folder deletes all its contents recursively. Args: file_id: Google Drive file ID to delete permanent: If True, permanently delete. If False, move to trash (default) account_email: Google account to use. Leave empty to use the default account. ctx: MCP context Returns: Confirmation message with file name and deletion type
Download a file from Google Drive to the local filesystem. For Google Workspace files (Docs, Sheets, Slides), exports to the specified format. For regular files, downloads the binary content directly. If you are unsure whether a file is a Google Workspace type or which export formats it supports, call get_file_info first — it lists available formats. Args: file_id: Google Drive file ID to download local_path: Local destination path (file or directory). If empty, uses default download directory export_format: Export format for Google Workspace files. Must match the file type: - Google Docs: pdf, docx, txt, html - Google Sheets: pdf, xlsx, csv - Google Slides: pdf, pptx Leave empty to use the default format for each type (docx, xlsx, pptx). account_email: Google account to use. Leave empty to use the default account. ctx: MCP context Returns: Confirmation with the local file path and size
Output schemas not documented. Tools return confirmation messages and metadata but LLMs cannot reliably parse the response structure or chain results to downstream tools. For example, create_folder returns 'the new folder's Drive ID and link' but the exact JSON fields (folder_id, folder_url, etc.) are not defined.
Parameter descriptions contain example values and instructions that LLMs may reuse literally. For example, search_files says 'To browse all folders without a specific name to search for, use list_folder instead' which teaches correct usage but could be clearer with enums/constraints instead of prose examples.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | C | 69 | <=2025-11-25 | v2 |
| 2026-03-09 | D | 56 | - | v1 |
Get detailed information about a file on Google Drive. Returns comprehensive metadata including name, type, size, dates, owner, sharing status, and link. For Google Workspace files (Docs, Sheets, Slides), also returns the available export formats — call this before download_file when you are unsure which export format to use. Args: file_id: Google Drive file ID account_email: Google account to use. Leave empty to use the default account. ctx: MCP context Returns: Formatted file metadata including export formats for Google Workspace files
List all authenticated Google accounts and which one is the default. Use this to see which Google accounts are available and which will be used when no account_email is specified in other tools. If an account the user wants is not listed, instruct them to run this command in a terminal: python scripts/add_account.py --email <email> A browser will open for Google sign-in. After the user confirms it is complete, call switch_account to make it the default.
List contents of a Google Drive folder. Use this to discover what folders and files exist in a location. Shows immediate children with folders listed first. Call with folder_id='root' to browse the top level of My Drive — this is the recommended way to discover available folders. Args: folder_id: Folder ID to list (default "root" for My Drive root) max_results: Maximum results to return (default 50, max 100) account_email: Google account to use. Leave empty to use the default account. ctx: MCP context Returns: Formatted list of folder contents with names, sizes, dates, and IDs
Move a file or folder to a different parent folder. Changes the parent folder while preserving all file metadata, sharing settings, edit history, and comments. Works for both regular files and Google Workspace files (Docs, Sheets, Slides) without re-uploading or converting formats. Args: file_id: Google Drive file ID to move new_parent_folder_id: Destination folder ID (use "root" for My Drive root) account_email: Google account to use. Leave empty to use the default account. ctx: MCP context Returns: Confirmation with file name, old location, and new location
Search for files on Google Drive. Finds files matching a search query. Supports natural language searches (searches by file name) and structured Drive API queries. Args: query: Search text or Drive API query string. The query parameter searches by file name or content — it cannot be empty. To browse all folders without a specific name to search for, use list_folder instead. max_results: Maximum results to return (default 20, max 100) file_type: Filter by type: document, spreadsheet, presentation, folder, pdf, image, video, audio. Note: file_type alone doesn't return all items of that type — you must also provide a query to search for. account_email: Google account to use. Leave empty to use the default account. ctx: MCP context Returns: Formatted search results with file names, sizes, dates, and IDs
Set the default Google account for Drive operations. The default account is used by all Drive tools when no account_email is specified. To use a non-default account for a specific operation, pass account_email explicitly to that tool. The account must already be authenticated — it must appear in list_accounts. To add a new account, instruct the user to run: python scripts/add_account.py --email <email> A browser will open for sign-in. After the user confirms it is complete, call switch_account again. Args: email: Email address of the Google account to set as default.
Destructive operations (delete_file with permanent=true) lack confirmation/dry-run patterns. The description warns that deletion is irreversible but provides no confirmation_required field or separate confirm_delete tool to prevent accidental agent-initiated data loss.
Error handling guidance is absent. Tools do not document what errors they may return, what causes them (e.g. 'file not found', 'permission denied'), or recovery actions (e.g. 'Try search_files to locate the file'). This forces LLMs to guess on failures.
Numeric parameter constraints missing. max_results is described as 'default 20, max 100' in search_files and 'default 50, max 100' in list_folder, but no min/max schema constraints (e.g. minimum: 1, maximum: 100) are visible, leaving validation to runtime and LLM discipline.
Mutually exclusive parameters not declared. download_file could accept both local_path as a file and as a directory; the description says 'If empty, uses default download directory' but does not state whether local_path=<file> overrides the default or whether both can be specified together.