gsheets-profor Claude Code
pre-release · v0.1 not tagged yet

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.

13tools, replacing 44 verb-shaped ones
2ways to verify: a lint and a render
6API behaviors tested live before the design was fixed; two catch silent data loss

The same roster, from a values-only server

before
F10fx8190
ABCDEF
1StudentgradeClassSessionsstatusFee
2Rosalind Okafor3Clay Studio8Confirmed450
3Theo Marchetti-Baumann1Chess Club8confirmed450
4June Ainsley4Stagecraft6Waitlist340
5Mateo Rivas2Clay Studio8CONF450
6Priya ChandranKMovement8Confirmed#REF!
7Wren Halloway3Stagecraft6waitlist340
8Otis Beaumont4Chess Club7Confirmed400
9Nadia Whitlock1Movement8Confirmed450
10Total8190
update_cells(A1:F10)
nothing checked · a typed total · a #REF! nobody sees · three spellings of one status

The same roster, from gsheets-pro

after
G4fx=Roster[Sessions] * Settings!Rate_per_session
StudentGradeClassSessionsStatusFeeCheck
2Rosalind Okafor3Clay Studio8Confirmed$450
3Theo Marchetti-Baumann1Chess Club8Confirmed$450
4June Ainsley4Stagecraft6Waitlist$340
5Mateo Rivas2Clay Studio8Confirmed$450
6Priya ChandranKMovement8Confirmed$450
7Wren Halloway3Stagecraft6Waitlist$340
8Otis Beaumont4Chess Club7Confirmed$400Short term
9Nadia Whitlock1Movement8Confirmed$450
sheets_style{preset} → sheets_settings → sheets_table create → sheets_write fill → sheets_check
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
the field, September 2026

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.
yespartlyno
why this shape

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.

openreadwritetablesettingsstylevalidationconditional_formatstructurefindbatchcheckrender

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.

code "formula_guard" message "D14 currently holds a formula. Writing here would replace it." hint "Read the cell, decide whether you meant to, then pass force."

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.

rule L09 error range 'Roster'!1:1 message No frozen header row. fix sheets_style { sheet: "Roster", sheet_props: { freeze_rows: 1 } }

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.

"sort" would change the row order of Private lessons, and the registry marks its row order as load bearing. Other people's formulas and printed copies point at those row numbers. Append at the bottom instead, and leave existing rows where they are.
what it cannot do

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.
install

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-pro
claude plugin install gsheets-pro@gsheets-pro gsheets-pro-local@gsheets-pro

A 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