@aaronsb/google-workspace-mcp 2.6.1 → 2.7.0

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 (68) hide show
  1. package/README.md +2 -2
  2. package/build/__tests__/factory/calendar-patch.test.js +79 -0
  3. package/build/__tests__/factory/calendar-patch.test.js.map +1 -1
  4. package/build/__tests__/factory/drive-patch.test.js +224 -0
  5. package/build/__tests__/factory/drive-patch.test.js.map +1 -1
  6. package/build/__tests__/factory/sheets-patch.test.js +71 -6
  7. package/build/__tests__/factory/sheets-patch.test.js.map +1 -1
  8. package/build/__tests__/server/formatting/html-sanitize.test.d.ts +7 -0
  9. package/build/__tests__/server/formatting/html-sanitize.test.js +174 -0
  10. package/build/__tests__/server/formatting/html-sanitize.test.js.map +1 -0
  11. package/build/__tests__/server/formatting/markdown.test.js +55 -0
  12. package/build/__tests__/server/formatting/markdown.test.js.map +1 -1
  13. package/build/__tests__/server/handlers/calendar.test.js +2 -1
  14. package/build/__tests__/server/handlers/calendar.test.js.map +1 -1
  15. package/build/executor/gws.js +41 -20
  16. package/build/executor/gws.js.map +1 -1
  17. package/build/factory/generator.d.ts +11 -3
  18. package/build/factory/generator.js +41 -16
  19. package/build/factory/generator.js.map +1 -1
  20. package/build/factory/manifest/README.md +12 -0
  21. package/build/factory/manifest/calendar.yaml +204 -0
  22. package/build/factory/manifest/docs.yaml +77 -0
  23. package/build/factory/manifest/drive.yaml +314 -0
  24. package/build/factory/manifest/gmail.yaml +272 -0
  25. package/build/factory/manifest/meet.yaml +159 -0
  26. package/build/factory/manifest/sheets.yaml +225 -0
  27. package/build/factory/manifest/tasks.yaml +137 -0
  28. package/build/factory/registry.d.ts +3 -3
  29. package/build/factory/registry.js +5 -5
  30. package/build/factory/registry.js.map +1 -1
  31. package/build/factory/types.d.ts +6 -0
  32. package/build/server/formatting/html-sanitize.d.ts +40 -0
  33. package/build/server/formatting/html-sanitize.js +146 -0
  34. package/build/server/formatting/html-sanitize.js.map +1 -0
  35. package/build/server/formatting/markdown.d.ts +13 -3
  36. package/build/server/formatting/markdown.js +33 -6
  37. package/build/server/formatting/markdown.js.map +1 -1
  38. package/build/server/handlers/calendar.js +1 -1
  39. package/build/server/handlers/calendar.js.map +1 -1
  40. package/build/server/scratchpad/__tests__/docs-sync-integration.test.d.ts +11 -0
  41. package/build/server/scratchpad/__tests__/docs-sync-integration.test.js +187 -0
  42. package/build/server/scratchpad/__tests__/docs-sync-integration.test.js.map +1 -0
  43. package/build/server/scratchpad/__tests__/docs-sync.test.d.ts +16 -0
  44. package/build/server/scratchpad/__tests__/docs-sync.test.js +213 -0
  45. package/build/server/scratchpad/__tests__/docs-sync.test.js.map +1 -0
  46. package/build/server/scratchpad/adapters/import-doc.js +6 -3
  47. package/build/server/scratchpad/adapters/import-doc.js.map +1 -1
  48. package/build/server/scratchpad/adapters/send-calendar.js +1 -1
  49. package/build/server/scratchpad/adapters/send-calendar.js.map +1 -1
  50. package/build/server/scratchpad/docs-sync.d.ts +65 -0
  51. package/build/server/scratchpad/docs-sync.js +191 -0
  52. package/build/server/scratchpad/docs-sync.js.map +1 -0
  53. package/build/server/scratchpad/handler.js +95 -14
  54. package/build/server/scratchpad/handler.js.map +1 -1
  55. package/build/server/scratchpad/manager.d.ts +7 -0
  56. package/build/server/scratchpad/manager.js.map +1 -1
  57. package/build/services/calendar/patch.js +72 -1
  58. package/build/services/calendar/patch.js.map +1 -1
  59. package/build/services/drive/patch.js +170 -0
  60. package/build/services/drive/patch.js.map +1 -1
  61. package/build/services/gmail/patch.js +7 -2
  62. package/build/services/gmail/patch.js.map +1 -1
  63. package/build/services/sheets/patch.js +57 -6
  64. package/build/services/sheets/patch.js.map +1 -1
  65. package/build/version.d.ts +1 -1
  66. package/build/version.js +1 -1
  67. package/package.json +4 -2
  68. package/build/factory/manifest.yaml +0 -1383
@@ -1,1383 +0,0 @@
1
- # Service manifest — declarative registry for the tool factory (ADR-300).
2
- # Each entry produces one MCP tool via the generator.
3
- # gws 0.13.3 — 7 services, 63 operations
4
- #
5
- # Note: People (contacts) are supported by gws but excluded here
6
- # because gws auth login doesn't offer contacts.readonly scope.
7
- # See https://github.com/googleworkspace/cli/issues/556
8
- # Meet scopes resolved — use `gws auth login -s ...,meet` to authorize.
9
-
10
- services:
11
- gmail:
12
- tool_name: manage_email
13
- description: "Search, read, send, forward, or manage emails in a Google Workspace account. Supports Gmail search syntax."
14
- requires_email: true
15
- gws_service: gmail
16
- operations:
17
-
18
- # --- Core message operations ---
19
-
20
- search:
21
- type: list
22
- description: "find emails by query"
23
- resource: users.messages.list
24
- params:
25
- query:
26
- type: string
27
- description: 'Gmail search query (e.g. "from:alice subject:meeting has:attachment")'
28
- maps_to: q
29
- maxResults:
30
- type: number
31
- description: "Max results (default: 10, max: 50)"
32
- default: 10
33
- max: 50
34
- defaults:
35
- userId: me
36
- hydration:
37
- resource: users.messages.get
38
- format: metadata
39
- headers: [From, Subject, Date]
40
-
41
- read:
42
- type: detail
43
- description: "get full email by ID"
44
- resource: users.messages.get
45
- params:
46
- messageId:
47
- type: string
48
- description: "Email message ID"
49
- required: true
50
- maps_to: id
51
- defaults:
52
- userId: me
53
-
54
- send:
55
- type: action
56
- description: "compose and send a new email (creates draft when attachments present, 35MB attachment limit via upload endpoint)"
57
- helper: "+send"
58
- params:
59
- to:
60
- type: string
61
- description: "Recipient email(s), comma-separated"
62
- required: true
63
- subject:
64
- type: string
65
- description: "Email subject line"
66
- required: true
67
- body:
68
- type: string
69
- description: "Email body text"
70
- required: true
71
- cc:
72
- type: string
73
- description: "CC email(s), comma-separated"
74
- bcc:
75
- type: string
76
- description: "BCC email(s), comma-separated"
77
- attachments:
78
- type: string
79
- description: "Workspace filenames to attach, comma-separated (files must exist in workspace via manage_workspace). Creates draft when present."
80
- html:
81
- type: boolean
82
- description: "Treat body as HTML content (default: plain text)"
83
- draft:
84
- type: boolean
85
- description: "Save as draft instead of sending (default: false, forced true when attachments present)"
86
- cli_args:
87
- to: "--to"
88
- subject: "--subject"
89
- body: "--body"
90
- cc: "--cc"
91
- bcc: "--bcc"
92
-
93
- reply:
94
- type: action
95
- description: "reply to a message (thread-aware)"
96
- helper: "+reply"
97
- params:
98
- messageId:
99
- type: string
100
- description: "Message ID to reply to"
101
- required: true
102
- body:
103
- type: string
104
- description: "Reply body text"
105
- required: true
106
- cli_args:
107
- messageId: "--message-id"
108
- body: "--body"
109
-
110
- replyAll:
111
- type: action
112
- description: "reply-all to a message (thread-aware, includes all recipients)"
113
- helper: "+reply-all"
114
- params:
115
- messageId:
116
- type: string
117
- description: "Message ID to reply to"
118
- required: true
119
- body:
120
- type: string
121
- description: "Reply body text"
122
- required: true
123
- cc:
124
- type: string
125
- description: "Additional CC email(s), comma-separated"
126
- cli_args:
127
- messageId: "--message-id"
128
- body: "--body"
129
- cc: "--cc"
130
-
131
- forward:
132
- type: action
133
- description: "forward a message to new recipients (includes original attachments by default)"
134
- helper: "+forward"
135
- params:
136
- messageId:
137
- type: string
138
- description: "Message ID to forward"
139
- required: true
140
- to:
141
- type: string
142
- description: "Recipient email(s), comma-separated"
143
- required: true
144
- body:
145
- type: string
146
- description: "Optional note to prepend above forwarded message"
147
- cli_args:
148
- messageId: "--message-id"
149
- to: "--to"
150
- body: "--body"
151
-
152
- # --- Inbox management ---
153
-
154
- triage:
155
- type: list
156
- description: "unread inbox summary (sender, subject, date)"
157
- helper: "+triage"
158
-
159
- trash:
160
- type: action
161
- description: "move a message to trash"
162
- resource: users.messages.trash
163
- params:
164
- messageId:
165
- type: string
166
- description: "Message ID to trash"
167
- required: true
168
- maps_to: id
169
- defaults:
170
- userId: me
171
-
172
- untrash:
173
- type: action
174
- description: "restore a message from trash"
175
- resource: users.messages.untrash
176
- params:
177
- messageId:
178
- type: string
179
- description: "Message ID to restore"
180
- required: true
181
- maps_to: id
182
- defaults:
183
- userId: me
184
-
185
- getAttachment:
186
- type: detail
187
- description: "download an email attachment to workspace directory (use read first to see attachment list)"
188
- resource: users.messages.attachments.get
189
- params:
190
- messageId:
191
- type: string
192
- description: "Message ID containing the attachment"
193
- required: true
194
- filename:
195
- type: string
196
- description: "Filename to save as (from the read response, e.g. 'invoice_template.md')"
197
- required: true
198
- defaults:
199
- userId: me
200
-
201
- viewAttachment:
202
- type: detail
203
- description: "view an image attachment inline without saving to workspace (png, jpg, gif, webp). Use for quick preview — use getAttachment to save."
204
- resource: users.messages.attachments.get
205
- params:
206
- messageId:
207
- type: string
208
- description: "Message ID containing the attachment"
209
- required: true
210
- filename:
211
- type: string
212
- description: "Image filename from the read response"
213
- required: true
214
- defaults:
215
- userId: me
216
-
217
- modify:
218
- type: action
219
- description: "add or remove labels on a message (e.g. archive, mark read/unread)"
220
- resource: users.messages.modify
221
- params:
222
- messageId:
223
- type: string
224
- description: "Message ID to modify"
225
- required: true
226
- maps_to: id
227
- addLabelIds:
228
- type: string
229
- description: "Comma-separated label IDs to add (e.g. STARRED, IMPORTANT, Label_123)"
230
- removeLabelIds:
231
- type: string
232
- description: "Comma-separated label IDs to remove (e.g. UNREAD, INBOX to archive)"
233
- defaults:
234
- userId: me
235
-
236
- # --- Labels ---
237
-
238
- labels:
239
- type: list
240
- description: "list all labels in the mailbox"
241
- resource: users.labels.list
242
- defaults:
243
- userId: me
244
-
245
- # --- Threads ---
246
-
247
- threads:
248
- type: list
249
- description: "list email threads by query"
250
- resource: users.threads.list
251
- params:
252
- query:
253
- type: string
254
- description: "Gmail search query to filter threads"
255
- maps_to: q
256
- maxResults:
257
- type: number
258
- description: "Max threads to return (default: 10, max: 50)"
259
- default: 10
260
- max: 50
261
- defaults:
262
- userId: me
263
-
264
- getThread:
265
- type: detail
266
- description: "get all messages in a thread"
267
- resource: users.threads.get
268
- params:
269
- threadId:
270
- type: string
271
- description: "Thread ID to retrieve"
272
- required: true
273
- maps_to: id
274
- defaults:
275
- userId: me
276
- format: metadata
277
- metadataHeaders: "From,Subject,Date,To"
278
-
279
- calendar:
280
- tool_name: manage_calendar
281
- description: "List events, view agenda, check availability, or manage calendar events."
282
- requires_email: true
283
- gws_service: calendar
284
- operations:
285
-
286
- # --- Event viewing ---
287
-
288
- list:
289
- type: list
290
- description: "upcoming events — defaults to primary calendar, use calendarId to target a specific calendar (use 'calendars' operation to discover IDs)"
291
- resource: events.list
292
- params:
293
- calendarId:
294
- type: string
295
- description: "Calendar ID to query (default: 'primary'). Use 'calendars' operation to list available IDs."
296
- timeMin:
297
- type: string
298
- description: "Start of range (ISO 8601) — defaults to today"
299
- timeMax:
300
- type: string
301
- description: "End of range (ISO 8601)"
302
- maxResults:
303
- type: number
304
- description: "Max events (default: 10, max: 50)"
305
- default: 10
306
- max: 50
307
- query:
308
- type: string
309
- description: "Free-text search terms to filter events"
310
- maps_to: q
311
- defaults:
312
- calendarId: primary
313
- singleEvents: true
314
- orderBy: startTime
315
-
316
- agenda:
317
- type: list
318
- description: "today's schedule at a glance (all calendars). Returns calendarId per event for follow-up get calls."
319
- helper: "+agenda"
320
- params:
321
- calendarId:
322
- type: string
323
- description: "Filter to a specific calendar name or ID"
324
- days:
325
- type: number
326
- description: "Number of days ahead to show (default: today only)"
327
- tomorrow:
328
- type: boolean
329
- description: "Show tomorrow's events instead of today"
330
- week:
331
- type: boolean
332
- description: "Show this week's events"
333
-
334
- get:
335
- type: detail
336
- description: "full event details by ID. For shared calendar events, calendarId is required (use agenda or list to discover it)."
337
- resource: events.get
338
- params:
339
- calendarId:
340
- type: string
341
- description: "Calendar ID (default: 'primary'). Required for events on shared calendars."
342
- eventId:
343
- type: string
344
- description: "Event ID"
345
- required: true
346
- defaults:
347
- calendarId: primary
348
-
349
- # --- Event management ---
350
-
351
- create:
352
- type: action
353
- description: "create a new calendar event"
354
- helper: "+insert"
355
- params:
356
- calendarId:
357
- type: string
358
- description: "Calendar ID (default: 'primary')"
359
- summary:
360
- type: string
361
- description: "Event title"
362
- required: true
363
- start:
364
- type: string
365
- description: "Start time (ISO 8601)"
366
- required: true
367
- end:
368
- type: string
369
- description: "End time (ISO 8601)"
370
- required: true
371
- description:
372
- type: string
373
- description: "Event description or notes"
374
- location:
375
- type: string
376
- description: "Event location"
377
- attendees:
378
- type: string
379
- description: "Comma-separated attendee emails"
380
- meet:
381
- type: boolean
382
- description: "Add a Google Meet video conference link to the event"
383
- cli_args:
384
- calendarId: "--calendar"
385
- summary: "--summary"
386
- start: "--start"
387
- end: "--end"
388
- description: "--description"
389
- location: "--location"
390
- attendees: "--attendees"
391
-
392
- quickAdd:
393
- type: action
394
- description: "create event from natural language (e.g. 'Lunch with Alice tomorrow at noon')"
395
- resource: events.quickAdd
396
- params:
397
- calendarId:
398
- type: string
399
- description: "Calendar ID (default: 'primary')"
400
- text:
401
- type: string
402
- description: "Natural language event description"
403
- required: true
404
- defaults:
405
- calendarId: primary
406
-
407
- update:
408
- type: action
409
- description: "update an existing event (patch semantics — only changed fields needed)"
410
- resource: events.patch
411
- params:
412
- calendarId:
413
- type: string
414
- description: "Calendar ID (default: 'primary')"
415
- eventId:
416
- type: string
417
- description: "Event ID to update"
418
- required: true
419
- summary:
420
- type: string
421
- description: "Updated event title"
422
- start:
423
- type: string
424
- description: "Updated start time (ISO 8601)"
425
- end:
426
- type: string
427
- description: "Updated end time (ISO 8601)"
428
- description:
429
- type: string
430
- description: "Updated description"
431
- location:
432
- type: string
433
- description: "Updated location"
434
- defaults:
435
- calendarId: primary
436
-
437
- delete:
438
- type: action
439
- description: "delete an event"
440
- resource: events.delete
441
- params:
442
- calendarId:
443
- type: string
444
- description: "Calendar ID (default: 'primary')"
445
- eventId:
446
- type: string
447
- description: "Event ID to delete"
448
- required: true
449
- defaults:
450
- calendarId: primary
451
-
452
- # --- Calendar management ---
453
-
454
- calendars:
455
- type: list
456
- description: "list all calendars the user has access to"
457
- resource: calendarList.list
458
-
459
- freebusy:
460
- type: detail
461
- description: "check availability (free/busy) for a time range. Automatically includes own calendar; add attendees to check others."
462
- resource: freebusy.query
463
- params:
464
- timeMin:
465
- type: string
466
- description: "Start of range (ISO 8601)"
467
- required: true
468
- timeMax:
469
- type: string
470
- description: "End of range (ISO 8601)"
471
- required: true
472
- attendees:
473
- type: string
474
- description: "Comma-separated email addresses to check availability for"
475
- calendarId:
476
- type: string
477
- description: "Comma-separated calendar IDs to check (in addition to own calendar)"
478
-
479
- drive:
480
- tool_name: manage_drive
481
- description: "Search, upload, download, share, comment on, or manage files in Google Drive."
482
- requires_email: true
483
- gws_service: drive
484
- operations:
485
-
486
- # --- File discovery ---
487
-
488
- search:
489
- type: list
490
- description: "find files by query"
491
- resource: files.list
492
- params:
493
- query:
494
- type: string
495
- description: "Drive search query (e.g. \"name contains 'budget'\" or \"mimeType='application/pdf'\")"
496
- maps_to: q
497
- maxResults:
498
- type: number
499
- description: "Max results (default: 10, max: 50)"
500
- default: 10
501
- max: 50
502
- maps_to: pageSize
503
- defaults:
504
- fields: "files(id, name, mimeType, modifiedTime, size, webViewLink)"
505
- supportsAllDrives: true
506
- includeItemsFromAllDrives: true
507
-
508
- get:
509
- type: detail
510
- description: "get file metadata"
511
- resource: files.get
512
- params:
513
- fileId:
514
- type: string
515
- description: "File ID"
516
- required: true
517
- defaults:
518
- fields: "id, name, mimeType, modifiedTime, size, webViewLink, owners, shared, parents"
519
- supportsAllDrives: true
520
-
521
- # --- File operations ---
522
-
523
- upload:
524
- type: action
525
- description: "upload a local file to Drive"
526
- helper: "+upload"
527
- params:
528
- filePath:
529
- type: string
530
- description: "Local file path to upload"
531
- required: true
532
- name:
533
- type: string
534
- description: "File name in Drive (defaults to local name)"
535
- parentFolderId:
536
- type: string
537
- description: "Destination folder ID"
538
- cli_args:
539
- name: "--name"
540
- parentFolderId: "--parent"
541
-
542
- viewImage:
543
- type: detail
544
- description: "view an image file inline without saving to workspace (png, jpg, gif, webp). Use for quick preview — use download to save."
545
- resource: files.get
546
- params:
547
- fileId:
548
- type: string
549
- description: "File ID of the image to view"
550
- required: true
551
- defaults:
552
- supportsAllDrives: true
553
-
554
- download:
555
- type: detail
556
- description: "download file content to local path"
557
- resource: files.get
558
- params:
559
- fileId:
560
- type: string
561
- description: "File ID to download"
562
- required: true
563
- outputPath:
564
- type: string
565
- description: "Local path to save the file"
566
- defaults:
567
- alt: media
568
- supportsAllDrives: true
569
-
570
- copy:
571
- type: action
572
- description: "create a copy of a file"
573
- resource: files.copy
574
- params:
575
- fileId:
576
- type: string
577
- description: "File ID to copy"
578
- required: true
579
- name:
580
- type: string
581
- description: "Name for the copy"
582
- defaults:
583
- supportsAllDrives: true
584
-
585
- delete:
586
- type: action
587
- description: "permanently delete a file (cannot be undone)"
588
- resource: files.delete
589
- params:
590
- fileId:
591
- type: string
592
- description: "File ID to delete"
593
- required: true
594
- defaults:
595
- supportsAllDrives: true
596
-
597
- export:
598
- type: action
599
- description: "export a Google Workspace document (Docs, Sheets, Slides) to a file format"
600
- resource: files.export
601
- params:
602
- fileId:
603
- type: string
604
- description: "File ID to export"
605
- required: true
606
- mimeType:
607
- type: string
608
- description: "Target format (e.g. application/pdf, text/csv, text/plain, application/vnd.openxmlformats-officedocument.wordprocessingml.document)"
609
- required: true
610
- outputPath:
611
- type: string
612
- description: "Local path to save exported file"
613
- defaults:
614
- supportsAllDrives: true
615
-
616
- # --- Sharing ---
617
-
618
- listPermissions:
619
- type: list
620
- description: "list sharing permissions on a file"
621
- resource: permissions.list
622
- params:
623
- fileId:
624
- type: string
625
- description: "File ID"
626
- required: true
627
- defaults:
628
- supportsAllDrives: true
629
-
630
- share:
631
- type: action
632
- description: "share a file with a user or group"
633
- resource: permissions.create
634
- params:
635
- fileId:
636
- type: string
637
- description: "File ID to share"
638
- required: true
639
- shareEmail:
640
- type: string
641
- description: "Email address to share with"
642
- required: true
643
- role:
644
- type: string
645
- description: "Permission level"
646
- enum: [reader, commenter, writer, organizer]
647
- default: reader
648
- defaults:
649
- supportsAllDrives: true
650
-
651
- unshare:
652
- type: action
653
- description: "remove sharing permission from a file"
654
- resource: permissions.delete
655
- params:
656
- fileId:
657
- type: string
658
- description: "File ID"
659
- required: true
660
- permissionId:
661
- type: string
662
- description: "Permission ID to remove (from listPermissions)"
663
- required: true
664
- defaults:
665
- supportsAllDrives: true
666
-
667
- # --- Comments ---
668
-
669
- listComments:
670
- type: list
671
- description: "list comments on a file"
672
- resource: comments.list
673
- params:
674
- fileId:
675
- type: string
676
- description: "File ID"
677
- required: true
678
- includeDeleted:
679
- type: boolean
680
- description: "Include deleted comments (default: false)"
681
- defaults:
682
- fields: "comments(id, content, htmlContent, author(displayName, emailAddress), createdTime, modifiedTime, resolved, quotedFileContent, replies(id, content, htmlContent, author(displayName), createdTime)), nextPageToken"
683
- supportsAllDrives: true
684
-
685
- getComment:
686
- type: detail
687
- description: "get a specific comment by ID"
688
- resource: comments.get
689
- params:
690
- fileId:
691
- type: string
692
- description: "File ID"
693
- required: true
694
- commentId:
695
- type: string
696
- description: "Comment ID"
697
- required: true
698
- defaults:
699
- fields: "id, content, htmlContent, author(displayName, emailAddress), createdTime, modifiedTime, resolved, quotedFileContent, replies(id, content, htmlContent, author(displayName), createdTime)"
700
- supportsAllDrives: true
701
-
702
- addComment:
703
- type: action
704
- description: "add a comment to a file (optionally anchored to quoted text)"
705
- resource: comments.create
706
- params:
707
- fileId:
708
- type: string
709
- description: "File ID"
710
- required: true
711
- content:
712
- type: string
713
- description: "Comment text"
714
- required: true
715
- quotedText:
716
- type: string
717
- description: "Text to anchor the comment to (optional — if provided, comment is anchored to first occurrence)"
718
- defaults:
719
- fields: "id, content, htmlContent, author(displayName), createdTime, quotedFileContent"
720
- supportsAllDrives: true
721
-
722
- resolveComment:
723
- type: action
724
- description: "resolve or reopen a comment"
725
- resource: comments.update
726
- params:
727
- fileId:
728
- type: string
729
- description: "File ID"
730
- required: true
731
- commentId:
732
- type: string
733
- description: "Comment ID"
734
- required: true
735
- resolved:
736
- type: boolean
737
- description: "true to resolve, false to reopen"
738
- required: true
739
- defaults:
740
- fields: "id, content, resolved"
741
- supportsAllDrives: true
742
-
743
- replyToComment:
744
- type: action
745
- description: "reply to an existing comment"
746
- resource: replies.create
747
- params:
748
- fileId:
749
- type: string
750
- description: "File ID"
751
- required: true
752
- commentId:
753
- type: string
754
- description: "Comment ID to reply to"
755
- required: true
756
- content:
757
- type: string
758
- description: "Reply text"
759
- required: true
760
- defaults:
761
- fields: "id, content, htmlContent, author(displayName), createdTime"
762
- supportsAllDrives: true
763
-
764
- # ========================================================================
765
- # Sheets
766
- # ========================================================================
767
-
768
- sheets:
769
- tool_name: manage_sheets
770
- description: "Read, write, and manage Google Sheets spreadsheets."
771
- requires_email: true
772
- gws_service: sheets
773
- operations:
774
-
775
- get:
776
- type: detail
777
- description: "get spreadsheet metadata and sheet names"
778
- resource: spreadsheets.get
779
- params:
780
- spreadsheetId:
781
- type: string
782
- description: "Spreadsheet ID"
783
- required: true
784
-
785
- create:
786
- type: action
787
- description: "create a new empty spreadsheet"
788
- resource: spreadsheets.create
789
-
790
- read:
791
- type: detail
792
- description: "read cell values from a range"
793
- helper: "+read"
794
- params:
795
- spreadsheetId:
796
- type: string
797
- description: "Spreadsheet ID"
798
- required: true
799
- range:
800
- type: string
801
- description: "Range to read (e.g. 'Sheet1!A1:D10' or just 'Sheet1')"
802
- required: true
803
- cli_args:
804
- spreadsheetId: "--spreadsheet"
805
- range: "--range"
806
-
807
- append:
808
- type: action
809
- description: "append rows to a spreadsheet (rows land after the last row of existing data in the target range)"
810
- resource: spreadsheets.values.append
811
- params:
812
- spreadsheetId:
813
- type: string
814
- description: "Spreadsheet ID"
815
- required: true
816
- range:
817
- type: string
818
- description: "Target range; defaults to 'Sheet1'. Use 'MyTab' or 'MyTab!A:Z' to append to a specific tab."
819
- values:
820
- type: string
821
- description: "Comma-separated values for a single row (e.g. 'Alice,100,true')"
822
- jsonValues:
823
- type: string
824
- description: "JSON 2D array of rows for bulk insert (e.g. '[[\"a\",\"b\"],[\"c\",\"d\"]]')"
825
- valueInputOption:
826
- type: string
827
- description: "How input is interpreted: USER_ENTERED (default, parses formulas/types) or RAW"
828
- enum: [USER_ENTERED, RAW]
829
- default: USER_ENTERED
830
-
831
- getValues:
832
- type: detail
833
- description: "get values from a specific range (raw API)"
834
- resource: spreadsheets.values.get
835
- params:
836
- spreadsheetId:
837
- type: string
838
- description: "Spreadsheet ID"
839
- required: true
840
- range:
841
- type: string
842
- description: "A1 notation range (e.g. 'Sheet1!A1:B10')"
843
- required: true
844
-
845
- updateValues:
846
- type: action
847
- description: "write values to a specific range"
848
- resource: spreadsheets.values.update
849
- params:
850
- spreadsheetId:
851
- type: string
852
- description: "Spreadsheet ID"
853
- required: true
854
- range:
855
- type: string
856
- description: "A1 notation range to write to"
857
- required: true
858
- values:
859
- type: string
860
- description: "Comma-separated values for a single row (e.g. 'Alice,100,true')"
861
- jsonValues:
862
- type: string
863
- description: "JSON 2D array of rows (e.g. '[[\"a\",\"b\"],[\"c\",\"d\"]]'). Use for multi-row writes."
864
- valueInputOption:
865
- type: string
866
- description: "How input is interpreted: USER_ENTERED (default, parses formulas/types) or RAW"
867
- enum: [USER_ENTERED, RAW]
868
- default: USER_ENTERED
869
-
870
- clearValues:
871
- type: action
872
- description: "clear cell values from a range (structure preserved)"
873
- resource: spreadsheets.values.clear
874
- params:
875
- spreadsheetId:
876
- type: string
877
- description: "Spreadsheet ID"
878
- required: true
879
- range:
880
- type: string
881
- description: "A1 notation range to clear"
882
- required: true
883
-
884
- addSheet:
885
- type: action
886
- description: "add a new tab (sheet) to the spreadsheet"
887
- resource: spreadsheets.batchUpdate
888
- params:
889
- spreadsheetId:
890
- type: string
891
- description: "Spreadsheet ID"
892
- required: true
893
- title:
894
- type: string
895
- description: "Name of the new sheet tab"
896
- required: true
897
- index:
898
- type: number
899
- description: "Position among tabs (0-based). Appended at the end if omitted."
900
- rowCount:
901
- type: number
902
- description: "Initial row count (default 1000)"
903
- columnCount:
904
- type: number
905
- description: "Initial column count (default 26)"
906
-
907
- renameSheet:
908
- type: action
909
- description: "rename a tab (sheet) within a spreadsheet"
910
- resource: spreadsheets.batchUpdate
911
- params:
912
- spreadsheetId:
913
- type: string
914
- description: "Spreadsheet ID"
915
- required: true
916
- sheetId:
917
- type: number
918
- description: "Sheet ID of the tab to rename (from manage_sheets get)"
919
- required: true
920
- title:
921
- type: string
922
- description: "New title for the tab"
923
- required: true
924
-
925
- deleteSheet:
926
- type: action
927
- description: "delete a tab (sheet) from the spreadsheet — irreversible"
928
- resource: spreadsheets.batchUpdate
929
- params:
930
- spreadsheetId:
931
- type: string
932
- description: "Spreadsheet ID"
933
- required: true
934
- sheetId:
935
- type: number
936
- description: "Sheet ID of the tab to delete"
937
- required: true
938
-
939
- duplicateSheet:
940
- type: action
941
- description: "duplicate a tab within the same spreadsheet"
942
- resource: spreadsheets.batchUpdate
943
- params:
944
- spreadsheetId:
945
- type: string
946
- description: "Spreadsheet ID"
947
- required: true
948
- sheetId:
949
- type: number
950
- description: "Source sheet ID (the tab to copy)"
951
- required: true
952
- title:
953
- type: string
954
- description: "Name for the duplicated sheet (defaults to 'Copy of <source>')"
955
- index:
956
- type: number
957
- description: "Position to insert the duplicate (0-based)"
958
-
959
- renameSpreadsheet:
960
- type: action
961
- description: "rename the spreadsheet (the document title, not a tab)"
962
- resource: spreadsheets.batchUpdate
963
- params:
964
- spreadsheetId:
965
- type: string
966
- description: "Spreadsheet ID"
967
- required: true
968
- title:
969
- type: string
970
- description: "New spreadsheet title"
971
- required: true
972
-
973
- copySheetTo:
974
- type: action
975
- description: "copy a tab from this spreadsheet into another spreadsheet"
976
- resource: spreadsheets.sheets.copyTo
977
- params:
978
- spreadsheetId:
979
- type: string
980
- description: "Source spreadsheet ID"
981
- required: true
982
- sheetId:
983
- type: number
984
- description: "Source sheet ID (the tab to copy)"
985
- required: true
986
- destinationSpreadsheetId:
987
- type: string
988
- description: "Destination spreadsheet ID"
989
- required: true
990
-
991
- # ========================================================================
992
- # Docs
993
- # ========================================================================
994
-
995
- docs:
996
- tool_name: manage_docs
997
- description: "Read, write, insert, and find-replace text in Google Docs documents."
998
- requires_email: true
999
- gws_service: docs
1000
- operations:
1001
-
1002
- get:
1003
- type: detail
1004
- description: "get document content and metadata"
1005
- resource: documents.get
1006
- params:
1007
- documentId:
1008
- type: string
1009
- description: "Document ID"
1010
- required: true
1011
-
1012
- create:
1013
- type: action
1014
- description: "create a new blank document"
1015
- resource: documents.create
1016
-
1017
- write:
1018
- type: action
1019
- description: "append text to the end of a document"
1020
- helper: "+write"
1021
- params:
1022
- documentId:
1023
- type: string
1024
- description: "Document ID"
1025
- required: true
1026
- text:
1027
- type: string
1028
- description: "Text to append (plain text)"
1029
- required: true
1030
- cli_args:
1031
- documentId: "--document"
1032
- text: "--text"
1033
-
1034
- insertText:
1035
- type: action
1036
- description: "insert text at a specific position in a document"
1037
- resource: documents.batchUpdate
1038
- params:
1039
- documentId:
1040
- type: string
1041
- description: "Document ID"
1042
- required: true
1043
- text:
1044
- type: string
1045
- description: "Text to insert"
1046
- required: true
1047
- index:
1048
- type: number
1049
- description: "Character index to insert at (1 = start of document body)"
1050
- required: true
1051
-
1052
- replaceText:
1053
- type: action
1054
- description: "find and replace text in a document"
1055
- resource: documents.batchUpdate
1056
- params:
1057
- documentId:
1058
- type: string
1059
- description: "Document ID"
1060
- required: true
1061
- findText:
1062
- type: string
1063
- description: "Text to find"
1064
- required: true
1065
- replaceWith:
1066
- type: string
1067
- description: "Replacement text"
1068
- required: true
1069
- matchCase:
1070
- type: boolean
1071
- description: "Case-sensitive match (default: true)"
1072
- default: true
1073
-
1074
- # ========================================================================
1075
- # Tasks
1076
- # ========================================================================
1077
-
1078
- tasks:
1079
- tool_name: manage_tasks
1080
- description: "Manage task lists and tasks in Google Tasks."
1081
- requires_email: true
1082
- gws_service: tasks
1083
- operations:
1084
-
1085
- # --- Task lists ---
1086
-
1087
- listTaskLists:
1088
- type: list
1089
- description: "list all task lists"
1090
- resource: tasklists.list
1091
-
1092
- getTaskList:
1093
- type: detail
1094
- description: "get a task list by ID"
1095
- resource: tasklists.get
1096
- params:
1097
- taskListId:
1098
- type: string
1099
- description: "Task list ID"
1100
- required: true
1101
- maps_to: tasklist
1102
-
1103
- createTaskList:
1104
- type: action
1105
- description: "create a new task list"
1106
- resource: tasklists.insert
1107
-
1108
- deleteTaskList:
1109
- type: action
1110
- description: "delete a task list and all its tasks"
1111
- resource: tasklists.delete
1112
- params:
1113
- taskListId:
1114
- type: string
1115
- description: "Task list ID to delete"
1116
- required: true
1117
- maps_to: tasklist
1118
-
1119
- # --- Tasks ---
1120
-
1121
- list:
1122
- type: list
1123
- description: "list tasks in a task list"
1124
- resource: tasks.list
1125
- params:
1126
- taskListId:
1127
- type: string
1128
- description: "Task list ID (use listTaskLists to find)"
1129
- required: true
1130
- maps_to: tasklist
1131
- showCompleted:
1132
- type: boolean
1133
- description: "Include completed tasks (default: true)"
1134
- maxResults:
1135
- type: number
1136
- description: "Max tasks to return (default: 20, max: 100)"
1137
- default: 20
1138
- max: 100
1139
-
1140
- get:
1141
- type: detail
1142
- description: "get a specific task"
1143
- resource: tasks.get
1144
- params:
1145
- taskListId:
1146
- type: string
1147
- description: "Task list ID"
1148
- required: true
1149
- maps_to: tasklist
1150
- taskId:
1151
- type: string
1152
- description: "Task ID"
1153
- required: true
1154
- maps_to: task
1155
-
1156
- create:
1157
- type: action
1158
- description: "create a new task"
1159
- resource: tasks.insert
1160
- params:
1161
- taskListId:
1162
- type: string
1163
- description: "Task list ID"
1164
- required: true
1165
- maps_to: tasklist
1166
-
1167
- update:
1168
- type: action
1169
- description: "update a task (patch semantics)"
1170
- resource: tasks.patch
1171
- params:
1172
- taskListId:
1173
- type: string
1174
- description: "Task list ID"
1175
- required: true
1176
- maps_to: tasklist
1177
- taskId:
1178
- type: string
1179
- description: "Task ID"
1180
- required: true
1181
- maps_to: task
1182
-
1183
- complete:
1184
- type: action
1185
- description: "mark a task as completed"
1186
- resource: tasks.patch
1187
- params:
1188
- taskListId:
1189
- type: string
1190
- description: "Task list ID"
1191
- required: true
1192
- maps_to: tasklist
1193
- taskId:
1194
- type: string
1195
- description: "Task ID"
1196
- required: true
1197
- maps_to: task
1198
- defaults:
1199
- status: completed
1200
-
1201
- delete:
1202
- type: action
1203
- description: "delete a task"
1204
- resource: tasks.delete
1205
- params:
1206
- taskListId:
1207
- type: string
1208
- description: "Task list ID"
1209
- required: true
1210
- maps_to: tasklist
1211
- taskId:
1212
- type: string
1213
- description: "Task ID to delete"
1214
- required: true
1215
- maps_to: task
1216
-
1217
- # ========================================================================
1218
- # Meet
1219
- # ========================================================================
1220
-
1221
- meet:
1222
- tool_name: manage_meet
1223
- description: "Browse past Google Meet conferences, participants, transcripts, recordings, and AI-generated smart notes. Requires Workspace Business Standard+ for transcripts/recordings."
1224
- requires_email: true
1225
- gws_service: meet
1226
- operations:
1227
-
1228
- # --- Conference records ---
1229
-
1230
- listConferences:
1231
- type: list
1232
- description: "list recent meeting conferences (default: descending by start time)"
1233
- resource: conferenceRecords.list
1234
- params:
1235
- filter:
1236
- type: string
1237
- description: "EBNF filter (e.g. 'space.meeting_code = \"abc-mnop-xyz\"' or 'start_time>=\"2026-01-01T00:00:00Z\"')"
1238
- maxResults:
1239
- type: number
1240
- description: "Max conferences to return (default: 25, max: 100)"
1241
- default: 25
1242
- max: 100
1243
- maps_to: pageSize
1244
-
1245
- getConference:
1246
- type: detail
1247
- description: "get details of a specific conference"
1248
- resource: conferenceRecords.get
1249
- params:
1250
- conferenceId:
1251
- type: string
1252
- description: "Conference record ID (from listConferences)"
1253
- required: true
1254
- maps_to: name
1255
-
1256
- # --- Participants ---
1257
-
1258
- listParticipants:
1259
- type: list
1260
- description: "list who attended a conference"
1261
- resource: conferenceRecords.participants.list
1262
- params:
1263
- conferenceId:
1264
- type: string
1265
- description: "Conference record ID"
1266
- required: true
1267
- maps_to: parent
1268
- filter:
1269
- type: string
1270
- description: "Filter (e.g. 'latest_end_time IS NULL' for active participants)"
1271
- maxResults:
1272
- type: number
1273
- description: "Max participants (default: 100, max: 250)"
1274
- default: 100
1275
- max: 250
1276
- maps_to: pageSize
1277
-
1278
- # --- Transcripts ---
1279
-
1280
- listTranscripts:
1281
- type: list
1282
- description: "list transcripts for a conference (requires Workspace Business Standard+)"
1283
- resource: conferenceRecords.transcripts.list
1284
- params:
1285
- conferenceId:
1286
- type: string
1287
- description: "Conference record ID"
1288
- required: true
1289
- maps_to: parent
1290
-
1291
- getTranscript:
1292
- type: detail
1293
- description: "get transcript metadata including Google Docs destination"
1294
- resource: conferenceRecords.transcripts.get
1295
- params:
1296
- transcriptName:
1297
- type: string
1298
- description: "Transcript resource name (from listTranscripts)"
1299
- required: true
1300
- maps_to: name
1301
-
1302
- listTranscriptEntries:
1303
- type: list
1304
- description: "get structured transcript text — who said what, with timestamps"
1305
- resource: conferenceRecords.transcripts.entries.list
1306
- params:
1307
- transcriptName:
1308
- type: string
1309
- description: "Transcript resource name (e.g. conferenceRecords/.../transcripts/...)"
1310
- required: true
1311
- maps_to: parent
1312
- maxResults:
1313
- type: number
1314
- description: "Max entries per page (default: 10, max: 100)"
1315
- default: 100
1316
- max: 100
1317
- maps_to: pageSize
1318
-
1319
- # --- Recordings ---
1320
-
1321
- listRecordings:
1322
- type: list
1323
- description: "list recordings for a conference (saved as MP4 in Drive)"
1324
- resource: conferenceRecords.recordings.list
1325
- params:
1326
- conferenceId:
1327
- type: string
1328
- description: "Conference record ID"
1329
- required: true
1330
- maps_to: parent
1331
-
1332
- getRecording:
1333
- type: detail
1334
- description: "get recording metadata including Drive file ID and playback link"
1335
- resource: conferenceRecords.recordings.get
1336
- params:
1337
- recordingName:
1338
- type: string
1339
- description: "Recording resource name (from listRecordings)"
1340
- required: true
1341
- maps_to: name
1342
-
1343
- # --- Composite operations ---
1344
-
1345
- getFullTranscript:
1346
- type: detail
1347
- description: "get the full who-said-what transcript for a conference (chains transcripts + entries + participant names automatically). Use pageToken to continue reading."
1348
- resource: conferenceRecords.transcripts.list
1349
- params:
1350
- conferenceId:
1351
- type: string
1352
- description: "Conference record ID (from listConferences)"
1353
- required: true
1354
- pageToken:
1355
- type: string
1356
- description: "Page token from a previous getFullTranscript call to continue reading"
1357
-
1358
- # --- Smart Notes (Gemini) ---
1359
-
1360
- listSmartNotes:
1361
- type: list
1362
- description: "list Gemini-generated smart notes for a conference"
1363
- resource: conferenceRecords.smartNotes.list
1364
- params:
1365
- conferenceId:
1366
- type: string
1367
- description: "Conference record ID"
1368
- required: true
1369
- maps_to: parent
1370
-
1371
- getSmartNote:
1372
- type: detail
1373
- description: "get smart note metadata including Google Docs destination"
1374
- resource: conferenceRecords.smartNotes.get
1375
- params:
1376
- smartNoteName:
1377
- type: string
1378
- description: "Smart note resource name (from listSmartNotes)"
1379
- required: true
1380
- maps_to: name
1381
-
1382
- # People (contacts) excluded pending gws auth scope support for contacts.readonly.
1383
- # See https://github.com/googleworkspace/cli/issues/556