CAT
/MCP
SkillsMCPMarketplacesDigestToolsAdvertise

This week in Claude

Every Monday: Claude Code, Agent SDK, MCP, and the Anthropic platform moves worth your time.

Skills by Category
Frontend DevelopmentBackend & APIsTesting & QASecurityDevOps & CI/CDGit & Pull RequestsDocumentationCode Review & QualityAI & Agent BuildingSkill Development
MCP Servers by Category
Sales & MarketingWeb & Browser AutomationDatabasesAI & LLM ToolsCloud & InfrastructureCommunication & MessagingDeveloper ToolsDesign & CreativeDocuments & KnowledgeSearch & Web Crawling
Marketplaces by Category
AI Agents & OrchestrationLLM IntegrationDevelopment ToolsFrontend & UIBackend & APIsDatabasesTesting & Code QualityDevOps & CloudSecurity & ComplianceGit & Version Control

Cross AI Tools

Discover Claude Code plugins, extensions, and tools. Automatically updated directory of Anthropic Claude AI marketplaces with development tools, productivity plugins, and integrations.

Resources

  • Browse Skills
  • Browse MCP Servers
  • Browse Marketplaces
  • Plugins Reference

Community

  • About
  • Tools
  • Feedback
  • Privacy Policy
  • Advertise

Built for the Claude Code community with Claude Code by @mertduzgun

Independent project, not affiliated with Anthropic

Google Sheets Mcp

henilcalagiya/google-sheets-mcp
1438 toolsSTDIOregistry active
Summary

Bridges Claude to Google Sheets via service account authentication, giving you full CRUD operations on spreadsheets without leaving your MCP client. You get tools to create, read, update, and delete sheets and tables directly through the API. Setup involves creating a Google Cloud service account, enabling the Sheets and Drive APIs, then dropping credentials into your MCP config as environment variables. Once configured, share your target spreadsheet with the service account email and you're ready to automate. Works with Claude Desktop, Continue.dev, and other MCP compatible clients. Runs via uvx, so no manual installation required.

CodeRabbit
CodeRabbit
AI writes the code. CodeRabbit catches the slop.
Try For Free →
Keep your Mac awake
Keep your Mac awake
Keep your Mac awake while Claude Code and 40+ AI agents run. Sleeps when they're idle.
One time payment $9 →
Context.devContext.dev
Context.dev
Integrate web data into your AI product. One API to scrape website & brand data.
Get API Key Now →
Make your agent a DeFi expert
Make your agent a DeFi expert
Agent, run crypto. Access onchain data & trade routes via 1inch.
Install now →
Make money from your Skills
Make money from your Skills
On Capafy, your Skill runs online 24/7 as an agent product, and you get paid every time someone uses it.
Start earning →
AppSignal
AppSignal
Monitor with ease. Code with confidence.
Start Free Trial →
CodeRabbit
CodeRabbit
AI writes the code. CodeRabbit catches the slop.
Try For Free →
Keep your Mac awake
Keep your Mac awake
Keep your Mac awake while Claude Code and 40+ AI agents run. Sleeps when they're idle.
One time payment $9 →
Context.devContext.dev
Context.dev
Integrate web data into your AI product. One API to scrape website & brand data.
Get API Key Now →
Make your agent a DeFi expert
Make your agent a DeFi expert
Agent, run crypto. Access onchain data & trade routes via 1inch.
Install now →
Make money from your Skills
Make money from your Skills
On Capafy, your Skill runs online 24/7 as an agent product, and you get paid every time someone uses it.
Start earning →
AppSignal
AppSignal
Monitor with ease. Code with confidence.
Start Free Trial →

Tools

Public tool metadata for what this MCP can expose to an agent.

38 tools
GOOGLESHEETS_ADD_SHEETAdds a new sheet (worksheet) to a spreadsheet. Use this tool to create a new tab within an existing Google Sheet, optionally specifying its title, index, size, and other properties. IMPORTANT: - Always provide the spreadsheetId. Use 'Search Spreadsheets' action if you need to...2 params

Adds a new sheet (worksheet) to a spreadsheet. Use this tool to create a new tab within an existing Google Sheet, optionally specifying its title, index, size, and other properties. IMPORTANT: - Always provide the spreadsheetId. Use 'Search Spreadsheets' action if you need to...

Parameters* required
propertiesvalue
The properties the new sheet should have. All properties are optional. If none are specified, a default sheet will be created.
spreadsheetIdstring
The ID of the spreadsheet to add the sheet to. This is the long string of characters in the URL of your Google Sheet. Use the 'Search Spreadsheets' action first to find the spreadsheet ID by name if you don't have it. Example: "1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms"
GOOGLESHEETS_AGGREGATE_COLUMN_DATASearches for rows where a specific column matches a value and performs mathematical operations on data from another column.9 params

Searches for rows where a specific column matches a value and performs mathematical operations on data from another column.

Parameters* required
operationstring
The mathematical operation to perform on the target column values. Examples: "sum" "average" "count" "min" "max" "percentage"one of sum · average · count · min · max · percentage
sheet_namestring
The name of the specific sheet within the spreadsheet. Examples: "Sheet1" "Sales Data"
search_valuestring
The exact value to search for in the search column. Case-sensitive by default. Examples: "HSR" "Sales" "North Region"
search_columnstring
The column to search in. Can be a letter (e.g., 'A', 'B') or column name from header row (e.g., 'Region', 'Department'). Examples: "A" "Region" "Department"
target_columnstring
The column to aggregate data from. Can be a letter (e.g., 'C', 'D') or column name from header row (e.g., 'Sales', 'Revenue'). Examples: "D" "Sales" "Revenue"
case_sensitiveboolean
Whether the search should be case-sensitive. Examples: true falsedefault: true
has_header_rowboolean
Whether the first row contains column headers. If True, column names can be used for search_column and target_column. Examples: true falsedefault: true
spreadsheet_idstring
The unique identifier of the Google Sheets spreadsheet. Example: "1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms"
percentage_totalnumber
For percentage operation, the total value to calculate percentage against. If not provided, uses sum of all values in target column. Examples: 10000 50000.5
GOOGLESHEETS_APPEND_DIMENSIONTool to append new rows or columns to a sheet, increasing its size. Use when you need to add empty rows or columns to an existing sheet.4 params

Tool to append new rows or columns to a sheet, increasing its size. Use when you need to add empty rows or columns to an existing sheet.

Parameters* required
lengthinteger
The number of rows or columns to append. Example: 10
sheet_idinteger
The ID of the sheet to append rows or columns to. Example: 0
dimensionstring
Specifies whether to append rows or columns. Example: "ROWS"one of ROWS · COLUMNS
spreadsheet_idstring
The ID of the spreadsheet. Example: "1q2w3e4r5t6y7u8i9o0p"
GOOGLESHEETS_BATCH_GETRetrieves data from specified cell ranges in a Google Spreadsheet.4 params

Retrieves data from specified cell ranges in a Google Spreadsheet.

Parameters* required
rangesarray
A list of cell ranges in A1 notation (e.g., 'Sheet1!A1:B2', 'A1:C5') from which to retrieve data. If this list is omitted or empty, all data from the first sheet of the spreadsheet will be fetched. A range can specify a sheet name (e.g., 'Sheet2!A:A'); if no sheet name is provided in a range string (e.g., 'A1:B2'), it defaults to the first sheet. For sheet names with spaces or special characters, enclose in single quotes (e.g., "'My Sheet'!A1:B2"). Examples: "Sheet1!A1:B2" "Sheet1!A:A" "Sheet1!1:2" "'My Sheet'!A5:A" "A1:B2"
spreadsheet_idstring
The unique identifier of the Google Spreadsheet from which data will be retrieved. This is the ID found in the spreadsheet URL after /d/. Example: "1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms"
valueRenderOptionstring
How values should be rendered in the output. FORMATTED_VALUE: Values are calculated and formatted (default). UNFORMATTED_VALUE: Values are calculated but not formatted. FORMULA: Values are not calculated; the formula is returned instead.one of FORMATTED_VALUE · UNFORMATTED_VALUE · FORMULAdefault: FORMATTED_VALUE
dateTimeRenderOptionstring
How dates and times should be rendered in the output. SERIAL_NUMBER: Dates are returned as serial numbers (default). FORMATTED_STRING: Dates returned as formatted strings.one of SERIAL_NUMBER · FORMATTED_STRINGdefault: SERIAL_NUMBER
GOOGLESHEETS_BATCH_UPDATEUpdates a specified range in a Google Sheet with given values, or appends them as new rows if `first_cell_location` is omitted. Auto-expands grid for large datasets, preventing range errors. Requirements: Target sheet must exist and spreadsheet must contain at least one worksh...6 params

Updates a specified range in a Google Sheet with given values, or appends them as new rows if `first_cell_location` is omitted. Auto-expands grid for large datasets, preventing range errors. Requirements: Target sheet must exist and spreadsheet must contain at least one worksh...

Parameters* required
valuesarray
A 2D array of cell values where each inner array represents a row. Values can be strings, numbers, booleans, or None/null for empty cells. Ensure columns are properly aligned across rows. Example: [["Item","Cost","Stocked","Ship Date"],["Wheel",20.5,true,"2020-06-01"],["Screw",0.5,true,"2020-06-03"],["Nut",0.25,false,"2020-06-02"]]
sheet_namestring
The name of the specific sheet (tab) within the spreadsheet to update. Case-sensitive. Examples: "Sheet1" "Sales Data" "Budget"
spreadsheet_idstring
The unique identifier of the Google Sheets spreadsheet to be updated. Can be found in the spreadsheet URL. Example: "1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms"
valueInputOptionstring
How input data should be interpreted. 'USER_ENTERED': Values are parsed as if typed by a user (e.g., strings may become numbers/dates, formulas are calculated). 'RAW': Values are stored exactly as provided without parsing (e.g., '123' stays as string, '=SUM(A1:B1)' is not calculated). Examples: "USER_ENTERED" "RAW"one of RAW · USER_ENTEREDdefault: USER_ENTERED
first_cell_locationstring
The starting cell for the update range, specified in A1 notation (e.g., 'A1', 'B2'). The update will extend from this cell to the right and down, based on the provided values. If omitted, values are appended to the sheet. Examples: "A1" "D3"
includeValuesInResponseboolean
If set to True, the response will include the updated values from the spreadsheet after the update is applied. Examples: true falsedefault: false
GOOGLESHEETS_BATCH_UPDATE_VALUES_BY_DATA_FILTERTool to update values in ranges matching data filters. Use when you need to update specific data in a Google Sheet based on criteria rather than fixed cell ranges.6 params

Tool to update values in ranges matching data filters. Use when you need to update specific data in a Google Sheet based on criteria rather than fixed cell ranges.

Parameters* required
dataarray
The new values to apply to the spreadsheet. If more than one range is matched by the specified DataFilter the specified values are applied to all of those ranges.
spreadsheetIdstring
The ID of the spreadsheet to update.
valueInputOptionstring
How the input data should be interpreted.one of RAW · USER_ENTERED
includeValuesInResponseboolean
Determines if the update response should include the values of the cells that were updated. By default, responses do not include the updated values.default: false
responseValueRenderOptionvalue
Determines how values in the response should be rendered. The default render option is FORMATTED_VALUE.default: FORMATTED_VALUE
responseDateTimeRenderOptionvalue
Determines how dates, times, and durations in the response should be rendered. This is ignored if responseValueRenderOption is FORMATTED_VALUE. The default dateTime render option is SERIAL_NUMBER.default: SERIAL_NUMBER
GOOGLESHEETS_CLEAR_BASIC_FILTERTool to clear the basic filter from a sheet. Use when you need to remove an existing basic filter from a specific sheet within a Google Spreadsheet.2 params

Tool to clear the basic filter from a sheet. Use when you need to remove an existing basic filter from a specific sheet within a Google Spreadsheet.

Parameters* required
sheet_idinteger
The ID of the sheet on which the basic filter should be cleared. Examples: 0 123456789
spreadsheet_idstring
The ID of the spreadsheet. Example: "abc123xyz789"
GOOGLESHEETS_CLEAR_VALUESClears cell content (preserving formatting and notes) from a specified A1 notation range in a Google Spreadsheet; the range must correspond to an existing sheet and cells.2 params

Clears cell content (preserving formatting and notes) from a specified A1 notation range in a Google Spreadsheet; the range must correspond to an existing sheet and cells.

Parameters* required
rangestring
The A1 notation of the range to clear values from (e.g., 'Sheet1!A1:B2', 'MySheet!C:C', or 'A1:D5'). If the sheet name is omitted (e.g., 'A1:B2'), the operation applies to the first visible sheet. Examples: "Sheet1!A1:B10" "Sheet2!C:D" "A1:Z100" "My Custom Sheet!B3:F10"
spreadsheet_idstring
The unique identifier of the Google Spreadsheet from which to clear values. This ID can be found in the URL of the spreadsheet. Examples: "1qZ_g6N0g3Z0s5hJ2xQ8vP9r7T_u6X3iY2o0kE_l5N7M" "spreαdsheetId_from_url"
GOOGLESHEETS_CREATE_CHARTCreate a chart in a Google Sheets spreadsheet using the specified data range and chart type. Conditional requirements: - Provide either a simple chart via chart_type + data_range (basicChart), OR supply a full chart_spec supporting all chart types. Exactly one approach should...13 params

Create a chart in a Google Sheets spreadsheet using the specified data range and chart type. Conditional requirements: - Provide either a simple chart via chart_type + data_range (basicChart), OR supply a full chart_spec supporting all chart types. Exactly one approach should...

Parameters* required
titlestring
Optional title for the chart. Examples: "Sales Data" "Monthly Revenue"
sheet_idinteger
The sheetId of the worksheet where the chart will be created. This is a unique non-zero integer identifier. Use 'Get Sheet Names' or 'Get Spreadsheet Info' actions to retrieve the sheetId for your target worksheet. Examples: 123456789 987654321
subtitlestring
Optional subtitle for the chart. Examples: "Q1 2024" "Year over Year"
chart_specvalue
Optional full ChartSpec object to send to the Google Sheets API. Use this to support ALL chart types and advanced options. Must set exactly one of: basicChart, pieChart, bubbleChart, candlestickChart, histogramChart, treemapChart, waterfallChart, orgChart, scorecardChart. See https://developers.google.com/workspace/sheets/api/reference/rest/v4/spreadsheets/charts#ChartSpec. Example: {"pieChart":{"domain":{"sourceRange":{"sources":[{"endColumnIndex":1,"endRowIndex":5,"sheetId":0,"startColumnIndex":0,"startRowIndex":0}]}},"legendPosition":"RIGHT_LEGEND","series":{"sourceRange":{"sources":[{"endColumnIndex":2,"endRowIndex":5,"sheetId":0,"startColumnIndex":1,"startRowIndex":0}]}}}}
chart_typestring
The type of chart to create. Supported types: BAR, LINE, AREA, COLUMN, SCATTER, COMBO, STEPPED_AREA (basic charts), PIE, BUBBLE, CANDLESTICK, HISTOGRAM, TREEMAP, WATERFALL, ORG, SCORECARD. If you need full control over the chart specification (including fields not covered by simple inputs), provide chart_spec instead. Examples: "COLUMN" "LINE" "BAR" "AREA" "PIE" "HISTOGRAM" "WATERFALL"
data_rangestring
A single contiguous range of data for the chart in A1 notation (e.g., 'A1:C10' or 'Sheet1!B2:D20'). Must be a single continuous range - comma-separated multi-ranges (e.g., 'A1:A10,C1:C10') are not supported. When chart_spec is not provided, the first column is used as the domain/labels and the remaining columns as series. Examples: "A1:C10" "Sheet1!B2:D20" "Data!A1:E50"
x_axis_titlestring
Optional title for the X-axis. Examples: "Time Period" "Categories"
y_axis_titlestring
Optional title for the Y-axis. Examples: "Revenue ($)" "Count"
background_rednumber
Red component of chart background color (0.0-1.0). If not specified, uses default. Examples: 0 0.5 1
spreadsheet_idstring
The unique identifier of the Google Sheets spreadsheet where the chart will be created. Example: "1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms"
background_bluenumber
Blue component of chart background color (0.0-1.0). If not specified, uses default. Examples: 0 0.5 1
legend_positionstring
Position of the chart legend. Options: BOTTOM_LEGEND, TOP_LEGEND, LEFT_LEGEND, RIGHT_LEGEND, NO_LEGEND. Examples: "BOTTOM_LEGEND" "RIGHT_LEGEND" "NO_LEGEND"default: BOTTOM_LEGEND
background_greennumber
Green component of chart background color (0.0-1.0). If not specified, uses default. Examples: 0 0.5 1
GOOGLESHEETS_CREATE_GOOGLE_SHEET1Creates a new Google Spreadsheet in Google Drive using the provided title.1 params

Creates a new Google Spreadsheet in Google Drive using the provided title.

Parameters* required
titlestring
The title for the new Google Sheet. This will be the name of the file in Google Drive. Examples: "Q4 Financial Report" "Project Plan Ideas" "Meeting Notes"
GOOGLESHEETS_CREATE_SPREADSHEET_COLUMNCreates a new column in a Google Spreadsheet, requiring a valid `spreadsheet_id` and an existing `sheet_id`; an out-of-bounds `insert_index` may append/prepend the column.4 params

Creates a new column in a Google Spreadsheet, requiring a valid `spreadsheet_id` and an existing `sheet_id`; an out-of-bounds `insert_index` may append/prepend the column.

Parameters* required
sheet_idinteger
The numeric identifier of the specific sheet (tab) within the spreadsheet where the column will be added. Examples: "0" "123456789"
insert_indexinteger
The 0-based index at which the new column will be inserted. For example, an index of 0 inserts the column before the current first column (A), and an index of 1 inserts it between the current columns A and B. Examples: "0" "1" "5"default: 0
spreadsheet_idstring
The unique identifier of the Google Spreadsheet where the column will be created. Example: "1qZysYd_N2cZ9gkZ8sR7M0rP8sX5vW2bA9gV3rF1cE0"
inherit_from_beforeboolean
If true, the new column inherits properties (e.g., formatting, width) from the column immediately to its left (the preceding column). If false (default), it inherits from the column immediately to its right (the succeeding column). This is ignored if there is no respective preceding or succeeding column. Examples: true falsedefault: false
GOOGLESHEETS_CREATE_SPREADSHEET_ROWInserts a new, empty row into a specified sheet of a Google Spreadsheet at a given index, optionally inheriting formatting from the row above.4 params

Inserts a new, empty row into a specified sheet of a Google Spreadsheet at a given index, optionally inheriting formatting from the row above.

Parameters* required
sheet_idinteger
The numeric identifier of the sheet (tab) within the spreadsheet where the row will be inserted. This ID (gid) is found in the URL of the spreadsheet (e.g., '0' for the first sheet). Examples: 0 123456789
insert_indexinteger
The 0-based index at which the new row should be inserted. For example, an index of 0 inserts the row at the beginning of the sheet. If the index is greater than the current number of rows, the row is appended. Examples: 0 5 100default: 0
spreadsheet_idstring
The unique identifier of the Google Spreadsheet. This ID is found in the URL of the spreadsheet (e.g., '1qpyC0XzHc_-_d824s2VfopkHh7D0jW4aXCS1D_AlGA'). Example: "1qpyC0XzHc_-_d824s2VfopkHh7D0jW4aXCS1D_AlGA"
inherit_from_beforeboolean
If True, the newly inserted row will inherit formatting and properties from the row immediately preceding its insertion point. If False, it will have default formatting. Examples: true falsedefault: false
GOOGLESHEETS_DELETE_DIMENSIONTool to delete specified rows or columns from a sheet in a Google Spreadsheet. Use when you need to remove a range of rows or columns.5 params

Tool to delete specified rows or columns from a sheet in a Google Spreadsheet. Use when you need to remove a range of rows or columns.

Parameters* required
spreadsheet_idstring
The ID of the spreadsheet. Example: "abc123xyz789"
response_rangesvalue
Limits the ranges of cells included in the response spreadsheet. Example: ["Sheet1!A1:B2","Sheet2!C:C"]
delete_dimension_requestobject
The details for the delete dimension request object.
response_include_grid_databoolean
True if grid data should be returned. This parameter is ignored if a field mask was set in the request. Examples: true false
include_spreadsheet_in_responseboolean
Determines if the update response should include the spreadsheet resource. Examples: true false
GOOGLESHEETS_DELETE_SHEETTool to delete a sheet (worksheet) from a spreadsheet. Use when you need to remove a specific sheet from a Google Sheet document.2 params

Tool to delete a sheet (worksheet) from a spreadsheet. Use when you need to remove a specific sheet from a Google Sheet document.

Parameters* required
sheet_idinteger
The ID of the sheet to delete. If the sheet is of DATA_SOURCE type, the associated DataSource is also deleted. Example: 123456789
spreadsheetIdstring
The ID of the spreadsheet from which to delete the sheet. Example: "abc123xyz789"
GOOGLESHEETS_EXECUTE_SQLExecute SQL queries against Google Sheets tables. Supports SELECT, INSERT, UPDATE, and DELETE operations with familiar SQL syntax. Tables are automatically detected and mapped from the spreadsheet structure.4 params

Execute SQL queries against Google Sheets tables. Supports SELECT, INSERT, UPDATE, and DELETE operations with familiar SQL syntax. Tables are automatically detected and mapped from the spreadsheet structure.

Parameters* required
sqlstring
SQL query to execute. Supports SELECT, INSERT, UPDATE, DELETE operations. Examples: "SELECT * FROM \"Sales_Data\" LIMIT 10" "INSERT INTO \"Customers\" (name, email) VALUES ('John Doe', 'john@example.com')" "UPDATE \"Inventory\" SET quantity = quantity - 10 WHERE sku = 'ABC123'" "DELETE FROM \"Old_Data\" WHERE date < '2023-01-01'"
dry_runboolean
Preview changes without applying them (for write operations)default: false
delete_methodstring
For DELETE operations: 'clear' preserves row structure, 'remove_rows' shifts data upone of clear · remove_rowsdefault: clear
spreadsheet_idstring
Google Sheets ID Example: "1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms"
GOOGLESHEETS_FIND_REPLACETool to find and replace text in a Google Spreadsheet. Use when you need to fix formula errors, update values, or perform bulk text replacements across cells. Common use cases: - Fix #ERROR! cells by replacing with empty string or correct formula - Update old values with new o...9 params

Tool to find and replace text in a Google Spreadsheet. Use when you need to fix formula errors, update values, or perform bulk text replacements across cells. Common use cases: - Fix #ERROR! cells by replacing with empty string or correct formula - Update old values with new o...

Parameters* required
findstring
The text to find. Can be a literal string or a regular expression pattern. Examples: "#ERROR!" "=SUM(A1:A10)" "old_value"
rangestring
The A1 notation range to search in. If not specified, searches the entire sheet(s). Examples: "A1:Z100" "Sheet1!A:C" "B2:D10"
sheetIdvalue
The ID of the sheet to search in. If not specified, searches all sheets. Examples: 0 123456789
allSheetsboolean
Whether to search across all sheets in the spreadsheet. Examples: true falsedefault: false
matchCaseboolean
Whether the search should be case-sensitive. Examples: true falsedefault: false
replacementstring
The text to replace the found instances with. Examples: "" "=SUM(A1:A5)" "new_value"
searchByRegexboolean
Whether to treat the find text as a regular expression. Examples: true falsedefault: false
spreadsheetIdstring
The ID of the spreadsheet to update. Example: "1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms"
matchEntireCellboolean
Whether to match only cells that contain the entire search term. Examples: true falsedefault: false
GOOGLESHEETS_FIND_WORKSHEET_BY_TITLEFinds a worksheet by its exact, case-sensitive title within a Google Spreadsheet; returns a boolean indicating if found and the complete metadata of the entire spreadsheet, regardless of whether the target worksheet is found.2 params

Finds a worksheet by its exact, case-sensitive title within a Google Spreadsheet; returns a boolean indicating if found and the complete metadata of the entire spreadsheet, regardless of whether the target worksheet is found.

Parameters* required
titlestring
The exact, case-sensitive title of the worksheet (tab name) to find. Examples: "Sheet1" "Q3 Report" "Customer Data"
spreadsheet_idstring
The unique identifier of the Google Spreadsheet. This ID is part of the spreadsheet's URL. Examples: "1aBcDeFgHiJkLmNoPqRsTuVwXyZ0123456789_drivE" "your_actual_spreadsheet_id"
GOOGLESHEETS_FORMAT_CELLApplies text and background cell formatting to a specified range in a Google Sheets worksheet.15 params

Applies text and background cell formatting to a specified range in a Google Sheets worksheet.

Parameters* required
rednumber
Red component of the background color (0.0-1.0). Examples: "0.0" "0.5" "1.0"default: 0.9
bluenumber
Blue component of the background color (0.0-1.0). Examples: "0.0" "0.5" "1.0"default: 0.9
boldboolean
Apply bold formatting. Examples: "true" "false"default: false
greennumber
Green component of the background color (0.0-1.0). Examples: "0.0" "0.5" "1.0"default: 0.9
rangestring
OPTION 1: Cell range in A1 notation (RECOMMENDED). Examples: 'A1' (single cell), 'F9' (cell F9), 'A1:B5' (range). Provide EITHER this field OR all four index fields below, not both. Examples: "A1" "F9" "B2:D4" "C1:C10"
italicboolean
Apply italic formatting. Examples: "true" "false"default: false
fontSizeinteger
Font size in points. Examples: "10" "12" "14"default: 10
underlineboolean
Apply underline formatting. Examples: "true" "false"default: false
worksheet_idinteger
ID (sheetId) of the worksheet. Use `GOOGLESHEETS_GET_SPREADSHEET_INFO` to find this ID. Example: "123456789"
end_row_indexvalue
OPTION 2: 0-based index of the row AFTER the last row (exclusive). Required if 'range' is not provided. Must provide ALL four index fields together. Examples: 1 9
strikethroughboolean
Apply strikethrough formatting. Examples: "true" "false"default: false
spreadsheet_idstring
Identifier of the Google Sheets spreadsheet. Example: "1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms"
start_row_indexvalue
OPTION 2: 0-based row index (row 1 = index 0, row 9 = index 8). Required if 'range' is not provided. Must provide ALL four index fields together. Examples: 0 8
end_column_indexvalue
OPTION 2: 0-based index of the column AFTER the last column (exclusive). Required if 'range' is not provided. Must provide ALL four index fields together. Examples: 1 2 6
start_column_indexvalue
OPTION 2: 0-based column index (A = 0, B = 1, F = 5). Required if 'range' is not provided. Must provide ALL four index fields together. Examples: 0 1 5
GOOGLESHEETS_GET_SHEET_NAMESLists all worksheet names from a specified Google Spreadsheet (which must exist), useful for discovering sheets before further operations.1 params

Lists all worksheet names from a specified Google Spreadsheet (which must exist), useful for discovering sheets before further operations.

Parameters* required
spreadsheet_idstring
The unique identifier of the Google Spreadsheet. This ID is typically found in the spreadsheet's URL. Example: "1qpyC0XzvTcKT6EISywY_7H7D7No1tpxEXAMPLE_ID"
GOOGLESHEETS_GET_SPREADSHEET_BY_DATA_FILTERReturns the spreadsheet at the given ID, filtered by the specified data filters. Use this tool when you need to retrieve specific subsets of data from a Google Sheet based on criteria like A1 notation, developer metadata, or grid ranges.4 params

Returns the spreadsheet at the given ID, filtered by the specified data filters. Use this tool when you need to retrieve specific subsets of data from a Google Sheet based on criteria like A1 notation, developer metadata, or grid ranges.

Parameters* required
dataFiltersarray
The DataFilters used to select which ranges to retrieve.
spreadsheetIdstring
The ID of the spreadsheet to request. Example: "abc123xyz789"
includeGridDataboolean
True if grid data should be returned. Ignored if a field mask is set. Example: true
excludeTablesInBandedRangesboolean
True if tables should be excluded in the banded ranges. False if not set. Example: false
GOOGLESHEETS_GET_SPREADSHEET_INFORetrieves comprehensive metadata for a Google Spreadsheet using its ID, excluding cell data.1 params

Retrieves comprehensive metadata for a Google Spreadsheet using its ID, excluding cell data.

Parameters* required
spreadsheet_idstring
Unique identifier of the Google Spreadsheet, typically found in its URL. Example: "12345abcdefGHIJKLMNOPqrstuvwxyz67890UVWXYZ"
GOOGLESHEETS_GET_TABLE_SCHEMAThis action is used to get the schema of a table in a Google Spreadsheet, call this action to get the schema of a table in a spreadsheet BEFORE YOU QUERY THE TABLE. Analyze table structure and infer column names, types, and constraints. Uses statistical analysis of sample data...4 params

This action is used to get the schema of a table in a Google Spreadsheet, call this action to get the schema of a table in a spreadsheet BEFORE YOU QUERY THE TABLE. Analyze table structure and infer column names, types, and constraints. Uses statistical analysis of sample data...

Parameters* required
sheet_namestring
Sheet/tab name if table_name is ambiguous across multiple sheets
table_namestring
Specific table name from LIST_TABLES response (e.g., 'Sales_Data', 'Employee_List'). Use 'auto' to analyze the largest/most prominent table. Examples: "Sales_Data" "Employee_List" "auto"
sample_sizeinteger
Number of rows to sample for type inferencedefault: 50
spreadsheet_idstring
Google Sheets ID Example: "1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms"
GOOGLESHEETS_INSERT_DIMENSIONTool to insert new rows or columns into a sheet at a specified location. Use when you need to add empty rows or columns within an existing Google Sheet.5 params

Tool to insert new rows or columns into a sheet at a specified location. Use when you need to add empty rows or columns within an existing Google Sheet.

Parameters* required
spreadsheet_idstring
The ID of the spreadsheet to update. Example: "abc123spreadsheetId"
response_rangesvalue
Limits the ranges of the spreadsheet to include in the response.
insert_dimensionobject
The details for the insert dimension request.
response_include_grid_databoolean
True if grid data should be included in the response (if includeSpreadsheetInResponse is true).
include_spreadsheet_in_responseboolean
True if the updated spreadsheet should be included in the response.
GOOGLESHEETS_LIST_TABLESThis action is used to list all tables in a Google Spreadsheet, call this action to get the list of tables in a spreadsheet. Discover all tables in a Google Spreadsheet by analyzing sheet structure and detecting data patterns. Uses heuristic analysis to find header rows, data...4 params

This action is used to list all tables in a Google Spreadsheet, call this action to get the list of tables in a spreadsheet. Discover all tables in a Google Spreadsheet by analyzing sheet structure and detecting data patterns. Uses heuristic analysis to find header rows, data...

Parameters* required
min_rowsinteger
Minimum number of data rows to consider a valid tabledefault: 2
min_columnsinteger
Minimum number of columns to consider a valid tabledefault: 1
min_confidencenumber
Minimum confidence score (0.0-1.0) to consider a valid tabledefault: 0.5
spreadsheet_idstring
Google Sheets ID from the URL (e.g., '1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms') Example: "1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms"
GOOGLESHEETS_LOOKUP_SPREADSHEET_ROWFinds the first row in a Google Spreadsheet where a cell's entire content exactly matches the query string, searching within a specified A1 notation range or the first sheet by default.4 params

Finds the first row in a Google Spreadsheet where a cell's entire content exactly matches the query string, searching within a specified A1 notation range or the first sheet by default.

Parameters* required
querystring
Exact text value to find; matches the entire content of a cell in a row. Examples: "John" "Completed" "ID-12345"
rangestring
A1 notation range with explicit subrange (e.g., 'Sheet1!A1:D5', 'MySheet!A:Z'). Defaults to the first sheet if omitted. IMPORTANT: Sheet names with spaces must be single-quoted (e.g., "'My Sheet'!A1:Z"). Bare sheet names without ranges (e.g., 'Sheet1') are not supported - always specify a range. Examples: "Sheet1!A1:D5" "Sheet1!A:Z" "'Admin tickets'!A:A" "MySheetName!C1:G10"
case_sensitiveboolean
If `True`, the query string search is case-sensitive.default: false
spreadsheet_idstring
Identifier of the Google Spreadsheet to search. Example: "1BiexwqQYjfC_BXy6zDQYJqb6zxzRyP9"
GOOGLESHEETS_QUERY_TABLEThis action is used to query a table in a Google Spreadsheet, call this action to query a table in a spreadsheet. Execute SQL-like SELECT queries against spreadsheet tables. Supports WHERE conditions, ORDER BY, LIMIT clauses. Call this action after calling the GET_TABLE_SCHEMA...3 params

This action is used to query a table in a Google Spreadsheet, call this action to query a table in a spreadsheet. Execute SQL-like SELECT queries against spreadsheet tables. Supports WHERE conditions, ORDER BY, LIMIT clauses. Call this action after calling the GET_TABLE_SCHEMA...

Parameters* required
sqlstring
SQL SELECT query. Supported: SELECT cols FROM table WHERE conditions ORDER BY col LIMIT n. Table names must be quoted if they contain spaces. Examples: "SELECT * FROM \"Sales_Data\" LIMIT 10" "SELECT project, totals FROM \"Sales_Data\" WHERE totals > 10.0 ORDER BY totals DESC" "SELECT name, email FROM \"Customers\" WHERE status = 'ACTIVE'"
spreadsheet_idstring
Google Sheets ID Example: "1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms"
include_formulasboolean
Whether to return formula text instead of calculated values for formula columnsdefault: false
GOOGLESHEETS_SEARCH_DEVELOPER_METADATATool to search for developer metadata in a spreadsheet. Use when you need to find specific metadata entries based on filters.2 params

Tool to search for developer metadata in a spreadsheet. Use when you need to find specific metadata entries based on filters.

Parameters* required
dataFiltersarray
The data filters describing the criteria used to determine which DeveloperMetadata entries to return.
spreadsheetIdstring
The ID of the spreadsheet to retrieve metadata from. Example: "1q2w3e4r5t6y7u8i9o0p"
GOOGLESHEETS_SEARCH_SPREADSHEETSSearch for Google Spreadsheets using various filters including name, content, date ranges, and more.8 params

Search for Google Spreadsheets using various filters including name, content, date ranges, and more.

Parameters* required
querystring
Search query to filter spreadsheets using Google Drive query syntax. ALWAYS use field names like 'name contains', 'fullText contains'. DO NOT use plain keywords without field names (wrong: 'finance', correct: 'name contains "finance"'). DO NOT use spreadsheet IDs as search terms. For non-ASCII characters, use proper field syntax. Invalid operators like 'related to' or 'shared with' won't work - use 'sharedWithMe = true' instead. Leave empty to get all spreadsheets. IMPORTANT: This action requires Google Drive API scope. Examples: "name contains 'budget'" "fullText contains 'sales'" "name contains 'report' and fullText contains 'quarterly'" "name contains 'finance' or name contains 'accounting'" "name contains 'データ'" "sharedWithMe = true"
order_bystring
Order results by field. Common options: 'modifiedTime desc', 'modifiedTime asc', 'name', 'createdTime desc' Examples: "modifiedTime desc" "name" "createdTime desc" "viewedByMeTime desc"default: modifiedTime desc
max_resultsvalue
Maximum number of spreadsheets to return (1-1000). Defaults to 10.default: 10
starred_onlyboolean
Whether to return only starred spreadsheets. Defaults to False.default: false
created_afterstring
Return spreadsheets created after this date. Use RFC 3339 format like '2024-01-01T00:00:00Z'. Examples: "2024-01-01T00:00:00Z" "2024-12-01T12:00:00-08:00"
modified_afterstring
Return spreadsheets modified after this date. Use RFC 3339 format like '2024-01-01T00:00:00Z'. Examples: "2024-01-01T00:00:00Z" "2024-12-01T12:00:00-08:00"
shared_with_meboolean
Whether to return only spreadsheets shared with the current user. Defaults to False.default: false
include_trashedboolean
Whether to include spreadsheets in trash. Defaults to False.default: false
GOOGLESHEETS_SET_BASIC_FILTERTool to set a basic filter on a sheet in a Google Spreadsheet. Use when you need to filter or sort data within a specific range on a sheet.2 params

Tool to set a basic filter on a sheet in a Google Spreadsheet. Use when you need to filter or sort data within a specific range on a sheet.

Parameters* required
filterobject
The filter to set.
spreadsheetIdstring
The ID of the spreadsheet.
GOOGLESHEETS_SHEET_FROM_JSONCreates a new Google Spreadsheet and populates its first worksheet from `sheet_json`, which must be non-empty as its first item's keys establish the headers.3 params

Creates a new Google Spreadsheet and populates its first worksheet from `sheet_json`, which must be non-empty as its first item's keys establish the headers.

Parameters* required
titlestring
The desired title for the new Google Spreadsheet. Examples: "Q3 Sales Report" "Project Plan Alpha"
sheet_jsonarray
A list of dictionaries representing the rows of the sheet. Each dictionary must have the same set of keys, which will form the header row. Values can be strings, numbers, booleans, or null (represented as empty cells). Examples: "[{\"Name\": \"Alice\", \"Age\": 30, \"City\": \"New York\"}, {\"Name\": \"Bob\", \"Age\": 24, \"City\": \"London\"}]" "[{\"Product ID\": \"A123\", \"Quantity\": 10, \"Price\": 25.50}, {\"Product ID\": \"B456\", \"Quantity\": 5, \"Price\": 100.00}]"
sheet_namestring
The name for the first worksheet within the newly created spreadsheet. This name will appear as a tab at the bottom of the sheet. Examples: "Sheet1" "Data Summary" "October Metrics"
GOOGLESHEETS_SPREADSHEETS_SHEETS_COPY_TOTool to copy a single sheet from a spreadsheet to another spreadsheet. Use when you need to duplicate a sheet into a different spreadsheet.3 params

Tool to copy a single sheet from a spreadsheet to another spreadsheet. Use when you need to duplicate a sheet into a different spreadsheet.

Parameters* required
sheet_idinteger
The ID of the sheet to copy. Example: 0
spreadsheet_idstring
The ID of the spreadsheet containing the sheet to copy. Example: "1qZ_..."
destination_spreadsheet_idstring
The ID of the spreadsheet to copy the sheet to. Example: "2rY_..."
GOOGLESHEETS_SPREADSHEETS_VALUES_APPENDTool to append values to a spreadsheet. Use when you need to add new data to the end of an existing table in a Google Sheet.9 params

Tool to append values to a spreadsheet. Use when you need to add new data to the end of an existing table in a Google Sheet.

Parameters* required
rangestring
The A1 notation of a range to search for a logical table of data. Values are appended after the last row of the table. Example: "Sheet1!A1:B2"
valuesarray
The data to be written. This is an array of arrays, the outer array representing all the data and each inner array representing a major dimension. Each item in the inner array corresponds with one cell. Example: [["A1_val1","A1_val2"],["A2_val1","A2_val2"]]
spreadsheetIdstring
The ID of the spreadsheet to update. Example: "1q0gLhLdGXYZblahblahblah"
majorDimensionvalue
The major dimension of the values. For output, if the spreadsheet data is: A1=1,B1=2,A2=3,B2=4, then requesting range=A1:B2,majorDimension=ROWS will return [[1,2],[3,4]], whereas requesting range=A1:B2,majorDimension=COLUMNS will return [[1,3],[2,4]]. Example: "ROWS"
insertDataOptionvalue
How the input data should be inserted. Example: "INSERT_ROWS"
valueInputOptionstring
How the input data should be interpreted. Example: "USER_ENTERED"one of RAW · USER_ENTERED
includeValuesInResponseboolean
Determines if the update response should include the values of the cells that were appended. By default, responses do not include the updated values. Example: true
responseValueRenderOptionvalue
Determines how values in the response should be rendered. The default render option is FORMATTED_VALUE. Example: "FORMATTED_VALUE"
responseDateTimeRenderOptionvalue
Determines how dates, times, and durations in the response should be rendered. This is ignored if responseValueRenderOption is FORMATTED_VALUE. The default dateTime render option is SERIAL_NUMBER. Example: "SERIAL_NUMBER"
GOOGLESHEETS_SPREADSHEETS_VALUES_BATCH_CLEARTool to clear one or more ranges of values from a spreadsheet. Use when you need to remove data from specific cells or ranges while keeping formatting and other properties intact.2 params

Tool to clear one or more ranges of values from a spreadsheet. Use when you need to remove data from specific cells or ranges while keeping formatting and other properties intact.

Parameters* required
rangesarray
The ranges to clear, in A1 notation or R1C1 notation. Example: ["Sheet1!A1:B2","Sheet1!C3:D4"]
spreadsheet_idstring
The ID of the spreadsheet to update. Example: "1q2w3e4r5t6y7u8i9o0p"
GOOGLESHEETS_SPREADSHEETS_VALUES_BATCH_CLEAR_BY_DATA_FILTERClears one or more ranges of values from a spreadsheet using data filters. The caller must specify the spreadsheet ID and one or more DataFilters. Ranges matching any of the specified data filters will be cleared. Only values are cleared -- all other properties of the cell (su...2 params

Clears one or more ranges of values from a spreadsheet using data filters. The caller must specify the spreadsheet ID and one or more DataFilters. Ranges matching any of the specified data filters will be cleared. Only values are cleared -- all other properties of the cell (su...

Parameters* required
dataFiltersarray
The DataFilters used to determine which ranges to clear.
spreadsheetIdstring
The ID of the spreadsheet to update.
GOOGLESHEETS_SPREADSHEETS_VALUES_BATCH_GET_BY_DATA_FILTERTool to return one or more ranges of values from a spreadsheet that match the specified data filters. Use when you need to retrieve specific data sets based on filtering criteria rather than entire sheets or fixed ranges.5 params

Tool to return one or more ranges of values from a spreadsheet that match the specified data filters. Use when you need to retrieve specific data sets based on filtering criteria rather than entire sheets or fixed ranges.

Parameters* required
dataFiltersarray
The data filters used to match the ranges of values to retrieve. Ranges that match any of the specified data filters are included in the response. Example: [{"a1Range":"Sheet1!A1:B5"}]
spreadsheetIdstring
The ID of the spreadsheet to retrieve data from. Example: "1q2w3e4r5t6y7u8i9o0p"
majorDimensionvalue
The major dimension that results should use. For example, if the spreadsheet data is: A1=1,B1=2,A2=3,B2=4, then a request that selects that range and sets majorDimension=ROWS returns [[1,2],[3,4]], whereas a request that sets majorDimension=COLUMNS returns [[1,3],[2,4]].
valueRenderOptionvalue
How values should be represented in the output. The default render option is FORMATTED_VALUE.
dateTimeRenderOptionvalue
How dates, times, and durations should be represented in the output. This is ignored if valueRenderOption is FORMATTED_VALUE. The default dateTime render option is SERIAL_NUMBER.
GOOGLESHEETS_UPDATE_SHEET_PROPERTIESTool to update properties of a sheet (worksheet) within a Google Spreadsheet, such as its title, index, visibility, tab color, or grid properties. Use this when you need to modify the metadata or appearance of a specific sheet.2 params

Tool to update properties of a sheet (worksheet) within a Google Spreadsheet, such as its title, index, visibility, tab color, or grid properties. Use this when you need to modify the metadata or appearance of a specific sheet.

Parameters* required
spreadsheetIdstring
The ID of the spreadsheet containing the sheet to update.
updateSheetPropertiesobject
The details of the sheet properties to update.
GOOGLESHEETS_UPDATE_SPREADSHEET_PROPERTIESTool to update properties of a spreadsheet, such as its title, locale, or auto-recalculation settings. Use when you need to modify the overall configuration of a Google Sheet.3 params

Tool to update properties of a spreadsheet, such as its title, locale, or auto-recalculation settings. Use when you need to modify the overall configuration of a Google Sheet.

Parameters* required
fieldsstring
The fields that should be updated. Use '*' for all fields in 'properties' or a comma-separated list (e.g., 'title,locale,iterativeCalculationSettings.maxIterations'). The root 'properties' is implied. Examples: "title,locale" "iterativeCalculationSettings.maxIterations" "*"
propertiesobject
The properties to update. At least one field within properties must be set.
spreadsheetIdstring
The ID of the spreadsheet to update. Example: "abc123spreadsheetId"
GOOGLESHEETS_UPSERT_ROWSUpsert rows - update existing rows by key, append new ones. Automatically handles column mapping and partial updates. Use for: CRM syncs (match Lead ID), transaction imports (match Transaction ID), inventory updates (match SKU), calendar syncs (match Event ID). Features: - Aut...6 params

Upsert rows - update existing rows by key, append new ones. Automatically handles column mapping and partial updates. Use for: CRM syncs (match Lead ID), transaction imports (match Transaction ID), inventory updates (match SKU), calendar syncs (match Event ID). Features: - Aut...

Parameters* required
dataarray
2D array of data rows to upsert (no header row). Each row should have values matching the headers list. Cell values can be strings, numbers, booleans, or null. You can provide a subset of columns - other columns in the sheet will be preserved during updates. Example inputs: [['john@example.com', '555-0101', 'Active'], ['jane@example.com', '555-0102', 'Pending']] for contacts, [['WIDGET-001', 50, 9.99], ['GADGET-002', 30, 19.99]] for inventory, [['L-12345', 'John Doe', 85]] for single CRM lead update. Examples: [["john@example.com","555-0101","Active"],["jane@example.com","555-0102","Pending"]] [["WIDGET-001",50,9.99],["GADGET-002",30,19.99]] [["L-12345","John Doe",85]]
headersarray
List of column names for the data. These will be matched against sheet headers. If a column doesn't exist in the sheet, it will be added automatically. Order doesn't need to match sheet order. Example inputs: ['Email', 'Phone', 'Status'] for contact updates, ['Lead ID', 'Name', 'Score'] for CRM, ['SKU', 'Stock', 'Price'] for inventory. Examples: ["Email","Phone","Status"] ["Lead ID","Name","Score"] ["SKU","Stock","Price"]
keyColumnstring
The column NAME to use as unique identifier for matching rows. Must match a header name exactly. Example inputs: 'Email' (for contact lists), 'ID' (for records), 'SKU' (for inventory), 'Transaction Number' (for financial data), 'Lead ID' (for CRM). Examples: "Email" "ID" "SKU" "Lead ID" "Transaction Number"
sheetNamestring
The name of the sheet/tab within the spreadsheet. Examples: "Leads" "Transactions" "Inventory"
tableStartstring
Cell where the table starts (where headers are located). Defaults to 'A1'. Use this if your table is offset (e.g., 'C5', 'D10'). Examples: "A1" "C5" "D10"default: A1
spreadsheetIdstring
The ID of the spreadsheet. Example: "1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms"

Google Sheets MCP Server

Powerful tools for automating Google Sheets using Model Context Protocol (MCP)

mcp-name: io.github.henilcalagiya/google-sheets-mcp

Overview

Google Sheets MCP Server provides seamless integration of Google Sheets with any MCP-compatible client. It enables full spreadsheet automation — including creating, reading, updating, and deleting sheets — through a simple and secure API layer.

Features

  • Full CRUD support for Google Sheets and tables
  • Works with Continue.dev, Claude Desktop, Perplexity, and other MCP clients
  • Secure authentication via Google Service Account
  • Comprehensive tools for Google Sheets automation
  • Automatic installation via uvx

Requirements

  • Python 3.10+
  • uv package manager (for uvx command)
  • A Google Cloud project with a Service Account
  • MCP-compatible client (e.g., Continue.dev)

Install uv:

# macOS/Linux
curl -LsSf https://astral.sh/uv/install.sh | sh

# Windows PowerShell
irm https://astral.sh/uv/install.ps1 | iex

Quick Start

1. Set Up Google Service Account

Step 1: Create a Google Cloud Project

  1. Go to Google Cloud Console
  2. Click "Select a project" → "New Project"
  3. Enter a project name (e.g., "my-sheets-automation")
  4. Click "Create"

Step 2: Enable Required APIs

  1. In your project, go to "APIs & Services" → "Library"
  2. Search for "Google Sheets API" → Click → "Enable"
  3. Search for "Google Drive API" → Click → "Enable"

Step 3: Create Service Account

  1. Go to "IAM & Admin" → "Service Accounts"
  2. Click "Create Service Account"
  3. Enter service account name (e.g., "sheets-mcp-service")
  4. Click "Create and Continue"
  5. Skip role assignment → Click "Continue"
  6. Click "Done"

Step 4: Generate JSON Key

  1. Click on your new service account email
  2. Go to "Keys" tab → "Add Key" → "Create new key"
  3. Choose "JSON" format → Click "Create"
  4. The JSON file will download automatically

Step 5: Extract Required Values Open the downloaded JSON file and note these values:

  • project_id (e.g., "my-sheets-automation-123456")
  • private_key_id (e.g., "a4ae73111b11b2c3b07cc01006e71eb8230dfa29")
  • private_key (the long private key starting with "-----BEGIN PRIVATE KEY-----")
  • client_email (e.g., "sheets-mcp-service@my-sheets-automation-123456.iam.gserviceaccount.com")
  • client_id (e.g., "113227823918217958816")
  • client_x509_cert_url (e.g., "https://www.googleapis.com/robot/v1/metadata/x509/sheets-mcp-service%40my-sheets-automation-123456.iam.gserviceaccount.com")

Example Google service account JSON structure:

{
  "type": "service_account",
  "project_id": "your-project-id",
  "private_key_id": "your-private-key-id",
  "private_key": "-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----\n",
  "client_email": "your-service@your-project.iam.gserviceaccount.com",
  "client_id": "your-client-id",
  "auth_uri": "https://accounts.google.com/o/oauth2/auth",
  "token_uri": "https://oauth2.googleapis.com/token",
  "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
  "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/your-service%40your-project.iam.gserviceaccount.com"
}

Follow this guide if needed

2. Configure MCP Client

{
  "mcpServers": {
    "google-sheets-mcp": {
      "command": "uvx",
      "args": ["google-sheets-mcp@latest"],
      "env": {
        "project_id": "your-project-id",
        "private_key_id": "your-private-key-id",
        "private_key": "-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----\n",
        "client_email": "your-service@your-project.iam.gserviceaccount.com",
        "client_id": "your-client-id",
        "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/your-service%40your-project.iam.gserviceaccount.com"
      }
    }
  }
}

💡 Pro Tip: You can copy the values directly from your Google service account JSON file. The field names in the JSON file are used exactly as they are - no changes needed!

🔄 Backward Compatibility: The server also supports the old GOOGLE_ prefixed variable names (e.g., GOOGLE_PROJECT_ID) for existing configurations.

3. Share Your Google Sheet with the Service Account

  • Open your target Google Spreadsheet in your web browser.
  • Click the Share button.
  • Enter the service account email (e.g., your-service@your-project.iam.gserviceaccount.com) and assign Editor access.
  • Click Send to provide editor permissions.

🎉 You're all set! Your MCP client will automatically install and run the package when needed.

License

This project is licensed under the MIT License - see the LICENSE file for details.

Author

Henil C Alagiya

  • GitHub: @henilcalagiya
  • LinkedIn: Henil C Alagiya

Support & Contributions:

  • 🐛 Report Issues: GitHub Issues
  • 💬 Questions: Reach out on LinkedIn
  • 🤝 Contributions: Pull requests welcome!
Featured
CodeRabbit
CodeRabbit
AI writes the code. CodeRabbit catches the slop.
Try For Free →
Keep your Mac awake
Keep your Mac awake
Keep your Mac awake while Claude Code and 40+ AI agents run. Sleeps when they're idle.
One time payment $9 →
Context.devContext.dev
Context.dev
Integrate web data into your AI product. One API to scrape website & brand data.
Get API Key Now →
Make your agent a DeFi expert
Make your agent a DeFi expert
Agent, run crypto. Access onchain data & trade routes via 1inch.
Install now →
Make money from your Skills
Make money from your Skills
On Capafy, your Skill runs online 24/7 as an agent product, and you get paid every time someone uses it.
Start earning →
AppSignal
AppSignal
Monitor with ease. Code with confidence.
Start Free Trial →
Categories
Data & Analytics
Registryactive
Packagegoogle-sheets-mcp
TransportSTDIO
UpdatedSep 11, 2025
View on GitHub

Related Data & Analytics MCP Servers

View all →
Google Sheets

com.mcparmory/google-sheets

Create, read, and modify spreadsheet data, formatting, and sheets
25
Google Sheets

domdomegg/google-sheets-mcp

Allow AI systems to read, write, and query spreadsheet data via Google Sheets.
2
Futuristic Risk Intelligence

cct15/war-dashboard-data

Geopolitical conflict risk, political events, and maritime traffic data for AI agents
1
Mcp Google Sheets Full

moooonad/mcp-google-sheets-full

Full Google Sheets MCP: 26 tools + run_sheets_script escape hatch. User OAuth, no service account.
CSV to JSON API

io.github.br0ski777/csv-to-json

Parse CSV to JSON array. Auto-detect delimiter, headers. x402 micropayment.
Warehouse Mcp

kalehdoo/warehouse-mcp

Production MCP server for Postgres, Oracle, Snowflake, BigQuery, Redshift, DuckDB, MotherDuck.