
Google Sheets MCP Server
io.github.joshuawhite389Published by GitHub account joshuawhite389v0.2.0Updated Oct 26, 2026
Read and write Google Sheets with your own service account: list tabs, read, append, update, export.
Overview
Reads and writes Google Sheets through your own Google service account: list tabs, read ranges, append or update rows, and export Apify datasets.
- What you can do
- List a spreadsheet's tabs with their size and link
- Read cell ranges or whole tabs, paged for long tabs
- Append rows, matching objects to headers by name and optionally skipping duplicates
- Overwrite cells from a top-left cell, growing the tab as needed
- Write an Apify dataset into a tab by appending, replacing, or adding only new rows
- When to use it
- Useful when an assistant should work directly with spreadsheet data you already keep in Google Sheets, such as reading lead lists, appending scraped or generated rows, or pushing an Apify dataset into a tab. It suits users who prefer a service account over an OAuth app.
- Requirements
- A remote endpoint at the Apify-hosted URL, or a self-hosted run needing Node.js 24 or newer. Two headers are required: Authorization with an Apify API token (hosted only) and X-Google-Service-Account-Key holding a base64-encoded Google service account JSON key. The Google Sheets API must be enabled and each sheet shared as Editor with the service account's client_email.
Installation
In SourceWeft
- Open Google Sheets MCP Server in the dashboard and add it to a workspace.
- Connect Authorization token credentials. They are stored privately and never shown on public pages.
- Enable the server for the chats that should use its tools.
Web executable via Streamable HTTP. Remote servers run from the web runtime once configured in a workspace.
Use with an agent
Paste this prompt into Claude Code, Codex, Cursor or another agent — or into SourceWeft chat. The agent reads this server's install guide, shows you its publisher, endpoint and sign-in, and adds it to your client once you agree. Keys never go into a command.
Read https://sourceweft.com/mcp/io.github.joshuawhite389%2Fgoogle-sheets-mcp/install.md and connect the MCP server it describes to my client. Before changing any config, show me its publisher, endpoint and sign-in method and wait for my OK. Never put an API key in a command or in a file I would commit; ask me where it should come from.Other MCP clients
Add this to your client's mcpServers config.
{
"mcpServers": {
"google-sheets": {
"type": "http",
"url": "https://oldjard--google-sheets-mcp.apify.actor/mcp",
"headers": {
"Authorization": "Bearer <YOUR_TOKEN>"
}
}
}
}README
Google Sheets MCP Server
An MCP server that lets Claude, Cursor or any other MCP client read and write your Google Sheets: list a spreadsheet's tabs, read ranges, append or update rows, and export an Apify dataset to a tab.
It signs in with your own Google service account, so there's no shared quota, no OAuth app to approve, and nothing that expires. The service account can only open sheets you share with it.
Two ways to use it:
- Hosted on Apify (no install): apify.com/oldjard/google-sheets-mcp. Apify starts the server when your agent calls it and stops it when it goes quiet. It is paid per use, billed to your own Apify account (prices below).
- Self-hosted (free): clone this repo and run it yourself. Same code.
Tools
Values are written as plain values, never as formulas. One call reads or writes at most 5,000 rows. If a tool can't do something (sheet not shared, a wrong tab name, a missing key), it returns a plain-English fix, for example the exact email to share the sheet with.
Google setup (about 5 minutes, once)
You need a Google service account: a robot Google user that only gets access to the sheets you share with it. It's free, and Google asks for no billing details to use the Sheets API.
- Open console.cloud.google.com, create a project and select it.
- Open the Google Sheets API page and click Enable.
- IAM & Admin > Service Accounts > Create service account. Name it, skip the optional role step, click Done.
- Open the service account, Keys > Add key > Create new key > JSON. A
.jsonfile downloads. - Copy its
client_email. Share each Google Sheet your agent should use with that email as Editor. - Turn the key into one line of base64:
base64 -w0 key.json(on macOS:base64 -i key.json).
Some Google Workspace organizations block service-account keys. If step 4 says key creation is disabled by policy, use a personal Google account for the project; the sheet can live anywhere as long as it's shared with the email.
Connect: hosted on Apify
Use the URL https://oldjard--google-sheets-mcp.apify.actor/mcp with two headers. For Claude Code:
Other clients take the same URL and headers in their JSON config.
Pricing (hosted): $0.001 per successful tool call, $0.0004 per row that export_dataset writes. Failed calls,
header rows and rows skipped as duplicates are free. Each server start costs $0.00005. As with any Apify Standby Actor, Apify also bills the platform
usage of the run while your agent is connected and for a short idle period after (the server runs at 256 MB, so this
is a fraction of a cent per session). The key travels over HTTPS to your own run, is held in memory only, and is never
logged or stored.
Connect: self-hosted
Needs Node.js 24 or newer.
Then point your client at http://localhost:3000/mcp with the X-Google-Service-Account-Key header (no Apify token
needed; export_dataset then reads datasets from the local ./storage folder). The Dockerfile builds the same
server for Apify; to run it elsewhere, set APIFY_META_ORIGIN=STANDBY and ACTOR_WEB_SERVER_PORT.
Limits worth knowing
- Google allows 10 million cells per spreadsheet and 50,000 characters per cell.
- A service account gets Google's standard quota of 60 write requests per minute. Rate limits and Google hiccups are retried with backoff.
Development
Related
Dataset to Pinecone & Qdrant Vector Export (an Apify Actor, not an MCP server) chunks and embeds a scraped dataset into your own Pinecone or Qdrant index.
License
MIT
Source: README.md at commit 23b8707
Tools
0Version history
1- v0.2.0LatestOct 21, 2026
Score
85% of the applicable checks met
How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.
- Reached in the last 30 daysRequired25 pts
- Auth declaredRequired10 pts
- Tools listed15 pts
Answer tools/list without a credential, or ship a package that starts in a sandbox without one.
- DescriptionRequired15 pts
- Logo10 pts
- Documentation15 pts
- License10 pts