Skip to main content
The google-sheets MCP adapter wraps the Google Sheets API and Drive search APIs. Use it in workflow mcp_call steps to sync CRM rows, build operational dashboards, bulk-import CSV data, and keep spreadsheets updated from webhooks, schedules, and LLM outputs. Rows can be addressed by header name or positional values.

Prerequisites

  • A Google account with Google Sheets and Drive access
  • A Google Workspace connection in AgentRuntime (OAuth via the Google account card on Connections)
  • project_contributor access in your workspace

Connect in AgentRuntime

1

Connect Google

On Connections, use the Google account card and complete OAuth. See Google Workspace setup and Connections.
2

Enable Sheets

On your Google connection, enable the Sheets service so the account exposes Sheets and Drive API scopes.
3

Add google-sheets MCP instance

Go to MCP, click Add instance for google-sheets. Open Instance config, wire your Google connection, and set the profile active.
4

Test in a workflow

Smoke-test with mcp_call in Workflow Studio. Test with find_spreadsheets or get_many_rows on a known sheet before production workflows.

What you can build

  • Lead intake log — Webhook from a form → find_spreadsheetsinsert_row with mapped fields → gmail notify sales when status is hot.
  • Ops dashboard refresh — Postgres query → insert_multiple_rows with input_type: jsonformat_row to highlight overdue rows.
  • Monthly report exportget_many_rows from a summary tab → export_sheet as CSV → google-drive upload_file to an archive folder.
  • Inventory sync — ERP webhook → find_rows by SKU → update_row if found else insert_rowclear_sheet on staging tab after validation.

Tools

ToolDescription
find_row_by_numGet a worksheet row by row number.
find_spreadsheetsFind spreadsheets in Drive by name.
export_sheetExport a worksheet as CSV or TSV text.
find_worksheetFind worksheets in a spreadsheet by title.
get_rowsGet a paginated slice of worksheet rows starting from a row number.
get_many_rowsGet all rows from a worksheet, excluding the header row.
find_rowsFind worksheet rows where a column matches a value.

Write & update

ToolDescription
insert_multiple_rowsAppend multiple rows to a worksheet from column_names, JSON, or CSV input.
update_rowUpdate a single worksheet row by row number.
clear_sheetClear worksheet values, with optional header preservation.
create_columnInsert a worksheet column with a header label at a chosen position.
update_multiple_rowsUpdate multiple worksheet rows in one batchUpdate request.
delete_rowDelete a worksheet row by row number.
insert_rowAppend a single row to a worksheet.
format_rowFormat one or more worksheet rows.

Spreadsheets & worksheets

ToolDescription
delete_worksheetDelete a worksheet from a spreadsheet.
copy_worksheetCopy a worksheet into another spreadsheet.
create_spreadsheetCreate a blank Google Sheets spreadsheet, optionally inside a Drive folder.
create_worksheetCreate a worksheet tab in an existing spreadsheet, with optional header values.
rename_worksheetRename a worksheet in a spreadsheet.

Example

Append a new lead row after a webhook submission:
{
  "id": "log-lead",
  "type": "mcp_call",
  "name": "Insert lead row",
  "tool_name": "insert_row",
  "tool_args": {
    "spreadsheet_id": "{{input.crm_spreadsheet_id}}",
    "sheet_id": 0,
    "header_row": 1,
    "values_by_header": {
      "Name": "{{input.name}}",
      "Email": "{{input.email}}",
      "Source": "{{input.utm_source}}",
      "Status": "new"
    }
  },
  "depends_on": [],
  "timeout_s": 30
}

Troubleshooting

IssueFix
Reconnect prompt on Google connectionRe-authorize OAuth; Sheets and Drive scopes may have been revoked
find_rows returns no matchesCheck column_name matches the header row exactly; try exact_match: false
Wrong data shape in outputSet use_header_names: true and confirm header_row points to your labels
sheet_id confusionUse find_worksheet to resolve the numeric tab ID — it differs from the tab title