A Model Context Protocol (MCP) server for Google Sheets — read, write, and manage spreadsheets from Claude Desktop, Claude Code, or any MCP-compatible AI client.
Strong schema definitions with complete JSON Schema for all 6 tools. All tools have clear, action-oriented names (get_, read_, update_, append_, clear_, batch_update_). Descriptions are well-written (100-200 chars, within baseline 194 avg). Parameters are typed and described. However, output schemas are not documented, LLMs cannot see what fields to expect from responses. No error handling guidance in descriptions. No tool annotations (readOnlyHint/destructiveHint). Missing idempotency guidance for write operations.
Append one or more rows after the last row with data in a sheet. Ideal for logging, adding entries, tracking events.
Update multiple ranges in a single request. More efficient than multiple update_range calls when writing to disparate ranges.
Clear all values in a range without deleting formatting or the cells themselves.
Get metadata about a Google Sheets spreadsheet: title and all sheet tabs with their row/column counts. Call this first to discover sheet names before reading or writing.
Read cell values from a range in a Google Sheets spreadsheet. Returns a 2D array of values. Empty trailing rows/columns are omitted, so rows may be ragged. Numbers come back as numbers and dates as readable strings by default.
Output schemas not documented. LLMs cannot see what fields responses contain (e.g., does read_range return {values: [], metadata: {}}?). This forces agents to guess structure and risks parsing errors.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). Write tools (update_range, append_row, clear_range, batch_update_values) should be marked destructiveHint=true so agents know they have side effects and cannot be safely retried without checking idempotency.
No error recovery guidance in descriptions. If a spreadsheet ID is invalid or auth fails, descriptions do not tell the LLM what to do next (e.g., 'Check the spreadsheet URL' or 'Verify OAuth token'). Agents will retry blindly.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 64 | 2026-07-28+ | v2 |
Overwrite cell values in a specific range. Use this to edit existing cells. Values are parsed like user input by default (USER_ENTERED) — formulas, dates, and numbers are interpreted.
clear_range description is minimal (47 chars). Should explain that formatting is preserved, that this is safer than delete, and when to use it vs update_range with empty values.
No guidance on idempotency or retry safety. append_row and batch_update_values may produce duplicate rows if retried. Descriptions should note this or offer idempotency keys.