Google Sheets
Arcade.dev LLM tools for Google Sheets.
Google Sheets toolkit connects Arcade to Google Sheets (and Drive), enabling LLMs to create, read, edit, search, and audit spreadsheets on behalf of authenticated users.
Capabilities
- Spreadsheet creation & editing — Create new spreadsheets or batch-edit existing ones using typed cell operations (updateCells, addSheet, sortRange, addConditionalFormatRule, autoResizeDimensions, and more); supports formulas, formatting, and structured table layouts.
- Structure inspection & data reading — Inspect workbook structure (tabs, charts, merges, conditional formats, table regions) cheaply before reading, then pull specific cell ranges as grids with optional annotations and markdown/CSV/TSV export.
- Search & discovery — Search a user's Google Drive for spreadsheets by title or content, returning metadata (title, ID, URL); excludes trashed files.
- Edit history auditing — Retrieve revision history (contributor identity and timestamps) from Drive; supports summary mode (aggregates, recent preview) and paginated list mode for full history traversal.
- Drive file picker integration — Generate a first-party Google Drive Picker URL to let users grant file-level access when a file is not found or access is denied, enabling retry flows.
- User profile & permissions — Retrieve the authenticated user's name, email, profile picture, and Google Sheets access permissions.
OAuth
This toolkit uses OAuth 2.0 via Google. See the Arcade Google auth provider docs for setup details.
Secrets
ENABLE_GOOGLE_DRIVE_INLINE_PICKER_URL
This secret is a URL override or feature flag value that controls the behavior of the inline Google Drive Picker flow used by GoogleSheets.GenerateGoogleFilePickerUrl. It is not a credential issued by Google — it is a configuration value set by the developer (or Arcade platform operator) to enable or customize the picker URL endpoint used internally. Set this in your Arcade secrets configuration; no specific Google dashboard page issues it.
See the Arcade secrets configuration docs for how to define and manage secrets, and the Arcade secrets dashboard to set values.
Available tools(6)
| Tool name | Description | Secrets | |
|---|---|---|---|
Create a new spreadsheet or batch-edit an existing one.
Omit `spreadsheet_id` to create; provide it to edit. All writes flow through
`requests[]` — typed operations like updateCells, addSheet, sortRange,
addConditionalFormatRule, autoResizeDimensions, and more.
For updateCells use ExtendedValue with an explicit type field (stringValue,
numberValue, boolValue, formulaValue).
By default, build clean, professional-looking tables with restrained, consistent
formatting and plain-text tab names/headers (no emojis); only use emojis or
decorative styling when the user explicitly asks for it. | 1 | ||
Generate a URL where the user can grant this app access to specific Drive files.
Opens Google's first-party Drive picker. The user selects which files to share
with this application — it is not a sign-in or credential prompt.
Use this when a prior tool reported that a file was not found or access was denied,
and the user expects the file to exist. After the user completes the picker flow,
retry the prior tool. | |||
Report who edited a spreadsheet and when, from Google Drive revisions.
Reports the "who" and "when" only — not which cells changed, and it can't revert.
'summary' (default) answers "who last edited this and when" (read from the file's head,
so always accurate), plus per-window aggregates (revisions read, contributors, first
edit) and a preview of recent edits — computed over a bounded window of history per call.
These aggregates describe the whole history only when `is_incomplete` is false; it is
true when the scan was resumed from a token and/or more history remains. To answer
"when was this first edited?" or "who contributed?" reliably, call from the beginning
(no `pagination_token`) and check `is_incomplete` is false. `pagination_token` is
returned when more pages remain so you can resume.
'list' returns one page of individual revisions, oldest first. Drive can't sort
newest-first, so the most recent individual revisions are on the final page. | 1 | ||
Inspect a Google Sheets spreadsheet's structure or read a range of cells.
Use the default 'structure' mode to understand a workbook cheaply before reading.
Switch to 'read' mode to pull a range as a grid of rows, optionally with
per-cell annotations and a rendered markdown/csv/tsv export.
In 'read' mode the response's per-tab 'sheets' block reports only tab identity and
the allocated grid; its scan-derived fields (used_range, populated_cell_count,
formula_cell_count, first_row, table_regions) are placeholders (0/empty) because read
mode does not scan the tab — they do NOT mean the tab is empty or that it has no
tables. The data you read is in the top-level 'range' and 'rows'. Call 'structure'
mode for those aggregates and for the workbook's charts, merges, protected ranges, and
conditional formats.
Workflow for a tab that holds multiple tables, or a table that does not start at A1:
call 'structure' first and use that tab's estimated 'table_regions' to choose the
a1_range to read or filter, so you target one table instead of a glued multi-table
range.
Always check the response's top-level 'warnings' list: read mode reports there when a
result was capped or trimmed (cell budget, the per-cell annotation cap, or an empty
filter scan) and tells you how to recover (page 'next_range', narrow 'a1_range',
'select_columns', or request fewer annotation kinds). | 1 | ||
Searches for spreadsheets in the user's Google Drive based on the titles and content and
returns the title, ID, and URL for each matching spreadsheet.
Does not return the content/data of the sheets in the spreadsheets - only the metadata.
Excludes spreadsheets that are in the trash. | 1 | ||
Get comprehensive user profile and Google Sheets environment information.
This tool provides detailed information about the authenticated user including
their name, email, profile picture, Google Sheets access permissions, and other
important profile details from Google services. |
Selected tools
No tools selected.
Click "Show all tools" to add tools.
Requirements
Select tools to see requirements
GoogleSheets.CreateOrEditSpreadsheet
Execution hints
Signals for MCP clients and agents about how this tool behaves.
Reads data without modifying any state in the target system.
May permanently delete or overwrite data in the target system.
Repeated calls with the same inputs produce no additional effect.
Communicates with external APIs, databases, or other services.
Create a new spreadsheet or batch-edit an existing one. Omit `spreadsheet_id` to create; provide it to edit. All writes flow through `requests[]` — typed operations like updateCells, addSheet, sortRange, addConditionalFormatRule, autoResizeDimensions, and more. For updateCells use ExtendedValue with an explicit type field (stringValue, numberValue, boolValue, formulaValue). By default, build clean, professional-looking tables with restrained, consistent formatting and plain-text tab names/headers (no emojis); only use emojis or decorative styling when the user explicitly asks for it.
Parameters
| Parameter | Type | Req. | Description |
|---|---|---|---|
requests | array<json> | Optional | A list of Google Sheets `spreadsheets.batchUpdate` request objects. Each object must have exactly one key naming the operation. Examples: FIELDS MASK: updateCells, repeatCell, updateSheetProperties, and updateDimensionProperties take a `fields` mask listing which sub-fields to write — anything you set but don't name is silently ignored. You can OMIT `fields` and the tool auto-derives it from the data you provide (recommended). Pass an explicit `fields` only for surgical edits, or `fields: "*"` to overwrite every sub-field (clearing ones you didn't provide). updateCells — write typed values and formatting to a range. Use `range` OR `start` to anchor the write. Values must be wrapped in `userEnteredValue` with an explicit type field (stringValue, numberValue, boolValue, formulaValue). `fields` is auto-derived when omitted: {"updateCells": {"range": {"sheetId": 0, "startRowIndex": 0, "endRowIndex": 1, "startColumnIndex": 0, "endColumnIndex": 3}, "rows": [{"values": [{"userEnteredValue": {"stringValue": "Name"}, "userEnteredFormat": {"textFormat": {"bold": true}}}, {"userEnteredValue": {"numberValue": 42}}, {"userEnteredValue": {"formulaValue": "=SUM(B1:B10)"}}]}], "fields": "userEnteredValue,userEnteredFormat.textFormat.bold"}} repeatCell — apply one CellData to every cell in a range. Good for painting formatting, notes, or validation without enumerating rows: {"repeatCell": {"range": {"sheetId": 0, "startRowIndex": 1, "endRowIndex": 100}, "cell": {"userEnteredFormat": {"backgroundColorStyle": {"rgbColor": {"red": 0.95, "green": 0.95, "blue": 0.95}}}}, "fields": "userEnteredFormat.backgroundColorStyle"}} updateBorders — set per-edge borders. Each side takes a Border with a style (SOLID, DASHED, DOTTED, NONE, SOLID_MEDIUM, SOLID_THICK, DOUBLE): {"updateBorders": {"range": {"sheetId": 0, "startRowIndex": 0, "endRowIndex": 3, "startColumnIndex": 0, "endColumnIndex": 3}, "top": {"style": "SOLID_THICK"}, "bottom": {"style": "SOLID_THICK"}, "left": {"style": "SOLID"}, "right": {"style": "SOLID"}, "innerHorizontal": {"style": "DASHED"}, "innerVertical": {"style": "DASHED"}}} addSheet — create a new tab. Omit sheetId to let Google assign one; read the new ID from created_resources in the reply: {"addSheet": {"properties": {"title": "Q2", "index": 1, "gridProperties": {"rowCount": 200, "columnCount": 26, "frozenRowCount": 1}}}} deleteSheet — remove a tab permanently by sheetId: {"deleteSheet": {"sheetId": 1234567890}} duplicateSheet — clone a tab. newSheetId is auto-assigned when omitted: {"duplicateSheet": {"sourceSheetId": 0, "insertSheetIndex": 1, "newSheetName": "Copy of Q1"}} updateSheetProperties — rename, reorder, freeze rows/columns, or recolor a tab. fields is rooted at properties: {"updateSheetProperties": {"properties": {"sheetId": 0, "gridProperties": {"frozenRowCount": 1}}, "fields": "gridProperties.frozenRowCount"}} updateSpreadsheetProperties — rename the whole spreadsheet (file) or change workbook-level properties. Use this (not updateSheetProperties) to change the spreadsheet title: {"updateSpreadsheetProperties": {"properties": {"title": "Q3 Report"}, "fields": "title"}} insertDimension — add rows or columns. Both startIndex and endIndex are REQUIRED: {"insertDimension": {"range": {"sheetId": 0, "dimension": "ROWS", "startIndex": 2, "endIndex": 4}, "inheritFromBefore": true}} deleteDimension — remove rows or columns. Apply largest-index first within a batch to avoid index shift: {"deleteDimension": {"range": {"sheetId": 0, "dimension": "COLUMNS", "startIndex": 5, "endIndex": 8}}} mergeCells — mergeType is MERGE_ALL, MERGE_COLUMNS, or MERGE_ROWS: {"mergeCells": {"range": {"sheetId": 0, "startRowIndex": 0, "endRowIndex": 1, "startColumnIndex": 0, "endColumnIndex": 5}, "mergeType": "MERGE_ALL"}} unmergeCells — range must not partially span an existing merge: {"unmergeCells": {"range": {"sheetId": 0, "startRowIndex": 0, "endRowIndex": 1, "startColumnIndex": 0, "endColumnIndex": 5}}} findReplace — scope with ONE of range, sheetId, or allSheets: {"findReplace": {"find": "TBD", "replacement": "N/A", "matchCase": false, "matchEntireCell": true, "allSheets": true}} addNamedRange — create a workbook-scoped named range. Server assigns namedRangeId: {"addNamedRange": {"namedRange": {"name": "revenue", "range": {"sheetId": 0, "startRowIndex": 1, "endRowIndex": 1000, "startColumnIndex": 1, "endColumnIndex": 2}}}} addProtectedRange — lock a range. warningOnly=true gives soft protection: {"addProtectedRange": {"protectedRange": {"range": {"sheetId": 0, "startRowIndex": 0, "endRowIndex": 1}, "description": "Do not edit headers", "warningOnly": true}}} setDataValidation — attach a validation rule to a range. Omit rule to clear: {"setDataValidation": {"range": {"sheetId": 0, "startRowIndex": 1, "endRowIndex": 100, "startColumnIndex": 2, "endColumnIndex": 3}, "rule": {"condition": {"type": "ONE_OF_LIST", "values": [{"userEnteredValue": "PENDING"}, {"userEnteredValue": "DONE"}]}, "strict": true, "showCustomUi": true}}} addConditionalFormatRule — insert a conditional-format rule at given index. Use booleanRule for categorical formatting: {"addConditionalFormatRule": {"index": 0, "rule": {"ranges": [{"sheetId": 0, "startRowIndex": 1, "endRowIndex": 100}], "booleanRule": {"condition": {"type": "NUMBER_LESS", "values": [{"userEnteredValue": "0"}]}, "format": {"backgroundColorStyle": {"rgbColor": {"red": 1.0, "green": 0.9, "blue": 0.9}}}}}}} addChart — embed a chart. Server assigns chartId in the reply: {"addChart": {"chart": {"spec": {"title": "Revenue by quarter", "basicChart": {"chartType": "COLUMN", "domains": [{"domain": {"sourceRange": {"sources": [{"sheetId": 0, "startRowIndex": 0, "endRowIndex": 5, "startColumnIndex": 0, "endColumnIndex": 1}]}}}], "series": [{"series": {"sourceRange": {"sources": [{"sheetId": 0, "startRowIndex": 0, "endRowIndex": 5, "startColumnIndex": 1, "endColumnIndex": 2}]}}}]}}, "position": {"newSheet": true}}}} sortRange — sort rows in a range by one or more columns. sortSpecs is ordered by priority (first = primary sort key). sortOrder is ASCENDING or DESCENDING: {"sortRange": {"range": {"sheetId": 0, "startRowIndex": 1, "endRowIndex": 100, "startColumnIndex": 0, "endColumnIndex": 5}, "sortSpecs": [{"dimensionIndex": 0, "sortOrder": "ASCENDING"}, {"dimensionIndex": 2, "sortOrder": "DESCENDING"}]}} autoResizeDimensions — resize columns or rows to fit their content. dimension is COLUMNS or ROWS: {"autoResizeDimensions": {"dimensions": {"sheetId": 0, "dimension": "COLUMNS", "startIndex": 0, "endIndex": 3}}} NOTE: the tool automatically runs all autoResizeDimensions requests in a second batchUpdate call after all other requests have been applied. This ensures the resize measures post-write cell contents, including spilling formulas (ARRAYFORMULA, SEQUENCE, MAKEARRAY, QUERY) whose spill values only exist after the first call returns. If the resize call fails (e.g. transient error), writes are unaffected and a warning is returned instead of an error. updateDimensionProperties (pixelSize) sets an explicit pixel width and does not need this treatment — it can stay in the same batch as writes. updateDimensionProperties — set explicit pixel size or hide a row/column. fields is a mask rooted at DimensionProperties: {"updateDimensionProperties": {"range": {"sheetId": 0, "dimension": "COLUMNS", "startIndex": 1, "endIndex": 2}, "properties": {"pixelSize": 200}, "fields": "pixelSize"}} |
spreadsheet_id | string | Optional | ID of an existing spreadsheet to edit. Omit to create a new spreadsheet. |
title | string | Optional | Title for a newly created spreadsheet. Ignored when spreadsheet_id is provided. Defaults to 'Untitled spreadsheet'. |
Requirements
Output
json— Spreadsheet state after the operation.GoogleSheets.GenerateGoogleFilePickerUrl
Execution hints
Signals for MCP clients and agents about how this tool behaves.
Reads data without modifying any state in the target system.
May permanently delete or overwrite data in the target system.
Repeated calls with the same inputs produce no additional effect.
Communicates with external APIs, databases, or other services.
Generate a URL where the user can grant this app access to specific Drive files. Opens Google's first-party Drive picker. The user selects which files to share with this application — it is not a sign-in or credential prompt. Use this when a prior tool reported that a file was not found or access was denied, and the user expects the file to exist. After the user completes the picker flow, retry the prior tool.
Parameters
No parameters required.
Requirements
Output
json— Google File Picker URL for user file selection and permission grantingGoogleSheets.GetSpreadsheetEditHistory
Execution hints
Signals for MCP clients and agents about how this tool behaves.
Reads data without modifying any state in the target system.
May permanently delete or overwrite data in the target system.
Repeated calls with the same inputs produce no additional effect.
Communicates with external APIs, databases, or other services.
Report who edited a spreadsheet and when, from Google Drive revisions. Reports the "who" and "when" only — not which cells changed, and it can't revert. 'summary' (default) answers "who last edited this and when" (read from the file's head, so always accurate), plus per-window aggregates (revisions read, contributors, first edit) and a preview of recent edits — computed over a bounded window of history per call. These aggregates describe the whole history only when `is_incomplete` is false; it is true when the scan was resumed from a token and/or more history remains. To answer "when was this first edited?" or "who contributed?" reliably, call from the beginning (no `pagination_token`) and check `is_incomplete` is false. `pagination_token` is returned when more pages remain so you can resume. 'list' returns one page of individual revisions, oldest first. Drive can't sort newest-first, so the most recent individual revisions are on the final page.
Parameters
| Parameter | Type | Req. | Description |
|---|---|---|---|
spreadsheet_id | string | Required | The id of the spreadsheet to get the edit history for. |
mode | string | Optional | 'summary' (default): the latest edit, plus per-window aggregates (revisions read, contributors, first edit) that cover the whole history only when is_incomplete is false, and a preview of recent edits. 'list': one page of individual revisions.summarylist |
limit | integer | Optional | Max revisions per page in 'list' mode. Between 1 and 50. Defaults to 20. Ignored in 'summary' mode. |
pagination_token | string | Optional | Token from a previous response's pagination_token, to continue reading more history. Works in both modes. |
Requirements
Output
json— Edit history: who modified the spreadsheet and when. Always has spreadsheet_id and mode. 'summary' adds an accurate last_modified_time/last_modified_by, best-effort window_revision_count/contributors/first_modified_time, recent_edits, and is_incomplete. 'list' adds a page of revisions with revisions_count, limit, ordering, has_next_page. Both modes return a pagination_token when more history remains.GoogleSheets.InspectSpreadsheet
Execution hints
Signals for MCP clients and agents about how this tool behaves.
Reads data without modifying any state in the target system.
May permanently delete or overwrite data in the target system.
Repeated calls with the same inputs produce no additional effect.
Communicates with external APIs, databases, or other services.
Inspect a Google Sheets spreadsheet's structure or read a range of cells. Use the default 'structure' mode to understand a workbook cheaply before reading. Switch to 'read' mode to pull a range as a grid of rows, optionally with per-cell annotations and a rendered markdown/csv/tsv export. In 'read' mode the response's per-tab 'sheets' block reports only tab identity and the allocated grid; its scan-derived fields (used_range, populated_cell_count, formula_cell_count, first_row, table_regions) are placeholders (0/empty) because read mode does not scan the tab — they do NOT mean the tab is empty or that it has no tables. The data you read is in the top-level 'range' and 'rows'. Call 'structure' mode for those aggregates and for the workbook's charts, merges, protected ranges, and conditional formats. Workflow for a tab that holds multiple tables, or a table that does not start at A1: call 'structure' first and use that tab's estimated 'table_regions' to choose the a1_range to read or filter, so you target one table instead of a glued multi-table range. Always check the response's top-level 'warnings' list: read mode reports there when a result was capped or trimmed (cell budget, the per-cell annotation cap, or an empty filter scan) and tells you how to recover (page 'next_range', narrow 'a1_range', 'select_columns', or request fewer annotation kinds).
Parameters
| Parameter | Type | Req. | Description |
|---|---|---|---|
spreadsheet_id | string | Required | The id of the spreadsheet to inspect. |
mode | string | Optional | What to return. 'structure' (default) gives a cheap workbook overview: every tab's ids, allocated grid, frozen panes, merges, charts, protected ranges, conditional-format counts, real used range, first row, and ESTIMATED table_regions (A1 ranges of distinct data blocks per tab — a heuristic for spotting multiple tables in one tab; scope a1_range to one of these to read or filter a single table; empty for tabs too large to peek). 'read' pulls cell data from one tab.structureread |
sheet_id | integer | Optional | Read mode only: select the tab by its numeric sheetId. Mutually exclusive with sheet_title. Defaults to the first tab when both are omitted. |
sheet_title | string | Optional | Read mode only: select the tab by name. Mutually exclusive with sheet_id. Defaults to the first tab when both are omitted. |
a1_range | string | Optional | Read mode only: the range of cells to pull, in A1 notation (e.g. 'A1:F100'), WITHIN the selected tab — the tab is chosen by sheet_id/sheet_title, and any sheet prefix here (e.g. 'Other!A1:B2') is ignored. Defaults to the tab's used range. This is also the paging knob — request the next range to page. |
annotations | array<string> | Optional | Read mode only: per-cell extras to include — pass only the kinds you need (e.g. ['formulas','notes']); each extra kind adds payload. Omit or leave empty to return values only (cheaper). Returned sparsely — one entry only per cell that carries a requested extra — and capped at the first 500 entries (row-major). Over that cap a warning is returned; rows may extend past the annotated slice, so a missing annotation beyond the cap is NOT authoritative — re-read a narrower a1_range, use select_columns, or request fewer kinds to confirm.formulasnotesnumber_formatsdata_validationconditional_formatsmergestypeshyperlinksprotectedspill |
export_as | string | Optional | Read mode only: also render the returned values as text. Omit to return structured values only. csv/tsv are lossless; markdown is display-oriented (in-cell newlines become <br>, pipes are escaped).markdowncsvtsv |
value_render | string | Optional | Read mode only: 'formatted' (default) returns display strings like '$1,234.50'; 'unformatted' returns raw values suitable for math.formattedunformatted |
max_length | integer | Optional | Read mode only: cap each returned cell string at this many characters. A longer cell becomes '<first chars>…(+N chars)' (the suffix is not counted; N = hidden chars). Pass 0 for full, untruncated strings; a positive value below the floor (or negative) clamps up to the floor. Filtering still matches the full cell value. Defaults to a small cap (50). |
max_rows | integer | Optional | Read mode only: maximum rows to return. Sets truncated=True when the range has more rows; pass the returned next_range as a1_range to page. When filtering, this bounds the rows SCANNED per page (matches may be fewer, even 0 — page until next_range is empty). Also capped so rows x columns stays within 4000 cells: a wide range returns fewer rows than requested (with a warning) and pages the rest. Defaults to 200. |
filter_conditions | array<json> | Optional | Read mode only: keep only rows matching these conditions. Each is {column, op, value} where column is the spreadsheet column LETTER (e.g. 'C'), NOT the header name, and must be inside a1_range. Ops: eq/ne (exact string), contains/not_contains (case-insensitive substring), gt/gte/lt/lte (NUMERIC only — text columns match nothing), blank/not_blank (value is ignored — pass ''). Numeric ops parse currency like $1,234.50, but NOT percents (21%) or other formatted text — set value_render='unformatted' and compare against the underlying number (percents are stored as fractions, e.g. 0.21 for 21%). A warning is returned when a numeric filter matches nothing it scanned. Scans within a1_range only — page next_range for completeness, and scope a1_range to a single homogeneous table (use structure mode's table_regions to find each table's range; exclude header/title rows, which would otherwise be filtered as data). |
filter_combine | string | Optional | Read mode only: how to combine multiple filter_conditions — a single top-level 'and'/'or' applied to all conditions (no nested grouping or mixed and/or). Defaults to 'and'.andor |
select_columns | array<string> | Optional | Read mode only: return only these columns, by spreadsheet column LETTER (not header name), in this order. Defaults to all columns in a1_range. |
include_headers | boolean | Optional | Structure mode only: include each tab's first row in the overview. Defaults to True. |
Requirements
Output
json— The requested structure overview or range data.GoogleSheets.SearchSpreadsheets
Execution hints
Signals for MCP clients and agents about how this tool behaves.
Reads data without modifying any state in the target system.
May permanently delete or overwrite data in the target system.
Repeated calls with the same inputs produce no additional effect.
Communicates with external APIs, databases, or other services.
Searches for spreadsheets in the user's Google Drive based on the titles and content and returns the title, ID, and URL for each matching spreadsheet. Does not return the content/data of the sheets in the spreadsheets - only the metadata. Excludes spreadsheets that are in the trash.
Parameters
| Parameter | Type | Req. | Description |
|---|---|---|---|
spreadsheet_contains | array<string> | Optional | Keywords or phrases that must be in the spreadsheet title. Provide a list of keywords or phrases if needed. |
spreadsheet_not_contains | array<string> | Optional | Keywords or phrases that must NOT be in the spreadsheet title. Provide a list of keywords or phrases if needed. |
search_only_in_shared_drive_id | string | Optional | The ID of the shared drive to restrict the search to. If provided, the search will only return spreadsheets from this drive. Defaults to None, which searches across all drives. |
include_shared_drives | boolean | Optional | Whether to include spreadsheets from shared drives. Defaults to False (searches only in the user's 'My Drive'). |
include_organization_domain_spreadsheets | boolean | Optional | Whether to include spreadsheets from the organization's domain. This is applicable to admin users who have permissions to view organization-wide spreadsheets in a Google Workspace account. Defaults to False. |
order_by | array<string> | Optional | Sort order. Defaults to listing the most recently modified spreadsheets first. If spreadsheet_contains or spreadsheet_not_contains is provided, then the order_by will be ignored.createdTimecreatedTime descfolderfolder descmodifiedByMeTimemodifiedByMeTime descmodifiedTimemodifiedTime descnamename descname_naturalname_natural descquotaBytesUsedquotaBytesUsed descrecencyrecency descsharedWithMeTimesharedWithMeTime descstarredstarred descviewedByMeTimeviewedByMeTime desc |
limit | integer | Optional | The maximum number of spreadsheets to list. Defaults to 10. Max is 50 |
pagination_token | string | Optional | The pagination token to continue a previous request |
Requirements
Output
json— A dictionary containing the title, ID, and URL for each matching spreadsheet. Also contains a pagination token if there are more spreadsheets to list.GoogleSheets.WhoAmI
Execution hints
Signals for MCP clients and agents about how this tool behaves.
Reads data without modifying any state in the target system.
May permanently delete or overwrite data in the target system.
Repeated calls with the same inputs produce no additional effect.
Communicates with external APIs, databases, or other services.
Get comprehensive user profile and Google Sheets environment information. This tool provides detailed information about the authenticated user including their name, email, profile picture, Google Sheets access permissions, and other important profile details from Google services.
Parameters
No parameters required.
Requirements
Output
json— Get comprehensive user profile and Google Sheets environment information.