Google Sheets MCP
MCP server for the Google Sheets API: read and write ranges, sheets, formatting, charts, sharing.
Connector by A1-x-Tech · GitHub account verified by the MCP Registry
Install
Works with Claude Code, Codex, VS Code, Cursor, Windsurf, Claude Desktop. Read the repository before you give any tool access to your data.
npx agentmarket install connector/a1-x-tech-mcp-google-sheets
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this server can do and what it asks for, from its tool list and install config. Checked Oct 25, 2026.
- Tools
- 3 read · 2 write · 15 delete
- Secrets
- 3 (API keys, tokens or passwords)
- Install scripts
- Not scanned yet
- Runs as
- Node.js package
Tools by what they do 20
Read from the source code; the running server may list different tools.
Read 3 · Look things up without changing anything.
get_spreadsheetread_valuessearch_spreadsheets
Write 2 · Create, change, send or run things.
append_valuescreate_spreadsheet
Delete 15 · Delete, drop, revoke or wipe things.
batch_write_valuesclear_valuesformat_cellsmanage_chartsmanage_conditional_formatsmanage_dimensionsmanage_permissionsmanage_protected_rangesmanage_sheetsmanage_tablesraw_requestset_borders
Show 3 more tools
set_data_validationset_frozenwrite_values
Secrets and settings it asks for
Secrets: values you paste in that let it act as you.
GOOGLE_SHEETS_ACCESS_TOKENGOOGLE_SHEETS_CLIENT_SECRETGOOGLE_SHEETS_REFRESH_TOKEN
Other settings (environment variables or headers).
GOOGLE_SHEETS_API_BASEGOOGLE_SHEETS_CLIENT_IDGOOGLE_SHEETS_MAX_RETRIESGOOGLE_SHEETS_OAUTH_PORTGOOGLE_SHEETS_TIMEOUT_MS
Files it touches
- Any path the agent passes to its tools
Tools (20)
Read from the source code; the running server may differ. Descriptions are the server’s own words; hidden characters are shown as [U+…].
append_valuesAppend rowsAppends rows after the last row of the data table that contains the given range — pass the table's region (e.g. "Sheet1!A1:D1" or just "Sheet1") and the API finds the first free row itself; the response's updates.updatedRange shows where the rows actually landed. insert_data_option INSERT_ROWS pushes existing data below down; OVERWRITE (default behaviour) writes into the free rows after the table. Never retried after an ambiguous failure — re-appending would duplicate the rows, so check the sheet first (read_values) before re-sending.
batch_write_valuesWrite values to many rangescan change or delete dataOverwrites several A1 ranges in ONE call — one write against the per-minute quota instead of one per range, so always prefer this over looping write_values. data is a list of {range, values} pairs; all are written with the same value_input_option (USER_ENTERED parses formulas/numbers/dates, RAW stores literally). Returns totalUpdatedCells and a per-range responses[] breakdown. Like write_values, null entries skip cells rather than clearing them.
clear_valuesClear valuescan change or delete dataEmpties the VALUES of one or more A1 ranges in a single call — cell contents and formulas are gone (no undo through the API), while formatting, data validation, notes, conditional formats and merges all stay. To also remove formatting use format_cells or raw_request; to delete whole rows/columns (not just their content) use manage_dimensions action=delete.
create_spreadsheetCreate a spreadsheetCreates a new Google Sheets spreadsheet and returns it: spreadsheetId, spreadsheetUrl, properties (title, locale, timeZone) and sheets[] with each sheet's numeric sheetId. sheet_titles creates one tab per title in order (omitted = a single default "Sheet1"). The file lands in the authorized user's My Drive root — moving it into a folder needs the Drive API, which this server does not cover. Save the returned spreadsheetId: the Sheets API has no list endpoint of its own (search_spreadsheets exists, but it needs a Drive scope on the token).
format_cellsFormat cellscan change or delete dataApplies cell formatting to a range: background_color, text color/bold/italic/strikethrough/underline/font_size/font_family, horizontal/vertical alignment, wrap_strategy, and number format (number_format_type NUMBER/PERCENT/CURRENCY/DATE/TIME/DATE_TIME/SCIENTIFIC/TEXT with an optional number_format_pattern like "#,##0.00" or "dd.mm.yyyy"). Only the provided properties are touched — the update mask is computed automatically, so existing formatting outside it survives; at least one formatting field is required. The range is a grid rectangle addressed by sheet_id + 0-based indexes (get sheet_id fr…
get_spreadsheetGet spreadsheet metadataread-onlyReturns the spreadsheet's structure: properties (title, locale, timeZone), sheets[] with properties (sheetId, title, index, gridProperties incl. rowCount/columnCount and frozenRowCount/frozenColumnCount), plus each sheet's protectedRanges, conditionalFormats, tables and charts, and the spreadsheet's namedRanges. Call this FIRST whenever a structural tool needs a sheetId, protectedRangeId, tableId, chartId or a conditional-format rule index — titles are not addresses. By default no cell data is returned; include_grid_data=true (optionally limited to ranges) embeds cells but is heavy — prefer re…
manage_chartsManage chartscan change or delete dataManages embedded charts. action=add builds a chart from chart_type (COLUMN/BAR/LINE/AREA/STEPPED_AREA/SCATTER/PIE), domain_range (x-axis labels / pie labels), series_ranges (one grid range per data series; PIE takes exactly one) and optional title/legend_position/header_count (rows of the ranges treated as headers, default 1) — place it with anchor {sheet_id,row_index,column_index} (the cell under the chart's top-left corner) or new_sheet=true for its own chart sheet; the reply carries the new chartId. Ranges should be single columns (or rows) including the header cell. For chart kinds beyond …
manage_conditional_formatsManage conditional formattingcan change or delete dataManages conditional-format rules that style cells when a condition holds (boolean rules; gradient color scales need raw_request). Rules are addressed by SHEET + INDEX in that sheet's rule list — get current rules and indexes from get_spreadsheet (sheets[].conditionalFormats), and re-read after every mutation because add/delete shift later indexes. action=add inserts a rule at index (default 0 = highest priority; rules are evaluated in order and the first match wins): needs ranges, condition_type (+condition_values; CUSTOM_FORMULA with a "=..." formula is the most flexible) and at least one for…
manage_dimensionsManage rows and columnscan change or delete dataRow/column operations on a run of rows (dimension=ROWS) or columns (dimension=COLUMNS), addressed by sheet_id + 0-based start_index (inclusive) and end_index (exclusive) — e.g. columns A-C = start 0, end 3. action=resize sets an exact pixel_size; auto_resize fits to content; insert adds empty rows/columns at start_index (inherit_from_before=true copies formatting from the row/column before instead of after); delete removes them WITH their data (irreversible; cell references below/right shift); hide/show toggle visibility without touching data; group/ungroup add or remove a collapsible outline …
manage_permissionsManage spreadsheet accesscan change or delete dataShares the spreadsheet (Drive permissions on the file — the OAuth token needs a Drive scope; the spreadsheets scope alone gets 403 here while every Sheets tool still works). action=list shows who has access: id, type, role, emailAddress/domain per permission; one page per call (shared-drive files cap a page at 100) — when the reply carries nextPageToken, pass it back as page_token for the rest. action=grant gives role reader/commenter/writer to type user/group (email_address required), domain (domain required, e.g. "example.com") or anyone (makes the link public — use deliberately); send_notif…
manage_protected_rangesManage protected rangescan change or delete dataManages protections that stop other editors from changing cells. action=add protects a grid range (or a named range via named_range_id; a range with only sheet_id protects the whole sheet): warning_only=true merely warns before edits, otherwise only the listed editor_users/editor_groups (emails) plus the owner may edit — note the calling user is NOT added automatically. Returns the new protectedRangeId in the replies. action=update changes description/warning_only/editors of an existing protection (protected_range_id required; provided fields replace the old values). action=delete removes the …
manage_sheetsManage sheetscan change or delete dataManages the sheets (tabs) of a spreadsheet. action=add creates a tab (title required; optional index position and row_count/column_count — default 1000×26). action=duplicate copies a tab within the same spreadsheet (sheet_id; optional title for the copy and index). action=rename changes a tab's title (sheet_id + title; the numeric sheetId never changes, so other tools keep working). action=delete removes the tab AND all its data — irreversible through the API, and deleting the last remaining sheet fails. action=copy_to copies a tab into ANOTHER spreadsheet (sheet_id + destination_spreadsheet_i…
manage_tablesManage tablescan change or delete dataManages structured tables (the "Convert to table" feature: named ranges with per-column types, filters and formatting). action=add creates a table over a grid range whose FIRST ROW becomes the header: name (must be unique in the spreadsheet) + range required; column_properties optionally types the columns — a list of raw TableColumnProperties objects, e.g. [{"columnIndex":0,"columnName":"Task","columnType":"TEXT"},{"columnIndex":1,"columnName":"Done","columnType":"BOOLEAN"}] (columnType TEXT/PERCENT/DROPDOWN/DOUBLE/CURRENCY/DATE/TIME/DATE_TIME/BOOLEAN; DROPDOWN adds dataValidationRule). The re…
raw_requestRaw Google Sheets API callcan change or delete dataEscape hatch to call any Google Sheets API v4 path directly, for requests the typed tools don't cover — e.g. a batchUpdate with mergeCells, named ranges, banding, basic filters, slicers, sortRange, findReplace, gradient conditional-format rules, developer metadata, or several requests in one atomic call: path "v4/spreadsheets/<spreadsheetId>:batchUpdate", method POST, body {"requests":[...]}. The path may carry a query string. The Bearer token is added automatically; the method defaults to GET (values updates use PUT). Sheets API paths only — Drive paths are not reachable here.
read_valuesRead valuesread-onlyReads one or more A1 ranges in a single call (one request against the quota, however many ranges) and returns valueRanges[] — each with its resolved range and a 2-D values array (outer = rows unless major_dimension=COLUMNS). Trailing empty rows/columns are omitted; a fully empty range has no values key at all. value_render_option: FORMATTED_VALUE (default, strings as displayed, honoring the cell's number format and locale), UNFORMATTED_VALUE (raw numbers/booleans), FORMULA (the formula text, e.g. "=SUM(A1:A10)" — the way to read formulas). With UNFORMATTED_VALUE, dates arrive as serial numbers…
Show 5 more tools
search_spreadsheetsSearch spreadsheetsread-onlyFinds Google Sheets spreadsheets the authorized user can open (own files and shared drives; trashed files are excluded): id, name, createdTime, modifiedTime, owners and webViewLink per file, newest-modified first by default. name_contains filters by name substring; omit it to list everything. Paginate with page_token from nextPageToken. This is the one read that goes through the Drive API internally, so the OAuth token needs a Drive scope (drive, drive.readonly or drive.file for app-created files) — with only the spreadsheets scope it fails with 403 while every other tool still works.
set_bordersSet cell borderscan change or delete dataDraws borders around and/or inside a grid range. top/bottom/left/right are the range's outer edges; inner_horizontal/inner_vertical are the grid lines between cells inside it. Each side takes {style, color?} — styles SOLID, SOLID_MEDIUM, SOLID_THICK, DOTTED, DASHED, DOUBLE, or NONE to remove that side's border. Only the provided sides change; at least one is required. Colors are "#RRGGBB" hex (default black).
set_data_validationSet data validationcan change or delete dataSets — or clears — a data-validation rule on a grid range. With condition_type set, every cell in the range gets the rule: ONE_OF_LIST with condition_values plus show_custom_ui=true is the classic in-cell dropdown; ONE_OF_RANGE takes a "=Sheet1!A1:A10" formula; NUMBER_/TEXT_/DATE_ conditions restrict input; CUSTOM_FORMULA takes a formula evaluated per cell. strict=true rejects invalid input outright, strict=false only shows a warning; input_message is the help text shown on the cell. OMIT condition_type (and the other rule fields) to REMOVE validation from the range. Overwrites any previous ru…
set_frozenFreeze rows and columnscan change or delete dataFreezes the first N rows and/or columns of a sheet so they stay visible while scrolling (typical: frozen_rows=1 pins the header). 0 unfreezes. At least one of frozen_rows / frozen_columns is required; the other stays as it is. You cannot freeze all rows or all columns of a sheet — at least one unfrozen row/column must remain.
write_valuesWrite values to a rangecan change or delete dataOverwrites one A1 range with a 2-D values matrix (rows first) and returns updatedRange/updatedRows/updatedColumns/updatedCells. The matrix is anchored at the range's top-left corner; cells beyond the matrix keep their old content, and a null entry skips (does not clear) that cell — use clear_values to empty cells. value_input_option USER_ENTERED (default) parses input like typing in the UI: "=SUM(A1:A10)" becomes a live formula, "1,234" and "2026-01-15" become number/date per the spreadsheet locale; RAW stores everything as literal values. For several ranges use batch_write_values (one quota u…
Signals
- Stars
- 1
- Forks
- 0
- Open issues
- 0
- Weekly downloads
- 45
- Last commit
- Oct 4, 2026 (24 days ago)
- Last release
- Sep 23, 2026 (1 month ago)
- Last package publish
- Sep 23, 2026 (1 month ago)
From GitHub (fetched Oct 24, 2026) and the package registry.
Details
- Registry name
io.github.A1-x-Tech/mcp-google-sheets- Version
- 1.0.0
- Auth
- API key
- Packages
- npm @a1-x-tech/mcp-google-sheets
- License
- MIT
- Repository
- github.com/A1-x-Tech/mcp-google-sheets
- First seen
- Oct 24, 2026
- Last checked
- Oct 25, 2026
More from A1-x-Tech
- 0.535score
Google Slides MCP
A1-x-Tech
MCP server for the Google Slides API: presentations, slides, text, shapes, images and tables.
ConnectorAFreshness: ALocal★ 1↓ 37/wkClaude Code +5 - 0.535score
Google Business Profile MCP
A1-x-Tech
MCP server for Google Business Profile: locations, reviews, local posts and performance metrics.
ConnectorAFreshness: ALocal★ 4Claude Code +5 - 0.526score
Google Drive MCP
A1-x-Tech
MCP server for the Google Drive API: search, upload, download, organize and share files.
ConnectorAFreshness: ALocal↓ 38/wkClaude Code +5 - 0.526score
Google Calendar MCP
A1-x-Tech
MCP server for the Google Calendar API: events, recurrence, invitations, availability, calendars.
ConnectorAFreshness: ALocal↓ 36/wkClaude Code +5 - 0.524score
Google Docs MCP
A1-x-Tech
MCP server for the Google Docs API: read and edit documents, styles, tables, images, comments.
ConnectorAFreshness: ALocal↓ 27/wkClaude Code +5 - 0.515score
Avito Ads MCP
A1-x-Tech
MCP server for the Avito Ads API: campaigns, ad groups, creatives, statistics and balances.
ConnectorAFreshness: ALocal★ 1Claude Code +5
Cite this page
Google Sheets MCP. Agent Mart. https://agentmart.dev/connectors/a1-x-tech-mcp-google-sheets (last updated 2026-10-25)