@alanse/mcp-server-google-workspace 0.2.1 → 1.0.2

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 (182) hide show
  1. package/README.md +250 -17
  2. package/dist/auth.js +6 -0
  3. package/dist/index.js +1 -1
  4. package/dist/lib/calendar-helpers.js +197 -0
  5. package/dist/lib/document-id-resolver.js +76 -0
  6. package/dist/lib/drive-helpers.js +263 -0
  7. package/dist/lib/gmail-helpers.js +204 -0
  8. package/dist/lib/response-formatter.js +82 -0
  9. package/dist/lib/validation.js +112 -0
  10. package/dist/tools/calendar/acl/calendar_acl_insert.js +80 -0
  11. package/dist/tools/calendar/acl/calendar_acl_list.js +82 -0
  12. package/dist/tools/calendar/basic/calendar_create_event.js +113 -0
  13. package/dist/tools/calendar/basic/calendar_delete_event.js +52 -0
  14. package/dist/tools/calendar/basic/calendar_get_event.js +52 -0
  15. package/dist/tools/calendar/basic/calendar_list_events.js +86 -0
  16. package/dist/tools/calendar/basic/calendar_update_event.js +116 -0
  17. package/dist/tools/calendar/calendarlist/calendar_calendarlist_get.js +73 -0
  18. package/dist/tools/calendar/calendarlist/calendar_calendarlist_list.js +87 -0
  19. package/dist/tools/calendar/calendars/calendar_calendars_get.js +52 -0
  20. package/dist/tools/calendar/calendars/calendar_calendars_insert.js +66 -0
  21. package/dist/tools/calendar/calendars/calendar_calendars_update.js +85 -0
  22. package/dist/tools/calendar/colors/calendar_colors_get.js +46 -0
  23. package/dist/tools/calendar/events_advanced/calendar_events_instances.js +81 -0
  24. package/dist/tools/calendar/events_advanced/calendar_events_move.js +63 -0
  25. package/dist/tools/calendar/events_advanced/calendar_events_quickadd.js +52 -0
  26. package/dist/tools/calendar/freebusy/calendar_freebusy_query.js +69 -0
  27. package/dist/tools/calendar/settings/calendar_settings_list.js +81 -0
  28. package/dist/tools/docs/basic/gdocs_create.js +37 -0
  29. package/dist/tools/docs/basic/gdocs_get_metadata.js +45 -0
  30. package/dist/tools/docs/basic/gdocs_list_documents.js +59 -0
  31. package/dist/tools/docs/basic/gdocs_read.js +62 -0
  32. package/dist/tools/docs/content/gdocs_append_text.js +57 -0
  33. package/dist/tools/docs/content/gdocs_apply_style.js +86 -0
  34. package/dist/tools/docs/content/gdocs_create_heading.js +89 -0
  35. package/dist/tools/docs/content/gdocs_create_list.js +86 -0
  36. package/dist/tools/docs/content/gdocs_delete_text.js +64 -0
  37. package/dist/tools/docs/content/gdocs_format_text.js +137 -0
  38. package/dist/tools/docs/content/gdocs_insert_text.js +62 -0
  39. package/dist/tools/docs/content/gdocs_replace_text.js +64 -0
  40. package/dist/tools/docs/content/gdocs_set_alignment.js +76 -0
  41. package/dist/tools/docs/content/gdocs_update_text.js +78 -0
  42. package/dist/tools/docs/elements/gdocs_batch_update.js +108 -0
  43. package/dist/tools/docs/elements/gdocs_create_table.js +73 -0
  44. package/dist/tools/docs/elements/gdocs_export.js +62 -0
  45. package/dist/tools/docs/elements/gdocs_insert_image.js +96 -0
  46. package/dist/tools/docs/elements/gdocs_insert_link.js +77 -0
  47. package/dist/tools/docs/elements/gdocs_insert_page_break.js +55 -0
  48. package/dist/tools/docs/elements/gdocs_insert_toc.js +71 -0
  49. package/dist/tools/docs/elements/gdocs_merge_documents.js +104 -0
  50. package/dist/tools/docs/elements/gdocs_suggest_mode.js +41 -0
  51. package/dist/tools/drive/advanced/drive_empty_trash.js +56 -0
  52. package/dist/tools/drive/advanced/drive_export_file.js +158 -0
  53. package/dist/tools/drive/advanced/drive_list_revisions.js +80 -0
  54. package/dist/tools/drive/basic/drive_get_metadata.js +49 -0
  55. package/dist/tools/drive/basic/drive_list_files.js +76 -0
  56. package/dist/tools/drive/file/drive_copy_file.js +79 -0
  57. package/dist/tools/drive/file/drive_create_file.js +72 -0
  58. package/dist/tools/drive/file/drive_delete_file.js +48 -0
  59. package/dist/tools/drive/file/drive_move_file.js +79 -0
  60. package/dist/tools/drive/file/drive_rename_file.js +58 -0
  61. package/dist/tools/drive/file/drive_update_file.js +106 -0
  62. package/dist/tools/drive/file/drive_upload_file.js +80 -0
  63. package/dist/tools/drive/folder/drive_create_folder.js +67 -0
  64. package/dist/tools/drive/folder/drive_list_folder_contents.js +68 -0
  65. package/dist/tools/drive/folder/drive_move_to_folder.js +59 -0
  66. package/dist/tools/drive/permissions/drive_list_permissions.js +115 -0
  67. package/dist/tools/drive/permissions/drive_remove_permission.js +71 -0
  68. package/dist/tools/drive/permissions/drive_share_file.js +116 -0
  69. package/dist/tools/drive/permissions/drive_update_permission.js +79 -0
  70. package/dist/tools/gmail/basic/gmail_get_message.js +95 -0
  71. package/dist/tools/gmail/basic/gmail_get_thread.js +46 -0
  72. package/dist/tools/gmail/basic/gmail_list_labels.js +54 -0
  73. package/dist/tools/gmail/basic/gmail_search_messages.js +59 -0
  74. package/dist/tools/gmail/batch/gmail_batch_modify_labels.js +74 -0
  75. package/dist/tools/gmail/batch/gmail_get_messages_batch.js +120 -0
  76. package/dist/tools/gmail/batch/gmail_get_threads_batch.js +102 -0
  77. package/dist/tools/gmail/labels/gmail_manage_label.js +131 -0
  78. package/dist/tools/gmail/labels/gmail_modify_labels.js +65 -0
  79. package/dist/tools/gmail/send/gmail_draft_message.js +117 -0
  80. package/dist/tools/gmail/send/gmail_send_message.js +109 -0
  81. package/dist/tools/index.js +386 -3
  82. package/package.json +8 -3
  83. package/dist/tools/basic/gsheets_add_sheet.js +0 -65
  84. package/dist/tools/basic/gsheets_copy_sheet.js +0 -56
  85. package/dist/tools/basic/gsheets_copy_to.js +0 -113
  86. package/dist/tools/basic/gsheets_create_spreadsheet.js +0 -88
  87. package/dist/tools/basic/gsheets_delete_columns.js +0 -69
  88. package/dist/tools/basic/gsheets_delete_rows.js +0 -69
  89. package/dist/tools/basic/gsheets_delete_sheet.js +0 -56
  90. package/dist/tools/basic/gsheets_duplicate_sheet.js +0 -72
  91. package/dist/tools/basic/gsheets_insert_columns.js +0 -69
  92. package/dist/tools/basic/gsheets_insert_rows.js +0 -69
  93. package/dist/tools/basic/gsheets_list_sheets.js +0 -53
  94. package/dist/tools/basic/gsheets_read.js +0 -120
  95. package/dist/tools/basic/gsheets_rename_sheet.js +0 -64
  96. package/dist/tools/charts/gsheets_add_bubble.js +0 -176
  97. package/dist/tools/charts/gsheets_add_candlestick.js +0 -192
  98. package/dist/tools/charts/gsheets_add_chart.js +0 -162
  99. package/dist/tools/charts/gsheets_add_combo.js +0 -169
  100. package/dist/tools/charts/gsheets_add_histogram.js +0 -143
  101. package/dist/tools/charts/gsheets_add_org_chart.js +0 -160
  102. package/dist/tools/charts/gsheets_add_treemap.js +0 -177
  103. package/dist/tools/charts/gsheets_add_waterfall.js +0 -155
  104. package/dist/tools/charts/gsheets_delete_chart.js +0 -56
  105. package/dist/tools/charts/gsheets_update_chart.js +0 -118
  106. package/dist/tools/data/gsheets_append_data.js +0 -68
  107. package/dist/tools/data/gsheets_batch_clear.js +0 -53
  108. package/dist/tools/data/gsheets_batch_update.js +0 -81
  109. package/dist/tools/data/gsheets_clear_data.js +0 -53
  110. package/dist/tools/data/gsheets_create_filter.js +0 -81
  111. package/dist/tools/data/gsheets_find_replace.js +0 -124
  112. package/dist/tools/data/gsheets_set_data_validation.js +0 -153
  113. package/dist/tools/data/gsheets_sort_range.js +0 -102
  114. package/dist/tools/data/gsheets_update_cell.js +0 -44
  115. package/dist/tools/formatting/gsheets_auto_resize.js +0 -75
  116. package/dist/tools/formatting/gsheets_format_cells.js +0 -161
  117. package/dist/tools/formatting/gsheets_freeze_columns.js +0 -67
  118. package/dist/tools/formatting/gsheets_freeze_rows.js +0 -67
  119. package/dist/tools/formatting/gsheets_merge_cells.js +0 -85
  120. package/dist/tools/formatting/gsheets_set_number_format.js +0 -116
  121. package/dist/tools/formatting/gsheets_unmerge_cells.js +0 -79
  122. package/dist/tools/formatting/gsheets_update_borders.js +0 -212
  123. package/dist/tools/gdrive/gdrive_read_file.js +0 -77
  124. package/dist/tools/gdrive/gdrive_search.js +0 -71
  125. package/dist/tools/gdrive_read_file.js +0 -77
  126. package/dist/tools/gdrive_search.js +0 -71
  127. package/dist/tools/gsheets_add_bubble.js +0 -176
  128. package/dist/tools/gsheets_add_candlestick.js +0 -192
  129. package/dist/tools/gsheets_add_chart.js +0 -162
  130. package/dist/tools/gsheets_add_combo.js +0 -169
  131. package/dist/tools/gsheets_add_conditional_format.js +0 -175
  132. package/dist/tools/gsheets_add_histogram.js +0 -143
  133. package/dist/tools/gsheets_add_named_range.js +0 -87
  134. package/dist/tools/gsheets_add_org_chart.js +0 -160
  135. package/dist/tools/gsheets_add_protected_range.js +0 -127
  136. package/dist/tools/gsheets_add_sheet.js +0 -65
  137. package/dist/tools/gsheets_add_treemap.js +0 -177
  138. package/dist/tools/gsheets_add_waterfall.js +0 -155
  139. package/dist/tools/gsheets_append_data.js +0 -68
  140. package/dist/tools/gsheets_auto_resize.js +0 -75
  141. package/dist/tools/gsheets_batch_clear.js +0 -53
  142. package/dist/tools/gsheets_batch_update.js +0 -81
  143. package/dist/tools/gsheets_clear_data.js +0 -53
  144. package/dist/tools/gsheets_copy_sheet.js +0 -56
  145. package/dist/tools/gsheets_copy_to.js +0 -113
  146. package/dist/tools/gsheets_create_filter.js +0 -81
  147. package/dist/tools/gsheets_create_spreadsheet.js +0 -88
  148. package/dist/tools/gsheets_delete_chart.js +0 -56
  149. package/dist/tools/gsheets_delete_columns.js +0 -69
  150. package/dist/tools/gsheets_delete_named_range.js +0 -56
  151. package/dist/tools/gsheets_delete_protected_range.js +0 -56
  152. package/dist/tools/gsheets_delete_rows.js +0 -69
  153. package/dist/tools/gsheets_delete_sheet.js +0 -56
  154. package/dist/tools/gsheets_duplicate_sheet.js +0 -72
  155. package/dist/tools/gsheets_find_replace.js +0 -124
  156. package/dist/tools/gsheets_format_cells.js +0 -161
  157. package/dist/tools/gsheets_freeze_columns.js +0 -67
  158. package/dist/tools/gsheets_freeze_rows.js +0 -67
  159. package/dist/tools/gsheets_insert_columns.js +0 -69
  160. package/dist/tools/gsheets_insert_rows.js +0 -69
  161. package/dist/tools/gsheets_list_sheets.js +0 -53
  162. package/dist/tools/gsheets_merge_cells.js +0 -85
  163. package/dist/tools/gsheets_read.js +0 -120
  164. package/dist/tools/gsheets_rename_sheet.js +0 -64
  165. package/dist/tools/gsheets_set_data_validation.js +0 -153
  166. package/dist/tools/gsheets_set_number_format.js +0 -116
  167. package/dist/tools/gsheets_sort_range.js +0 -102
  168. package/dist/tools/gsheets_unmerge_cells.js +0 -79
  169. package/dist/tools/gsheets_update_borders.js +0 -212
  170. package/dist/tools/gsheets_update_cell.js +0 -44
  171. package/dist/tools/gsheets_update_chart.js +0 -118
  172. package/dist/tools/gsheets_update_named_range.js +0 -112
  173. package/dist/tools/gsheets_update_protected_range.js +0 -110
  174. package/dist/tools/protection/gsheets_add_conditional_format.js +0 -175
  175. package/dist/tools/protection/gsheets_add_named_range.js +0 -87
  176. package/dist/tools/protection/gsheets_add_protected_range.js +0 -127
  177. package/dist/tools/protection/gsheets_delete_named_range.js +0 -56
  178. package/dist/tools/protection/gsheets_delete_protected_range.js +0 -56
  179. package/dist/tools/protection/gsheets_update_named_range.js +0 -112
  180. package/dist/tools/protection/gsheets_update_protected_range.js +0 -110
  181. /package/dist/tools/drive/{drive_read_file.js → basic/drive_read_file.js} +0 -0
  182. /package/dist/tools/drive/{drive_search.js → basic/drive_search.js} +0 -0
@@ -1,124 +0,0 @@
1
- import { google } from "googleapis";
2
- export const schema = {
3
- name: "gsheets_find_replace",
4
- description: "Find and replace text in a range or entire sheet",
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 (optional, searches all sheets if omitted)",
15
- },
16
- find: {
17
- type: "string",
18
- description: "Text to find",
19
- },
20
- replacement: {
21
- type: "string",
22
- description: "Replacement text",
23
- },
24
- matchCase: {
25
- type: "boolean",
26
- description: "Case-sensitive matching (default: false)",
27
- },
28
- matchEntireCell: {
29
- type: "boolean",
30
- description: "Match entire cell content (default: false)",
31
- },
32
- searchByRegex: {
33
- type: "boolean",
34
- description: "Use regex pattern (default: false)",
35
- },
36
- startRow: {
37
- type: "number",
38
- description: "Starting row index (0-based, optional)",
39
- },
40
- endRow: {
41
- type: "number",
42
- description: "Ending row index (exclusive, 0-based, optional)",
43
- },
44
- startColumn: {
45
- type: "number",
46
- description: "Starting column index (0-based, optional)",
47
- },
48
- endColumn: {
49
- type: "number",
50
- description: "Ending column index (exclusive, 0-based, optional)",
51
- },
52
- },
53
- required: ["spreadsheetId", "find", "replacement"],
54
- },
55
- };
56
- export async function findReplace(args) {
57
- try {
58
- const sheets = google.sheets("v4");
59
- const findReplaceSpec = {
60
- find: args.find,
61
- replacement: args.replacement,
62
- matchCase: args.matchCase || false,
63
- matchEntireCell: args.matchEntireCell || false,
64
- searchByRegex: args.searchByRegex || false,
65
- };
66
- // Add range if specified
67
- if (args.sheetId !== undefined ||
68
- args.startRow !== undefined ||
69
- args.endRow !== undefined ||
70
- args.startColumn !== undefined ||
71
- args.endColumn !== undefined) {
72
- findReplaceSpec.range = {};
73
- if (args.sheetId !== undefined) {
74
- findReplaceSpec.range.sheetId = args.sheetId;
75
- }
76
- if (args.startRow !== undefined) {
77
- findReplaceSpec.range.startRowIndex = args.startRow;
78
- }
79
- if (args.endRow !== undefined) {
80
- findReplaceSpec.range.endRowIndex = args.endRow;
81
- }
82
- if (args.startColumn !== undefined) {
83
- findReplaceSpec.range.startColumnIndex = args.startColumn;
84
- }
85
- if (args.endColumn !== undefined) {
86
- findReplaceSpec.range.endColumnIndex = args.endColumn;
87
- }
88
- }
89
- const response = await sheets.spreadsheets.batchUpdate({
90
- spreadsheetId: args.spreadsheetId,
91
- requestBody: {
92
- requests: [
93
- {
94
- findReplace: findReplaceSpec,
95
- },
96
- ],
97
- },
98
- });
99
- const occurrencesChanged = response.data.replies?.[0]?.findReplace?.occurrencesChanged || 0;
100
- const rowsChanged = response.data.replies?.[0]?.findReplace?.rowsChanged || 0;
101
- const sheetsChanged = response.data.replies?.[0]?.findReplace?.sheetsChanged || 0;
102
- const valuesChanged = response.data.replies?.[0]?.findReplace?.valuesChanged || 0;
103
- return {
104
- content: [
105
- {
106
- type: "text",
107
- text: `Successfully replaced "${args.find}" with "${args.replacement}". Changed: ${occurrencesChanged} occurrences, ${rowsChanged} rows, ${sheetsChanged} sheets, ${valuesChanged} values.`,
108
- },
109
- ],
110
- isError: false,
111
- };
112
- }
113
- catch (error) {
114
- return {
115
- content: [
116
- {
117
- type: "text",
118
- text: `Error finding and replacing: ${error.message}`,
119
- },
120
- ],
121
- isError: true,
122
- };
123
- }
124
- }
@@ -1,161 +0,0 @@
1
- import { google } from "googleapis";
2
- export const schema = {
3
- name: "gsheets_format_cells",
4
- description: "Format cells in a Google Spreadsheet (font, colors, alignment, etc.)",
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
- format: {
33
- type: "object",
34
- properties: {
35
- bold: { type: "boolean", description: "Make text bold" },
36
- italic: { type: "boolean", description: "Make text italic" },
37
- fontSize: { type: "number", description: "Font size in points" },
38
- fontFamily: { type: "string", description: "Font family name" },
39
- textColor: {
40
- type: "object",
41
- properties: {
42
- red: { type: "number", minimum: 0, maximum: 1 },
43
- green: { type: "number", minimum: 0, maximum: 1 },
44
- blue: { type: "number", minimum: 0, maximum: 1 },
45
- },
46
- description: "Text color (RGB values 0-1)",
47
- },
48
- backgroundColor: {
49
- type: "object",
50
- properties: {
51
- red: { type: "number", minimum: 0, maximum: 1 },
52
- green: { type: "number", minimum: 0, maximum: 1 },
53
- blue: { type: "number", minimum: 0, maximum: 1 },
54
- },
55
- description: "Background color (RGB values 0-1)",
56
- },
57
- horizontalAlignment: {
58
- type: "string",
59
- enum: ["LEFT", "CENTER", "RIGHT"],
60
- description: "Horizontal text alignment",
61
- },
62
- verticalAlignment: {
63
- type: "string",
64
- enum: ["TOP", "MIDDLE", "BOTTOM"],
65
- description: "Vertical text alignment",
66
- },
67
- },
68
- description: "Format options to apply",
69
- },
70
- },
71
- required: ["spreadsheetId", "sheetId", "startRow", "endRow", "startColumn", "endColumn", "format"],
72
- },
73
- };
74
- export async function formatCells(args) {
75
- try {
76
- const sheets = google.sheets("v4");
77
- const cellFormat = {};
78
- const fields = [];
79
- if (args.format.bold !== undefined || args.format.italic !== undefined ||
80
- args.format.fontSize !== undefined || args.format.fontFamily !== undefined ||
81
- args.format.textColor !== undefined) {
82
- cellFormat.textFormat = {};
83
- if (args.format.bold !== undefined) {
84
- cellFormat.textFormat.bold = args.format.bold;
85
- fields.push("userEnteredFormat.textFormat.bold");
86
- }
87
- if (args.format.italic !== undefined) {
88
- cellFormat.textFormat.italic = args.format.italic;
89
- fields.push("userEnteredFormat.textFormat.italic");
90
- }
91
- if (args.format.fontSize !== undefined) {
92
- cellFormat.textFormat.fontSize = args.format.fontSize;
93
- fields.push("userEnteredFormat.textFormat.fontSize");
94
- }
95
- if (args.format.fontFamily !== undefined) {
96
- cellFormat.textFormat.fontFamily = args.format.fontFamily;
97
- fields.push("userEnteredFormat.textFormat.fontFamily");
98
- }
99
- if (args.format.textColor !== undefined) {
100
- cellFormat.textFormat.foregroundColor = args.format.textColor;
101
- fields.push("userEnteredFormat.textFormat.foregroundColor");
102
- }
103
- }
104
- if (args.format.backgroundColor !== undefined) {
105
- cellFormat.backgroundColor = args.format.backgroundColor;
106
- fields.push("userEnteredFormat.backgroundColor");
107
- }
108
- if (args.format.horizontalAlignment !== undefined) {
109
- cellFormat.horizontalAlignment = args.format.horizontalAlignment;
110
- fields.push("userEnteredFormat.horizontalAlignment");
111
- }
112
- if (args.format.verticalAlignment !== undefined) {
113
- cellFormat.verticalAlignment = args.format.verticalAlignment;
114
- fields.push("userEnteredFormat.verticalAlignment");
115
- }
116
- await sheets.spreadsheets.batchUpdate({
117
- spreadsheetId: args.spreadsheetId,
118
- requestBody: {
119
- requests: [
120
- {
121
- repeatCell: {
122
- range: {
123
- sheetId: args.sheetId,
124
- startRowIndex: args.startRow,
125
- endRowIndex: args.endRow,
126
- startColumnIndex: args.startColumn,
127
- endColumnIndex: args.endColumn,
128
- },
129
- cell: {
130
- userEnteredFormat: cellFormat,
131
- },
132
- fields: fields.join(","),
133
- },
134
- },
135
- ],
136
- },
137
- });
138
- const rangeStr = `R${args.startRow}C${args.startColumn}:R${args.endRow - 1}C${args.endColumn - 1}`;
139
- const appliedFormats = Object.keys(args.format).join(", ");
140
- return {
141
- content: [
142
- {
143
- type: "text",
144
- text: `Successfully formatted cells in range ${rangeStr}. Applied formats: ${appliedFormats}`,
145
- },
146
- ],
147
- isError: false,
148
- };
149
- }
150
- catch (error) {
151
- return {
152
- content: [
153
- {
154
- type: "text",
155
- text: `Error formatting cells: ${error.message}`,
156
- },
157
- ],
158
- isError: true,
159
- };
160
- }
161
- }
@@ -1,67 +0,0 @@
1
- import { google } from "googleapis";
2
- export const schema = {
3
- name: "gsheets_freeze_columns",
4
- description: "Freeze columns at the left of a sheet",
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
- count: {
17
- type: "number",
18
- description: "Number of columns to freeze (0 to unfreeze all)",
19
- },
20
- },
21
- required: ["spreadsheetId", "sheetId", "count"],
22
- },
23
- };
24
- export async function freezeColumns(args) {
25
- try {
26
- const sheets = google.sheets("v4");
27
- await sheets.spreadsheets.batchUpdate({
28
- spreadsheetId: args.spreadsheetId,
29
- requestBody: {
30
- requests: [
31
- {
32
- updateSheetProperties: {
33
- properties: {
34
- sheetId: args.sheetId,
35
- gridProperties: {
36
- frozenColumnCount: args.count,
37
- },
38
- },
39
- fields: "gridProperties.frozenColumnCount",
40
- },
41
- },
42
- ],
43
- },
44
- });
45
- const action = args.count === 0 ? "Unfroze all columns" : `Froze ${args.count} column(s)`;
46
- return {
47
- content: [
48
- {
49
- type: "text",
50
- text: `${action} on sheet ${args.sheetId}`,
51
- },
52
- ],
53
- isError: false,
54
- };
55
- }
56
- catch (error) {
57
- return {
58
- content: [
59
- {
60
- type: "text",
61
- text: `Error freezing columns: ${error.message}`,
62
- },
63
- ],
64
- isError: true,
65
- };
66
- }
67
- }
@@ -1,67 +0,0 @@
1
- import { google } from "googleapis";
2
- export const schema = {
3
- name: "gsheets_freeze_rows",
4
- description: "Freeze rows at the top of a sheet",
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
- count: {
17
- type: "number",
18
- description: "Number of rows to freeze (0 to unfreeze all)",
19
- },
20
- },
21
- required: ["spreadsheetId", "sheetId", "count"],
22
- },
23
- };
24
- export async function freezeRows(args) {
25
- try {
26
- const sheets = google.sheets("v4");
27
- await sheets.spreadsheets.batchUpdate({
28
- spreadsheetId: args.spreadsheetId,
29
- requestBody: {
30
- requests: [
31
- {
32
- updateSheetProperties: {
33
- properties: {
34
- sheetId: args.sheetId,
35
- gridProperties: {
36
- frozenRowCount: args.count,
37
- },
38
- },
39
- fields: "gridProperties.frozenRowCount",
40
- },
41
- },
42
- ],
43
- },
44
- });
45
- const action = args.count === 0 ? "Unfroze all rows" : `Froze ${args.count} row(s)`;
46
- return {
47
- content: [
48
- {
49
- type: "text",
50
- text: `${action} on sheet ${args.sheetId}`,
51
- },
52
- ],
53
- isError: false,
54
- };
55
- }
56
- catch (error) {
57
- return {
58
- content: [
59
- {
60
- type: "text",
61
- text: `Error freezing rows: ${error.message}`,
62
- },
63
- ],
64
- isError: true,
65
- };
66
- }
67
- }
@@ -1,69 +0,0 @@
1
- import { google } from "googleapis";
2
- export const schema = {
3
- name: "gsheets_insert_columns",
4
- description: "Insert empty columns into a Google Spreadsheet",
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
- startIndex: {
17
- type: "number",
18
- description: "The starting column index (0-based) where columns will be inserted",
19
- },
20
- count: {
21
- type: "number",
22
- description: "The number of columns to insert",
23
- },
24
- },
25
- required: ["spreadsheetId", "sheetId", "startIndex", "count"],
26
- },
27
- };
28
- export async function insertColumns(args) {
29
- const sheets = google.sheets("v4");
30
- try {
31
- await sheets.spreadsheets.batchUpdate({
32
- spreadsheetId: args.spreadsheetId,
33
- requestBody: {
34
- requests: [
35
- {
36
- insertDimension: {
37
- range: {
38
- sheetId: args.sheetId,
39
- dimension: "COLUMNS",
40
- startIndex: args.startIndex,
41
- endIndex: args.startIndex + args.count,
42
- },
43
- },
44
- },
45
- ],
46
- },
47
- });
48
- return {
49
- content: [
50
- {
51
- type: "text",
52
- text: `Successfully inserted ${args.count} column(s) starting at index ${args.startIndex}`,
53
- },
54
- ],
55
- isError: false,
56
- };
57
- }
58
- catch (error) {
59
- return {
60
- content: [
61
- {
62
- type: "text",
63
- text: `Error inserting columns: ${error.message}`,
64
- },
65
- ],
66
- isError: true,
67
- };
68
- }
69
- }
@@ -1,69 +0,0 @@
1
- import { google } from "googleapis";
2
- export const schema = {
3
- name: "gsheets_insert_rows",
4
- description: "Insert empty rows into a Google Spreadsheet",
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
- startIndex: {
17
- type: "number",
18
- description: "The starting row index (0-based) where rows will be inserted",
19
- },
20
- count: {
21
- type: "number",
22
- description: "The number of rows to insert",
23
- },
24
- },
25
- required: ["spreadsheetId", "sheetId", "startIndex", "count"],
26
- },
27
- };
28
- export async function insertRows(args) {
29
- const sheets = google.sheets("v4");
30
- try {
31
- await sheets.spreadsheets.batchUpdate({
32
- spreadsheetId: args.spreadsheetId,
33
- requestBody: {
34
- requests: [
35
- {
36
- insertDimension: {
37
- range: {
38
- sheetId: args.sheetId,
39
- dimension: "ROWS",
40
- startIndex: args.startIndex,
41
- endIndex: args.startIndex + args.count,
42
- },
43
- },
44
- },
45
- ],
46
- },
47
- });
48
- return {
49
- content: [
50
- {
51
- type: "text",
52
- text: `Successfully inserted ${args.count} row(s) starting at index ${args.startIndex}`,
53
- },
54
- ],
55
- isError: false,
56
- };
57
- }
58
- catch (error) {
59
- return {
60
- content: [
61
- {
62
- type: "text",
63
- text: `Error inserting rows: ${error.message}`,
64
- },
65
- ],
66
- isError: true,
67
- };
68
- }
69
- }
@@ -1,53 +0,0 @@
1
- import { google } from "googleapis";
2
- export const schema = {
3
- name: "gsheets_list_sheets",
4
- description: "List all sheets (tabs) within a Google Spreadsheet",
5
- inputSchema: {
6
- type: "object",
7
- properties: {
8
- spreadsheetId: {
9
- type: "string",
10
- description: "The ID of the spreadsheet",
11
- },
12
- },
13
- required: ["spreadsheetId"],
14
- },
15
- };
16
- export async function listSheets(args) {
17
- try {
18
- const sheets = google.sheets("v4");
19
- const response = await sheets.spreadsheets.get({
20
- spreadsheetId: args.spreadsheetId,
21
- fields: "sheets.properties",
22
- });
23
- const sheetsList = response.data.sheets?.map((sheet) => ({
24
- sheetId: sheet.properties?.sheetId,
25
- title: sheet.properties?.title,
26
- index: sheet.properties?.index,
27
- gridProperties: {
28
- rowCount: sheet.properties?.gridProperties?.rowCount,
29
- columnCount: sheet.properties?.gridProperties?.columnCount,
30
- },
31
- })) || [];
32
- return {
33
- content: [
34
- {
35
- type: "text",
36
- text: JSON.stringify({ sheets: sheetsList }, null, 2),
37
- },
38
- ],
39
- isError: false,
40
- };
41
- }
42
- catch (error) {
43
- return {
44
- content: [
45
- {
46
- type: "text",
47
- text: `Error listing sheets: ${error.message}`,
48
- },
49
- ],
50
- isError: true,
51
- };
52
- }
53
- }