Google Sheets for an agent that can already think.
Thirteen tools that build spreadsheets a colleague would recognize as their own, check the work through the API, render it so the agent can look, and refuse to wreck a sheet other people edit.
The same roster, from a values-only server
before| A | B | C | D | E | F | |
|---|---|---|---|---|---|---|
| 1 | Student | grade | Class | Sessions | status | Fee |
| 2 | Rosalind Okafor | 3 | Clay Studio | 8 | Confirmed | 450 |
| 3 | Theo Marchetti-Baumann | 1 | Chess Club | 8 | confirmed | 450 |
| 4 | June Ainsley | 4 | Stagecraft | 6 | Waitlist | 340 |
| 5 | Mateo Rivas | 2 | Clay Studio | 8 | CONF | 450 |
| 6 | Priya Chandran | K | Movement | 8 | Confirmed | #REF! |
| 7 | Wren Halloway | 3 | Stagecraft | 6 | waitlist | 340 |
| 8 | Otis Beaumont | 4 | Chess Club | 7 | Confirmed | 400 |
| 9 | Nadia Whitlock | 1 | Movement | 8 | Confirmed | 450 |
| 10 | Total | 8190 |
nothing checked · a typed total · a #REF! nobody sees · three spellings of one status
The same roster, from gsheets-pro
after| Student | Grade | Class | Sessions | Status | Fee | Check | |
|---|---|---|---|---|---|---|---|
| 2 | Rosalind Okafor | 3 | Clay Studio | 8 | Confirmed | $450 | |
| 3 | Theo Marchetti-Baumann | 1 | Chess Club | 8 | Confirmed | $450 | |
| 4 | June Ainsley | 4 | Stagecraft | 6 | Waitlist | $340 | |
| 5 | Mateo Rivas | 2 | Clay Studio | 8 | Confirmed | $450 | |
| 6 | Priya Chandran | K | Movement | 8 | Confirmed | $450 | |
| 7 | Wren Halloway | 3 | Stagecraft | 6 | Waitlist | $340 | |
| 8 | Otis Beaumont | 4 | Chess Club | 7 | Confirmed | $400 | Short term |
| 9 | Nadia Whitlock | 1 | Movement | 8 | Confirmed | $450 |
check: success · native Table, frozen header, typed columns · fee is a formula on a named rate · status is a dropdown · one flag, from the sheet's own Check column
Every serious Sheets server stops at values. This one starts there.
The most-used community server, Anthropic's own connector, and Google's official Sheets MCP all read and write cells well. None of them formats, lints, renders, or protects a sheet a person also edits.
| Server | Formatting | Native Tables | Themes and presets | Lint | Render | Guards for shared sheets | Cloud sessions | House style | Tools |
|---|---|---|---|---|---|---|---|---|---|
| gsheets-proMIT, TypeScript, stdio and HTTP | 13 | ||||||||
| xing5/mcp-google-sheetsthe most-starred community server, about 1,000 stars | 19 | ||||||||
| Anthropic's Google Sheets connectorfirst-party, in claude.ai | 20 | ||||||||
| Google's official Sheets MCPdeveloper preview, hosted, OAuth only | 6 | ||||||||
| taylorwilsdon/google_workspace_mcp120+ tools across 12 Workspace services; the best OAuth story in the field | ~14 for Sheets | ||||||||
| Hosted action catalogsComposio, Zapier, Pipedream | a catalog | ||||||||
| Read from each project's own documentation and source in September 2026. taylorwilsdon lists and appends to native Tables but does not create them, and it is the only other server with real formatting. Google's server is a developer preview with six tools. The hosted catalogs expose row-level create, read, update, and delete behind a vendor's auth broker, which suits automations and not a spreadsheet a person will maintain. "Cloud sessions" means reachable from a Claude Code cloud session, which cannot run a stdio server. | |||||||||
A capable agent does not need a hundred verbs. It needs feedback.
Every response is prose plus structured data. Every error carries a code, a message, and a hint that names the fix. Every write ends with a read of what it touched. The four panels below are real output, not descriptions.
Thirteen tools, shaped like tasks
Sheet names and A1 ranges everywhere; the server resolves ids and grid indexes. One batch update per call, field masks built from the arguments you passed, backoff on the quota.
Errors it can act on
A refusal is information. This one comes back when a write would land on a formula, with or without any setup on the sheet.
It can see its own work
A lint of seven rules reads the API, not the pixels, and each finding names the call that fixes it. A render turns a tab into a PNG the agent looks at, once, before it says done.
It says no when nobody is watching
A registry in your repository names the spreadsheets other people depend on. A hook checks it before every call, asks on a laptop, and in an unattended run denies with the reason, because an unanswered prompt just stalls.
Stated plainly, because the agent will find out anyway.
- Named functions and Apps Script are out of reach of the Sheets API.
- Dropdown chip colors cannot be set or read. Rewriting a rule a person built wipes theirs, so the plugin refuses.
- A render never draws a dropdown as a pill. The lint is the authority on validation.
- The export used for rendering is undocumented by Google; a whole-workbook fallback exists.
- Setup needs your own Google Cloud OAuth client, about 25 minutes, and you must click Publish or the token expires in seven days.
- Hosted mode has no confirmation dialogs; destructive changes are refused with a reason instead.
- A one-call workbook builder and a formula pretty-printer are v1.1.
Three places it runs.
Laptop stdio
The skill, hooks, and presets, plus the bundled server. Then run the setup skill for the OAuth walkthrough.
claude plugin marketplace add jordfan/gsheets-proclaude plugin install gsheets-pro@gsheets-pro gsheets-pro-local@gsheets-proA repository that runs in the cloud vendored
Cloud sessions load a repository's own skills and hooks but not a plugin declared in its settings. This copies them in and merges the hook entries; commit the result.
npx gsheets-pro vendor .A server your team shares http
Stateless HTTP behind a bearer, with a Dockerfile and a hosting guide in the repo. Point a cloud session's .mcp.json at it.
GSHEETS_PRO_TOKEN=… npx gsheets-pro serve --http