@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,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,85 +0,0 @@
1
- import { google } from "googleapis";
2
- export const schema = {
3
- name: "gsheets_merge_cells",
4
- description: "Merge cells in 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
- 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
- mergeType: {
33
- type: "string",
34
- enum: ["MERGE_ALL", "MERGE_COLUMNS", "MERGE_ROWS"],
35
- description: "How to merge cells: MERGE_ALL (all cells), MERGE_COLUMNS (merge columns), MERGE_ROWS (merge rows)",
36
- },
37
- },
38
- required: ["spreadsheetId", "sheetId", "startRow", "endRow", "startColumn", "endColumn"],
39
- },
40
- };
41
- export async function mergeCells(args) {
42
- try {
43
- const sheets = google.sheets("v4");
44
- await sheets.spreadsheets.batchUpdate({
45
- spreadsheetId: args.spreadsheetId,
46
- requestBody: {
47
- requests: [
48
- {
49
- mergeCells: {
50
- range: {
51
- sheetId: args.sheetId,
52
- startRowIndex: args.startRow,
53
- endRowIndex: args.endRow,
54
- startColumnIndex: args.startColumn,
55
- endColumnIndex: args.endColumn,
56
- },
57
- mergeType: args.mergeType || "MERGE_ALL",
58
- },
59
- },
60
- ],
61
- },
62
- });
63
- const rangeStr = `R${args.startRow}C${args.startColumn}:R${args.endRow - 1}C${args.endColumn - 1}`;
64
- return {
65
- content: [
66
- {
67
- type: "text",
68
- text: `Successfully merged cells in range ${rangeStr} using ${args.mergeType || "MERGE_ALL"} mode`,
69
- },
70
- ],
71
- isError: false,
72
- };
73
- }
74
- catch (error) {
75
- return {
76
- content: [
77
- {
78
- type: "text",
79
- text: `Error merging cells: ${error.message}`,
80
- },
81
- ],
82
- isError: true,
83
- };
84
- }
85
- }
@@ -1,116 +0,0 @@
1
- import { google } from "googleapis";
2
- export const schema = {
3
- name: "gsheets_set_number_format",
4
- description: "Set number format for cells (currency, percentage, date, 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
- numberFormat: {
33
- type: "object",
34
- properties: {
35
- type: {
36
- type: "string",
37
- enum: ["NUMBER", "CURRENCY", "PERCENT", "DATE", "TIME", "DATE_TIME", "SCIENTIFIC", "TEXT"],
38
- description: "The type of number format",
39
- },
40
- pattern: {
41
- type: "string",
42
- description: "Custom format pattern (optional, e.g., '$#,##0.00', '0.00%', 'yyyy-mm-dd')",
43
- },
44
- },
45
- required: ["type"],
46
- description: "Number format settings",
47
- },
48
- },
49
- required: ["spreadsheetId", "sheetId", "startRow", "endRow", "startColumn", "endColumn", "numberFormat"],
50
- },
51
- };
52
- export async function setNumberFormat(args) {
53
- try {
54
- const sheets = google.sheets("v4");
55
- // Default patterns for common types
56
- const defaultPatterns = {
57
- NUMBER: "#,##0.00",
58
- CURRENCY: "$#,##0.00",
59
- PERCENT: "0.00%",
60
- DATE: "yyyy-mm-dd",
61
- TIME: "h:mm:ss",
62
- DATE_TIME: "yyyy-mm-dd h:mm:ss",
63
- SCIENTIFIC: "0.00E+00",
64
- TEXT: "@",
65
- };
66
- const pattern = args.numberFormat.pattern || defaultPatterns[args.numberFormat.type];
67
- await sheets.spreadsheets.batchUpdate({
68
- spreadsheetId: args.spreadsheetId,
69
- requestBody: {
70
- requests: [
71
- {
72
- repeatCell: {
73
- range: {
74
- sheetId: args.sheetId,
75
- startRowIndex: args.startRow,
76
- endRowIndex: args.endRow,
77
- startColumnIndex: args.startColumn,
78
- endColumnIndex: args.endColumn,
79
- },
80
- cell: {
81
- userEnteredFormat: {
82
- numberFormat: {
83
- type: args.numberFormat.type,
84
- pattern: pattern,
85
- },
86
- },
87
- },
88
- fields: "userEnteredFormat.numberFormat",
89
- },
90
- },
91
- ],
92
- },
93
- });
94
- const rangeStr = `R${args.startRow}C${args.startColumn}:R${args.endRow - 1}C${args.endColumn - 1}`;
95
- return {
96
- content: [
97
- {
98
- type: "text",
99
- text: `Successfully set number format to ${args.numberFormat.type} (pattern: ${pattern}) for range ${rangeStr}`,
100
- },
101
- ],
102
- isError: false,
103
- };
104
- }
105
- catch (error) {
106
- return {
107
- content: [
108
- {
109
- type: "text",
110
- text: `Error setting number format: ${error.message}`,
111
- },
112
- ],
113
- isError: true,
114
- };
115
- }
116
- }
@@ -1,79 +0,0 @@
1
- import { google } from "googleapis";
2
- export const schema = {
3
- name: "gsheets_unmerge_cells",
4
- description: "Unmerge previously merged cells in 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
- 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
- },
33
- required: ["spreadsheetId", "sheetId", "startRow", "endRow", "startColumn", "endColumn"],
34
- },
35
- };
36
- export async function unmergeCells(args) {
37
- try {
38
- const sheets = google.sheets("v4");
39
- await sheets.spreadsheets.batchUpdate({
40
- spreadsheetId: args.spreadsheetId,
41
- requestBody: {
42
- requests: [
43
- {
44
- unmergeCells: {
45
- range: {
46
- sheetId: args.sheetId,
47
- startRowIndex: args.startRow,
48
- endRowIndex: args.endRow,
49
- startColumnIndex: args.startColumn,
50
- endColumnIndex: args.endColumn,
51
- },
52
- },
53
- },
54
- ],
55
- },
56
- });
57
- const rangeStr = `R${args.startRow}C${args.startColumn}:R${args.endRow - 1}C${args.endColumn - 1}`;
58
- return {
59
- content: [
60
- {
61
- type: "text",
62
- text: `Successfully unmerged cells in range ${rangeStr}`,
63
- },
64
- ],
65
- isError: false,
66
- };
67
- }
68
- catch (error) {
69
- return {
70
- content: [
71
- {
72
- type: "text",
73
- text: `Error unmerging cells: ${error.message}`,
74
- },
75
- ],
76
- isError: true,
77
- };
78
- }
79
- }
@@ -1,212 +0,0 @@
1
- import { google } from "googleapis";
2
- export const schema = {
3
- name: "gsheets_update_borders",
4
- description: "Update cell borders in 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
- 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
- top: {
33
- type: "object",
34
- properties: {
35
- style: {
36
- type: "string",
37
- enum: ["SOLID", "DOTTED", "DASHED", "DOUBLE", "SOLID_MEDIUM", "SOLID_THICK"],
38
- },
39
- width: { type: "number" },
40
- color: {
41
- type: "object",
42
- properties: {
43
- red: { type: "number" },
44
- green: { type: "number" },
45
- blue: { type: "number" },
46
- },
47
- },
48
- },
49
- description: "Top border style",
50
- },
51
- bottom: {
52
- type: "object",
53
- properties: {
54
- style: {
55
- type: "string",
56
- enum: ["SOLID", "DOTTED", "DASHED", "DOUBLE", "SOLID_MEDIUM", "SOLID_THICK"],
57
- },
58
- width: { type: "number" },
59
- color: {
60
- type: "object",
61
- properties: {
62
- red: { type: "number" },
63
- green: { type: "number" },
64
- blue: { type: "number" },
65
- },
66
- },
67
- },
68
- description: "Bottom border style",
69
- },
70
- left: {
71
- type: "object",
72
- properties: {
73
- style: {
74
- type: "string",
75
- enum: ["SOLID", "DOTTED", "DASHED", "DOUBLE", "SOLID_MEDIUM", "SOLID_THICK"],
76
- },
77
- width: { type: "number" },
78
- color: {
79
- type: "object",
80
- properties: {
81
- red: { type: "number" },
82
- green: { type: "number" },
83
- blue: { type: "number" },
84
- },
85
- },
86
- },
87
- description: "Left border style",
88
- },
89
- right: {
90
- type: "object",
91
- properties: {
92
- style: {
93
- type: "string",
94
- enum: ["SOLID", "DOTTED", "DASHED", "DOUBLE", "SOLID_MEDIUM", "SOLID_THICK"],
95
- },
96
- width: { type: "number" },
97
- color: {
98
- type: "object",
99
- properties: {
100
- red: { type: "number" },
101
- green: { type: "number" },
102
- blue: { type: "number" },
103
- },
104
- },
105
- },
106
- description: "Right border style",
107
- },
108
- innerHorizontal: {
109
- type: "object",
110
- properties: {
111
- style: {
112
- type: "string",
113
- enum: ["SOLID", "DOTTED", "DASHED", "DOUBLE", "SOLID_MEDIUM", "SOLID_THICK"],
114
- },
115
- width: { type: "number" },
116
- color: {
117
- type: "object",
118
- properties: {
119
- red: { type: "number" },
120
- green: { type: "number" },
121
- blue: { type: "number" },
122
- },
123
- },
124
- },
125
- description: "Inner horizontal border style",
126
- },
127
- innerVertical: {
128
- type: "object",
129
- properties: {
130
- style: {
131
- type: "string",
132
- enum: ["SOLID", "DOTTED", "DASHED", "DOUBLE", "SOLID_MEDIUM", "SOLID_THICK"],
133
- },
134
- width: { type: "number" },
135
- color: {
136
- type: "object",
137
- properties: {
138
- red: { type: "number" },
139
- green: { type: "number" },
140
- blue: { type: "number" },
141
- },
142
- },
143
- },
144
- description: "Inner vertical border style",
145
- },
146
- },
147
- required: ["spreadsheetId", "sheetId", "startRow", "endRow", "startColumn", "endColumn"],
148
- },
149
- };
150
- export async function updateBorders(args) {
151
- try {
152
- const sheets = google.sheets("v4");
153
- await sheets.spreadsheets.batchUpdate({
154
- spreadsheetId: args.spreadsheetId,
155
- requestBody: {
156
- requests: [
157
- {
158
- updateBorders: {
159
- range: {
160
- sheetId: args.sheetId,
161
- startRowIndex: args.startRow,
162
- endRowIndex: args.endRow,
163
- startColumnIndex: args.startColumn,
164
- endColumnIndex: args.endColumn,
165
- },
166
- top: args.top,
167
- bottom: args.bottom,
168
- left: args.left,
169
- right: args.right,
170
- innerHorizontal: args.innerHorizontal,
171
- innerVertical: args.innerVertical,
172
- },
173
- },
174
- ],
175
- },
176
- });
177
- const rangeStr = `R${args.startRow}C${args.startColumn}:R${args.endRow - 1}C${args.endColumn - 1}`;
178
- const bordersSet = [];
179
- if (args.top)
180
- bordersSet.push("top");
181
- if (args.bottom)
182
- bordersSet.push("bottom");
183
- if (args.left)
184
- bordersSet.push("left");
185
- if (args.right)
186
- bordersSet.push("right");
187
- if (args.innerHorizontal)
188
- bordersSet.push("innerHorizontal");
189
- if (args.innerVertical)
190
- bordersSet.push("innerVertical");
191
- return {
192
- content: [
193
- {
194
- type: "text",
195
- text: `Successfully updated borders for range ${rangeStr}. Borders set: ${bordersSet.join(", ")}`,
196
- },
197
- ],
198
- isError: false,
199
- };
200
- }
201
- catch (error) {
202
- return {
203
- content: [
204
- {
205
- type: "text",
206
- text: `Error updating borders: ${error.message}`,
207
- },
208
- ],
209
- isError: true,
210
- };
211
- }
212
- }