Sheets MCP
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| prompts | {
"listChanged": true
} |
| resources | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| google_accountsA | Manage the Google accounts Sheets MCP can use. list: show signed-in accounts and the default. add: sign in to a Google account (opens a browser sign-in; also use this when a sign-in has expired). remove: sign an account out and revoke access. set_default: choose the account used for new spreadsheets. |
| find_spreadsheetA | Find a spreadsheet by name among the ones the user has opened or created with Sheets MCP before (the list is kept on their computer). Use it when the user names a sheet instead of pasting a link, e.g. "my budget sheet". It can't search the rest of their Google Drive: if nothing matches, ask for the link. Leave query empty to list the most recent. |
| create_spreadsheetC | Create a new Google Sheets spreadsheet. |
| get_spreadsheet_infoA | Get a spreadsheet's title, tabs (sizes, frozen rows/cols), charts (ids, types, data ranges), named ranges, and the first few rows of each tab. Call this first to understand a sheet's layout. |
| read_rangeA | Read cell contents from a range, or its formatting with mode "formats". Large ranges are truncated; use next_range to continue. |
| read_rangesA | Read several ranges in one call, across any tabs. Faster than calling read_range repeatedly. Each range is truncated to its share of max_cells; use its next_range with read_range to continue. |
| write_rangeA | Write values and/or formulas starting at the top-left cell of the range. Input is parsed like typing into the UI (formulas, dates, percentages work). Previous contents are saved for undo_last. Returns any formula errors found after writing. |
| fill_rangeA | Fill cells from a source block, like dragging the fill handle or pasting onto a bigger selection: the source's formulas (relative references shift), values and formatting repeat across the destination. Use it after writing one row or column of formulas to extend them across a table, instead of sending every column. With continue_series, patterns continue instead (1, 2, 3 → 4, 5, 6; Jan → Feb; dates). The destination's previous contents are saved for undo_last. Returns any formula errors found after filling. |
| append_rowsA | Append rows after the last row of data in a table (detected from the given range or tab). |
| clear_rangeA | Clear values and formulas in a range (formatting is kept). Previous contents are saved for undo_last. |
| find_replaceA | Find and replace text across a tab or the whole spreadsheet. Not undoable - consider read_range first. |
| undo_lastA | Undo the most recent write_range, append_rows, or clear_range made through this server (restores values/formulas only, not formatting or structure). History is kept in memory until the server restarts. |
| manage_tabC | Add, delete, rename, or duplicate a tab (sheet). |
| insert_rows_or_columnsB | Insert blank rows or columns before a given row number or column letter. |
| delete_rows_or_columnsA | Delete entire rows (e.g. "Sheet1!5:7") or columns (e.g. "Sheet1!C:D"). Not undoable. |
| freezeA | Freeze header rows and/or columns on a tab. Use 0 to unfreeze. |
| resize_columnsA | Set column widths in pixels, or auto-fit them to content when width is omitted. |
| merge_cellsC | Merge or unmerge cells in a range. |
| format_rangeA | Apply formatting to a range: font styles, colors, number formats, alignment, wrapping, borders. Only provided options are changed. To style several ranges differently in one go, use format_ranges. |
| format_rangesA | Apply different formatting to several ranges in one call (same options as format_range, one entry per range): headers, input cells, number formats, borders and so on for a whole tab at once. Ranges may repeat; later entries win where they overlap. |
| add_conditional_formatB | Add a conditional formatting rule: either a condition (e.g. NUMBER_GREATER, TEXT_CONTAINS, CUSTOM_FORMULA) with a style, or a color scale. |
| sort_rangeC | Sort rows within a range by one or more columns. |
| set_filterA | Turn on a basic filter (filter buttons in the header row) for a range, or clear the tab's filter. |
| set_data_validationB | Add data validation to a range: dropdown list, dropdown from a range, checkbox, number range, custom formula - or clear it. |
| add_chartA | Create a chart from a data range. The first column is the X axis/labels; each following column is a series. Use a header row for series names. |
| update_chartA | Change an existing chart: its title, type, data range, stacking, position or size. Only the options you give are changed. Chart ids come from get_spreadsheet_info or add_chart. |
| delete_chartA | Delete a chart. Chart ids come from get_spreadsheet_info or add_chart. Not undoable through undo_last. |
| add_pivot_tableA | Summarize a table with a pivot table: group by one or more columns, and total, count or average others. It goes on a new tab unless anchor_cell is given. The source range needs a header row; refer to columns by header name or letter. |
| batch_updateA | Send raw Google Sheets API batchUpdate requests for anything the other tools don't cover (e.g. named ranges, protected ranges, pivot tables, row heights, hiding rows, updating charts). Requests use sheetId numbers from get_spreadsheet_info. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| get_started | What Sheets MCP can do, and which Google accounts are connected |
| recent_sheets | Pick from the spreadsheets you've worked on with Sheets MCP |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| recent_sheets_091fcae3c1 | Searchable list of the spreadsheets used with Sheets MCP |
| sheet_preview_9b879b46cc | Inline preview of a range, with Claude's changes highlighted |
TDQS
Scored across 29 tools
Most tools target a distinct resource+action (read/write/fill/clear/format/sort/chart/tab), so boundaries are clear. The close pairs read_range/read_ranges and format_range/format_ranges are distinguished only by the plural/batch wording, and batch_update is a catch-all that can overlap anything, but descriptions keep them separable.
Strong, predictable verb_noun snake_case throughout (create_spreadsheet, read_range, add_chart, delete_rows_or_columns). Minor deviations are a few noun-only or bare-verb names like google_accounts and freeze, which don't break readability.
29 tools is on the heavy side and pushes past the comfortable range, though the breadth of a full spreadsheet app (values, formatting, charts, pivots, validation) justifies most of them. A few batch variants and the batch_update escape hatch add weight without adding much.
Covers the full lifecycle: read/write/fill/append/clear, undo, tab management, row/column insert-delete, freeze, resize, merge, formatting, conditional formatting, sort, filter, validation, charts (add/update/delete), pivot tables, plus a raw batchUpdate for gaps. No obvious dead ends.