@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,87 +0,0 @@
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
- }
@@ -1,160 +0,0 @@
1
- import { google } from "googleapis";
2
- export const schema = {
3
- name: "gsheets_add_org_chart",
4
- description: "Add an organizational chart to a spreadsheet (displays hierarchical relationships)",
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 where the chart will be placed",
15
- },
16
- title: {
17
- type: "string",
18
- description: "Chart title (optional)",
19
- },
20
- dataSheetId: {
21
- type: "number",
22
- description: "The sheet ID containing the data",
23
- },
24
- dataStartRow: {
25
- type: "number",
26
- description: "Starting row of data range (0-based)",
27
- },
28
- dataEndRow: {
29
- type: "number",
30
- description: "Ending row of data range (exclusive, 0-based)",
31
- },
32
- labelsColumn: {
33
- type: "number",
34
- description: "Column index for node labels (0-based)",
35
- },
36
- parentLabelsColumn: {
37
- type: "number",
38
- description: "Column index for parent labels (0-based, optional for root nodes)",
39
- },
40
- tooltipsColumn: {
41
- type: "number",
42
- description: "Column index for tooltips (0-based, optional)",
43
- },
44
- position: {
45
- type: "object",
46
- properties: {
47
- overlayRow: {
48
- type: "number",
49
- description: "Row position for chart overlay (0-based)",
50
- },
51
- overlayColumn: {
52
- type: "number",
53
- description: "Column position for chart overlay (0-based)",
54
- },
55
- },
56
- description: "Chart position (optional)",
57
- },
58
- },
59
- required: ["spreadsheetId", "sheetId", "dataSheetId", "dataStartRow", "dataEndRow", "labelsColumn"],
60
- },
61
- };
62
- export async function addOrgChart(args) {
63
- try {
64
- const sheets = google.sheets("v4");
65
- const orgChart = {
66
- labels: {
67
- sourceRange: {
68
- sources: [
69
- {
70
- sheetId: args.dataSheetId,
71
- startRowIndex: args.dataStartRow,
72
- endRowIndex: args.dataEndRow,
73
- startColumnIndex: args.labelsColumn,
74
- endColumnIndex: args.labelsColumn + 1,
75
- },
76
- ],
77
- },
78
- },
79
- };
80
- if (args.parentLabelsColumn !== undefined) {
81
- orgChart.parentLabels = {
82
- sourceRange: {
83
- sources: [
84
- {
85
- sheetId: args.dataSheetId,
86
- startRowIndex: args.dataStartRow,
87
- endRowIndex: args.dataEndRow,
88
- startColumnIndex: args.parentLabelsColumn,
89
- endColumnIndex: args.parentLabelsColumn + 1,
90
- },
91
- ],
92
- },
93
- };
94
- }
95
- if (args.tooltipsColumn !== undefined) {
96
- orgChart.tooltips = {
97
- sourceRange: {
98
- sources: [
99
- {
100
- sheetId: args.dataSheetId,
101
- startRowIndex: args.dataStartRow,
102
- endRowIndex: args.dataEndRow,
103
- startColumnIndex: args.tooltipsColumn,
104
- endColumnIndex: args.tooltipsColumn + 1,
105
- },
106
- ],
107
- },
108
- };
109
- }
110
- const chartSpec = {
111
- title: args.title || "Organizational Chart",
112
- orgChart,
113
- };
114
- const position = {
115
- overlayPosition: {
116
- anchorCell: {
117
- sheetId: args.sheetId,
118
- rowIndex: args.position?.overlayRow || 0,
119
- columnIndex: args.position?.overlayColumn || 0,
120
- },
121
- },
122
- };
123
- const response = await sheets.spreadsheets.batchUpdate({
124
- spreadsheetId: args.spreadsheetId,
125
- requestBody: {
126
- requests: [
127
- {
128
- addChart: {
129
- chart: {
130
- spec: chartSpec,
131
- position,
132
- },
133
- },
134
- },
135
- ],
136
- },
137
- });
138
- const chartId = response.data.replies?.[0]?.addChart?.chart?.chartId;
139
- return {
140
- content: [
141
- {
142
- type: "text",
143
- text: `Successfully created organizational chart. Chart ID: ${chartId}`,
144
- },
145
- ],
146
- isError: false,
147
- };
148
- }
149
- catch (error) {
150
- return {
151
- content: [
152
- {
153
- type: "text",
154
- text: `Error creating organizational chart: ${error.message}`,
155
- },
156
- ],
157
- isError: true,
158
- };
159
- }
160
- }
@@ -1,127 +0,0 @@
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
- }
@@ -1,65 +0,0 @@
1
- import { google } from "googleapis";
2
- export const schema = {
3
- name: "gsheets_add_sheet",
4
- description: "Add a new sheet (tab) to a Google Spreadsheet",
5
- inputSchema: {
6
- type: "object",
7
- properties: {
8
- spreadsheetId: {
9
- type: "string",
10
- description: "The ID of the spreadsheet",
11
- },
12
- title: {
13
- type: "string",
14
- description: "The name of the new sheet",
15
- },
16
- index: {
17
- type: "number",
18
- description: "Optional position index (0-based) where the sheet should be inserted",
19
- },
20
- },
21
- required: ["spreadsheetId", "title"],
22
- },
23
- };
24
- export async function addSheet(args) {
25
- try {
26
- const sheets = google.sheets("v4");
27
- const request = {
28
- addSheet: {
29
- properties: {
30
- title: args.title,
31
- },
32
- },
33
- };
34
- if (args.index !== undefined) {
35
- request.addSheet.properties.index = args.index;
36
- }
37
- const response = await sheets.spreadsheets.batchUpdate({
38
- spreadsheetId: args.spreadsheetId,
39
- requestBody: {
40
- requests: [request],
41
- },
42
- });
43
- const addedSheet = response.data.replies?.[0]?.addSheet?.properties;
44
- return {
45
- content: [
46
- {
47
- type: "text",
48
- text: `Successfully added sheet "${addedSheet?.title}" (ID: ${addedSheet?.sheetId}, Index: ${addedSheet?.index})`,
49
- },
50
- ],
51
- isError: false,
52
- };
53
- }
54
- catch (error) {
55
- return {
56
- content: [
57
- {
58
- type: "text",
59
- text: `Error adding sheet: ${error.message}`,
60
- },
61
- ],
62
- isError: true,
63
- };
64
- }
65
- }
@@ -1,177 +0,0 @@
1
- import { google } from "googleapis";
2
- export const schema = {
3
- name: "gsheets_add_treemap",
4
- description: "Add a treemap chart to a spreadsheet (displays hierarchical data as nested rectangles)",
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 where the chart will be placed",
15
- },
16
- title: {
17
- type: "string",
18
- description: "Chart title (optional)",
19
- },
20
- dataSheetId: {
21
- type: "number",
22
- description: "The sheet ID containing the data",
23
- },
24
- dataStartRow: {
25
- type: "number",
26
- description: "Starting row of data range (0-based)",
27
- },
28
- dataEndRow: {
29
- type: "number",
30
- description: "Ending row of data range (exclusive, 0-based)",
31
- },
32
- labelsColumn: {
33
- type: "number",
34
- description: "Column index for labels (0-based)",
35
- },
36
- parentLabelsColumn: {
37
- type: "number",
38
- description: "Column index for parent labels (0-based, optional)",
39
- },
40
- sizeColumn: {
41
- type: "number",
42
- description: "Column index for size values (0-based)",
43
- },
44
- colorColumn: {
45
- type: "number",
46
- description: "Column index for color values (0-based, optional)",
47
- },
48
- position: {
49
- type: "object",
50
- properties: {
51
- overlayRow: {
52
- type: "number",
53
- description: "Row position for chart overlay (0-based)",
54
- },
55
- overlayColumn: {
56
- type: "number",
57
- description: "Column position for chart overlay (0-based)",
58
- },
59
- },
60
- description: "Chart position (optional)",
61
- },
62
- },
63
- required: ["spreadsheetId", "sheetId", "dataSheetId", "dataStartRow", "dataEndRow", "labelsColumn", "sizeColumn"],
64
- },
65
- };
66
- export async function addTreemap(args) {
67
- try {
68
- const sheets = google.sheets("v4");
69
- const treemapChart = {
70
- labels: {
71
- sourceRange: {
72
- sources: [
73
- {
74
- sheetId: args.dataSheetId,
75
- startRowIndex: args.dataStartRow,
76
- endRowIndex: args.dataEndRow,
77
- startColumnIndex: args.labelsColumn,
78
- endColumnIndex: args.labelsColumn + 1,
79
- },
80
- ],
81
- },
82
- },
83
- sizeData: {
84
- sourceRange: {
85
- sources: [
86
- {
87
- sheetId: args.dataSheetId,
88
- startRowIndex: args.dataStartRow,
89
- endRowIndex: args.dataEndRow,
90
- startColumnIndex: args.sizeColumn,
91
- endColumnIndex: args.sizeColumn + 1,
92
- },
93
- ],
94
- },
95
- },
96
- };
97
- if (args.parentLabelsColumn !== undefined) {
98
- treemapChart.parentLabels = {
99
- sourceRange: {
100
- sources: [
101
- {
102
- sheetId: args.dataSheetId,
103
- startRowIndex: args.dataStartRow,
104
- endRowIndex: args.dataEndRow,
105
- startColumnIndex: args.parentLabelsColumn,
106
- endColumnIndex: args.parentLabelsColumn + 1,
107
- },
108
- ],
109
- },
110
- };
111
- }
112
- if (args.colorColumn !== undefined) {
113
- treemapChart.colorData = {
114
- sourceRange: {
115
- sources: [
116
- {
117
- sheetId: args.dataSheetId,
118
- startRowIndex: args.dataStartRow,
119
- endRowIndex: args.dataEndRow,
120
- startColumnIndex: args.colorColumn,
121
- endColumnIndex: args.colorColumn + 1,
122
- },
123
- ],
124
- },
125
- };
126
- }
127
- const chartSpec = {
128
- title: args.title || "Treemap Chart",
129
- treemapChart,
130
- };
131
- const position = {
132
- overlayPosition: {
133
- anchorCell: {
134
- sheetId: args.sheetId,
135
- rowIndex: args.position?.overlayRow || 0,
136
- columnIndex: args.position?.overlayColumn || 0,
137
- },
138
- },
139
- };
140
- const response = await sheets.spreadsheets.batchUpdate({
141
- spreadsheetId: args.spreadsheetId,
142
- requestBody: {
143
- requests: [
144
- {
145
- addChart: {
146
- chart: {
147
- spec: chartSpec,
148
- position,
149
- },
150
- },
151
- },
152
- ],
153
- },
154
- });
155
- const chartId = response.data.replies?.[0]?.addChart?.chart?.chartId;
156
- return {
157
- content: [
158
- {
159
- type: "text",
160
- text: `Successfully created treemap chart. Chart ID: ${chartId}`,
161
- },
162
- ],
163
- isError: false,
164
- };
165
- }
166
- catch (error) {
167
- return {
168
- content: [
169
- {
170
- type: "text",
171
- text: `Error creating treemap chart: ${error.message}`,
172
- },
173
- ],
174
- isError: true,
175
- };
176
- }
177
- }