mcp-google-multi 5.3.0 → 5.4.0-beta.1

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.
@@ -1,6 +1,6 @@
1
1
  import { z } from 'zod';
2
2
  import { coerceArray, coerceBoolean, coerceJson } from './_coerce.js';
3
- import { google } from 'googleapis';
3
+ import { sheets as sheetsClient } from '@googleapis/sheets';
4
4
  import { ACCOUNTS } from '../accounts.js';
5
5
  import { getClient } from '../client.js';
6
6
  import { handleGoogleApiError } from './_errors.js';
@@ -17,7 +17,7 @@ export function registerSheetsTools(server) {
17
17
  }, async ({ account, title, sheetTitles }) => {
18
18
  try {
19
19
  const auth = await getClient(account);
20
- const sheets = google.sheets({ version: 'v4', auth });
20
+ const sheets = sheetsClient({ version: 'v4', auth });
21
21
  const requestBody = {
22
22
  properties: { title },
23
23
  };
@@ -49,7 +49,7 @@ export function registerSheetsTools(server) {
49
49
  }, async ({ account, spreadsheetId }) => {
50
50
  try {
51
51
  const auth = await getClient(account);
52
- const sheets = google.sheets({ version: 'v4', auth });
52
+ const sheets = sheetsClient({ version: 'v4', auth });
53
53
  const res = await sheets.spreadsheets.get({
54
54
  spreadsheetId,
55
55
  fields: 'spreadsheetId,properties,sheets.properties,namedRanges,spreadsheetUrl',
@@ -86,7 +86,7 @@ export function registerSheetsTools(server) {
86
86
  }, async ({ account, spreadsheetId, range, valueRenderOption }) => {
87
87
  try {
88
88
  const auth = await getClient(account);
89
- const sheets = google.sheets({ version: 'v4', auth });
89
+ const sheets = sheetsClient({ version: 'v4', auth });
90
90
  const res = await sheets.spreadsheets.values.get({
91
91
  spreadsheetId,
92
92
  range,
@@ -116,7 +116,7 @@ export function registerSheetsTools(server) {
116
116
  }, async ({ account, spreadsheetId, range, values, valueInputOption }) => {
117
117
  try {
118
118
  const auth = await getClient(account);
119
- const sheets = google.sheets({ version: 'v4', auth });
119
+ const sheets = sheetsClient({ version: 'v4', auth });
120
120
  const res = await sheets.spreadsheets.values.update({
121
121
  spreadsheetId,
122
122
  range,
@@ -149,7 +149,7 @@ export function registerSheetsTools(server) {
149
149
  }, async ({ account, spreadsheetId, range, values, valueInputOption }) => {
150
150
  try {
151
151
  const auth = await getClient(account);
152
- const sheets = google.sheets({ version: 'v4', auth });
152
+ const sheets = sheetsClient({ version: 'v4', auth });
153
153
  const res = await sheets.spreadsheets.values.append({
154
154
  spreadsheetId,
155
155
  range,
@@ -180,7 +180,7 @@ export function registerSheetsTools(server) {
180
180
  }, async ({ account, spreadsheetId, range }) => {
181
181
  try {
182
182
  const auth = await getClient(account);
183
- const sheets = google.sheets({ version: 'v4', auth });
183
+ const sheets = sheetsClient({ version: 'v4', auth });
184
184
  const res = await sheets.spreadsheets.values.clear({
185
185
  spreadsheetId,
186
186
  range,
@@ -209,7 +209,7 @@ export function registerSheetsTools(server) {
209
209
  }, async ({ account, spreadsheetId, ranges, valueRenderOption }) => {
210
210
  try {
211
211
  const auth = await getClient(account);
212
- const sheets = google.sheets({ version: 'v4', auth });
212
+ const sheets = sheetsClient({ version: 'v4', auth });
213
213
  const res = await sheets.spreadsheets.values.batchGet({
214
214
  spreadsheetId,
215
215
  ranges,
@@ -242,7 +242,7 @@ export function registerSheetsTools(server) {
242
242
  }, async ({ account, spreadsheetId, data, valueInputOption }) => {
243
243
  try {
244
244
  const auth = await getClient(account);
245
- const sheets = google.sheets({ version: 'v4', auth });
245
+ const sheets = sheetsClient({ version: 'v4', auth });
246
246
  const res = await sheets.spreadsheets.values.batchUpdate({
247
247
  spreadsheetId,
248
248
  requestBody: {
@@ -278,7 +278,7 @@ export function registerSheetsTools(server) {
278
278
  }, async ({ account, spreadsheetId, title, rowCount, columnCount }) => {
279
279
  try {
280
280
  const auth = await getClient(account);
281
- const sheets = google.sheets({ version: 'v4', auth });
281
+ const sheets = sheetsClient({ version: 'v4', auth });
282
282
  const res = await sheets.spreadsheets.batchUpdate({
283
283
  spreadsheetId,
284
284
  requestBody: {
@@ -319,7 +319,7 @@ export function registerSheetsTools(server) {
319
319
  }, async ({ account, spreadsheetId, sheetId }) => {
320
320
  try {
321
321
  const auth = await getClient(account);
322
- const sheets = google.sheets({ version: 'v4', auth });
322
+ const sheets = sheetsClient({ version: 'v4', auth });
323
323
  await sheets.spreadsheets.batchUpdate({
324
324
  spreadsheetId,
325
325
  requestBody: { requests: [{ deleteSheet: { sheetId } }] },
@@ -344,7 +344,7 @@ export function registerSheetsTools(server) {
344
344
  }, async ({ account, spreadsheetId, sourceSheetId, newSheetName, insertSheetIndex }) => {
345
345
  try {
346
346
  const auth = await getClient(account);
347
- const sheets = google.sheets({ version: 'v4', auth });
347
+ const sheets = sheetsClient({ version: 'v4', auth });
348
348
  const res = await sheets.spreadsheets.batchUpdate({
349
349
  spreadsheetId,
350
350
  requestBody: {
@@ -384,7 +384,7 @@ export function registerSheetsTools(server) {
384
384
  }, async ({ account, spreadsheetId, sheetId, title, index, hidden, tabColor, frozenRowCount, frozenColumnCount, rowCount, columnCount }) => {
385
385
  try {
386
386
  const auth = await getClient(account);
387
- const sheets = google.sheets({ version: 'v4', auth });
387
+ const sheets = sheetsClient({ version: 'v4', auth });
388
388
  const properties = { sheetId };
389
389
  const fields = [];
390
390
  if (title !== undefined) {
@@ -479,7 +479,7 @@ export function registerSheetsTools(server) {
479
479
  }, async ({ account, spreadsheetId, range, ...format }) => {
480
480
  try {
481
481
  const auth = await getClient(account);
482
- const sheets = google.sheets({ version: 'v4', auth });
482
+ const sheets = sheetsClient({ version: 'v4', auth });
483
483
  const built = buildCellFormat(format);
484
484
  if (built.fields.length === 0) {
485
485
  return {
@@ -523,7 +523,7 @@ export function registerSheetsTools(server) {
523
523
  }, async ({ account, spreadsheetId, range, top, bottom, left, right, innerHorizontal, innerVertical }) => {
524
524
  try {
525
525
  const auth = await getClient(account);
526
- const sheets = google.sheets({ version: 'v4', auth });
526
+ const sheets = sheetsClient({ version: 'v4', auth });
527
527
  const borders = { range };
528
528
  if (top)
529
529
  borders.top = toBorder(top);
@@ -566,7 +566,7 @@ export function registerSheetsTools(server) {
566
566
  }, async ({ account, spreadsheetId, range, mergeType }) => {
567
567
  try {
568
568
  const auth = await getClient(account);
569
- const sheets = google.sheets({ version: 'v4', auth });
569
+ const sheets = sheetsClient({ version: 'v4', auth });
570
570
  await sheets.spreadsheets.batchUpdate({
571
571
  spreadsheetId,
572
572
  requestBody: {
@@ -591,7 +591,7 @@ export function registerSheetsTools(server) {
591
591
  }, async ({ account, spreadsheetId, range }) => {
592
592
  try {
593
593
  const auth = await getClient(account);
594
- const sheets = google.sheets({ version: 'v4', auth });
594
+ const sheets = sheetsClient({ version: 'v4', auth });
595
595
  await sheets.spreadsheets.batchUpdate({
596
596
  spreadsheetId,
597
597
  requestBody: { requests: [{ unmergeCells: { range } }] },
@@ -641,7 +641,7 @@ export function registerSheetsTools(server) {
641
641
  };
642
642
  }
643
643
  const auth = await getClient(account);
644
- const sheets = google.sheets({ version: 'v4', auth });
644
+ const sheets = sheetsClient({ version: 'v4', auth });
645
645
  const rule = { ranges };
646
646
  if (booleanRule) {
647
647
  const fmt = {};
@@ -705,7 +705,7 @@ export function registerSheetsTools(server) {
705
705
  }, async ({ account, spreadsheetId, range, sortSpecs }) => {
706
706
  try {
707
707
  const auth = await getClient(account);
708
- const sheets = google.sheets({ version: 'v4', auth });
708
+ const sheets = sheetsClient({ version: 'v4', auth });
709
709
  await sheets.spreadsheets.batchUpdate({
710
710
  spreadsheetId,
711
711
  requestBody: {
@@ -737,7 +737,7 @@ export function registerSheetsTools(server) {
737
737
  }, async ({ account, spreadsheetId, range, sortSpecs, filterSpecs }) => {
738
738
  try {
739
739
  const auth = await getClient(account);
740
- const sheets = google.sheets({ version: 'v4', auth });
740
+ const sheets = sheetsClient({ version: 'v4', auth });
741
741
  const filter = { range };
742
742
  if (sortSpecs)
743
743
  filter.sortSpecs = sortSpecs;
@@ -779,7 +779,7 @@ export function registerSheetsTools(server) {
779
779
  }, async ({ account, spreadsheetId, sheetId }) => {
780
780
  try {
781
781
  const auth = await getClient(account);
782
- const sheets = google.sheets({ version: 'v4', auth });
782
+ const sheets = sheetsClient({ version: 'v4', auth });
783
783
  await sheets.spreadsheets.batchUpdate({
784
784
  spreadsheetId,
785
785
  requestBody: { requests: [{ clearBasicFilter: { sheetId } }] },
@@ -810,7 +810,7 @@ export function registerSheetsTools(server) {
810
810
  }, async ({ account, spreadsheetId, find, replacement, scope, sheetId, range, matchCase, matchEntireCell, searchByRegex, includeFormulas }) => {
811
811
  try {
812
812
  const auth = await getClient(account);
813
- const sheets = google.sheets({ version: 'v4', auth });
813
+ const sheets = sheetsClient({ version: 'v4', auth });
814
814
  const findReplace = {
815
815
  find,
816
816
  replacement,
@@ -866,7 +866,7 @@ export function registerSheetsTools(server) {
866
866
  }, async ({ account, spreadsheetId, sheetId, dimension, startIndex, endIndex }) => {
867
867
  try {
868
868
  const auth = await getClient(account);
869
- const sheets = google.sheets({ version: 'v4', auth });
869
+ const sheets = sheetsClient({ version: 'v4', auth });
870
870
  const dimensions = { sheetId, dimension };
871
871
  if (startIndex !== undefined)
872
872
  dimensions.startIndex = startIndex;
@@ -898,7 +898,7 @@ export function registerSheetsTools(server) {
898
898
  }, async ({ account, spreadsheetId, sheetId, dimension, startIndex, endIndex, inheritFromBefore }) => {
899
899
  try {
900
900
  const auth = await getClient(account);
901
- const sheets = google.sheets({ version: 'v4', auth });
901
+ const sheets = sheetsClient({ version: 'v4', auth });
902
902
  await sheets.spreadsheets.batchUpdate({
903
903
  spreadsheetId,
904
904
  requestBody: {
@@ -931,7 +931,7 @@ export function registerSheetsTools(server) {
931
931
  }, async ({ account, spreadsheetId, sheetId, dimension, startIndex, endIndex }) => {
932
932
  try {
933
933
  const auth = await getClient(account);
934
- const sheets = google.sheets({ version: 'v4', auth });
934
+ const sheets = sheetsClient({ version: 'v4', auth });
935
935
  await sheets.spreadsheets.batchUpdate({
936
936
  spreadsheetId,
937
937
  requestBody: {
@@ -966,7 +966,7 @@ export function registerSheetsTools(server) {
966
966
  }, async ({ account, spreadsheetId, range, conditionType, conditionValues, inputMessage, strict, showCustomUi }) => {
967
967
  try {
968
968
  const auth = await getClient(account);
969
- const sheets = google.sheets({ version: 'v4', auth });
969
+ const sheets = sheetsClient({ version: 'v4', auth });
970
970
  const rule = {
971
971
  condition: {
972
972
  type: conditionType,
@@ -1004,7 +1004,7 @@ export function registerSheetsTools(server) {
1004
1004
  }, async ({ account, spreadsheetId, name, range }) => {
1005
1005
  try {
1006
1006
  const auth = await getClient(account);
1007
- const sheets = google.sheets({ version: 'v4', auth });
1007
+ const sheets = sheetsClient({ version: 'v4', auth });
1008
1008
  const res = await sheets.spreadsheets.batchUpdate({
1009
1009
  spreadsheetId,
1010
1010
  requestBody: {
@@ -1030,7 +1030,7 @@ export function registerSheetsTools(server) {
1030
1030
  }, async ({ account, spreadsheetId, namedRangeId }) => {
1031
1031
  try {
1032
1032
  const auth = await getClient(account);
1033
- const sheets = google.sheets({ version: 'v4', auth });
1033
+ const sheets = sheetsClient({ version: 'v4', auth });
1034
1034
  await sheets.spreadsheets.batchUpdate({
1035
1035
  spreadsheetId,
1036
1036
  requestBody: { requests: [{ deleteNamedRange: { namedRangeId } }] },
@@ -1054,7 +1054,7 @@ export function registerSheetsTools(server) {
1054
1054
  }, async ({ account, spreadsheetId, ranges }) => {
1055
1055
  try {
1056
1056
  const auth = await getClient(account);
1057
- const sheets = google.sheets({ version: 'v4', auth });
1057
+ const sheets = sheetsClient({ version: 'v4', auth });
1058
1058
  const res = await sheets.spreadsheets.values.batchClear({
1059
1059
  spreadsheetId,
1060
1060
  requestBody: { ranges },
@@ -1082,7 +1082,7 @@ export function registerSheetsTools(server) {
1082
1082
  }, async ({ account, spreadsheetId, requests, includeSpreadsheetInResponse, responseRanges, responseIncludeGridData }) => {
1083
1083
  try {
1084
1084
  const auth = await getClient(account);
1085
- const sheets = google.sheets({ version: 'v4', auth });
1085
+ const sheets = sheetsClient({ version: 'v4', auth });
1086
1086
  const res = await sheets.spreadsheets.batchUpdate({
1087
1087
  spreadsheetId,
1088
1088
  requestBody: {
@@ -1,5 +1,5 @@
1
1
  import { z } from 'zod';
2
- import { google } from 'googleapis';
2
+ import { slides as slidesClient } from '@googleapis/slides';
3
3
  import { ACCOUNTS } from '../accounts.js';
4
4
  import { getClient } from '../client.js';
5
5
  import { handleGoogleApiError } from './_errors.js';
@@ -17,7 +17,7 @@ export function registerSlidesTools(server) {
17
17
  }, async ({ account, title }) => {
18
18
  try {
19
19
  const auth = await getClient(account);
20
- const slides = google.slides({ version: 'v1', auth });
20
+ const slides = slidesClient({ version: 'v1', auth });
21
21
  const res = await slides.presentations.create({ requestBody: { title } });
22
22
  return {
23
23
  content: [{ type: 'text', text: JSON.stringify({
@@ -42,7 +42,7 @@ export function registerSlidesTools(server) {
42
42
  }, async ({ account, presentationId, full }) => {
43
43
  try {
44
44
  const auth = await getClient(account);
45
- const slides = google.slides({ version: 'v1', auth });
45
+ const slides = slidesClient({ version: 'v1', auth });
46
46
  const res = await slides.presentations.get({ presentationId });
47
47
  const payload = full ? res.data : summarizePresentation(res.data);
48
48
  return {
@@ -63,7 +63,7 @@ export function registerSlidesTools(server) {
63
63
  }, async ({ account, presentationId, pageObjectId }) => {
64
64
  try {
65
65
  const auth = await getClient(account);
66
- const slides = google.slides({ version: 'v1', auth });
66
+ const slides = slidesClient({ version: 'v1', auth });
67
67
  const res = await slides.presentations.pages.get({ presentationId, pageObjectId });
68
68
  return {
69
69
  content: [{ type: 'text', text: JSON.stringify(res.data, null, 2) }],
@@ -86,7 +86,7 @@ export function registerSlidesTools(server) {
86
86
  }, async ({ account, presentationId, pageObjectId, mimeType, thumbnailSize }) => {
87
87
  try {
88
88
  const auth = await getClient(account);
89
- const slides = google.slides({ version: 'v1', auth });
89
+ const slides = slidesClient({ version: 'v1', auth });
90
90
  const res = await slides.presentations.pages.getThumbnail({
91
91
  presentationId,
92
92
  pageObjectId,
@@ -115,7 +115,7 @@ export function registerSlidesTools(server) {
115
115
  }, async ({ account, presentationId, requests, writeControl }) => {
116
116
  try {
117
117
  const auth = await getClient(account);
118
- const slides = google.slides({ version: 'v1', auth });
118
+ const slides = slidesClient({ version: 'v1', auth });
119
119
  const res = await slides.presentations.batchUpdate({
120
120
  presentationId,
121
121
  requestBody: {
@@ -1,6 +1,6 @@
1
1
  import { z } from 'zod';
2
2
  import { coerceBoolean } from './_coerce.js';
3
- import { google } from 'googleapis';
3
+ import { tasks as tasksClient } from '@googleapis/tasks';
4
4
  import { ACCOUNTS } from '../accounts.js';
5
5
  import { getClient } from '../client.js';
6
6
  import { handleGoogleApiError } from './_errors.js';
@@ -17,7 +17,7 @@ export function registerTasksTools(server) {
17
17
  }, async ({ account, maxResults, pageToken }) => {
18
18
  try {
19
19
  const auth = await getClient(account);
20
- const tasks = google.tasks({ version: 'v1', auth });
20
+ const tasks = tasksClient({ version: 'v1', auth });
21
21
  const res = await tasks.tasklists.list({
22
22
  maxResults: maxResults ?? 100,
23
23
  pageToken,
@@ -39,7 +39,7 @@ export function registerTasksTools(server) {
39
39
  }, async ({ account, tasklistId }) => {
40
40
  try {
41
41
  const auth = await getClient(account);
42
- const tasks = google.tasks({ version: 'v1', auth });
42
+ const tasks = tasksClient({ version: 'v1', auth });
43
43
  const res = await tasks.tasklists.get({ tasklist: tasklistId });
44
44
  return {
45
45
  content: [{ type: 'text', text: JSON.stringify(res.data, null, 2) }],
@@ -58,7 +58,7 @@ export function registerTasksTools(server) {
58
58
  }, async ({ account, title }) => {
59
59
  try {
60
60
  const auth = await getClient(account);
61
- const tasks = google.tasks({ version: 'v1', auth });
61
+ const tasks = tasksClient({ version: 'v1', auth });
62
62
  const res = await tasks.tasklists.insert({
63
63
  requestBody: { title },
64
64
  });
@@ -80,7 +80,7 @@ export function registerTasksTools(server) {
80
80
  }, async ({ account, tasklistId, title }) => {
81
81
  try {
82
82
  const auth = await getClient(account);
83
- const tasks = google.tasks({ version: 'v1', auth });
83
+ const tasks = tasksClient({ version: 'v1', auth });
84
84
  const res = await tasks.tasklists.patch({
85
85
  tasklist: tasklistId,
86
86
  requestBody: { title },
@@ -102,7 +102,7 @@ export function registerTasksTools(server) {
102
102
  }, async ({ account, tasklistId }) => {
103
103
  try {
104
104
  const auth = await getClient(account);
105
- const tasks = google.tasks({ version: 'v1', auth });
105
+ const tasks = tasksClient({ version: 'v1', auth });
106
106
  await tasks.tasklists.delete({ tasklist: tasklistId });
107
107
  return {
108
108
  content: [{ type: 'text', text: JSON.stringify({ deleted: true, tasklistId }, null, 2) }],
@@ -133,7 +133,7 @@ export function registerTasksTools(server) {
133
133
  }, async ({ account, tasklistId, ...params }) => {
134
134
  try {
135
135
  const auth = await getClient(account);
136
- const tasks = google.tasks({ version: 'v1', auth });
136
+ const tasks = tasksClient({ version: 'v1', auth });
137
137
  const res = await tasks.tasks.list({
138
138
  tasklist: tasklistId,
139
139
  ...params,
@@ -156,7 +156,7 @@ export function registerTasksTools(server) {
156
156
  }, async ({ account, tasklistId, taskId }) => {
157
157
  try {
158
158
  const auth = await getClient(account);
159
- const tasks = google.tasks({ version: 'v1', auth });
159
+ const tasks = tasksClient({ version: 'v1', auth });
160
160
  const res = await tasks.tasks.get({ tasklist: tasklistId, task: taskId });
161
161
  return {
162
162
  content: [{ type: 'text', text: JSON.stringify(res.data, null, 2) }],
@@ -181,7 +181,7 @@ export function registerTasksTools(server) {
181
181
  }, async ({ account, tasklistId, title, notes, due, status, parent, previous }) => {
182
182
  try {
183
183
  const auth = await getClient(account);
184
- const tasks = google.tasks({ version: 'v1', auth });
184
+ const tasks = tasksClient({ version: 'v1', auth });
185
185
  const requestBody = { title };
186
186
  if (notes !== undefined)
187
187
  requestBody.notes = notes;
@@ -217,7 +217,7 @@ export function registerTasksTools(server) {
217
217
  }, async ({ account, tasklistId, taskId, title, notes, due, status }) => {
218
218
  try {
219
219
  const auth = await getClient(account);
220
- const tasks = google.tasks({ version: 'v1', auth });
220
+ const tasks = tasksClient({ version: 'v1', auth });
221
221
  const requestBody = {};
222
222
  if (title !== undefined)
223
223
  requestBody.title = title;
@@ -253,7 +253,7 @@ export function registerTasksTools(server) {
253
253
  }, async ({ account, tasklistId, taskId }) => {
254
254
  try {
255
255
  const auth = await getClient(account);
256
- const tasks = google.tasks({ version: 'v1', auth });
256
+ const tasks = tasksClient({ version: 'v1', auth });
257
257
  await tasks.tasks.delete({ tasklist: tasklistId, task: taskId });
258
258
  return {
259
259
  content: [{ type: 'text', text: JSON.stringify({ deleted: true, taskId }, null, 2) }],
@@ -276,7 +276,7 @@ export function registerTasksTools(server) {
276
276
  }, async ({ account, tasklistId, taskId, parent, previous, destinationTasklist }) => {
277
277
  try {
278
278
  const auth = await getClient(account);
279
- const tasks = google.tasks({ version: 'v1', auth });
279
+ const tasks = tasksClient({ version: 'v1', auth });
280
280
  const res = await tasks.tasks.move({
281
281
  tasklist: tasklistId,
282
282
  task: taskId,
@@ -301,7 +301,7 @@ export function registerTasksTools(server) {
301
301
  }, async ({ account, tasklistId }) => {
302
302
  try {
303
303
  const auth = await getClient(account);
304
- const tasks = google.tasks({ version: 'v1', auth });
304
+ const tasks = tasksClient({ version: 'v1', auth });
305
305
  await tasks.tasks.clear({ tasklist: tasklistId });
306
306
  return {
307
307
  content: [{ type: 'text', text: JSON.stringify({ cleared: true, tasklistId }, null, 2) }],
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mcp-google-multi",
3
- "version": "5.3.0",
3
+ "version": "5.4.0-beta.1",
4
4
  "description": "Local MCP server for Google Workspace (Gmail, Drive, Calendar, Sheets, Docs, Contacts, Tasks, Meet, Search Console, +Forms/Chat/Admin) across multiple accounts — OAuth-only, encrypted token storage, deny-by-default writes.",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -60,19 +60,31 @@
60
60
  "gen:coverage": "tsx scripts/gen-coverage.ts"
61
61
  },
62
62
  "dependencies": {
63
+ "@googleapis/admin": "^32.0.0",
64
+ "@googleapis/calendar": "^16.0.0",
65
+ "@googleapis/chat": "^46.0.0",
66
+ "@googleapis/docs": "^10.0.0",
67
+ "@googleapis/drive": "^21.0.0",
68
+ "@googleapis/forms": "^7.0.0",
69
+ "@googleapis/gmail": "^18.0.0",
70
+ "@googleapis/meet": "^5.0.0",
71
+ "@googleapis/people": "^8.0.0",
72
+ "@googleapis/searchconsole": "^7.0.0",
73
+ "@googleapis/sheets": "^14.0.0",
74
+ "@googleapis/slides": "^6.0.0",
75
+ "@googleapis/tasks": "^13.0.0",
76
+ "@googleapis/webmasters": "^4.0.0",
63
77
  "@modelcontextprotocol/sdk": "^1.29.0",
64
78
  "dotenv": "^17.4.0",
65
- "googleapis": "^171.4.0",
79
+ "googleapis-common": "^8.0.3",
66
80
  "mime-types": "^3.0.2",
67
81
  "open": "^11.0.0",
68
- "server-destroy": "^1.0.1",
69
82
  "zod": "^4.3.6"
70
83
  },
71
84
  "devDependencies": {
72
85
  "@eslint/js": "^10.0.1",
73
86
  "@types/mime-types": "^3.0.1",
74
87
  "@types/node": "^25.6.0",
75
- "@types/server-destroy": "^1.0.3",
76
88
  "eslint": "^10.2.1",
77
89
  "semantic-release": "^25.0.3",
78
90
  "tsx": "^4.23.1",