Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

io.github.chrischall/gogcli-mcp-sheets

NPM · GOGCLI-MCP-SHEETS · SCANNED SEP 20

Extended Google Sheets for Claude via gogcli — auth + full Sheets support

Available components

0 this week 93 Trust /100
Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →

Supply Chain Security100
  • No malware found by supply-chain analysis.Pass
  • No known CVEs affecting this package version or its production dependencies.Pass
  • No install/post-install scripts declared.Pass
  • 0 of 4 dependencies flagged as unhealthy. View diagnostics → Pass
Provenance & Transparency97
  • Source repository is publicly reachable at the declared URL. View diagnostics → Pass
  • Cryptographically verified build provenance (signed, bound to chrischall/gogcli-mcp). View diagnostics → Pass
  • Clear OSI-approved license (MIT).Pass
  • Actively maintained (last published 0 days ago).Pass
  • Disclosure check failed: no security disclosure policy was found in the source repository. See how to fix → Fail
Schema Quality & AI Usability72
  • AI-judged instruction clarity (excellent).Pass
  • Context-footprint check failed: tool/resource definitions use about 13266 tokens (~176/item across 75 items; 75 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management93
  • Stability observed for 28 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage100
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 100% of tool parameters carry a description.Pass
Tool Safety100
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • All 10 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.Pass
  • An AI judge read all 75 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a current MCP spec version (2026-07-28).Pass
Install

How do I install the io.github.chrischall/gogcli-mcp-sheets server?

io.github.chrischall/gogcli-mcp-sheets runs locally as an npm package, launched with npx -y gogcli-mcp-sheets. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

npm · gogcli-mcp-sheets

# add to Claude Code
claude mcp add chrischall-gogcli-mcp-sheets -- npx -y gogcli-mcp-sheets
// .cursor/mcp.json
{
  "mcpServers": {
    "chrischall-gogcli-mcp-sheets": {
      "command": "npx",
      "args": [
        "-y",
        "gogcli-mcp-sheets"
      ]
    }
  }
}
// .vscode/mcp.json
{
  "servers": {
    "chrischall-gogcli-mcp-sheets": {
      "command": "npx",
      "args": [
        "-y",
        "gogcli-mcp-sheets"
      ]
    }
  }
}
# add to Codex CLI
codex mcp add chrischall-gogcli-mcp-sheets -- npx -y gogcli-mcp-sheets
// opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "chrischall-gogcli-mcp-sheets": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "gogcli-mcp-sheets"
      ],
      "enabled": true
    }
  }
}
# add to OpenClaw
openclaw mcp add chrischall-gogcli-mcp-sheets --command npx --arg -y --arg gogcli-mcp-sheets
# ~/.hermes/config.yaml
mcp_servers:
  chrischall-gogcli-mcp-sheets:
    command: "npx"
    args: ["-y", "gogcli-mcp-sheets"]
// ~/.netclaw/config/netclaw.json
{
  "McpServers": {
    "chrischall-gogcli-mcp-sheets": {
      "Transport": "stdio",
      "Command": "npx",
      "Arguments": [
        "-y",
        "gogcli-mcp-sheets"
      ]
    }
  }
}
# add to Vellum
assistant mcp add chrischall-gogcli-mcp-sheets -t stdio -c npx -a -y gogcli-mcp-sheets
// mcp.json
{
  "mcpServers": {
    "chrischall-gogcli-mcp-sheets": {
      "command": "npx",
      "args": [
        "-y",
        "gogcli-mcp-sheets"
      ]
    }
  }
}
Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 20 Sept 26 0
    • MCP protocol: Implements a current MCP spec version (2026-07-28). functional
    • Package version: 4.0.1 → 4.1.0 functional
  • 19 Sept 26 +15
    • Malware scan: unverified → pass security
  • 18 Sept 26 −14
    • Malware scan: pass → unverified security
    • Package version: 3.0.0 → 4.0.1 functional
  • 17 Sept 26 +1
    • Stability: 0.80 → unverified security
    • Tool safety: pass → unverified security
    • Capabilities: pass → unverified functional
    • Tool coverage: 100 → unverified functional
    • Dependency health: 0.85 → 1.00 functional
    • Schema quality: Schema quality not yet verified: we do not have a sandbox capture of the MCP schema this version of the package serves yet. functional
    • Package version: 2.30.0 → 3.0.0 functional
  • 16 Sept 26 −3
    • Stability: pass → 0.80 functional
  • 15 Sept 26 +15
    • Malware scan: unverified → pass security
  • 14 Sept 26 −14
    • Malware scan: pass → unverified security
    • Stability: 0.97 → unverified security
    • Tool safety: pass → unverified security
    • Stability: 0.97 → pass security
    • Capabilities: pass → unverified functional
    • Tool coverage: 100 → unverified functional
    • Schema quality: Schema quality not yet verified: we do not have a sandbox capture of the MCP schema this version of the package serves yet. functional
    • Package version: 2.29.1 → 2.30.0 functional
  • 13 Sept 26 −1
    • Stability: pass → 0.97 functional
Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 20 Sept 2026 · Analysed npm/gogcli-mcp-sheets@4.1.0

Provenance Verified

A signed build attestation was found and verified, binding this exact artifact to the source repository it claims to come from.

Result Verified
Ecosystem npm
Reason Verified
Discovered via Registry attestation endpoint
Source repo chrischall/gogcli-mcp
Certificate issuer https://token.actions.githubusercontent.com
Certificate SAN https://github.com/chrischall/gogcli-mcp/.github/workflows/release-please.yml@refs/heads/main
Rekor log index 2893922307
Predicate type https://slsa.dev/provenance/v1
Subject digest sha512:30fd1352d8b0408e96ebb528eab107ac5dac0d1a38222d2e04823c52a934a3d8b5297d57d7603a5dc4c2a1807612328bd292db6743c61aed9c81edcf0

Background: How many MCP packages publish verified provenance →

Dependencies 4 packages
Packages resolved 4
Tree resolution Complete

Background: SBOMs and build attestations, explained →

MCP tools · 75 exposed · ~13,266 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
gog_auth_add ~252

Authorize a Google account via browser-based OAuth. Opens a browser window where the user must sign in and grant access. Blocks for up to 5 minutes waiting for the user to complete authorization. If the browser does not open automatically, a fallback URL is included in the response. Use gog_auth_list to check which accounts are already configured.

NameTypeReqDescription
emailstringyesGoogle account email to authorize
extraScopesstringAdditional raw OAuth scope URIs to request, comma-separated, on top of the ones `services` implies. Use for scopes no service covers — e.g. https://www.googleapis.com/auth/bigquery.readonly, required…
servicesstringServices to authorize: "all" or comma-separated list (e.g. "sheets,gmail,calendar"). Default: "sheets". Prefer the narrowest set you need — requesting a service whose Google API is not enabled on the…

No output schema declared.

No examples provided.

gog_auth_add_complete ~212

Complete REMOTE/headless Google authorization (step 2 of 2). Takes the full redirected localhost URL the user copied after finishing gog_auth_add_url, exchanges it for a refresh token, and stores it. Use the SAME `services` value you passed to gog_auth_add_url. Must run within 10 minutes of step 1 and against the same gogcli host.

NameTypeReqDescription
emailstringyesGoogle account email being authorized (same as step 1)
extraScopesstringExtra OAuth scope URIs — MUST match the value passed to gog_auth_add_url, for the same reason `services` must: the two steps have to describe the same grant.
redirectUrlstringyesThe full localhost redirect URL the user copied from the browser address bar after signing in (contains code and state; the page itself fails to load, which is expected).
servicesstringServices authorized — MUST match the value passed to gog_auth_add_url. Default: "sheets".

No output schema declared.

No examples provided.

gog_auth_add_url ~338

Begin REMOTE/headless Google authorization (step 1 of 2). Returns a sign-in URL to open in any browser — no local server or terminal on the gogcli host is needed, so this works on a hosted deployment where the interactive gog_auth_add cannot. Hand the URL to the user; after they sign in, the browser is redirected to a localhost URL that fails to load — that is expected. They copy that full redirected URL (from the address bar) and you pass it to gog_auth_add_complete. The link is valid for 10 minutes. If you pass a custom `services` here, pass the SAME value to gog_auth_add_complete or the second step will not match this one.

NameTypeReqDescription
emailstringyesGoogle account email to authorize
extraScopesstringAdditional raw OAuth scope URIs to request, comma-separated, on top of the ones `services` implies. Use for scopes no service covers — e.g. https://www.googleapis.com/auth/bigquery.readonly, required…
servicesstringServices to authorize: "all" or comma-separated list (e.g. "sheets,gmail,calendar"). Default: "sheets". Prefer the narrowest set you need — requesting a service whose Google API is not enabled on the…

No output schema declared.

No examples provided.

gog_auth_health ~198

Check the LIVE health of each stored Google account. Unlike gog_auth_status (which only reports keyring/config setup), this performs a real token refresh against Google, so it detects expired or revoked (invalid_grant) refresh tokens — the account-wide sign-out that blocks every service. Reports per account: whether the token is currently valid, the mapped cause when it is not, how long ago it was authorized, and a warning as it approaches the 7-day refresh-token limit that applies to OAuth apps whose consent screen is still in "Testing" mode. Run it proactively to re-authorize on your own schedule instead of mid-task. On a hosted deployment this is the ONLY check that measures Google: a connector showing "connected" or "refreshed" has verified the client's connection to the MCP host, and nothing else — the Google credential lives in gog's keyring on that host and can be dead while the connection looks perfectly healthy.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

gog_auth_list ~81

List the Google accounts stored in gogcli, with their scopes. This reads local configuration only — it does not contact Google and does NOT tell you whether an account still works: a signed-out account whose refresh token expired or was revoked is listed here exactly like a healthy one, scopes and all. Use gog_auth_health to check whether an account can actually authenticate.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

gog_auth_run ~108

Run any gog auth subcommand not covered by the other tools. Run `gog auth --help` for the full list of subcommands, or `gog auth <subcommand> --help` for flags on a specific subcommand. For browser-based authorization, use gog_auth_add instead.

NameTypeReqDescription
argsarrayyesAdditional positional args and flags
subcommandstringyesThe gog auth subcommand to run, e.g. "remove", "alias", "list"

No output schema declared.

No examples provided.

gog_auth_services ~24

List all Google services supported by gogcli and the OAuth scopes each requires.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

gog_auth_status ~66

Show gogcli auth CONFIGURATION: keyring backend, credential files, and auth setup. Despite the name this is not a health check — it reads local setup and does not contact Google, so it says nothing about whether an account can still authenticate. Use gog_auth_health for that.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

gog_sheets_add_tab ~94

Add a new sheet tab to a spreadsheet.

NameTypeReqDescription
accountstringGoogle account email to use, e.g. you@gmail.com — must be the full address, not a bare username. Overrides the GOG_ACCOUNT env var. Omit to use the single configured account.
spreadsheetIdstringyesSpreadsheet ID (from the URL)
tabNamestringyesName for the new tab

No output schema declared.

No examples provided.

gog_sheets_append ~198

Append rows to a Google Sheet after the last row with data in the given range. Values may be strings, numbers, booleans, or null. Strings starting with "=" are interpreted as formulas.

NameTypeReqDescription
accountstringGoogle account email to use, e.g. you@gmail.com — must be the full address, not a bare username. Overrides the GOG_ACCOUNT env var. Omit to use the single configured account.
dry_runbooleanPreview the operation without modifying the sheet (gog --dry-run): reports the intended actions and exits without writing.
rangestringyesRange indicating which sheet/columns to append to, e.g. Sheet1!A:C
spreadsheetIdstringyesSpreadsheet ID (from the URL)
valuesarrayyes2D array of rows to append. Cells may be string/number/boolean/null; strings starting with "=" are formulas.

No output schema declared.

No examples provided.

gog_sheets_banding_clear ~143

Remove alternating-color banding. Pass id to remove a single banded range, or all:true with sheet to remove every banding on that sheet.

NameTypeReqDescription
accountstringGoogle account email to use, e.g. you@gmail.com — must be the full address, not a bare username. Overrides the GOG_ACCOUNT env var. Omit to use the single configured account.
allbooleanRemove all banding from the sheet (requires sheet)
idnumberBanded range ID to remove
sheetstringSheet name (used with all:true)
spreadsheetIdstringyesSpreadsheet ID

No output schema declared.

No examples provided.

gog_sheets_banding_list ~98

List alternating-color banded ranges. Optionally scope to a single sheet.

NameTypeReqDescription
accountstringGoogle account email to use, e.g. you@gmail.com — must be the full address, not a bare username. Overrides the GOG_ACCOUNT env var. Omit to use the single configured account.
sheetstringOnly list banding from this sheet
spreadsheetIdstringyesSpreadsheet ID

No output schema declared.

No examples provided.

gog_sheets_banding_set ~169

Apply alternating colors to a range. Provide rowPropertiesJson and/or columnPropertiesJson — each a Sheets API BandingProperties JSON object ({headerColor, firstBandColor, secondBandColor, footerColor}). At least one is required.

NameTypeReqDescription
accountstringGoogle account email to use, e.g. you@gmail.com — must be the full address, not a bare username. Overrides the GOG_ACCOUNT env var. Omit to use the single configured account.
columnPropertiesJsonstringBandingProperties JSON for column colors
rangestringyesRange to band (e.g. Sheet1!A1:D20)
rowPropertiesJsonstringBandingProperties JSON for row colors
spreadsheetIdstringyesSpreadsheet ID

No output schema declared.

No examples provided.

gog_sheets_batch_update ~271

Update values in multiple ranges with one Sheets API request. dataJson is a JSON array of {range, values} objects — pass it inline as a literal JSON string. Atomic — either all ranges update or none do. (The CLI also accepts "@/path/to/file.json", but that file is read on the gog server's filesystem, not the caller's, so inline JSON is the right form for remote MCP callers.)

NameTypeReqDescription
accountstringGoogle account email to use, e.g. you@gmail.com — must be the full address, not a bare username. Overrides the GOG_ACCOUNT env var. Omit to use the single configured account.
dataJsonstringyesValue ranges as an inline JSON array, e.g. [{"range":"Sheet1!A1:B2","values":[["a","b"]]}]. (An "@/path" form is read on the gog server filesystem, not yours — inline the JSON instead.)
includeValuesInResponsebooleanInclude updated values in the response
inputstringValue input option (default: USER_ENTERED)
responseDateTimeRenderstringResponse date/time render option
responseRenderstringResponse value render option
spreadsheetIdstringyesSpreadsheet ID

No output schema declared.

No examples provided.

gog_sheets_chart_create ~213

Create an embedded chart from a JSON spec. specJson is a Sheets API ChartSpec (or full EmbeddedChart) — inline or @/path/to/file.json. Anchor the chart with sheet + anchor (A1 cell), and optionally size it with width/height pixels.

NameTypeReqDescription
accountstringGoogle account email to use, e.g. you@gmail.com — must be the full address, not a bare username. Overrides the GOG_ACCOUNT env var. Omit to use the single configured account.
anchorstringAnchor cell in A1 notation (e.g. A1, E10)
heightnumberChart height in pixels (default: 371)
sheetstringSheet name for the anchor (resolved to sheetId)
specJsonstringyesChartSpec or EmbeddedChart JSON (inline or @file)
spreadsheetIdstringyesSpreadsheet ID
widthnumberChart width in pixels (default: 600)

No output schema declared.

No examples provided.

gog_sheets_chart_delete ~90

Delete a chart by its numeric chart ID.

NameTypeReqDescription
accountstringGoogle account email to use, e.g. you@gmail.com — must be the full address, not a bare username. Overrides the GOG_ACCOUNT env var. Omit to use the single configured account.
chartIdstringyesNumeric chart ID to delete
spreadsheetIdstringyesSpreadsheet ID

No output schema declared.

No examples provided.

gog_sheets_chart_get ~105

Get the full definition (spec + position) of a single chart by its numeric chart ID.

NameTypeReqDescription
accountstringGoogle account email to use, e.g. you@gmail.com — must be the full address, not a bare username. Overrides the GOG_ACCOUNT env var. Omit to use the single configured account.
chartIdstringyesNumeric chart ID (from gog_sheets_chart_list)
spreadsheetIdstringyesSpreadsheet ID

No output schema declared.

No examples provided.

gog_sheets_chart_list ~82

List embedded charts in a spreadsheet (chartId, type, position).

NameTypeReqDescription
accountstringGoogle account email to use, e.g. you@gmail.com — must be the full address, not a bare username. Overrides the GOG_ACCOUNT env var. Omit to use the single configured account.
spreadsheetIdstringyesSpreadsheet ID

No output schema declared.

No examples provided.

gog_sheets_chart_update ~132

Replace a chart spec by chart ID. specJson is a Sheets API ChartSpec (or full EmbeddedChart) — inline or @/path/to/file.json.

NameTypeReqDescription
accountstringGoogle account email to use, e.g. you@gmail.com — must be the full address, not a bare username. Overrides the GOG_ACCOUNT env var. Omit to use the single configured account.
chartIdstringyesNumeric chart ID to update
specJsonstringyesChartSpec or EmbeddedChart JSON (inline or @file)
spreadsheetIdstringyesSpreadsheet ID

No output schema declared.

No examples provided.

gog_sheets_clear ~125

Clear all values in a Google Sheets range (formatting is preserved).

NameTypeReqDescription
accountstringGoogle account email to use, e.g. you@gmail.com — must be the full address, not a bare username. Overrides the GOG_ACCOUNT env var. Omit to use the single configured account.
dry_runbooleanPreview the operation without modifying the sheet (gog --dry-run): reports the intended actions and exits without writing.
rangestringyesRange in A1 notation to clear
spreadsheetIdstringyesSpreadsheet ID

No output schema declared.

No examples provided.

gog_sheets_conditional_format_add ~342

Add a conditional formatting rule to a range. Boolean rules: type picks the condition, expr is its value/formula (omit for blank/not-blank), formatJson is the CellFormat to apply when the condition matches (inline or @file); use formatFields to force-send zero/false fields (e.g. backgroundColor,textFormat.bold). Gradient rules (color scales): pass gradientRuleJson instead — a GradientRule JSON with minpoint/maxpoint (and optional midpoint), each {"color":{...},"type":"MIN|MAX|NUMBER|PERCENT|PERCENTILE","value":"..."}. The two modes are mutually exclusive.

NameTypeReqDescription
accountstringGoogle account email to use, e.g. you@gmail.com — must be the full address, not a bare username. Overrides the GOG_ACCOUNT env var. Omit to use the single configured account.
exprstringExpression value or custom formula (omit for blank/not-blank)
formatFieldsstringFormat field mask for force-sending zero/false fields (e.g. backgroundColor,textFormat.bold)
formatJsonstringCellFormat JSON to apply when a boolean rule matches (inline or @file; required with type)
gradientRuleJsonstringGradientRule JSON for gradient conditional formats (inline or @file; must include minpoint and maxpoint)
rangestringyesRange the rule applies to (e.g. Sheet1!A1:A100)
spreadsheetIdstringyesSpreadsheet ID
typestringBoolean rule type (required unless gradientRuleJson is used)

No output schema declared.

No examples provided.

gog_sheets_conditional_format_clear ~145

Remove conditional formatting rules from a sheet. Pass index to remove a single rule by its 0-based index, or all:true to remove every rule on the sheet.

NameTypeReqDescription
accountstringGoogle account email to use, e.g. you@gmail.com — must be the full address, not a bare username. Overrides the GOG_ACCOUNT env var. Omit to use the single configured account.
allbooleanRemove all conditional formatting rules from the sheet
indexnumber0-based rule index to remove
sheetstringyesSheet name to clear rules from
spreadsheetIdstringyesSpreadsheet ID

No output schema declared.

No examples provided.

gog_sheets_conditional_format_list ~96

List conditional formatting rules. Optionally scope to a single sheet.

NameTypeReqDescription
accountstringGoogle account email to use, e.g. you@gmail.com — must be the full address, not a bare username. Overrides the GOG_ACCOUNT env var. Omit to use the single configured account.
sheetstringOnly list rules from this sheet
spreadsheetIdstringyesSpreadsheet ID

No output schema declared.

No examples provided.

gog_sheets_copy ~108

Copy a spreadsheet to a new spreadsheet with the given title.

NameTypeReqDescription
accountstringGoogle account email to use, e.g. you@gmail.com — must be the full address, not a bare username. Overrides the GOG_ACCOUNT env var. Omit to use the single configured account.
parentstringParent folder ID to place the copy in
spreadsheetIdstringyesSpreadsheet ID to copy
titlestringyesTitle for the new copy

No output schema declared.

No examples provided.

gog_sheets_copy_paste ~235

Copy a source range's values/formulas/format to a destination range via the Sheets CopyPasteRequest. A destination larger than the source tiles the source to fill it — the canonical way to fill formulas down or across with relative references adjusted (aliases: fill, copy-range). Use type to control what is pasted (NORMAL pastes everything; FORMULA fills formulas with adjusted references; VALUES/FORMAT/etc. paste only that aspect).

NameTypeReqDescription
accountstringGoogle account email to use, e.g. you@gmail.com — must be the full address, not a bare username. Overrides the GOG_ACCOUNT env var. Omit to use the single configured account.
deststringyesDestination range (e.g. Sheet1!A2:H120). Larger than the source tiles/fills it.
sourcestringyesSource range (e.g. Sheet1!A2:H71)
spreadsheetIdstringyesSpreadsheet ID
transposebooleanPaste transposed (swap rows and columns)
typestringPaste type (default: NORMAL pastes everything)

No output schema declared.

No examples provided.

gog_sheets_create ~85

Create a new Google Spreadsheet. Returns JSON with the new spreadsheetId and URL.

NameTypeReqDescription
accountstringGoogle account email to use, e.g. you@gmail.com — must be the full address, not a bare username. Overrides the GOG_ACCOUNT env var. Omit to use the single configured account.
titlestringyesTitle for the new spreadsheet

No output schema declared.

No examples provided.

gog_sheets_datasource_add ~457

Add a BigQuery Connected Sheets data source to a spreadsheet, creating its linked DATA_SOURCE sheet. Point it at EITHER a custom SQL query (query) OR an existing native table (dataset + table) — never both. billingProject is the BigQuery project charged for the query; tableProject only names which project OWNS the table, and defaults to the billing project. Returns the new dataSourceId, which every other datasource tool takes. COSTS MONEY AND RUNS ASYNCHRONOUSLY: this starts a BigQuery execution billed to the billing project, and returns once the execution has been REQUESTED — not once it has finished. Poll gog_sheets_datasource_describe until its dataExecutionStatus state is SUCCEEDED or FAILED before treating the data as current. BIGQUERY-BACKED SOURCES NEED AN EXTRA SCOPE: ordinary sheets authorization does not request https://www.googleapis.com/auth/bigquery.readonly, and Google refuses the whole response without it. A permission error here means the token is missing that scope, NOT that the spreadsheet has no data sources — re-authorize with gog_auth_add_url/gog_auth_add_complete (or gog_auth_add), keeping the account's EXISTING services selection and passing extraScopes=https://www.googleapis.com/auth/bigquery.readonly with forceConsent. Looker sources reuse the account's existing Looker link and need nothing extra.

NameTypeReqDescription
accountstringGoogle account email to use, e.g. you@gmail.com — must be the full address, not a bare username. Overrides the GOG_ACCOUNT env var. Omit to use the single configured account.
billingProjectstringyesBilling-enabled BigQuery project charged for this source's queries
datasetstringBigQuery dataset ID of an existing table. Requires table; mutually exclusive with query.
querystringBigQuery SQL to run. Mutually exclusive with dataset/table/tableProject.
spreadsheetIdstringyesSpreadsheet ID
tablestringBigQuery table ID. Requires dataset; mutually exclusive with query.
tableProjectstringBigQuery project that owns the table (default: the billing project). Only valid with dataset/table.

No output schema declared.

No examples provided.

gog_sheets_datasource_delete ~298

Delete a Connected Sheets data source. This is WIDER than it sounds: it also deletes the source's linked DATA_SOURCE sheet, and unlinks every extract, chart and pivot table built on it elsewhere in the spreadsheet — objects on other tabs that the caller never named. Take gog_sheets_snapshot first if any of that matters. The BigQuery data itself is untouched; only the spreadsheet's connection to it goes away. BIGQUERY-BACKED SOURCES NEED AN EXTRA SCOPE: ordinary sheets authorization does not request https://www.googleapis.com/auth/bigquery.readonly, and Google refuses the whole response without it. A permission error here means the token is missing that scope, NOT that the spreadsheet has no data sources — re-authorize with gog_auth_add_url/gog_auth_add_complete (or gog_auth_add), keeping the account's EXISTING services selection and passing extraScopes=https://www.googleapis.com/auth/bigquery.readonly with forceConsent. Looker sources reuse the account's existing Looker link and need nothing extra.

NameTypeReqDescription
accountstringGoogle account email to use, e.g. you@gmail.com — must be the full address, not a bare username. Overrides the GOG_ACCOUNT env var. Omit to use the single configured account.
dataSourceIdstringyesData source ID, as reported by gog_sheets_datasource_list
spreadsheetIdstringyesSpreadsheet ID

No output schema declared.

No examples provided.

gog_sheets_datasource_describe ~293

Describe one Connected Sheets data source in full: the complete API DataSource spec (including the BigQuery raw query, which gog_sheets_datasource_list withholds), its sheet properties, its DataExecutionStatus and any refresh schedules. Refreshes are asynchronous and this tool cannot start one — poll it until state is SUCCEEDED or FAILED, and read the status error text when it is FAILED. BIGQUERY-BACKED SOURCES NEED AN EXTRA SCOPE: ordinary sheets authorization does not request https://www.googleapis.com/auth/bigquery.readonly, and Google refuses the whole response without it. A permission error here means the token is missing that scope, NOT that the spreadsheet has no data sources — re-authorize with gog_auth_add_url/gog_auth_add_complete (or gog_auth_add), keeping the account's EXISTING services selection and passing extraScopes=https://www.googleapis.com/auth/bigquery.readonly with forceConsent. Looker sources reuse the account's existing Looker link and need nothing extra.

NameTypeReqDescription
accountstringGoogle account email to use, e.g. you@gmail.com — must be the full address, not a bare username. Overrides the GOG_ACCOUNT env var. Omit to use the single configured account.
dataSourceIdstringyesData source ID, as reported by gog_sheets_datasource_list
spreadsheetIdstringyesSpreadsheet ID

No output schema declared.

No examples provided.

gog_sheets_datasource_list ~259

List the Connected Sheets data sources in a spreadsheet (BigQuery or Looker), each joined with its DATA_SOURCE sheet and current execution status. This is the discovery call — start here to get the dataSourceId the describe tool wants. Deliberately does not print custom SQL; use gog_sheets_datasource_describe for that. BIGQUERY-BACKED SOURCES NEED AN EXTRA SCOPE: ordinary sheets authorization does not request https://www.googleapis.com/auth/bigquery.readonly, and Google refuses the whole response without it. A permission error here means the token is missing that scope, NOT that the spreadsheet has no data sources — re-authorize with gog_auth_add_url/gog_auth_add_complete (or gog_auth_add), keeping the account's EXISTING services selection and passing extraScopes=https://www.googleapis.com/auth/bigquery.readonly with forceConsent. Looker sources reuse the account's existing Looker link and need nothing extra.

NameTypeReqDescription
accountstringGoogle account email to use, e.g. you@gmail.com — must be the full address, not a bare username. Overrides the GOG_ACCOUNT env var. Omit to use the single configured account.
spreadsheetIdstringyesSpreadsheet ID

No output schema declared.

No examples provided.

gog_sheets_datasource_refresh ~344

Re-run a Connected Sheets data source so its sheet and extracts pick up current BigQuery data. Google refuses to refresh a source whose previous execution FAILED; forceRefresh overrides that, which is what you want after fixing the underlying query or permissions. COSTS MONEY AND RUNS ASYNCHRONOUSLY: this starts a BigQuery execution billed to the billing project, and returns once the execution has been REQUESTED — not once it has finished. Poll gog_sheets_datasource_describe until its dataExecutionStatus state is SUCCEEDED or FAILED before treating the data as current. BIGQUERY-BACKED SOURCES NEED AN EXTRA SCOPE: ordinary sheets authorization does not request https://www.googleapis.com/auth/bigquery.readonly, and Google refuses the whole response without it. A permission error here means the token is missing that scope, NOT that the spreadsheet has no data sources — re-authorize with gog_auth_add_url/gog_auth_add_complete (or gog_auth_add), keeping the account's EXISTING services selection and passing extraScopes=https://www.googleapis.com/auth/bigquery.readonly with forceConsent. Looker sources reuse the account's existing Looker link and need nothing extra.

NameTypeReqDescription
accountstringGoogle account email to use, e.g. you@gmail.com — must be the full address, not a bare username. Overrides the GOG_ACCOUNT env var. Omit to use the single configured account.
dataSourceIdstringyesData source ID, as reported by gog_sheets_datasource_list
forceRefreshbooleanRefresh even when the previous execution failed
spreadsheetIdstringyesSpreadsheet ID

No output schema declared.

No examples provided.

gog_sheets_datasource_table_describe ~301

Describe the data-source table (extract) anchored at an A1 cell: its source, configured columns, sort/filter spec and row limit. Read this before gog_sheets_datasource_table_read when you need to know what the columns MEAN — the read returns values, not the extract's definition. BIGQUERY-BACKED SOURCES NEED AN EXTRA SCOPE: ordinary sheets authorization does not request https://www.googleapis.com/auth/bigquery.readonly, and Google refuses the whole response without it. A permission error here means the token is missing that scope, NOT that the spreadsheet has no data sources — re-authorize with gog_auth_add_url/gog_auth_add_complete (or gog_auth_add), keeping the account's EXISTING services selection and passing extraScopes=https://www.googleapis.com/auth/bigquery.readonly with forceConsent. Looker sources reuse the account's existing Looker link and need nothing extra.

NameTypeReqDescription
accountstringGoogle account email to use, e.g. you@gmail.com — must be the full address, not a bare username. Overrides the GOG_ACCOUNT env var. Omit to use the single configured account.
anchorstringyesSheet-qualified A1 anchor of the extract's top-left cell, e.g. "Extracts!B3". Get it from gog_sheets_datasource_table_list — an extract has no other identifier.
spreadsheetIdstringyesSpreadsheet ID

No output schema declared.

No examples provided.

gog_sheets_datasource_table_list ~302

List the data-source tables — "extracts" in the Sheets editor — anchored in a spreadsheet. A data-source table has NO id of its own in the Sheets API: its definition lives on its top-left cell, so every extract is identified by a sheet-qualified A1 anchor (e.g. "Extracts!B3"). That anchor is what the describe and read tools take. Filter with dataSourceId to see only one source's extracts. BIGQUERY-BACKED SOURCES NEED AN EXTRA SCOPE: ordinary sheets authorization does not request https://www.googleapis.com/auth/bigquery.readonly, and Google refuses the whole response without it. A permission error here means the token is missing that scope, NOT that the spreadsheet has no data sources — re-authorize with gog_auth_add_url/gog_auth_add_complete (or gog_auth_add), keeping the account's EXISTING services selection and passing extraScopes=https://www.googleapis.com/auth/bigquery.readonly with forceConsent. Looker sources reuse the account's existing Looker link and need nothing extra.

NameTypeReqDescription
accountstringGoogle account email to use, e.g. you@gmail.com — must be the full address, not a bare username. Overrides the GOG_ACCOUNT env var. Omit to use the single configured account.
dataSourceIdstringOnly list tables belonging to this data source ID
spreadsheetIdstringyesSpreadsheet ID

No output schema declared.

No examples provided.

gog_sheets_datasource_table_read ~415

Read the values out of the data-source table (extract) anchored at an A1 cell. Bounded on purpose: at most maxRows data rows (gog default 1000) plus the header row, which is returned separately. The JSON reports "truncated": true when the configured extract can hold more rows than were returned — treat that exactly like a truncated search, i.e. do not conclude a value is absent from it; raise maxRows or narrow the extract instead. Use render=UNFORMATTED_VALUE for arithmetic (FORMATTED_VALUE returns display strings) or render=FORMULA to see the cell formulas. BIGQUERY-BACKED SOURCES NEED AN EXTRA SCOPE: ordinary sheets authorization does not request https://www.googleapis.com/auth/bigquery.readonly, and Google refuses the whole response without it. A permission error here means the token is missing that scope, NOT that the spreadsheet has no data sources — re-authorize with gog_auth_add_url/gog_auth_add_complete (or gog_auth_add), keeping the account's EXISTING services selection and passing extraScopes=https://www.googleapis.com/auth/bigquery.readonly with forceConsent. Looker sources reuse the account's existing Looker link and need nothing extra.

NameTypeReqDescription
accountstringGoogle account email to use, e.g. you@gmail.com — must be the full address, not a bare username. Overrides the GOG_ACCOUNT env var. Omit to use the single configured account.
anchorstringyesSheet-qualified A1 anchor of the extract's top-left cell, e.g. "Extracts!B3" (from gog_sheets_datasource_table_list)
maxRowsintegerMaximum data rows to read (gog default: 1000). The header row is returned separately and does not count against this.
renderstringHow cell values are rendered (gog default: FORMATTED_VALUE)
spreadsheetIdstringyesSpreadsheet ID

No output schema declared.

No examples provided.

gog_sheets_datasource_update ~482

Repoint an existing BigQuery Connected Sheets data source: new SQL for a query-backed source, a new dataset/table for a table-backed one, or a new billing project for either. Only the fields you pass are changed. You cannot convert a source between the two kinds — gog refuses SQL on a table source and table fields on a query source — so read gog_sheets_datasource_describe first if you are unsure which kind it is. Replacing the SQL DISCARDS the source's current results. COSTS MONEY AND RUNS ASYNCHRONOUSLY: this starts a BigQuery execution billed to the billing project, and returns once the execution has been REQUESTED — not once it has finished. Poll gog_sheets_datasource_describe until its dataExecutionStatus state is SUCCEEDED or FAILED before treating the data as current. BIGQUERY-BACKED SOURCES NEED AN EXTRA SCOPE: ordinary sheets authorization does not request https://www.googleapis.com/auth/bigquery.readonly, and Google refuses the whole response without it. A permission error here means the token is missing that scope, NOT that the spreadsheet has no data sources — re-authorize with gog_auth_add_url/gog_auth_add_complete (or gog_auth_add), keeping the account's EXISTING services selection and passing extraScopes=https://www.googleapis.com/auth/bigquery.readonly with forceConsent. Looker sources reuse the account's existing Looker link and need nothing extra.

NameTypeReqDescription
accountstringGoogle account email to use, e.g. you@gmail.com — must be the full address, not a bare username. Overrides the GOG_ACCOUNT env var. Omit to use the single configured account.
billingProjectstringNew billing-enabled BigQuery project to charge executions to
dataSourceIdstringyesData source ID, as reported by gog_sheets_datasource_list
datasetstringReplacement dataset ID. Only valid on a table-backed source.
querystringReplacement SQL. Only valid on a query-backed source; mutually exclusive with the table fields.
spreadsheetIdstringyesSpreadsheet ID
tablestringReplacement table ID. Only valid on a table-backed source.
tableProjectstringReplacement project owning the table. Only valid on a table-backed source.

No output schema declared.

No examples provided.

gog_sheets_delete_dimension ~228

Delete a span of rows or columns, table-aware: intersecting table objects are preserved (shrunk) along with their remaining data, instead of being corrupted as with a raw DeleteDimension batch update. Target by A1 range (e.g. Sheet1!5:7 or Sheet1!C:D) or by sheet name plus start/end.

NameTypeReqDescription
accountstringGoogle account email to use, e.g. you@gmail.com — must be the full address, not a bare username. Overrides the GOG_ACCOUNT env var. Omit to use the single configured account.
dimensionstringyesDimension to delete
endintegerLast row/column to delete (1-based, inclusive; required with a sheet-name target)
rangeOrSheetstringyesA1 range covering the rows/columns to delete, or a sheet name (then start/end are required)
spreadsheetIdstringyesSpreadsheet ID
startintegerFirst row/column to delete (1-based, inclusive; required with a sheet-name target)

No output schema declared.

No examples provided.

gog_sheets_delete_tab ~90

Delete a sheet tab from a spreadsheet.

NameTypeReqDescription
accountstringGoogle account email to use, e.g. you@gmail.com — must be the full address, not a bare username. Overrides the GOG_ACCOUNT env var. Omit to use the single configured account.
spreadsheetIdstringyesSpreadsheet ID
tabNamestringyesName of the tab to delete

No output schema declared.

No examples provided.

gog_sheets_export ~129

Export a spreadsheet as CSV, TSV, or PDF.

NameTypeReqDescription
accountstringGoogle account email to use, e.g. you@gmail.com — must be the full address, not a bare username. Overrides the GOG_ACCOUNT env var. Omit to use the single configured account.
formatstringExport format: csv, tsv, pdf (default: csv)
outstringOutput file path
overwritebooleanOverwrite the output file if it already exists (gog refuses otherwise)
spreadsheetIdstringyesSpreadsheet ID

No output schema declared.

No examples provided.

gog_sheets_filter_set ~172

Set a basic filter on a range (the filter/sort header Sheets shows on a data range). A sheet can hold one basic filter; replacing an existing one requires replace=true — without it, gog refuses rather than silently overwriting.

NameTypeReqDescription
accountstringGoogle account email to use, e.g. you@gmail.com — must be the full address, not a bare username. Overrides the GOG_ACCOUNT env var. Omit to use the single configured account.
rangestringyesRange to filter (A1 notation with sheet name, e.g. Sheet1!A1:C100, or a named range name)
replacebooleanReplace the sheet's existing basic filter if one is set (appends --force)
spreadsheetIdstringyesSpreadsheet ID

No output schema declared.

No examples provided.

gog_sheets_find_replace ~97

Find and replace text across an entire Google Spreadsheet.

NameTypeReqDescription
accountstringGoogle account email to use, e.g. you@gmail.com — must be the full address, not a bare username. Overrides the GOG_ACCOUNT env var. Omit to use the single configured account.
findstringyesText to find
replacestringyesReplacement text
spreadsheetIdstringyesSpreadsheet ID

No output schema declared.

No examples provided.

gog_sheets_format ~353

Apply cell formatting to a range. The named flags (bold, italic, backgroundColor, etc.) compose into a Sheets API CellFormat — use them for the 90% case. For full API control, pass formatJson + formatFields (Sheets CellFormat + field mask) directly.

NameTypeReqDescription
accountstringGoogle account email to use, e.g. you@gmail.com — must be the full address, not a bare username. Overrides the GOG_ACCOUNT env var. Omit to use the single configured account.
backgroundColorstringCell background color as #RRGGBB or #RGB
boldbooleanSet bold
fontFamilystringFont family (e.g. Arial)
fontSizenumberFont size in points
formatFieldsstringComma-separated field mask (e.g. textFormat.bold,backgroundColor). Required when using formatJson; auto-computed when using named flags.
formatJsonstringEscape hatch: raw CellFormat JSON. When provided, named flags above are ignored and formatJson is sent as-is.
horizontalAlignmentstringHorizontal alignment
italicbooleanSet italic
rangestringyesRange to format (e.g. Sheet1!A1:C3)
spreadsheetIdstringyesSpreadsheet ID
strikethroughbooleanSet strikethrough
textColorstringText color as #RRGGBB or #RGB
underlinebooleanSet underline
verticalAlignmentstringVertical alignment
wrapStrategystringText wrap strategy

No output schema declared.

No examples provided.

gog_sheets_freeze ~116

Freeze rows and/or columns in a sheet.

NameTypeReqDescription
accountstringGoogle account email to use, e.g. you@gmail.com — must be the full address, not a bare username. Overrides the GOG_ACCOUNT env var. Omit to use the single configured account.
colsnumberNumber of columns to freeze
rowsnumberNumber of rows to freeze
sheetstringSheet tab name (default: first sheet)
spreadsheetIdstringyesSpreadsheet ID

No output schema declared.

No examples provided.

gog_sheets_get ~119

Read values from a Google Sheets range. Returns a JSON object with a "values" array of rows.

NameTypeReqDescription
accountstringGoogle account email to use, e.g. you@gmail.com — must be the full address, not a bare username. Overrides the GOG_ACCOUNT env var. Omit to use the single configured account.
rangestringyesRange in A1 notation, e.g. Sheet1!A1:B10 or a named range
spreadsheetIdstringyesSpreadsheet ID (from the URL)

No output schema declared.

No examples provided.

gog_sheets_insert ~261

Insert rows or columns into a sheet. With after:false (default), the new dimension lands at start. With after:true, the new dimension lands at start+1 (the existing dimension at start is preserved).

NameTypeReqDescription
accountstringGoogle account email to use, e.g. you@gmail.com — must be the full address, not a bare username. Overrides the GOG_ACCOUNT env var. Omit to use the single configured account.
afterbooleanInsert after the start index instead of before. With after:true the new dimension lands at start+1, leaving the existing dimension at start untouched.
countnumberNumber of rows/columns to insert (default: 1)
dimensionstringyesDimension to insert: ROWS or COLUMNS
inheritFromBeforebooleanInherit number format / styling from the row/column before the insertion. Defaults to true with after:true, false otherwise; pass false to inherit from the row/column after the insertion instead. Can…
sheetstringyesSheet tab name
spreadsheetIdstringyesSpreadsheet ID
startnumberyesStart index (0-based)

No output schema declared.

No examples provided.

gog_sheets_links ~97

List hyperlinks in a range.

NameTypeReqDescription
accountstringGoogle account email to use, e.g. you@gmail.com — must be the full address, not a bare username. Overrides the GOG_ACCOUNT env var. Omit to use the single configured account.
rangestringyesRange to scan for hyperlinks (e.g. Sheet1!A1:Z100)
spreadsheetIdstringyesSpreadsheet ID

No output schema declared.

No examples provided.

gog_sheets_links_set ~371

Set cell hyperlinks in a Google Sheet. Three modes: (1) single link — pass cell + url (+ optional text); (2) multi-link cell — pass cell + runsJson, a JSON array of rich-text runs (a run with an empty uri is plain text); (3) batch — pass cellsJson, a JSON array of {cell,url,text} or {cell,runs:[...]} objects written in one request.

NameTypeReqDescription
accountstringGoogle account email to use, e.g. you@gmail.com — must be the full address, not a bare username. Overrides the GOG_ACCOUNT env var. Omit to use the single configured account.
cellstringTarget cell in A1 notation (e.g. Sheet1!B2). Used by single-link and runsJson modes; omit for batch (cellsJson).
cellsJsonstringBatch: JSON array of {cell,url,text} or {cell,runs:[{text,uri}]} objects, written in one request. Inline JSON or @file (a path gog reads itself — cheaper than inlining a large batch). gog also accept…
runsJsonstringMulti-link cell: JSON array of runs, e.g. [{"text":"Act A","uri":"https://a"},{"text":" / "},{"text":"Act B","uri":"https://b"}]. A run with an empty uri is plain text.
spreadsheetIdstringyesSpreadsheet ID
textstringDisplay text for single-link mode (defaults to the URL when omitted)
urlstringHyperlink URL for single-link mode

No output schema declared.

No examples provided.

gog_sheets_list_tabs ~124

List tabs (sheets) in a spreadsheet with their titles, sheetIds, and indices. A friendlier view than gog_sheets_metadata when you only need the tab list — useful for restructuring a workbook over a long agent session without losing track of names.

NameTypeReqDescription
accountstringGoogle account email to use, e.g. you@gmail.com — must be the full address, not a bare username. Overrides the GOG_ACCOUNT env var. Omit to use the single configured account.
spreadsheetIdstringyesSpreadsheet ID (from the URL)

No output schema declared.

No examples provided.

gog_sheets_merge ~115

Merge cells in a range.

NameTypeReqDescription
accountstringGoogle account email to use, e.g. you@gmail.com — must be the full address, not a bare username. Overrides the GOG_ACCOUNT env var. Omit to use the single configured account.
rangestringyesRange to merge (e.g. Sheet1!A1:C3)
spreadsheetIdstringyesSpreadsheet ID
typestringMerge type: MERGE_ALL, MERGE_COLUMNS, MERGE_ROWS

No output schema declared.

No examples provided.

gog_sheets_metadata ~111

Get spreadsheet metadata: title, named ranges, and per-tab properties including grid dimensions (gridProperties.rowCount / columnCount). Use this to learn a sheet's current size before writing — a write outside the grid fails.

NameTypeReqDescription
accountstringGoogle account email to use, e.g. you@gmail.com — must be the full address, not a bare username. Overrides the GOG_ACCOUNT env var. Omit to use the single configured account.
spreadsheetIdstringyesSpreadsheet ID

No output schema declared.

No examples provided.

gog_sheets_named_ranges_add ~106

Create a new named range.

NameTypeReqDescription
accountstringGoogle account email to use, e.g. you@gmail.com — must be the full address, not a bare username. Overrides the GOG_ACCOUNT env var. Omit to use the single configured account.
namestringyesName for the range
rangestringyesCell range (e.g. Sheet1!A1:B10)
spreadsheetIdstringyesSpreadsheet ID

No output schema declared.

No examples provided.

Common questions

What is the io.github.chrischall/gogcli-mcp-sheets server?

io.github.chrischall/gogcli-mcp-sheets is listed in the public MCP registry as io.github.chrischall/gogcli-mcp-sheets. Extended Google Sheets for Claude via gogcli, auth + full Sheets support. This page covers its npm package (gogcli-mcp-sheets).

Is the io.github.chrischall/gogcli-mcp-sheets server safe to use?

io.github.chrischall/gogcli-mcp-sheets scores 93 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 20 September 2026. It declares no install or post-install scripts. Its build provenance is signed and verified. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the io.github.chrischall/gogcli-mcp-sheets server expose?

io.github.chrischall/gogcli-mcp-sheets exposes 75 tools: gog_auth_list, gog_auth_status, gog_auth_health, gog_auth_services, gog_auth_add, and 70 more. Their descriptions and schemas cost roughly 13,266 tokens of context every time the server is loaded.

Is the io.github.chrischall/gogcli-mcp-sheets server still maintained?

io.github.chrischall/gogcli-mcp-sheets is still listed as active in the MCP registry. We last reached this channel on 20 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

What licence is the io.github.chrischall/gogcli-mcp-sheets server under?

io.github.chrischall/gogcli-mcp-sheets declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.