google_sheets_ add_ chartAdds a chart.
Read a range, append rows, duplicate a tab, sort and de-duplicate data, apply conditional formatting, and see who a spreadsheet is shared with — all from the client you already work in.
PopMCPGoogle Sheets
Every tool the connection exposes — cell reads and writes, tab and formatting edits, Drive sharing — plus the change triggers you can watch.
google_sheets_ add_ chartAdds a chart.
google_sheets_ add_ conditional_ format_ ruleAdds a new conditional format rule.
google_sheets_ add_ sheetAdds a sheet.
google_sheets_ auto_ resize_ rows_ or_ columnsAutomatically resizes one or more dimensions based on the contents of the cells in that dimension.
google_sheets_ delete_ rows_ or_ columnsDeletes rows or columns in a sheet.
google_sheets_ delete_ sheetDeletes a sheet.
google_sheets_ duplicate_ sheetDuplicates a sheet.
google_sheets_ find_ and_ replaceFinds and replaces occurrences of some text with other text.
google_sheets_ format_ cellsRepeats a single cell across a range.
google_sheets_ insert_ rows_ or_ columnsInserts new rows or columns in a sheet.
google_sheets_ merge_ cellsMerges cells together.
google_sheets_ move_ rows_ or_ columnsMoves rows or columns to another location in a sheet.
google_sheets_ remove_ duplicate_ rowsRemoves rows containing duplicate values in specified columns of a cell range.
google_sheets_ resize_ rows_ or_ columnsUpdates dimensions' properties.
google_sheets_ set_ bordersUpdates the borders in a range of cells.
google_sheets_ set_ data_ validationSets data validation for one or more cells.
google_sheets_ set_ filterSets the basic filter on a sheet.
google_sheets_ sort_ rangeSorts data in a range.
google_sheets_ unmerge_ cellsUnmerges merged cells.
google_sheets_ update_ sheet_ propertiesUpdates a sheet's properties.
google_sheets_ update_ spreadsheet_ propertiesUpdates the spreadsheet's properties.
google_sheets_ copy_ spreadsheetDuplicate an entire spreadsheet, including every tab, formula and format — the safe way to work from a template, or to keep a snapshot before a large edit.
google_sheets_ get_ spreadsheet_ file_ infoDrive-side facts about a spreadsheet that the Sheets API does not hold: who owns it, who last edited it and when, which folders it sits in, whether it is shared or trashed, and the `webViewLink` to hand to a person.
google_sheets_ list_ drive_ foldersList Drive FOLDERS, so you can put a spreadsheet somewhere or search inside one.
google_sheets_ list_ spreadsheet_ permissionsSee who a spreadsheet is shared with, and how.
google_sheets_ list_ spreadsheetsFIND spreadsheets — start here whenever you have a spreadsheet's name but not its id.
google_sheets_ move_ spreadsheetMove a spreadsheet into a different Drive folder — the step to run after create_spreadsheet, which always creates in the top level of My Drive.
google_sheets_ remove_ spreadsheet_ permissionRevoke one person's or one link's access to a spreadsheet, using the permissionId from list_spreadsheet_permissions.
google_sheets_ share_ spreadsheetShare a spreadsheet.
google_sheets_ trash_ spreadsheetDelete a spreadsheet the way a person means it: move it to the trash, where it stops appearing in searches, stays recoverable for 30 days, and can be restored with untrash_spreadsheet.
google_sheets_ append_ rowsAppends values to a spreadsheet.
google_sheets_ clear_ valuesClears values from a spreadsheet.
google_sheets_ read_ multiple_ rangesReturns one or more ranges of values from a spreadsheet.
google_sheets_ read_ valuesReturns a range of values from a spreadsheet.
google_sheets_ write_ multiple_ rangesSets values in one or more ranges of a spreadsheet.
google_sheets_ write_ valuesSets values in a range of a spreadsheet.
google_sheets_ batch_ update_ spreadsheetApplies one or more updates to the spreadsheet.
google_sheets_ create_ spreadsheetCreates a spreadsheet, returning the newly created spreadsheet.
google_sheets_ get_ spreadsheetReturns the spreadsheet at the given ID.
google_sheets_ list_ sheet_ tabsList the TABS in a spreadsheet with their numeric `sheetId`, title, position, size and frozen-row count — run this before almost any edit.
google_sheets_ add_ alternating_ colorsAdds a new banded range Adds a new banded range to the spreadsheet.
google_sheets_ add_ data_ sourceAdds a data source.
google_sheets_ add_ dimension_ groupCreates a group over the specified range.
google_sheets_ add_ filter_ viewAdds a filter view.
google_sheets_ add_ named_ rangeAdds a named range.
google_sheets_ add_ slicerAdds a slicer.
google_sheets_ add_ tableAdds a table.
google_sheets_ append_ cellsAppends cells after the last row with data in a sheet.
google_sheets_ append_ rows_ or_ columnsAppends dimensions to the end of a sheet.
google_sheets_ auto_ fillAutomatically fills in more data based on existing data.
google_sheets_ cancel_ data_ source_ refreshCancels refreshes of one or multiple data sources and associated dbobjects.
google_sheets_ clear_ basic_ filterClears the basic filter on a sheet.
google_sheets_ copy_ paste_ rangeCopies data from one area and pastes it to another.
google_sheets_ create_ developer_ metadataCreates new developer metadata A request to create developer metadata.
google_sheets_ cut_ paste_ rangeCuts data from one area and pastes it to another.
google_sheets_ delete_ bandingRemoves a banded range Removes the banded range with the given ID from the spreadsheet.
google_sheets_ delete_ cells_ and_ shiftDeletes a range of cells from a sheet, shifting the remaining cells.
google_sheets_ delete_ chart_ or_ imageDeletes an embedded object (e.g, chart, image) in a sheet.
google_sheets_ delete_ conditional_ format_ ruleDeletes an existing conditional format rule.
google_sheets_ delete_ data_ sourceDeletes a data source.
google_sheets_ delete_ developer_ metadataDeletes developer metadata A request to delete developer metadata.
google_sheets_ delete_ dimension_ groupDeletes a group over the specified range.
google_sheets_ delete_ filter_ viewDeletes a filter view from a sheet.
google_sheets_ delete_ named_ rangeDeletes a named range.
google_sheets_ delete_ protected_ rangeDeletes a protected range.
google_sheets_ delete_ tableA request for deleting a table.
google_sheets_ duplicate_ filter_ viewDuplicates a filter view.
google_sheets_ insert_ cells_ and_ shiftInserts new cells in a sheet, shifting the existing cells.
google_sheets_ move_ chart_ or_ imageUpdates an embedded object's (e.g.
google_sheets_ paste_ raw_ dataPastes data (HTML or delimited) into a sheet.
google_sheets_ protect_ rangeAdds a protected range.
google_sheets_ refresh_ data_ sourceRefreshes one or multiple data sources and associated dbobjects.
google_sheets_ set_ chart_ borderUpdates an embedded object's border.
google_sheets_ shuffle_ rowsRandomizes the order of the rows in a range.
google_sheets_ split_ text_ to_ columnsConverts a column of text into many columns of text.
google_sheets_ trim_ whitespaceTrims cells of whitespace (such as spaces, tabs, or new lines).
google_sheets_ update_ bandingUpdates a banded range Updates properties of the supplied banded range.
google_sheets_ update_ cellsUpdates many cells at once.
google_sheets_ update_ chart_ specUpdates a chart's specifications.
google_sheets_ update_ conditional_ format_ ruleUpdates an existing conditional format rule.
google_sheets_ update_ data_ sourceUpdates a data source.
google_sheets_ update_ developer_ metadataUpdates an existing developer metadata entry A request to update properties of developer metadata.
google_sheets_ update_ dimension_ groupUpdates the state of the specified group.
google_sheets_ update_ filter_ viewUpdates the properties of a filter view.
google_sheets_ update_ named_ rangeUpdates a named range.
google_sheets_ update_ protected_ rangeUpdates a protected range.
google_sheets_ update_ slicer_ specUpdates a slicer's specifications.
google_sheets_ update_ tableUpdates a table.
google_sheets_ untrash_ spreadsheetRestore a trashed spreadsheet to where it was.
google_sheets_ update_ spreadsheet_ permissionChange an existing share's role, e.g.
google_sheets_ clear_ multiple_ rangesClears one or more ranges of values from a spreadsheet.
google_sheets_ clear_ values_ by_ filterClears one or more ranges of values from a spreadsheet.
google_sheets_ read_ values_ by_ filterReturns one or more ranges of values that match the specified data filters.
google_sheets_ write_ values_ by_ filterSets values in one or more ranges of a spreadsheet.
google_sheets_ get_ spreadsheet_ by_ filterReturns the spreadsheet at the given ID.
google_sheets_ get_ developer_ metadataReturns the developer metadata with the specified ID.
google_sheets_ search_ developer_ metadataReturns all developer metadata matching the specified DataFilter.
google_sheets_ copy_ sheet_ to_ spreadsheetCopies a single sheet from a spreadsheet to another spreadsheet.
Authorize once, then an endpoint your client signs into. Nothing to deploy, and nothing to install on the Google Sheets side.
Bring your own Google Cloud OAuth client: enable the Sheets and Drive APIs, paste the OAuth Client ID and OAuth Client Secret, and authorize once. No spreadsheet picker — it reaches what that Google account can open.
1234567890-abc.apps.googleusercontent.com••••••••••••3f7aSet read-only for reporting, or full access with approval on writes so deleting rows, trashing a spreadsheet or changing sharing waits for a human. Flip on the full catalog to reach the rarer batch edits.
Drop the PopMCP URL into Claude, ChatGPT, Codex or any other supported client. It signs in through PopMCP with OAuth, so your Google Sheets credential never leaves the server.
app.popmcp.com/mcp/…Ask for something harmless before you turn writes on. Once it comes back clean, widen the tool set or switch the connection to full access.
Pull last week's numbers from the Q3 Pipeline tab and summarize by rep
google_sheets_list_spreadsheetsok
Then just ask for the work
“Pull last week's numbers from the Q3 Pipeline tab and summarize by rep”
“Swap every 'Pending' in the Orders tab to 'Shipped' and re-sort by date”
“Create a 2026 budget spreadsheet with headers and file it under Finance”
“Who outside the company can still open the Client Rates spreadsheet?”
One hosted endpoint, registered once per client. The same tools and the same permissions, whichever window the request comes from.
Add the PopMCP URL under Settings → Connectors and the tools appear in every chat.
The same endpoint, registered in the browser. Nothing to install on the machine you are working from.
Register PopMCP as a custom connector, then let ChatGPT read and update the account.
Wire the endpoint into Codex or the Codex CLI when a task needs live business context, not a fixture.
Register the remote MCP server in OpenCode's config for terminal-first and scripted agent runs.
Add PopMCP as an MCP server in Z.ai's desktop app and work the account from the same window.
FAQ
What teams ask before putting Google Sheets behind an AI client.
There is no spreadsheet to pick during setup. The connection reaches exactly the spreadsheets that the Google account you authorized with can reach, so scope is decided entirely by which account you use. To hand over less, authorize with an account that only has access to the files you want an agent touching.
It is OAuth, using your own Google Cloud OAuth client — no keys are pasted into a prompt or config file. Enable the Google Sheets API and the Google Drive API in your project, then paste the OAuth Client ID and OAuth Client Secret into the connect form and authorize once. After that there is no per-spreadsheet setup.
That is Google's behavior for an OAuth app still in testing. If your Google Cloud project's Audience is set to External, publish the app before you connect — otherwise Google expires the connection after 7 days and calls start failing. Publish the app first, then connect again.
The Sheets API only helps once you already have a spreadsheet's id. The Drive side is what finds a file by name, lists folders, moves a spreadsheet into one, shows who it is shared with, and reports who owns it, who last edited it and the webViewLink you would hand to a person. If the Drive API is not enabled in your project, those tools have nothing to call.
40 of the 98 operations load by default and the rest stay searchable, so a long tool list does not eat your context window. They come from 6 API modules — batch spreadsheet edits is by far the largest, then Drive and cell values. 86 of the 98 are writes, because formatting, structure and sharing all count as edits, and there are 12 change triggers on top.
Google addresses spreadsheets and tabs by id, not by the name a person uses. A clean run starts with list_spreadsheets to turn a name into an id, then list_sheet_tabs for the numeric sheetId, title, size and frozen-row count before almost any edit. One related quirk: create_spreadsheet always creates the file at the top level of My Drive, so filing it somewhere takes a follow-up move_spreadsheet.
No. PopMCP hosts it and gives you a Streamable HTTP MCP URL. There is nothing to deploy, no callback URL to register, and no infrastructure to keep running or patch.
Any client that supports a remote Streamable HTTP MCP server — Claude Desktop, Claude Web, ChatGPT custom connectors, Codex and the Codex CLI, OpenCode and Z.ai's ZCode, as well as editors such as Cursor, Windsurf and Zed. Your client signs in to PopMCP with OAuth; the provider credential never leaves the server.
Loading 98 tool definitions into every conversation burns context before the work starts. PopMCP loads a curated 40-tool set covering the everyday workflows and keeps the rest searchable, so your AI pulls a specialist tool only when a task needs it. You can switch a connection to the full catalog at any time.
A tool is something your AI calls — there are 98 here. A trigger is something PopMCP watches for you: 12 Google Sheets events that can start work on the PopMCP side. Triggers never enter your AI client's context, and none of them ask you to paste a callback URL into Google Sheets.
Launch a hosted MCP endpoint for Google Sheets, keep tool access under control, and start testing real workflow prompts right away.