@alanse/mcp-server-google-workspace 0.2.0

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.
Files changed (161) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +173 -0
  3. package/dist/auth.js +135 -0
  4. package/dist/index.js +116 -0
  5. package/dist/tools/basic/gsheets_add_sheet.js +65 -0
  6. package/dist/tools/basic/gsheets_copy_sheet.js +56 -0
  7. package/dist/tools/basic/gsheets_copy_to.js +113 -0
  8. package/dist/tools/basic/gsheets_create_spreadsheet.js +88 -0
  9. package/dist/tools/basic/gsheets_delete_columns.js +69 -0
  10. package/dist/tools/basic/gsheets_delete_rows.js +69 -0
  11. package/dist/tools/basic/gsheets_delete_sheet.js +56 -0
  12. package/dist/tools/basic/gsheets_duplicate_sheet.js +72 -0
  13. package/dist/tools/basic/gsheets_insert_columns.js +69 -0
  14. package/dist/tools/basic/gsheets_insert_rows.js +69 -0
  15. package/dist/tools/basic/gsheets_list_sheets.js +53 -0
  16. package/dist/tools/basic/gsheets_read.js +120 -0
  17. package/dist/tools/basic/gsheets_rename_sheet.js +64 -0
  18. package/dist/tools/charts/gsheets_add_bubble.js +176 -0
  19. package/dist/tools/charts/gsheets_add_candlestick.js +192 -0
  20. package/dist/tools/charts/gsheets_add_chart.js +162 -0
  21. package/dist/tools/charts/gsheets_add_combo.js +169 -0
  22. package/dist/tools/charts/gsheets_add_histogram.js +143 -0
  23. package/dist/tools/charts/gsheets_add_org_chart.js +160 -0
  24. package/dist/tools/charts/gsheets_add_treemap.js +177 -0
  25. package/dist/tools/charts/gsheets_add_waterfall.js +155 -0
  26. package/dist/tools/charts/gsheets_delete_chart.js +56 -0
  27. package/dist/tools/charts/gsheets_update_chart.js +118 -0
  28. package/dist/tools/data/gsheets_append_data.js +68 -0
  29. package/dist/tools/data/gsheets_batch_clear.js +53 -0
  30. package/dist/tools/data/gsheets_batch_update.js +81 -0
  31. package/dist/tools/data/gsheets_clear_data.js +53 -0
  32. package/dist/tools/data/gsheets_create_filter.js +81 -0
  33. package/dist/tools/data/gsheets_find_replace.js +124 -0
  34. package/dist/tools/data/gsheets_set_data_validation.js +153 -0
  35. package/dist/tools/data/gsheets_sort_range.js +102 -0
  36. package/dist/tools/data/gsheets_update_cell.js +44 -0
  37. package/dist/tools/formatting/gsheets_auto_resize.js +75 -0
  38. package/dist/tools/formatting/gsheets_format_cells.js +161 -0
  39. package/dist/tools/formatting/gsheets_freeze_columns.js +67 -0
  40. package/dist/tools/formatting/gsheets_freeze_rows.js +67 -0
  41. package/dist/tools/formatting/gsheets_merge_cells.js +85 -0
  42. package/dist/tools/formatting/gsheets_set_number_format.js +116 -0
  43. package/dist/tools/formatting/gsheets_unmerge_cells.js +79 -0
  44. package/dist/tools/formatting/gsheets_update_borders.js +212 -0
  45. package/dist/tools/gdrive/gdrive_read_file.js +77 -0
  46. package/dist/tools/gdrive/gdrive_search.js +71 -0
  47. package/dist/tools/gdrive_read_file.js +77 -0
  48. package/dist/tools/gdrive_search.js +71 -0
  49. package/dist/tools/gsheets_add_bubble.js +176 -0
  50. package/dist/tools/gsheets_add_candlestick.js +192 -0
  51. package/dist/tools/gsheets_add_chart.js +162 -0
  52. package/dist/tools/gsheets_add_combo.js +169 -0
  53. package/dist/tools/gsheets_add_conditional_format.js +175 -0
  54. package/dist/tools/gsheets_add_histogram.js +143 -0
  55. package/dist/tools/gsheets_add_named_range.js +87 -0
  56. package/dist/tools/gsheets_add_org_chart.js +160 -0
  57. package/dist/tools/gsheets_add_protected_range.js +127 -0
  58. package/dist/tools/gsheets_add_sheet.js +65 -0
  59. package/dist/tools/gsheets_add_treemap.js +177 -0
  60. package/dist/tools/gsheets_add_waterfall.js +155 -0
  61. package/dist/tools/gsheets_append_data.js +68 -0
  62. package/dist/tools/gsheets_auto_resize.js +75 -0
  63. package/dist/tools/gsheets_batch_clear.js +53 -0
  64. package/dist/tools/gsheets_batch_update.js +81 -0
  65. package/dist/tools/gsheets_clear_data.js +53 -0
  66. package/dist/tools/gsheets_copy_sheet.js +56 -0
  67. package/dist/tools/gsheets_copy_to.js +113 -0
  68. package/dist/tools/gsheets_create_filter.js +81 -0
  69. package/dist/tools/gsheets_create_spreadsheet.js +88 -0
  70. package/dist/tools/gsheets_delete_chart.js +56 -0
  71. package/dist/tools/gsheets_delete_columns.js +69 -0
  72. package/dist/tools/gsheets_delete_named_range.js +56 -0
  73. package/dist/tools/gsheets_delete_protected_range.js +56 -0
  74. package/dist/tools/gsheets_delete_rows.js +69 -0
  75. package/dist/tools/gsheets_delete_sheet.js +56 -0
  76. package/dist/tools/gsheets_duplicate_sheet.js +72 -0
  77. package/dist/tools/gsheets_find_replace.js +124 -0
  78. package/dist/tools/gsheets_format_cells.js +161 -0
  79. package/dist/tools/gsheets_freeze_columns.js +67 -0
  80. package/dist/tools/gsheets_freeze_rows.js +67 -0
  81. package/dist/tools/gsheets_insert_columns.js +69 -0
  82. package/dist/tools/gsheets_insert_rows.js +69 -0
  83. package/dist/tools/gsheets_list_sheets.js +53 -0
  84. package/dist/tools/gsheets_merge_cells.js +85 -0
  85. package/dist/tools/gsheets_read.js +120 -0
  86. package/dist/tools/gsheets_rename_sheet.js +64 -0
  87. package/dist/tools/gsheets_set_data_validation.js +153 -0
  88. package/dist/tools/gsheets_set_number_format.js +116 -0
  89. package/dist/tools/gsheets_sort_range.js +102 -0
  90. package/dist/tools/gsheets_unmerge_cells.js +79 -0
  91. package/dist/tools/gsheets_update_borders.js +212 -0
  92. package/dist/tools/gsheets_update_cell.js +44 -0
  93. package/dist/tools/gsheets_update_chart.js +118 -0
  94. package/dist/tools/gsheets_update_named_range.js +112 -0
  95. package/dist/tools/gsheets_update_protected_range.js +110 -0
  96. package/dist/tools/index.js +294 -0
  97. package/dist/tools/protection/gsheets_add_conditional_format.js +175 -0
  98. package/dist/tools/protection/gsheets_add_named_range.js +87 -0
  99. package/dist/tools/protection/gsheets_add_protected_range.js +127 -0
  100. package/dist/tools/protection/gsheets_delete_named_range.js +56 -0
  101. package/dist/tools/protection/gsheets_delete_protected_range.js +56 -0
  102. package/dist/tools/protection/gsheets_update_named_range.js +112 -0
  103. package/dist/tools/protection/gsheets_update_protected_range.js +110 -0
  104. package/dist/tools/sheets/advanced/gsheets_add_dimension_group.js +75 -0
  105. package/dist/tools/sheets/advanced/gsheets_add_filter_view.js +86 -0
  106. package/dist/tools/sheets/advanced/gsheets_add_pivot_table.js +188 -0
  107. package/dist/tools/sheets/advanced/gsheets_create_developer_metadata.js +121 -0
  108. package/dist/tools/sheets/advanced/gsheets_delete_developer_metadata.js +61 -0
  109. package/dist/tools/sheets/advanced/gsheets_delete_dimension_group.js +75 -0
  110. package/dist/tools/sheets/advanced/gsheets_update_developer_metadata.js +94 -0
  111. package/dist/tools/sheets/advanced/gsheets_update_dimension_group.js +83 -0
  112. package/dist/tools/sheets/basic/gsheets_add_sheet.js +65 -0
  113. package/dist/tools/sheets/basic/gsheets_copy_sheet.js +56 -0
  114. package/dist/tools/sheets/basic/gsheets_copy_to.js +113 -0
  115. package/dist/tools/sheets/basic/gsheets_create_spreadsheet.js +88 -0
  116. package/dist/tools/sheets/basic/gsheets_delete_columns.js +69 -0
  117. package/dist/tools/sheets/basic/gsheets_delete_rows.js +69 -0
  118. package/dist/tools/sheets/basic/gsheets_delete_sheet.js +56 -0
  119. package/dist/tools/sheets/basic/gsheets_duplicate_sheet.js +72 -0
  120. package/dist/tools/sheets/basic/gsheets_insert_columns.js +69 -0
  121. package/dist/tools/sheets/basic/gsheets_insert_rows.js +69 -0
  122. package/dist/tools/sheets/basic/gsheets_list_sheets.js +53 -0
  123. package/dist/tools/sheets/basic/gsheets_read.js +120 -0
  124. package/dist/tools/sheets/basic/gsheets_rename_sheet.js +64 -0
  125. package/dist/tools/sheets/charts/gsheets_add_bubble.js +176 -0
  126. package/dist/tools/sheets/charts/gsheets_add_candlestick.js +192 -0
  127. package/dist/tools/sheets/charts/gsheets_add_chart.js +162 -0
  128. package/dist/tools/sheets/charts/gsheets_add_combo.js +169 -0
  129. package/dist/tools/sheets/charts/gsheets_add_histogram.js +143 -0
  130. package/dist/tools/sheets/charts/gsheets_add_org_chart.js +160 -0
  131. package/dist/tools/sheets/charts/gsheets_add_treemap.js +177 -0
  132. package/dist/tools/sheets/charts/gsheets_add_waterfall.js +155 -0
  133. package/dist/tools/sheets/charts/gsheets_delete_chart.js +56 -0
  134. package/dist/tools/sheets/charts/gsheets_update_chart.js +118 -0
  135. package/dist/tools/sheets/data/gsheets_append_data.js +68 -0
  136. package/dist/tools/sheets/data/gsheets_batch_clear.js +53 -0
  137. package/dist/tools/sheets/data/gsheets_batch_update.js +81 -0
  138. package/dist/tools/sheets/data/gsheets_clear_data.js +53 -0
  139. package/dist/tools/sheets/data/gsheets_create_filter.js +81 -0
  140. package/dist/tools/sheets/data/gsheets_find_replace.js +124 -0
  141. package/dist/tools/sheets/data/gsheets_set_data_validation.js +153 -0
  142. package/dist/tools/sheets/data/gsheets_sort_range.js +102 -0
  143. package/dist/tools/sheets/data/gsheets_update_cell.js +44 -0
  144. package/dist/tools/sheets/formatting/gsheets_auto_resize.js +75 -0
  145. package/dist/tools/sheets/formatting/gsheets_format_cells.js +161 -0
  146. package/dist/tools/sheets/formatting/gsheets_freeze_columns.js +67 -0
  147. package/dist/tools/sheets/formatting/gsheets_freeze_rows.js +67 -0
  148. package/dist/tools/sheets/formatting/gsheets_merge_cells.js +85 -0
  149. package/dist/tools/sheets/formatting/gsheets_set_number_format.js +116 -0
  150. package/dist/tools/sheets/formatting/gsheets_unmerge_cells.js +79 -0
  151. package/dist/tools/sheets/formatting/gsheets_update_borders.js +212 -0
  152. package/dist/tools/sheets/protection/gsheets_add_conditional_format.js +175 -0
  153. package/dist/tools/sheets/protection/gsheets_add_named_range.js +87 -0
  154. package/dist/tools/sheets/protection/gsheets_add_protected_range.js +127 -0
  155. package/dist/tools/sheets/protection/gsheets_delete_named_range.js +56 -0
  156. package/dist/tools/sheets/protection/gsheets_delete_protected_range.js +56 -0
  157. package/dist/tools/sheets/protection/gsheets_update_named_range.js +112 -0
  158. package/dist/tools/sheets/protection/gsheets_update_protected_range.js +110 -0
  159. package/dist/tools/types.js +1 -0
  160. package/dist/vitest.config.js +18 -0
  161. package/package.json +57 -0
@@ -0,0 +1,294 @@
1
+ // GDrive operations
2
+ import { schema as gdriveSearchSchema, search } from './gdrive/gdrive_search.js';
3
+ import { schema as gdriveReadFileSchema, readFile } from './gdrive/gdrive_read_file.js';
4
+ // Basic operations
5
+ import { schema as gsheetsReadSchema, readSheet } from './sheets/basic/gsheets_read.js';
6
+ import { schema as gsheetsListSheetsSchema, listSheets } from './sheets/basic/gsheets_list_sheets.js';
7
+ import { schema as gsheetsAddSheetSchema, addSheet } from './sheets/basic/gsheets_add_sheet.js';
8
+ import { schema as gsheetsDeleteSheetSchema, deleteSheet } from './sheets/basic/gsheets_delete_sheet.js';
9
+ import { schema as gsheetsInsertRowsSchema, insertRows } from './sheets/basic/gsheets_insert_rows.js';
10
+ import { schema as gsheetsInsertColumnsSchema, insertColumns } from './sheets/basic/gsheets_insert_columns.js';
11
+ import { schema as gsheetsDeleteRowsSchema, deleteRows } from './sheets/basic/gsheets_delete_rows.js';
12
+ import { schema as gsheetsDeleteColumnsSchema, deleteColumns } from './sheets/basic/gsheets_delete_columns.js';
13
+ import { schema as gsheetsCopySheetSchema, copySheet } from './sheets/basic/gsheets_copy_sheet.js';
14
+ import { schema as gsheetsCopyToSchema, copyTo } from './sheets/basic/gsheets_copy_to.js';
15
+ import { schema as gsheetsDuplicateSheetSchema, duplicateSheet } from './sheets/basic/gsheets_duplicate_sheet.js';
16
+ import { schema as gsheetsRenameSheetSchema, renameSheet } from './sheets/basic/gsheets_rename_sheet.js';
17
+ import { schema as gsheetsCreateSpreadsheetSchema, createSpreadsheet } from './sheets/basic/gsheets_create_spreadsheet.js';
18
+ // Data operations
19
+ import { schema as gsheetsUpdateCellSchema, updateCell } from './sheets/data/gsheets_update_cell.js';
20
+ import { schema as gsheetsAppendDataSchema, appendData } from './sheets/data/gsheets_append_data.js';
21
+ import { schema as gsheetsBatchUpdateSchema, batchUpdate } from './sheets/data/gsheets_batch_update.js';
22
+ import { schema as gsheetsClearDataSchema, clearData } from './sheets/data/gsheets_clear_data.js';
23
+ import { schema as gsheetsBatchClearSchema, batchClear } from './sheets/data/gsheets_batch_clear.js';
24
+ import { schema as gsheetsSortRangeSchema, sortRange } from './sheets/data/gsheets_sort_range.js';
25
+ import { schema as gsheetsFindReplaceSchema, findReplace } from './sheets/data/gsheets_find_replace.js';
26
+ import { schema as gsheetsSetDataValidationSchema, setDataValidation } from './sheets/data/gsheets_set_data_validation.js';
27
+ import { schema as gsheetsCreateFilterSchema, createFilter } from './sheets/data/gsheets_create_filter.js';
28
+ // Formatting operations
29
+ import { schema as gsheetsFormatCellsSchema, formatCells } from './sheets/formatting/gsheets_format_cells.js';
30
+ import { schema as gsheetsMergeCellsSchema, mergeCells } from './sheets/formatting/gsheets_merge_cells.js';
31
+ import { schema as gsheetsUnmergeCellsSchema, unmergeCells } from './sheets/formatting/gsheets_unmerge_cells.js';
32
+ import { schema as gsheetsUpdateBordersSchema, updateBorders } from './sheets/formatting/gsheets_update_borders.js';
33
+ import { schema as gsheetsAutoResizeSchema, autoResize } from './sheets/formatting/gsheets_auto_resize.js';
34
+ import { schema as gsheetsSetNumberFormatSchema, setNumberFormat } from './sheets/formatting/gsheets_set_number_format.js';
35
+ import { schema as gsheetsFreezeRowsSchema, freezeRows } from './sheets/formatting/gsheets_freeze_rows.js';
36
+ import { schema as gsheetsFreezeColumnsSchema, freezeColumns } from './sheets/formatting/gsheets_freeze_columns.js';
37
+ // Chart operations
38
+ import { schema as gsheetsAddChartSchema, addChart } from './sheets/charts/gsheets_add_chart.js';
39
+ import { schema as gsheetsUpdateChartSchema, updateChart } from './sheets/charts/gsheets_update_chart.js';
40
+ import { schema as gsheetsDeleteChartSchema, deleteChart } from './sheets/charts/gsheets_delete_chart.js';
41
+ import { schema as gsheetsAddHistogramSchema, addHistogram } from './sheets/charts/gsheets_add_histogram.js';
42
+ import { schema as gsheetsAddWaterfallSchema, addWaterfall } from './sheets/charts/gsheets_add_waterfall.js';
43
+ import { schema as gsheetsAddCandlestickSchema, addCandlestick } from './sheets/charts/gsheets_add_candlestick.js';
44
+ import { schema as gsheetsAddComboSchema, addCombo } from './sheets/charts/gsheets_add_combo.js';
45
+ import { schema as gsheetsAddBubbleSchema, addBubble } from './sheets/charts/gsheets_add_bubble.js';
46
+ import { schema as gsheetsAddTreemapSchema, addTreemap } from './sheets/charts/gsheets_add_treemap.js';
47
+ import { schema as gsheetsAddOrgChartSchema, addOrgChart } from './sheets/charts/gsheets_add_org_chart.js';
48
+ // Protection operations
49
+ import { schema as gsheetsAddProtectedRangeSchema, addProtectedRange } from './sheets/protection/gsheets_add_protected_range.js';
50
+ import { schema as gsheetsDeleteProtectedRangeSchema, deleteProtectedRange } from './sheets/protection/gsheets_delete_protected_range.js';
51
+ import { schema as gsheetsUpdateProtectedRangeSchema, updateProtectedRange } from './sheets/protection/gsheets_update_protected_range.js';
52
+ import { schema as gsheetsAddNamedRangeSchema, addNamedRange } from './sheets/protection/gsheets_add_named_range.js';
53
+ import { schema as gsheetsUpdateNamedRangeSchema, updateNamedRange } from './sheets/protection/gsheets_update_named_range.js';
54
+ import { schema as gsheetsDeleteNamedRangeSchema, deleteNamedRange } from './sheets/protection/gsheets_delete_named_range.js';
55
+ import { schema as gsheetsAddConditionalFormatSchema, addConditionalFormat } from './sheets/protection/gsheets_add_conditional_format.js';
56
+ // Advanced operations
57
+ import { schema as gsheetsAddFilterViewSchema, addFilterView } from './sheets/advanced/gsheets_add_filter_view.js';
58
+ import { schema as gsheetsAddPivotTableSchema, addPivotTable } from './sheets/advanced/gsheets_add_pivot_table.js';
59
+ import { schema as gsheetsAddDimensionGroupSchema, addDimensionGroup } from './sheets/advanced/gsheets_add_dimension_group.js';
60
+ import { schema as gsheetsDeleteDimensionGroupSchema, deleteDimensionGroup } from './sheets/advanced/gsheets_delete_dimension_group.js';
61
+ import { schema as gsheetsUpdateDimensionGroupSchema, updateDimensionGroup } from './sheets/advanced/gsheets_update_dimension_group.js';
62
+ import { schema as gsheetsCreateDeveloperMetadataSchema, createDeveloperMetadata } from './sheets/advanced/gsheets_create_developer_metadata.js';
63
+ import { schema as gsheetsUpdateDeveloperMetadataSchema, updateDeveloperMetadata } from './sheets/advanced/gsheets_update_developer_metadata.js';
64
+ import { schema as gsheetsDeleteDeveloperMetadataSchema, deleteDeveloperMetadata } from './sheets/advanced/gsheets_delete_developer_metadata.js';
65
+ export const tools = [
66
+ {
67
+ ...gdriveSearchSchema,
68
+ handler: search,
69
+ },
70
+ {
71
+ ...gdriveReadFileSchema,
72
+ handler: readFile,
73
+ },
74
+ {
75
+ ...gsheetsUpdateCellSchema,
76
+ handler: updateCell,
77
+ },
78
+ {
79
+ ...gsheetsReadSchema,
80
+ handler: readSheet,
81
+ },
82
+ {
83
+ ...gsheetsListSheetsSchema,
84
+ handler: listSheets,
85
+ },
86
+ {
87
+ ...gsheetsAddSheetSchema,
88
+ handler: addSheet,
89
+ },
90
+ {
91
+ ...gsheetsDeleteSheetSchema,
92
+ handler: deleteSheet,
93
+ },
94
+ {
95
+ ...gsheetsInsertRowsSchema,
96
+ handler: insertRows,
97
+ },
98
+ {
99
+ ...gsheetsInsertColumnsSchema,
100
+ handler: insertColumns,
101
+ },
102
+ {
103
+ ...gsheetsDeleteRowsSchema,
104
+ handler: deleteRows,
105
+ },
106
+ {
107
+ ...gsheetsDeleteColumnsSchema,
108
+ handler: deleteColumns,
109
+ },
110
+ {
111
+ ...gsheetsAppendDataSchema,
112
+ handler: appendData,
113
+ },
114
+ {
115
+ ...gsheetsBatchUpdateSchema,
116
+ handler: batchUpdate,
117
+ },
118
+ {
119
+ ...gsheetsClearDataSchema,
120
+ handler: clearData,
121
+ },
122
+ {
123
+ ...gsheetsCopySheetSchema,
124
+ handler: copySheet,
125
+ },
126
+ {
127
+ ...gsheetsCopyToSchema,
128
+ handler: copyTo,
129
+ },
130
+ {
131
+ ...gsheetsMergeCellsSchema,
132
+ handler: mergeCells,
133
+ },
134
+ {
135
+ ...gsheetsUnmergeCellsSchema,
136
+ handler: unmergeCells,
137
+ },
138
+ {
139
+ ...gsheetsUpdateBordersSchema,
140
+ handler: updateBorders,
141
+ },
142
+ {
143
+ ...gsheetsFormatCellsSchema,
144
+ handler: formatCells,
145
+ },
146
+ {
147
+ ...gsheetsSortRangeSchema,
148
+ handler: sortRange,
149
+ },
150
+ {
151
+ ...gsheetsCreateSpreadsheetSchema,
152
+ handler: createSpreadsheet,
153
+ },
154
+ {
155
+ ...gsheetsDuplicateSheetSchema,
156
+ handler: duplicateSheet,
157
+ },
158
+ {
159
+ ...gsheetsRenameSheetSchema,
160
+ handler: renameSheet,
161
+ },
162
+ {
163
+ ...gsheetsBatchClearSchema,
164
+ handler: batchClear,
165
+ },
166
+ {
167
+ ...gsheetsAutoResizeSchema,
168
+ handler: autoResize,
169
+ },
170
+ {
171
+ ...gsheetsSetNumberFormatSchema,
172
+ handler: setNumberFormat,
173
+ },
174
+ {
175
+ ...gsheetsSetDataValidationSchema,
176
+ handler: setDataValidation,
177
+ },
178
+ {
179
+ ...gsheetsAddConditionalFormatSchema,
180
+ handler: addConditionalFormat,
181
+ },
182
+ {
183
+ ...gsheetsCreateFilterSchema,
184
+ handler: createFilter,
185
+ },
186
+ {
187
+ ...gsheetsAddProtectedRangeSchema,
188
+ handler: addProtectedRange,
189
+ },
190
+ {
191
+ ...gsheetsDeleteProtectedRangeSchema,
192
+ handler: deleteProtectedRange,
193
+ },
194
+ {
195
+ ...gsheetsUpdateProtectedRangeSchema,
196
+ handler: updateProtectedRange,
197
+ },
198
+ {
199
+ ...gsheetsFindReplaceSchema,
200
+ handler: findReplace,
201
+ },
202
+ {
203
+ ...gsheetsAddNamedRangeSchema,
204
+ handler: addNamedRange,
205
+ },
206
+ {
207
+ ...gsheetsUpdateNamedRangeSchema,
208
+ handler: updateNamedRange,
209
+ },
210
+ {
211
+ ...gsheetsDeleteNamedRangeSchema,
212
+ handler: deleteNamedRange,
213
+ },
214
+ {
215
+ ...gsheetsFreezeRowsSchema,
216
+ handler: freezeRows,
217
+ },
218
+ {
219
+ ...gsheetsFreezeColumnsSchema,
220
+ handler: freezeColumns,
221
+ },
222
+ {
223
+ ...gsheetsAddChartSchema,
224
+ handler: addChart,
225
+ },
226
+ {
227
+ ...gsheetsUpdateChartSchema,
228
+ handler: updateChart,
229
+ },
230
+ {
231
+ ...gsheetsDeleteChartSchema,
232
+ handler: deleteChart,
233
+ },
234
+ {
235
+ ...gsheetsAddHistogramSchema,
236
+ handler: addHistogram,
237
+ },
238
+ {
239
+ ...gsheetsAddWaterfallSchema,
240
+ handler: addWaterfall,
241
+ },
242
+ {
243
+ ...gsheetsAddCandlestickSchema,
244
+ handler: addCandlestick,
245
+ },
246
+ {
247
+ ...gsheetsAddComboSchema,
248
+ handler: addCombo,
249
+ },
250
+ {
251
+ ...gsheetsAddBubbleSchema,
252
+ handler: addBubble,
253
+ },
254
+ {
255
+ ...gsheetsAddTreemapSchema,
256
+ handler: addTreemap,
257
+ },
258
+ {
259
+ ...gsheetsAddOrgChartSchema,
260
+ handler: addOrgChart,
261
+ },
262
+ {
263
+ ...gsheetsAddFilterViewSchema,
264
+ handler: addFilterView,
265
+ },
266
+ {
267
+ ...gsheetsAddPivotTableSchema,
268
+ handler: addPivotTable,
269
+ },
270
+ {
271
+ ...gsheetsAddDimensionGroupSchema,
272
+ handler: addDimensionGroup,
273
+ },
274
+ {
275
+ ...gsheetsDeleteDimensionGroupSchema,
276
+ handler: deleteDimensionGroup,
277
+ },
278
+ {
279
+ ...gsheetsUpdateDimensionGroupSchema,
280
+ handler: updateDimensionGroup,
281
+ },
282
+ {
283
+ ...gsheetsCreateDeveloperMetadataSchema,
284
+ handler: createDeveloperMetadata,
285
+ },
286
+ {
287
+ ...gsheetsUpdateDeveloperMetadataSchema,
288
+ handler: updateDeveloperMetadata,
289
+ },
290
+ {
291
+ ...gsheetsDeleteDeveloperMetadataSchema,
292
+ handler: deleteDeveloperMetadata,
293
+ }
294
+ ];
@@ -0,0 +1,175 @@
1
+ import { google } from "googleapis";
2
+ export const schema = {
3
+ name: "gsheets_add_conditional_format",
4
+ description: "Add conditional formatting rules to cells",
5
+ inputSchema: {
6
+ type: "object",
7
+ properties: {
8
+ spreadsheetId: {
9
+ type: "string",
10
+ description: "The ID of the spreadsheet",
11
+ },
12
+ sheetId: {
13
+ type: "number",
14
+ description: "The ID of the sheet",
15
+ },
16
+ startRow: {
17
+ type: "number",
18
+ description: "Starting row index (0-based)",
19
+ },
20
+ endRow: {
21
+ type: "number",
22
+ description: "Ending row index (exclusive, 0-based)",
23
+ },
24
+ startColumn: {
25
+ type: "number",
26
+ description: "Starting column index (0-based)",
27
+ },
28
+ endColumn: {
29
+ type: "number",
30
+ description: "Ending column index (exclusive, 0-based)",
31
+ },
32
+ rule: {
33
+ type: "object",
34
+ properties: {
35
+ type: {
36
+ type: "string",
37
+ enum: ["NUMBER_GREATER", "NUMBER_LESS", "NUMBER_BETWEEN", "TEXT_CONTAINS", "TEXT_NOT_CONTAINS", "CUSTOM_FORMULA"],
38
+ description: "The condition type",
39
+ },
40
+ value: {
41
+ type: "string",
42
+ description: "Value for comparison (for single value conditions)",
43
+ },
44
+ minValue: {
45
+ type: "string",
46
+ description: "Minimum value (for BETWEEN conditions)",
47
+ },
48
+ maxValue: {
49
+ type: "string",
50
+ description: "Maximum value (for BETWEEN conditions)",
51
+ },
52
+ formula: {
53
+ type: "string",
54
+ description: "Custom formula (for CUSTOM_FORMULA)",
55
+ },
56
+ backgroundColor: {
57
+ type: "object",
58
+ properties: {
59
+ red: { type: "number", minimum: 0, maximum: 1 },
60
+ green: { type: "number", minimum: 0, maximum: 1 },
61
+ blue: { type: "number", minimum: 0, maximum: 1 },
62
+ },
63
+ description: "Background color to apply when condition is true",
64
+ },
65
+ textColor: {
66
+ type: "object",
67
+ properties: {
68
+ red: { type: "number", minimum: 0, maximum: 1 },
69
+ green: { type: "number", minimum: 0, maximum: 1 },
70
+ blue: { type: "number", minimum: 0, maximum: 1 },
71
+ },
72
+ description: "Text color to apply when condition is true",
73
+ },
74
+ bold: {
75
+ type: "boolean",
76
+ description: "Make text bold when condition is true",
77
+ },
78
+ italic: {
79
+ type: "boolean",
80
+ description: "Make text italic when condition is true",
81
+ },
82
+ },
83
+ required: ["type"],
84
+ description: "Conditional formatting rule",
85
+ },
86
+ },
87
+ required: ["spreadsheetId", "sheetId", "startRow", "endRow", "startColumn", "endColumn", "rule"],
88
+ },
89
+ };
90
+ export async function addConditionalFormat(args) {
91
+ try {
92
+ const sheets = google.sheets("v4");
93
+ const booleanCondition = {
94
+ type: args.rule.type,
95
+ };
96
+ // Set condition values based on type
97
+ if (args.rule.type === "NUMBER_BETWEEN") {
98
+ booleanCondition.values = [
99
+ { userEnteredValue: args.rule.minValue },
100
+ { userEnteredValue: args.rule.maxValue },
101
+ ];
102
+ }
103
+ else if (args.rule.type === "CUSTOM_FORMULA") {
104
+ booleanCondition.values = [{ userEnteredValue: args.rule.formula }];
105
+ }
106
+ else if (args.rule.value) {
107
+ booleanCondition.values = [{ userEnteredValue: args.rule.value }];
108
+ }
109
+ // Build format to apply
110
+ const format = {};
111
+ if (args.rule.backgroundColor) {
112
+ format.backgroundColor = args.rule.backgroundColor;
113
+ }
114
+ if (args.rule.textColor || args.rule.bold || args.rule.italic) {
115
+ format.textFormat = {};
116
+ if (args.rule.textColor) {
117
+ format.textFormat.foregroundColor = args.rule.textColor;
118
+ }
119
+ if (args.rule.bold !== undefined) {
120
+ format.textFormat.bold = args.rule.bold;
121
+ }
122
+ if (args.rule.italic !== undefined) {
123
+ format.textFormat.italic = args.rule.italic;
124
+ }
125
+ }
126
+ await sheets.spreadsheets.batchUpdate({
127
+ spreadsheetId: args.spreadsheetId,
128
+ requestBody: {
129
+ requests: [
130
+ {
131
+ addConditionalFormatRule: {
132
+ rule: {
133
+ ranges: [
134
+ {
135
+ sheetId: args.sheetId,
136
+ startRowIndex: args.startRow,
137
+ endRowIndex: args.endRow,
138
+ startColumnIndex: args.startColumn,
139
+ endColumnIndex: args.endColumn,
140
+ },
141
+ ],
142
+ booleanRule: {
143
+ condition: booleanCondition,
144
+ format,
145
+ },
146
+ },
147
+ index: 0,
148
+ },
149
+ },
150
+ ],
151
+ },
152
+ });
153
+ const rangeStr = `R${args.startRow}C${args.startColumn}:R${args.endRow - 1}C${args.endColumn - 1}`;
154
+ return {
155
+ content: [
156
+ {
157
+ type: "text",
158
+ text: `Successfully added conditional formatting rule (${args.rule.type}) for range ${rangeStr}`,
159
+ },
160
+ ],
161
+ isError: false,
162
+ };
163
+ }
164
+ catch (error) {
165
+ return {
166
+ content: [
167
+ {
168
+ type: "text",
169
+ text: `Error adding conditional format: ${error.message}`,
170
+ },
171
+ ],
172
+ isError: true,
173
+ };
174
+ }
175
+ }
@@ -0,0 +1,87 @@
1
+ import { google } from "googleapis";
2
+ export const schema = {
3
+ name: "gsheets_add_named_range",
4
+ description: "Create a named range in a spreadsheet",
5
+ inputSchema: {
6
+ type: "object",
7
+ properties: {
8
+ spreadsheetId: {
9
+ type: "string",
10
+ description: "The ID of the spreadsheet",
11
+ },
12
+ name: {
13
+ type: "string",
14
+ description: "The name for the range",
15
+ },
16
+ sheetId: {
17
+ type: "number",
18
+ description: "The ID of the sheet",
19
+ },
20
+ startRow: {
21
+ type: "number",
22
+ description: "Starting row index (0-based)",
23
+ },
24
+ endRow: {
25
+ type: "number",
26
+ description: "Ending row index (exclusive, 0-based)",
27
+ },
28
+ startColumn: {
29
+ type: "number",
30
+ description: "Starting column index (0-based)",
31
+ },
32
+ endColumn: {
33
+ type: "number",
34
+ description: "Ending column index (exclusive, 0-based)",
35
+ },
36
+ },
37
+ required: ["spreadsheetId", "name", "sheetId", "startRow", "endRow", "startColumn", "endColumn"],
38
+ },
39
+ };
40
+ export async function addNamedRange(args) {
41
+ try {
42
+ const sheets = google.sheets("v4");
43
+ const response = await sheets.spreadsheets.batchUpdate({
44
+ spreadsheetId: args.spreadsheetId,
45
+ requestBody: {
46
+ requests: [
47
+ {
48
+ addNamedRange: {
49
+ namedRange: {
50
+ name: args.name,
51
+ range: {
52
+ sheetId: args.sheetId,
53
+ startRowIndex: args.startRow,
54
+ endRowIndex: args.endRow,
55
+ startColumnIndex: args.startColumn,
56
+ endColumnIndex: args.endColumn,
57
+ },
58
+ },
59
+ },
60
+ },
61
+ ],
62
+ },
63
+ });
64
+ const namedRangeId = response.data.replies?.[0]?.addNamedRange?.namedRange?.namedRangeId;
65
+ const rangeStr = `R${args.startRow}C${args.startColumn}:R${args.endRow - 1}C${args.endColumn - 1}`;
66
+ return {
67
+ content: [
68
+ {
69
+ type: "text",
70
+ text: `Successfully created named range "${args.name}" for ${rangeStr}. Named Range ID: ${namedRangeId}`,
71
+ },
72
+ ],
73
+ isError: false,
74
+ };
75
+ }
76
+ catch (error) {
77
+ return {
78
+ content: [
79
+ {
80
+ type: "text",
81
+ text: `Error creating named range: ${error.message}`,
82
+ },
83
+ ],
84
+ isError: true,
85
+ };
86
+ }
87
+ }
@@ -0,0 +1,127 @@
1
+ import { google } from "googleapis";
2
+ export const schema = {
3
+ name: "gsheets_add_protected_range",
4
+ description: "Add protection to a range to restrict editing",
5
+ inputSchema: {
6
+ type: "object",
7
+ properties: {
8
+ spreadsheetId: {
9
+ type: "string",
10
+ description: "The ID of the spreadsheet",
11
+ },
12
+ sheetId: {
13
+ type: "number",
14
+ description: "The ID of the sheet",
15
+ },
16
+ startRow: {
17
+ type: "number",
18
+ description: "Starting row index (0-based)",
19
+ },
20
+ endRow: {
21
+ type: "number",
22
+ description: "Ending row index (exclusive, 0-based)",
23
+ },
24
+ startColumn: {
25
+ type: "number",
26
+ description: "Starting column index (0-based)",
27
+ },
28
+ endColumn: {
29
+ type: "number",
30
+ description: "Ending column index (exclusive, 0-based)",
31
+ },
32
+ description: {
33
+ type: "string",
34
+ description: "Description of the protected range (optional)",
35
+ },
36
+ warningOnly: {
37
+ type: "boolean",
38
+ description: "If true, show a warning instead of preventing edits (default: false)",
39
+ },
40
+ editors: {
41
+ type: "object",
42
+ properties: {
43
+ users: {
44
+ type: "array",
45
+ items: { type: "string" },
46
+ description: "Email addresses of users who can edit",
47
+ },
48
+ groups: {
49
+ type: "array",
50
+ items: { type: "string" },
51
+ description: "Email addresses of groups who can edit",
52
+ },
53
+ domainUsersCanEdit: {
54
+ type: "boolean",
55
+ description: "Whether all users in the domain can edit",
56
+ },
57
+ },
58
+ description: "Who can edit the protected range",
59
+ },
60
+ },
61
+ required: ["spreadsheetId", "sheetId", "startRow", "endRow", "startColumn", "endColumn"],
62
+ },
63
+ };
64
+ export async function addProtectedRange(args) {
65
+ try {
66
+ const sheets = google.sheets("v4");
67
+ const protectedRange = {
68
+ range: {
69
+ sheetId: args.sheetId,
70
+ startRowIndex: args.startRow,
71
+ endRowIndex: args.endRow,
72
+ startColumnIndex: args.startColumn,
73
+ endColumnIndex: args.endColumn,
74
+ },
75
+ warningOnly: args.warningOnly || false,
76
+ };
77
+ if (args.description) {
78
+ protectedRange.description = args.description;
79
+ }
80
+ if (args.editors) {
81
+ protectedRange.editors = {};
82
+ if (args.editors.users && args.editors.users.length > 0) {
83
+ protectedRange.editors.users = args.editors.users;
84
+ }
85
+ if (args.editors.groups && args.editors.groups.length > 0) {
86
+ protectedRange.editors.groups = args.editors.groups;
87
+ }
88
+ if (args.editors.domainUsersCanEdit !== undefined) {
89
+ protectedRange.editors.domainUsersCanEdit = args.editors.domainUsersCanEdit;
90
+ }
91
+ }
92
+ const response = await sheets.spreadsheets.batchUpdate({
93
+ spreadsheetId: args.spreadsheetId,
94
+ requestBody: {
95
+ requests: [
96
+ {
97
+ addProtectedRange: {
98
+ protectedRange,
99
+ },
100
+ },
101
+ ],
102
+ },
103
+ });
104
+ const addedProtection = response.data.replies?.[0]?.addProtectedRange?.protectedRange;
105
+ const rangeStr = `R${args.startRow}C${args.startColumn}:R${args.endRow - 1}C${args.endColumn - 1}`;
106
+ return {
107
+ content: [
108
+ {
109
+ type: "text",
110
+ text: `Successfully added protection to range ${rangeStr}. Protection ID: ${addedProtection?.protectedRangeId}`,
111
+ },
112
+ ],
113
+ isError: false,
114
+ };
115
+ }
116
+ catch (error) {
117
+ return {
118
+ content: [
119
+ {
120
+ type: "text",
121
+ text: `Error adding protected range: ${error.message}`,
122
+ },
123
+ ],
124
+ isError: true,
125
+ };
126
+ }
127
+ }