MCP server for Google Sheets integration
This server demonstrates solid definition quality with comprehensive schemas, consistent naming conventions, and clear parameter descriptions. All 13 tools follow verb_noun naming (find_sheets, get_sheet_data, create_sheet, etc.). Descriptions are generally in the 15-120 character range and provide context. Input schemas are fully defined with proper JSON Schema typing, required fields, and enums. However, there are critical gaps: (1) No output schemas documented, tool responses are formatted as plain JSON text with no schema guidance for downstream LLM reasoning; (2) Tool descriptions lack WHEN/WHY guidance and don't distinguish between similar tools (batch_get vs get_sheet_data, update_sheet vs append_values); (3) No error handling documentation or recovery guidance in descriptions; (4) Missing documentation of pagination/limits for find_sheets (maxResults capped at 100 but no guidance on handling large result sets); (5) No parameter validation rules documented (e.g., range format expectations like 'A1:C10', sheet ID format); (6) Missing idempotency guidance for write operations. The schema baseline from the rubric is 194 chars average description length, most tool descriptions here are 50-90 chars, which is on the brief side. Per-tool scoring reveals consistent quality but missing polish for production.
Add a new tab to an existing spreadsheet
Append rows to a Google Sheet without needing to know the last row
Read multiple ranges from a Google Sheet in a single API call
Write to multiple ranges in a Google Sheet in a single API call
Clear cell contents in a range without deleting the sheet structure
Create a new Google Sheet
No output schemas documented. Tool responses are formatted as plain JSON text via formatToolResponse() with no structured schema guidance. LLMs cannot reliably parse response structure or plan downstream tool chains. Per D.1 baseline, 100% of A+ tools have documented return types.
Descriptions lack WHEN/WHY guidance and do not distinguish between overlapping tools. batch_get vs get_sheet_data both read sheets; append_values vs update_sheet both write data. LLM must guess which to use. Per B.2 baseline, descriptions should answer: What does it do? When should the LLM call it instead of a similar tool?
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | C | 60 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 40 | - | v1 |
Move a Google Sheet to trash (recoverable)
Delete a tab from a spreadsheet
Search for Google Sheets in Google Drive
Retrieve data from a Google Sheet
Get full spreadsheet metadata: tabs, properties, named ranges
Rename a tab in a spreadsheet
Update data in a Google Sheet
No error handling documentation or recovery guidance in tool descriptions. If a sheetId is invalid or user lacks permissions, there is no documented guidance on what error to expect or how to recover. Per E.1, error responses must tell the LLM what to do next.
Parameter validation rules not documented. 'range' parameter appears in 6 tools but no format specification (e.g., 'A1:C10', 'Sheet1!A:A'). 'sheetId' format not documented. Per C.4 baseline, expected format and allowed values must be directly in the parameter description.
Pagination/limits not documented for find_sheets. maxResults has a default of 10 and max of 100, but tool description does not explain what happens if >100 results exist, whether to paginate, or how to iterate. Per D.2, tools returning lists should accept limit/offset and document pagination behavior.
No idempotency or confirmation guidance for destructive operations. delete_sheet, delete_sheet_tab, and clear_range modify/destroy data, but descriptions do not clarify whether repeated calls are safe or warn of side effects. Per E.3, irreversible operations should support dry-run or confirmation step.
Tool descriptions are brief (50-90 chars average vs 194 char baseline from rubric). While grammatically complete, they lack context about prerequisites, expected input formats, and side effects. Descriptions should reach 100-200 chars for LLM-optimized clarity.
Unused parameter 'sheets' in create_sheet is optional but its purpose is not clear. It allows pre-creating tabs at sheet creation time, but the description 'Sheet tabs to create' does not explain when to use this vs calling add_sheet_tab after creation.