Google Sheets
MCP server for Google Sheets : read, write, format, and manage spreadsheets through 23 tools.
What it can do
- Gs Create Spreadsheet: Create a new Google Sheets spreadsheet. Optionally specify sheet/tab names, locale, and timezone. Returns the spreadsheet ID and URL.
- Gs Get Spreadsheet: Get spreadsheet metadata — title, sheets list with properties (ID, title, row/column count, frozen rows), and optionally cell data for specific ranges.
- Gs Read Values: Read cell values from a range using A1 notation (e.g. "Sheet1!A1:C10", "A1:Z", "Sheet1"). Returns a 2D array of values.
What data it sees
Do you need an account
An API key from the service settings is required
MCP server for Google Sheets : read, write, format, and manage spreadsheets through 23 tools.
Features
- Read and write cell values with A1 notation
- Batch read/write for multiple ranges at once
- Full formatting: bold, italic, colors, fonts, alignment, number formats
- Sheet management: add, delete, rename, copy, duplicate tabs
- Data operations: sort, find & replace, filters, protected ranges
- Add charts (bar, line, column, scatter, etc.)
- Raw batchUpdate pass-through for any Sheets API operation
23 Tools
- Spreadsheet: create and get spreadsheet metadata
- Values: read, batch read, write, append, clear, batch write
- Sheet Management: add, delete, rename, copy, duplicate sheets
- Formatting: format cells, merge/unmerge, auto-resize
- Data Operations: sort, find & replace, basic filter, protected ranges
- Advanced: add chart, raw batchUpdate
Configuration
GOOGLE_CLIENT_ID: OAuth 2.0 Client ID from Google Cloud ConsoleGOOGLE_CLIENT_SECRET: OAuth 2.0 Client SecretGOOGLE_REFRESH_TOKEN: Refresh token with spreadsheets scope
How to connect
How to connect Google Sheets to Claude
The server address to paste into Claude settings:
https://google-sheets--node2flow.run.tools
- Open Claude (claude.ai or the desktop app).
- Go to Settings → Connectors.
- Click Add custom connector.
- Paste the server address copied below into Remote MCP server URL and click Add.
- In a chat, click + → Connectors and switch the new connector on.
Custom connectors are available on Free, Pro, Max, Team and Enterprise plans (Free is limited to one). On Team and Enterprise an organization Owner adds the connector first under Organization settings → Connectors.
Authorization
After you click Add, a sign-in window for the service opens. Sign in with your own account and approve access. Claude never sees your password.
How to connect Google Sheets to ChatGPT
The server address to paste into ChatGPT settings:
https://google-sheets--node2flow.run.tools
- Open ChatGPT in a browser (chatgpt.com). A Plus, Pro, Business, Enterprise or Edu plan is required.
- Turn on developer mode once: Settings → Apps → Advanced settings → Developer mode.
- Open Settings → Connectors and click Create.
- Fill in the form: Name (anything), Description (one line about what the service does), MCP server URL (copy it below).
- Under Authentication choose OAuth if the service requires sign-in, otherwise None. Click Create.
- In a new chat open + → Apps/Connectors and enable the connector.
OpenAI has renamed this section before (Connectors → Apps/Plugins). If the label differs, search settings for "developer mode". On Business/Enterprise workspaces an admin must allow custom connectors first.
Authorization
On first use ChatGPT opens the service's sign-in window. Sign in and approve access.
How to connect Google Sheets to Cursor
The server address to paste into Cursor settings:
https://google-sheets--node2flow.run.tools
Fastest: click Open in Cursor below and confirm the prompt.
Manually:
- In Cursor open Settings → Cursor Settings → MCP and click Add new global MCP server.
- Paste the JSON copied below into
~/.cursor/mcp.json(per project:.cursor/mcp.jsonin the repo root). - Save the file. The server appears in the MCP list; authorize it there if asked.
Authorization
If the service needs sign-in, an authorize button appears next to the server in the MCP list.
Server tool list (23)
Raw names from tools/list. Only developers need these.
| gs_create_spreadsheet | Create a new Google Sheets spreadsheet. Optionally specify sheet/tab names, locale, and timezone. Returns the spreadsheet ID and URL. |
| gs_get_spreadsheet | Get spreadsheet metadata — title, sheets list with properties (ID, title, row/column count, frozen rows), and optionally cell data for specific ranges. |
| gs_read_values | Read cell values from a range using A1 notation (e.g. "Sheet1!A1:C10", "A1:Z", "Sheet1"). Returns a 2D array of values. |
| gs_batch_read | Read values from multiple ranges at once. More efficient than multiple gs_read_values calls. |
| gs_write_values | Write values to a range. Values are provided as a 2D array (rows of columns). By default uses USER_ENTERED input (formulas and formatting are parsed). |
| gs_append_values | Append rows after the last row with data in the specified range. Automatically finds the end of existing data and adds new rows below. |
| gs_clear_values | Clear all values in a range. Only clears values — formatting, data validation, and other properties are preserved. |
| gs_batch_write | Write values to multiple ranges at once. More efficient than multiple gs_write_values calls. |
| gs_add_sheet | Add a new sheet/tab to a spreadsheet. Optionally set row/column count and tab color. |
| gs_delete_sheet | Delete a sheet/tab from a spreadsheet. Use gs_get_spreadsheet to find the sheet_id first. This action is irreversible. |
| gs_rename_sheet | Rename a sheet/tab in a spreadsheet. |
| gs_copy_sheet | Copy a sheet/tab to another spreadsheet. The authenticated user must have edit access to the destination spreadsheet. |
| gs_duplicate_sheet | Duplicate a sheet/tab within the same spreadsheet. Creates a copy with an optional new name. |
| gs_format_cells | Apply formatting to cells in a range — bold, italic, font size, colors, alignment, number format, and more. Uses 0-based row/column indices. |
| gs_merge_cells | Merge cells in a range. All values except the top-left cell are cleared. |
| gs_unmerge_cells | Unmerge previously merged cells in a range. |
| gs_auto_resize | Auto-resize columns or rows to fit their content. |
| gs_sort_range | Sort a range of data by a specific column. Uses 0-based indices for the range and sort column. |
| gs_find_replace | Find and replace text across one sheet or all sheets. Supports case-sensitive and regex search. |
| gs_set_basic_filter | Set or clear a basic filter (auto-filter) on a sheet. When set, filter dropdowns appear in column headers. |
| gs_add_protected_range | Protect a range of cells from editing. Optionally allow specific editors or show a warning instead of blocking. |
| gs_add_chart | Add a chart to a sheet. Specify chart type, data range, and anchor position. The chart is overlaid on the sheet. |
| gs_batch_update | Send a raw batchUpdate request with one or more request objects. Use this for advanced operations not covered by other tools (e.g. conditional formatting, data validation, dimension properties). See Google Sheets API batchUpdate documentation for available request types. |