MCP server for Google Sheets — read and write Google Sheets via Claude
gsheets-mcp demonstrates solid tool design with consistent naming (verb_noun pattern), comprehensive parameter schemas, and thoughtful error handling. All 9 tools have clear descriptions (avg ~120 chars) and well-typed input schemas. Tool names follow action-verb convention (list, read, append, update, format, add, delete, create, find). Parameters include descriptions and type constraints. However, output schemas are not documented in the visible code, and some parameter descriptions lack format/constraint details. Error handling is strong (actionable messages like 'share it with...'), but no dry-run/confirmation pattern for destructive operations. Composition is clean, each tool has one responsibility, and tool outputs chain well (e.g., list_sheets → read_sheet). Security is well-considered (allowlist enforcement, no secrets in params). Baseline: 9 tools, avg 4 params/tool, descriptions present for all.
Add a new sheet (tab) to a spreadsheet
Append rows to the bottom of a sheet
Create a new spreadsheet
Delete a sheet (tab) from a spreadsheet
Search Google Drive for spreadsheets by name (only available if GSHEETS_ENABLE_DRIVE_SEARCH is true)
Format cells (color, bold, etc.) without changing their values
Output schemas not documented. Tools return results but LLMs cannot see what fields to expect, forcing them to guess downstream field names and risk chaining failures.
No dry-run or confirmation pattern for destructive operations (delete_sheet, update_sheet with full replacement). Agents can accidentally destroy data without a safety gate.
gsheets_find_spreadsheets is conditionally registered (GSHEETS_ENABLE_DRIVE_SEARCH). This is good for security, but the tool description does not warn that it requires explicit server configuration, which may confuse users.
Inferred effective spec: 2026-07-28+.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 69 | 2026-07-28+ | v2 |
List all sheets (tabs) in a spreadsheet with column profiles and sample rows
Read rows from a sheet as a 2D array, with optional range and paging
Write values to a sheet, optionally within a range
Parameter 'range' in read_sheet and update_sheet lacks explicit format documentation (e.g., 'A1:C10 or A:C'). Description mentions examples but no formal pattern constraint.
Pagination in gsheets_read_sheet uses offset/limit but does not return total_count or next_cursor, making it hard for LLMs to know if more rows exist.