@alanse/mcp-server-google-workspace 1.0.0 → 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 (155) hide show
  1. package/README.md +146 -17
  2. package/dist/auth.js +5 -0
  3. package/dist/lib/calendar-helpers.js +197 -0
  4. package/dist/lib/drive-helpers.js +263 -0
  5. package/dist/lib/gmail-helpers.js +204 -0
  6. package/dist/tools/calendar/acl/calendar_acl_insert.js +80 -0
  7. package/dist/tools/calendar/acl/calendar_acl_list.js +82 -0
  8. package/dist/tools/calendar/basic/calendar_create_event.js +113 -0
  9. package/dist/tools/calendar/basic/calendar_delete_event.js +52 -0
  10. package/dist/tools/calendar/basic/calendar_get_event.js +52 -0
  11. package/dist/tools/calendar/basic/calendar_list_events.js +86 -0
  12. package/dist/tools/calendar/basic/calendar_update_event.js +116 -0
  13. package/dist/tools/calendar/calendarlist/calendar_calendarlist_get.js +73 -0
  14. package/dist/tools/calendar/calendarlist/calendar_calendarlist_list.js +87 -0
  15. package/dist/tools/calendar/calendars/calendar_calendars_get.js +52 -0
  16. package/dist/tools/calendar/calendars/calendar_calendars_insert.js +66 -0
  17. package/dist/tools/calendar/calendars/calendar_calendars_update.js +85 -0
  18. package/dist/tools/calendar/colors/calendar_colors_get.js +46 -0
  19. package/dist/tools/calendar/events_advanced/calendar_events_instances.js +81 -0
  20. package/dist/tools/calendar/events_advanced/calendar_events_move.js +63 -0
  21. package/dist/tools/calendar/events_advanced/calendar_events_quickadd.js +52 -0
  22. package/dist/tools/calendar/freebusy/calendar_freebusy_query.js +69 -0
  23. package/dist/tools/calendar/settings/calendar_settings_list.js +81 -0
  24. package/dist/tools/drive/advanced/drive_empty_trash.js +56 -0
  25. package/dist/tools/drive/advanced/drive_export_file.js +158 -0
  26. package/dist/tools/drive/advanced/drive_list_revisions.js +80 -0
  27. package/dist/tools/drive/basic/drive_get_metadata.js +49 -0
  28. package/dist/tools/drive/basic/drive_list_files.js +76 -0
  29. package/dist/tools/drive/file/drive_copy_file.js +79 -0
  30. package/dist/tools/drive/file/drive_create_file.js +72 -0
  31. package/dist/tools/drive/file/drive_delete_file.js +48 -0
  32. package/dist/tools/drive/file/drive_move_file.js +79 -0
  33. package/dist/tools/drive/file/drive_rename_file.js +58 -0
  34. package/dist/tools/drive/file/drive_update_file.js +106 -0
  35. package/dist/tools/drive/file/drive_upload_file.js +80 -0
  36. package/dist/tools/drive/folder/drive_create_folder.js +67 -0
  37. package/dist/tools/drive/folder/drive_list_folder_contents.js +68 -0
  38. package/dist/tools/drive/folder/drive_move_to_folder.js +59 -0
  39. package/dist/tools/drive/permissions/drive_list_permissions.js +115 -0
  40. package/dist/tools/drive/permissions/drive_remove_permission.js +71 -0
  41. package/dist/tools/drive/permissions/drive_share_file.js +116 -0
  42. package/dist/tools/drive/permissions/drive_update_permission.js +79 -0
  43. package/dist/tools/gmail/basic/gmail_get_message.js +95 -0
  44. package/dist/tools/gmail/basic/gmail_get_thread.js +46 -0
  45. package/dist/tools/gmail/basic/gmail_list_labels.js +54 -0
  46. package/dist/tools/gmail/basic/gmail_search_messages.js +59 -0
  47. package/dist/tools/gmail/batch/gmail_batch_modify_labels.js +74 -0
  48. package/dist/tools/gmail/batch/gmail_get_messages_batch.js +120 -0
  49. package/dist/tools/gmail/batch/gmail_get_threads_batch.js +102 -0
  50. package/dist/tools/gmail/labels/gmail_manage_label.js +131 -0
  51. package/dist/tools/gmail/labels/gmail_modify_labels.js +65 -0
  52. package/dist/tools/gmail/send/gmail_draft_message.js +117 -0
  53. package/dist/tools/gmail/send/gmail_send_message.js +109 -0
  54. package/dist/tools/index.js +267 -3
  55. package/package.json +8 -3
  56. package/dist/tools/basic/gsheets_add_sheet.js +0 -65
  57. package/dist/tools/basic/gsheets_copy_sheet.js +0 -56
  58. package/dist/tools/basic/gsheets_copy_to.js +0 -113
  59. package/dist/tools/basic/gsheets_create_spreadsheet.js +0 -88
  60. package/dist/tools/basic/gsheets_delete_columns.js +0 -69
  61. package/dist/tools/basic/gsheets_delete_rows.js +0 -69
  62. package/dist/tools/basic/gsheets_delete_sheet.js +0 -56
  63. package/dist/tools/basic/gsheets_duplicate_sheet.js +0 -72
  64. package/dist/tools/basic/gsheets_insert_columns.js +0 -69
  65. package/dist/tools/basic/gsheets_insert_rows.js +0 -69
  66. package/dist/tools/basic/gsheets_list_sheets.js +0 -53
  67. package/dist/tools/basic/gsheets_read.js +0 -120
  68. package/dist/tools/basic/gsheets_rename_sheet.js +0 -64
  69. package/dist/tools/charts/gsheets_add_bubble.js +0 -176
  70. package/dist/tools/charts/gsheets_add_candlestick.js +0 -192
  71. package/dist/tools/charts/gsheets_add_chart.js +0 -162
  72. package/dist/tools/charts/gsheets_add_combo.js +0 -169
  73. package/dist/tools/charts/gsheets_add_histogram.js +0 -143
  74. package/dist/tools/charts/gsheets_add_org_chart.js +0 -160
  75. package/dist/tools/charts/gsheets_add_treemap.js +0 -177
  76. package/dist/tools/charts/gsheets_add_waterfall.js +0 -155
  77. package/dist/tools/charts/gsheets_delete_chart.js +0 -56
  78. package/dist/tools/charts/gsheets_update_chart.js +0 -118
  79. package/dist/tools/data/gsheets_append_data.js +0 -68
  80. package/dist/tools/data/gsheets_batch_clear.js +0 -53
  81. package/dist/tools/data/gsheets_batch_update.js +0 -81
  82. package/dist/tools/data/gsheets_clear_data.js +0 -53
  83. package/dist/tools/data/gsheets_create_filter.js +0 -81
  84. package/dist/tools/data/gsheets_find_replace.js +0 -124
  85. package/dist/tools/data/gsheets_set_data_validation.js +0 -153
  86. package/dist/tools/data/gsheets_sort_range.js +0 -102
  87. package/dist/tools/data/gsheets_update_cell.js +0 -44
  88. package/dist/tools/formatting/gsheets_auto_resize.js +0 -75
  89. package/dist/tools/formatting/gsheets_format_cells.js +0 -161
  90. package/dist/tools/formatting/gsheets_freeze_columns.js +0 -67
  91. package/dist/tools/formatting/gsheets_freeze_rows.js +0 -67
  92. package/dist/tools/formatting/gsheets_merge_cells.js +0 -85
  93. package/dist/tools/formatting/gsheets_set_number_format.js +0 -116
  94. package/dist/tools/formatting/gsheets_unmerge_cells.js +0 -79
  95. package/dist/tools/formatting/gsheets_update_borders.js +0 -212
  96. package/dist/tools/gdrive/gdrive_read_file.js +0 -77
  97. package/dist/tools/gdrive/gdrive_search.js +0 -71
  98. package/dist/tools/gdrive_read_file.js +0 -77
  99. package/dist/tools/gdrive_search.js +0 -71
  100. package/dist/tools/gsheets_add_bubble.js +0 -176
  101. package/dist/tools/gsheets_add_candlestick.js +0 -192
  102. package/dist/tools/gsheets_add_chart.js +0 -162
  103. package/dist/tools/gsheets_add_combo.js +0 -169
  104. package/dist/tools/gsheets_add_conditional_format.js +0 -175
  105. package/dist/tools/gsheets_add_histogram.js +0 -143
  106. package/dist/tools/gsheets_add_named_range.js +0 -87
  107. package/dist/tools/gsheets_add_org_chart.js +0 -160
  108. package/dist/tools/gsheets_add_protected_range.js +0 -127
  109. package/dist/tools/gsheets_add_sheet.js +0 -65
  110. package/dist/tools/gsheets_add_treemap.js +0 -177
  111. package/dist/tools/gsheets_add_waterfall.js +0 -155
  112. package/dist/tools/gsheets_append_data.js +0 -68
  113. package/dist/tools/gsheets_auto_resize.js +0 -75
  114. package/dist/tools/gsheets_batch_clear.js +0 -53
  115. package/dist/tools/gsheets_batch_update.js +0 -81
  116. package/dist/tools/gsheets_clear_data.js +0 -53
  117. package/dist/tools/gsheets_copy_sheet.js +0 -56
  118. package/dist/tools/gsheets_copy_to.js +0 -113
  119. package/dist/tools/gsheets_create_filter.js +0 -81
  120. package/dist/tools/gsheets_create_spreadsheet.js +0 -88
  121. package/dist/tools/gsheets_delete_chart.js +0 -56
  122. package/dist/tools/gsheets_delete_columns.js +0 -69
  123. package/dist/tools/gsheets_delete_named_range.js +0 -56
  124. package/dist/tools/gsheets_delete_protected_range.js +0 -56
  125. package/dist/tools/gsheets_delete_rows.js +0 -69
  126. package/dist/tools/gsheets_delete_sheet.js +0 -56
  127. package/dist/tools/gsheets_duplicate_sheet.js +0 -72
  128. package/dist/tools/gsheets_find_replace.js +0 -124
  129. package/dist/tools/gsheets_format_cells.js +0 -161
  130. package/dist/tools/gsheets_freeze_columns.js +0 -67
  131. package/dist/tools/gsheets_freeze_rows.js +0 -67
  132. package/dist/tools/gsheets_insert_columns.js +0 -69
  133. package/dist/tools/gsheets_insert_rows.js +0 -69
  134. package/dist/tools/gsheets_list_sheets.js +0 -53
  135. package/dist/tools/gsheets_merge_cells.js +0 -85
  136. package/dist/tools/gsheets_read.js +0 -120
  137. package/dist/tools/gsheets_rename_sheet.js +0 -64
  138. package/dist/tools/gsheets_set_data_validation.js +0 -153
  139. package/dist/tools/gsheets_set_number_format.js +0 -116
  140. package/dist/tools/gsheets_sort_range.js +0 -102
  141. package/dist/tools/gsheets_unmerge_cells.js +0 -79
  142. package/dist/tools/gsheets_update_borders.js +0 -212
  143. package/dist/tools/gsheets_update_cell.js +0 -44
  144. package/dist/tools/gsheets_update_chart.js +0 -118
  145. package/dist/tools/gsheets_update_named_range.js +0 -112
  146. package/dist/tools/gsheets_update_protected_range.js +0 -110
  147. package/dist/tools/protection/gsheets_add_conditional_format.js +0 -175
  148. package/dist/tools/protection/gsheets_add_named_range.js +0 -87
  149. package/dist/tools/protection/gsheets_add_protected_range.js +0 -127
  150. package/dist/tools/protection/gsheets_delete_named_range.js +0 -56
  151. package/dist/tools/protection/gsheets_delete_protected_range.js +0 -56
  152. package/dist/tools/protection/gsheets_update_named_range.js +0 -112
  153. package/dist/tools/protection/gsheets_update_protected_range.js +0 -110
  154. /package/dist/tools/drive/{drive_read_file.js → basic/drive_read_file.js} +0 -0
  155. /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
- }