gogcli-mcp-sheets 4.2.2 → 4.2.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -7,7 +7,7 @@
7
7
  },
8
8
  "metadata": {
9
9
  "description": "Extended Google Sheets for Claude via gogcli — auth + full Sheets support",
10
- "version": "4.2.2"
10
+ "version": "4.2.4"
11
11
  },
12
12
  "plugins": [
13
13
  {
@@ -15,7 +15,7 @@
15
15
  "displayName": "gogcli (Sheets)",
16
16
  "source": "./",
17
17
  "description": "Extended Google Sheets for Claude via gogcli — auth + full Sheets support",
18
- "version": "4.2.2",
18
+ "version": "4.2.4",
19
19
  "author": {
20
20
  "name": "Chris Hall"
21
21
  },
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "gogcli-mcp-sheets",
3
3
  "displayName": "gogcli (Sheets)",
4
- "version": "4.2.2",
4
+ "version": "4.2.4",
5
5
  "description": "Extended Google Sheets for Claude via gogcli — auth + full Sheets support",
6
6
  "author": {
7
7
  "name": "Chris Hall",
package/dist/index.js CHANGED
@@ -35584,7 +35584,7 @@ function registerSheetsTools(server) {
35584
35584
  });
35585
35585
  server.registerTool("gog_sheets_create", {
35586
35586
  description: "Create a new Google Spreadsheet. Returns JSON with the new spreadsheetId and URL.",
35587
- annotations: { destructiveHint: false },
35587
+ annotations: { destructiveHint: true },
35588
35588
  inputSchema: external_exports.object({
35589
35589
  title: external_exports.string().describe("Title for the new spreadsheet"),
35590
35590
  account: accountParam
@@ -35608,7 +35608,7 @@ function registerSheetsTools(server) {
35608
35608
  }
35609
35609
 
35610
35610
  // ../gogcli-mcp/src/server.ts
35611
- var VERSION = true ? "4.2.2" : "0.0.0";
35611
+ var VERSION = true ? "4.2.4" : "0.0.0";
35612
35612
 
35613
35613
  // ../gogcli-mcp/src/bootstrap-auth.ts
35614
35614
  import { join as join2 } from "node:path";
@@ -35741,6 +35741,7 @@ function registerExtraSheetsTools(server) {
35741
35741
  });
35742
35742
  server.registerTool("gog_sheets_add_tab", {
35743
35743
  description: "Add a new sheet tab to a spreadsheet.",
35744
+ annotations: { destructiveHint: false },
35744
35745
  inputSchema: external_exports.object({
35745
35746
  spreadsheetId: external_exports.string().describe("Spreadsheet ID (from the URL)"),
35746
35747
  tabName: external_exports.string().describe("Name for the new tab"),
@@ -35762,7 +35763,7 @@ function registerExtraSheetsTools(server) {
35762
35763
  });
35763
35764
  server.registerTool("gog_sheets_rename_tab", {
35764
35765
  description: "Rename a sheet tab.",
35765
- annotations: { destructiveHint: true },
35766
+ annotations: { destructiveHint: false },
35766
35767
  inputSchema: external_exports.object({
35767
35768
  spreadsheetId: external_exports.string().describe("Spreadsheet ID"),
35768
35769
  oldName: external_exports.string().describe("Current tab name"),
@@ -35774,6 +35775,7 @@ function registerExtraSheetsTools(server) {
35774
35775
  });
35775
35776
  server.registerTool("gog_sheets_copy", {
35776
35777
  description: "Copy a spreadsheet to a new spreadsheet with the given title.",
35778
+ annotations: { destructiveHint: true },
35777
35779
  inputSchema: external_exports.object({
35778
35780
  spreadsheetId: external_exports.string().describe("Spreadsheet ID to copy"),
35779
35781
  title: external_exports.string().describe("Title for the new copy"),
@@ -36188,6 +36190,7 @@ ${resultText2(result) ?? ""}` }] };
36188
36190
  });
36189
36191
  server.registerTool("gog_sheets_named_ranges_add", {
36190
36192
  description: "Create a new named range.",
36193
+ annotations: { destructiveHint: true },
36191
36194
  inputSchema: external_exports.object({
36192
36195
  spreadsheetId: external_exports.string().describe("Spreadsheet ID"),
36193
36196
  name: external_exports.string().describe("Name for the range"),
@@ -36282,6 +36285,7 @@ ${resultText2(result) ?? ""}` }] };
36282
36285
  });
36283
36286
  server.registerTool("gog_sheets_chart_create", {
36284
36287
  description: "Create an embedded chart from a JSON spec. specJson is a Sheets API ChartSpec (or full EmbeddedChart) \u2014 inline or @/path/to/file.json. Anchor the chart with sheet + anchor (A1 cell), and optionally size it with width/height pixels.",
36288
+ annotations: { destructiveHint: false },
36285
36289
  inputSchema: external_exports.object({
36286
36290
  spreadsheetId: external_exports.string().describe("Spreadsheet ID"),
36287
36291
  specJson: external_exports.string().describe("ChartSpec or EmbeddedChart JSON (inline or @file)"),
@@ -36301,7 +36305,7 @@ ${resultText2(result) ?? ""}` }] };
36301
36305
  });
36302
36306
  server.registerTool("gog_sheets_chart_update", {
36303
36307
  description: "Replace a chart spec by chart ID. specJson is a Sheets API ChartSpec (or full EmbeddedChart) \u2014 inline or @/path/to/file.json.",
36304
- annotations: { destructiveHint: true },
36308
+ annotations: { destructiveHint: false },
36305
36309
  inputSchema: external_exports.object({
36306
36310
  spreadsheetId: external_exports.string().describe("Spreadsheet ID"),
36307
36311
  chartId: external_exports.string().describe("Numeric chart ID to update"),
@@ -36348,6 +36352,7 @@ ${resultText2(result) ?? ""}` }] };
36348
36352
  });
36349
36353
  server.registerTool("gog_sheets_table_create", {
36350
36354
  description: "Create a Google Sheets table over a range. columnsJson is a JSON array of column definitions (each {columnName, columnType?}); valid columnType values: TEXT, DOUBLE, BOOLEAN, DATE, DROPDOWN. Inline JSON or @/path/to/file.json.",
36355
+ annotations: { destructiveHint: false },
36351
36356
  inputSchema: external_exports.object({
36352
36357
  spreadsheetId: external_exports.string().describe("Spreadsheet ID"),
36353
36358
  range: external_exports.string().describe("Range the table covers (e.g. Sheet1!A1:D20)"),
@@ -36363,6 +36368,7 @@ ${resultText2(result) ?? ""}` }] };
36363
36368
  });
36364
36369
  server.registerTool("gog_sheets_table_append", {
36365
36370
  description: "Append data rows to a table. valuesJson is a JSON 2D array of row values.",
36371
+ annotations: { destructiveHint: false },
36366
36372
  inputSchema: external_exports.object({
36367
36373
  spreadsheetId: external_exports.string().describe("Spreadsheet ID"),
36368
36374
  tableId: external_exports.string().describe("Table ID to append to"),
@@ -36448,6 +36454,7 @@ ${errorText(err)}`
36448
36454
  });
36449
36455
  server.registerTool("gog_sheets_banding_set", {
36450
36456
  description: "Apply alternating colors to a range. Provide rowPropertiesJson and/or columnPropertiesJson \u2014 each a Sheets API BandingProperties JSON object ({headerColor, firstBandColor, secondBandColor, footerColor}). At least one is required.",
36457
+ annotations: { destructiveHint: false },
36451
36458
  inputSchema: external_exports.object({
36452
36459
  spreadsheetId: external_exports.string().describe("Spreadsheet ID"),
36453
36460
  range: external_exports.string().describe("Range to band (e.g. Sheet1!A1:D20)"),
@@ -36481,6 +36488,7 @@ ${errorText(err)}`
36481
36488
  });
36482
36489
  server.registerTool("gog_sheets_filter_set", {
36483
36490
  description: "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 \u2014 without it, gog refuses rather than silently overwriting.",
36491
+ annotations: { destructiveHint: false },
36484
36492
  inputSchema: external_exports.object({
36485
36493
  spreadsheetId: external_exports.string().describe("Spreadsheet ID"),
36486
36494
  range: external_exports.string().describe("Range to filter (A1 notation with sheet name, e.g. Sheet1!A1:C100, or a named range name)"),
@@ -36507,6 +36515,7 @@ ${errorText(err)}`
36507
36515
  });
36508
36516
  server.registerTool("gog_sheets_conditional_format_add", {
36509
36517
  description: '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 \u2014 a GradientRule JSON with minpoint/maxpoint (and optional midpoint), each {"color":{...},"type":"MIN|MAX|NUMBER|PERCENT|PERCENTILE","value":"..."}. The two modes are mutually exclusive.',
36518
+ annotations: { destructiveHint: false },
36510
36519
  inputSchema: external_exports.object({
36511
36520
  spreadsheetId: external_exports.string().describe("Spreadsheet ID"),
36512
36521
  range: external_exports.string().describe("Range the rule applies to (e.g. Sheet1!A1:A100)"),
@@ -36558,6 +36567,7 @@ ${errorText(err)}`
36558
36567
  });
36559
36568
  server.registerTool("gog_sheets_snapshot", {
36560
36569
  description: "Make a backup copy of an entire spreadsheet \u2014 a one-call safety snapshot to take BEFORE a risky or destructive edit (table delete, bulk clear, large rewrite). Returns the new copy's file ID and URL; if the edit goes wrong, restore by copying the backup back or sharing it. The copy is independent \u2014 later edits to the original do not affect it.",
36570
+ annotations: { destructiveHint: false },
36561
36571
  inputSchema: external_exports.object({
36562
36572
  spreadsheetId: external_exports.string().describe("Spreadsheet ID to back up"),
36563
36573
  name: external_exports.string().describe('Name for the backup copy, e.g. "Budget \u2014 backup before table delete"'),
@@ -36634,6 +36644,7 @@ ${errorText(err)}`
36634
36644
  const bigQueryChargeNote = " COSTS MONEY AND RUNS ASYNCHRONOUSLY: this starts a BigQuery execution billed to the billing project, and returns once the execution has been REQUESTED \u2014 not once it has finished. Poll gog_sheets_datasource_describe until its dataExecutionStatus state is SUCCEEDED or FAILED before treating the data as current.";
36635
36645
  server.registerTool("gog_sheets_datasource_add", {
36636
36646
  description: "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) \u2014 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." + bigQueryChargeNote + bigQueryScopeNote,
36647
+ annotations: { destructiveHint: false },
36637
36648
  inputSchema: external_exports.object({
36638
36649
  spreadsheetId: external_exports.string().describe("Spreadsheet ID"),
36639
36650
  billingProject: external_exports.string().describe("Billing-enabled BigQuery project charged for this source's queries"),
@@ -36689,6 +36700,7 @@ ${errorText(err)}`
36689
36700
  });
36690
36701
  server.registerTool("gog_sheets_datasource_refresh", {
36691
36702
  description: "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." + bigQueryChargeNote + bigQueryScopeNote,
36703
+ annotations: { destructiveHint: true },
36692
36704
  inputSchema: external_exports.object({
36693
36705
  spreadsheetId: external_exports.string().describe("Spreadsheet ID"),
36694
36706
  dataSourceId: external_exports.string().describe("Data source ID, as reported by gog_sheets_datasource_list"),
package/manifest.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "manifest_version": "0.3",
4
4
  "name": "gogcli-mcp-sheets",
5
5
  "display_name": "gogcli (Sheets)",
6
- "version": "4.2.2",
6
+ "version": "4.2.4",
7
7
  "description": "Extended Google Sheets for Claude via gogcli — auth + full Sheets support",
8
8
  "author": {
9
9
  "name": "Chris Hall",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gogcli-mcp-sheets",
3
- "version": "4.2.2",
3
+ "version": "4.2.4",
4
4
  "mcpName": "io.github.chrischall/gogcli-mcp-sheets",
5
5
  "description": "Extended Google Sheets MCP server via gogcli — all base tools plus full Sheets support",
6
6
  "author": "Claude Code (AI) <https://www.anthropic.com/claude>",
package/server.json CHANGED
@@ -7,12 +7,12 @@
7
7
  "source": "github",
8
8
  "subfolder": "packages/gogcli-mcp-sheets"
9
9
  },
10
- "version": "4.2.2",
10
+ "version": "4.2.4",
11
11
  "packages": [
12
12
  {
13
13
  "registryType": "npm",
14
14
  "identifier": "gogcli-mcp-sheets",
15
- "version": "4.2.2",
15
+ "version": "4.2.4",
16
16
  "transport": {
17
17
  "type": "stdio"
18
18
  },
@@ -95,6 +95,7 @@ export function registerExtraSheetsTools(server: McpServer): void {
95
95
 
96
96
  server.registerTool('gog_sheets_add_tab', {
97
97
  description: 'Add a new sheet tab to a spreadsheet.',
98
+ annotations: { destructiveHint: false },
98
99
  inputSchema: z.object({
99
100
  spreadsheetId: z.string().describe('Spreadsheet ID (from the URL)'),
100
101
  tabName: z.string().describe('Name for the new tab'),
@@ -118,7 +119,7 @@ export function registerExtraSheetsTools(server: McpServer): void {
118
119
 
119
120
  server.registerTool('gog_sheets_rename_tab', {
120
121
  description: 'Rename a sheet tab.',
121
- annotations: { destructiveHint: true },
122
+ annotations: { destructiveHint: false },
122
123
  inputSchema: z.object({
123
124
  spreadsheetId: z.string().describe('Spreadsheet ID'),
124
125
  oldName: z.string().describe('Current tab name'),
@@ -131,6 +132,7 @@ export function registerExtraSheetsTools(server: McpServer): void {
131
132
 
132
133
  server.registerTool('gog_sheets_copy', {
133
134
  description: 'Copy a spreadsheet to a new spreadsheet with the given title.',
135
+ annotations: { destructiveHint: true },
134
136
  inputSchema: z.object({
135
137
  spreadsheetId: z.string().describe('Spreadsheet ID to copy'),
136
138
  title: z.string().describe('Title for the new copy'),
@@ -579,6 +581,7 @@ export function registerExtraSheetsTools(server: McpServer): void {
579
581
 
580
582
  server.registerTool('gog_sheets_named_ranges_add', {
581
583
  description: 'Create a new named range.',
584
+ annotations: { destructiveHint: true },
582
585
  inputSchema: z.object({
583
586
  spreadsheetId: z.string().describe('Spreadsheet ID'),
584
587
  name: z.string().describe('Name for the range'),
@@ -682,6 +685,7 @@ export function registerExtraSheetsTools(server: McpServer): void {
682
685
 
683
686
  server.registerTool('gog_sheets_chart_create', {
684
687
  description: '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.',
688
+ annotations: { destructiveHint: false },
685
689
  inputSchema: z.object({
686
690
  spreadsheetId: z.string().describe('Spreadsheet ID'),
687
691
  specJson: z.string().describe('ChartSpec or EmbeddedChart JSON (inline or @file)'),
@@ -702,7 +706,7 @@ export function registerExtraSheetsTools(server: McpServer): void {
702
706
 
703
707
  server.registerTool('gog_sheets_chart_update', {
704
708
  description: 'Replace a chart spec by chart ID. specJson is a Sheets API ChartSpec (or full EmbeddedChart) — inline or @/path/to/file.json.',
705
- annotations: { destructiveHint: true },
709
+ annotations: { destructiveHint: false },
706
710
  inputSchema: z.object({
707
711
  spreadsheetId: z.string().describe('Spreadsheet ID'),
708
712
  chartId: z.string().describe('Numeric chart ID to update'),
@@ -755,6 +759,7 @@ export function registerExtraSheetsTools(server: McpServer): void {
755
759
 
756
760
  server.registerTool('gog_sheets_table_create', {
757
761
  description: 'Create a Google Sheets table over a range. columnsJson is a JSON array of column definitions (each {columnName, columnType?}); valid columnType values: TEXT, DOUBLE, BOOLEAN, DATE, DROPDOWN. Inline JSON or @/path/to/file.json.',
762
+ annotations: { destructiveHint: false },
758
763
  inputSchema: z.object({
759
764
  spreadsheetId: z.string().describe('Spreadsheet ID'),
760
765
  range: z.string().describe('Range the table covers (e.g. Sheet1!A1:D20)'),
@@ -771,6 +776,7 @@ export function registerExtraSheetsTools(server: McpServer): void {
771
776
 
772
777
  server.registerTool('gog_sheets_table_append', {
773
778
  description: 'Append data rows to a table. valuesJson is a JSON 2D array of row values.',
779
+ annotations: { destructiveHint: false },
774
780
  inputSchema: z.object({
775
781
  spreadsheetId: z.string().describe('Spreadsheet ID'),
776
782
  tableId: z.string().describe('Table ID to append to'),
@@ -881,6 +887,7 @@ export function registerExtraSheetsTools(server: McpServer): void {
881
887
 
882
888
  server.registerTool('gog_sheets_banding_set', {
883
889
  description: '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.',
890
+ annotations: { destructiveHint: false },
884
891
  inputSchema: z.object({
885
892
  spreadsheetId: z.string().describe('Spreadsheet ID'),
886
893
  range: z.string().describe('Range to band (e.g. Sheet1!A1:D20)'),
@@ -918,6 +925,7 @@ export function registerExtraSheetsTools(server: McpServer): void {
918
925
 
919
926
  server.registerTool('gog_sheets_filter_set', {
920
927
  description: '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.',
928
+ annotations: { destructiveHint: false },
921
929
  inputSchema: z.object({
922
930
  spreadsheetId: z.string().describe('Spreadsheet ID'),
923
931
  range: z.string().describe('Range to filter (A1 notation with sheet name, e.g. Sheet1!A1:C100, or a named range name)'),
@@ -948,6 +956,7 @@ export function registerExtraSheetsTools(server: McpServer): void {
948
956
 
949
957
  server.registerTool('gog_sheets_conditional_format_add', {
950
958
  description: '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.',
959
+ annotations: { destructiveHint: false },
951
960
  inputSchema: z.object({
952
961
  spreadsheetId: z.string().describe('Spreadsheet ID'),
953
962
  range: z.string().describe('Range the rule applies to (e.g. Sheet1!A1:A100)'),
@@ -994,6 +1003,7 @@ export function registerExtraSheetsTools(server: McpServer): void {
994
1003
  description:
995
1004
  'Make a backup copy of an entire spreadsheet — a one-call safety snapshot to take BEFORE a risky or destructive edit (table delete, bulk clear, large rewrite). ' +
996
1005
  'Returns the new copy\'s file ID and URL; if the edit goes wrong, restore by copying the backup back or sharing it. The copy is independent — later edits to the original do not affect it.',
1006
+ annotations: { destructiveHint: false },
997
1007
  inputSchema: z.object({
998
1008
  spreadsheetId: z.string().describe('Spreadsheet ID to back up'),
999
1009
  name: z.string().describe('Name for the backup copy, e.g. "Budget — backup before table delete"'),
@@ -1138,6 +1148,7 @@ export function registerExtraSheetsTools(server: McpServer): void {
1138
1148
  'BigQuery project charged for the query; tableProject only names which project OWNS the table, and defaults to the ' +
1139
1149
  'billing project. Returns the new dataSourceId, which every other datasource tool takes.' +
1140
1150
  bigQueryChargeNote + bigQueryScopeNote,
1151
+ annotations: { destructiveHint: false },
1141
1152
  inputSchema: z.object({
1142
1153
  spreadsheetId: z.string().describe('Spreadsheet ID'),
1143
1154
  billingProject: z.string().describe('Billing-enabled BigQuery project charged for this source\'s queries'),
@@ -1218,6 +1229,7 @@ export function registerExtraSheetsTools(server: McpServer): void {
1218
1229
  'Re-run a Connected Sheets data source so its sheet and extracts pick up current BigQuery data. Google refuses to ' +
1219
1230
  'refresh a source whose previous execution FAILED; forceRefresh overrides that, which is what you want after fixing ' +
1220
1231
  'the underlying query or permissions.' + bigQueryChargeNote + bigQueryScopeNote,
1232
+ annotations: { destructiveHint: true },
1221
1233
  inputSchema: z.object({
1222
1234
  spreadsheetId: z.string().describe('Spreadsheet ID'),
1223
1235
  dataSourceId: z.string().describe('Data source ID, as reported by gog_sheets_datasource_list'),