Free & open source · MCP server for Google Sheets

Give your AI agent hands on Google Sheets

InnerSheet is a free, self-hosted Google Sheets MCP server. Your AI assistant reads, writes, formats and charts your spreadsheets — and syncs recurring reports verbatim, in one call.

Install in 10 minutes See all 24 tools
24tools
3MCP prompts
$0running cost
10 minto set up

Python · MIT licence · Free, self-hosted — no per-call fees, no middleman

InnerSheet lets an AI assistant read and update a Google Sheet, with a daily report row upserted by date

Works with any AI client

Setup takes about ten minutes. See the guide for each →

VS Code Copilot
Setup guide
Gemini CLI
Setup guide
Windsurf
Setup guide
Any MCP client

Also Claude Code, Cline, Zed, JetBrains — and any client that speaks MCP.

The problem

Your data lives in Sheets. Your AI can't reach it.

Most integrations mirror the API one call at a time — a real job takes ten or more calls, and each one can hit the wrong row.

The old wayWith InnerSheet
Getting data to the AIExport CSVs by hand, paste tables into chatDirect tools — the agent reads the sheet itself
Syncing a daily report10+ separate calls, orchestrated by hand1 workflow call finishes the whole sync
FormattingDestroyed silently by values-only writesPreserved — reads return values, formulas and format
CostPer-call billing on managed platforms$0 — free, self-hosted, no middleman
InnerSheet workflow: one request becomes one report_upsert_day call that reads values and format, upserts the row by date, copies it with formatting and verifies the diff — the daily report row is updated with formatting preserved
What it is

One small server. Every job in one call.

A free, open-source Python MCP server that runs on your machine and talks straight to Google.

🖥️

Runs locally

Your own Google account — no vendor in the middle.

🧰

24 tools

Read, write, format, chart and sync reports.

🌐

Web chats too

ChatGPT and Claude.ai once deployed over HTTPS.

💸

$0 to run

MIT licence. No account, no per-call billing.

Then just ask:“Add today's report row”“Copy October to the client file, keep the formatting”“Find every overdue row”
Why InnerSheet

Built for the jobs, not the API

Tools that finish real work — with guardrails in the code, not just the prompt.

🧭

Workflow tools, not API mirrors

report_upsert_day finishes a whole sync in one call — no half-done syncs, no files out of step.

🔍

Reads that keep formatting

get_values_rich returns values, formulas and format in one read, so writes never wreck a styled sheet.

🛡️

Guardrails in code

dry_run, write echoes, a READ_ONLY switch, an allowlist and confirmed deletes.

📋

Verbatim reports

Dates, percentages and task names copied exactly as typed — never rewritten or rounded.

🔑

Your account, your data

OAuth or a service account. No third-party platform, no telemetry, no per-call billing.

🧰

Raw escape hatch

sheets_batch_update passes any Sheets API request verbatim — banding, protection, slicers.

Reports niche

Daily reports that sync themselves

A daily row is keyed by date, copied exactly as typed, and must match the client's copy — formatting included.

  1. 1

    Upsert by date

    report_upsert_day overwrites the row if the date exists, appends it if not.

  2. 2

    Copy with formatting

    report_copy_range copies values or formulas plus format between files — deleting nothing.

  3. 3

    Diff to verify

    report_compare_ranges checks cell by cell. A diff of 0 means in sync.

Daily report sync: the typed report is upserted by date and copied to the client file with formatting preserved
InnerSheet safety layers: dry run preview, read-only mode, spreadsheet allowlist, confirmation for deletes, API key for remote mode
Safety

Powerful, and always in your control

Guardrails live in the server code, so they hold even when the prompt doesn't.

  1. ✓

    Dry run

    Preview the exact plan before anything is written.

  2. ✓

    Read-only mode & allowlist

    One READ_ONLY switch, and only the spreadsheets you name.

  3. ✓

    Confirmed deletes & API key

    Destructive calls need confirmation; the remote endpoint needs a key.

Compare

InnerSheet vs a managed platform

Ten minutes of setup in exchange for control, workflow tools and zero running cost.

InnerSheetManaged platform
Workflow tools (one call = one job)YesUsually one tool per API operation
Rich reads (values + formulas + format)Yes, one callValues-first; format needs extra calls
Custom rules (verbatim copy, dedup by date)Built inNot built in
CostFree, self-hostedPer-use billing
Data pathDirect to GoogleVia vendor infrastructure
Setup time~10 minutes, one OAuth clientFastest (managed auth)
Vendor cloud requiredNoYes — vendor cloud required

Pick a managed platform if you…

  • Want the quickest possible connection
  • Don't mind per-use billing

Pick InnerSheet if you…

  • Run reports every day
  • Care about exact values, copied verbatim
  • Don't want a vendor in the middle of your company data
No surprises

Honest limits

Mostly Google's and the protocol's — every MCP server faces them.

LimitWhat it meansWorkaround
Pivot tablesThe API can create them, but there is no dedicated pivot tool yet.Send the raw request through sheets_batch_update.
Google quota300 reads and 300 writes per minute per project — 60 of each per user. Over the limit returns HTTP 429.Batch very large jobs.
Web chatsChatGPT and Claude.ai only accept remote MCP servers over HTTPS.Deploy v2's API-key-protected HTTP mode.
Apps ScriptNot exposed by the Sheets API at all.Macros stay in the Sheets UI.
Get started

Up and running in 10 minutes

macOS, Windows and Linux — step by step, with troubleshooting for the errors people actually hit.

01

Install uv

One command in your terminal.

02

Run the installer

Sets up Python and configures Claude Desktop.

03

Add a Google OAuth client

Free, one-time, about five minutes.

04

Ask your assistant

Start with “list my spreadsheets”.

Quick answers

More on the FAQ page →

Does it work with ChatGPT?

Not with a local install — ChatGPT on the web only connects to remote MCP servers over HTTPS. Deploy InnerSheet in HTTP mode and add it as a custom connector.

What does it cost?

Nothing. InnerSheet is free under the MIT licence, and the Google Sheets API is free within quota.

Is my data safe?

The server runs on your machine and talks directly to Google with your credentials. Read the security page for the full threat model and mitigations.

Can it build pivot tables?

Yes, through the raw escape hatch: sheets_batch_update passes a batchUpdate + updateCells request verbatim. There is no dedicated pivot tool yet.

Do I need to know Python?

No. The installer creates the environment and installs the dependencies for you.

Can the AI delete my data by mistake?

Deletes refuse to run without explicit confirmation, every write can be previewed with a dry run, and a read-only switch turns off writes entirely.