Model Context Protocol server for Google Drive
This MCP server exposes 6 Google Drive tools with reasonably well-structured Zod schemas and descriptions. Most tools follow verb-noun naming conventions (g_drive_list_files_by_type, g_drive_search_files, g_drive_read_file, etc.). Schemas are present and typed for all tools with Zod validators. However, there are significant gaps: (1) Output schemas are not documented, the code returns createSuccessResponse() and createErrorResponse() wrappers, but the actual response structure is not declared in tool metadata, forcing LLMs to infer outputs. (2) Parameter descriptions, while present, are sometimes vague or lack constraint details, e.g., 'maxResults' has no bounds stated ('default: 50, max: 100' appears in text but not as min/max schema constraints). (3) Error handling is basic, most tools catch errors generically and return Japanese error messages without guidance on recovery or retry strategy. (4) The g_drive_insert_value tool is overloaded with conditional logic for three different file types (docs, sheets, presentations), making it harder for LLMs to reason about side effects. (5) No tool annotations (readOnlyHint, destructiveHint) are present to signal which tools modify state vs. read-only. Tool #6 (g_drive_insert_value) is marked WRITE but has no annotation to signal this to the MCP client.
Retrieve comments from Google Drive files (supports documents, spreadsheets, and slides)
Insert values into documents, spreadsheets, or slides (calls the appropriate tool based on file type). For documents and slides: Markdown table format (| col1 | col2 |) is automatically detected and inserted as native table.
Retrieve a list of Google Drive files of a specified type
Read the contents of a Google Drive file (supports documents, spreadsheets, slides, and PDFs)
Read file contents in detail page by page (supports documents, spreadsheets, and slides)
Search for files in Google Drive
Output schemas are not documented. All tools return wrapped responses via createSuccessResponse() but the actual response structure (field names, types, nesting) is invisible to the LLM. LLMs cannot plan downstream tool calls without knowing what fields to extract.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) in tool registration. The MCP protocol supports these hints to help clients understand side effects. g_drive_insert_value is marked WRITE but has no annotation; read-only tools lack annotations to signal safety.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 52 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 45 | - | v1 |
g_drive_insert_value is overloaded with conditional logic for three file types (docs, sheets, presentations). Parameters are mutually exclusive by type but not declared as such. LLMs cannot reliably infer which params apply when. This violates single-responsibility principle and should be split into separate tools.
Parameter constraints lack enforcement in schema. maxResults states 'default: 50, max: 100' in description text only, not in Zod schema (no .max(100)). Zod schemas use z.number().optional() without bounds. LLMs cannot parse text constraints; they need formal schema constraints.
Error handling is generic and language-dependent. Errors are caught broadly and returned as Japanese error messages (e.g., 'ファイル一覧取得に失敗しました') without recovery guidance. LLMs cannot determine if errors are retryable, user-fixable, or fatal. Error responses should indicate category and suggest next steps.
Parameter interdependencies are undocumented. g_drive_read_file_part accepts tabId (for docs), range (for sheets), pageNumber (for slides), but does not declare which is required for which fileType. LLMs will guess and pass invalid combinations.
No pagination support documented. g_drive_list_files_by_type and g_drive_search_files return lists but do not expose offset/limit or cursor parameters for follow-up calls. If result count exceeds default, agent cannot retrieve remaining items without re-querying.
Query language not documented. g_drive_search_files accepts a free-form 'query' string but does not explain syntax (AND/OR operators, quoted phrases, field-specific filters). LLMs will guess; some queries will fail silently.