gogcli-mcp 2.0.0 → 2.0.4
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.
- package/.claude-plugin/marketplace.json +38 -0
- package/.claude-plugin/plugin.json +25 -0
- package/.mcp.json +14 -0
- package/.mcpbignore +27 -0
- package/README.md +3 -0
- package/dist/index.js +2416 -665
- package/dist/lib.js +2533 -780
- package/manifest.json +273 -1
- package/package.json +21 -3
- package/server.json +35 -0
- package/src/lib.ts +2 -0
- package/src/server.ts +10 -1
- package/src/tools/calendar.ts +92 -0
- package/src/tools/classroom.ts +696 -0
- package/src/tools/contacts.ts +74 -0
- package/src/tools/drive.ts +17 -6
- package/src/tools/slides.ts +203 -0
- package/src/tools/utils.ts +9 -1
- package/tests/runner.test.ts +16 -0
- package/tests/server.test.ts +43 -0
- package/tests/tools/calendar.test.ts +138 -0
- package/tests/tools/classroom.test.ts +875 -0
- package/tests/tools/contacts.test.ts +100 -0
- package/tests/tools/drive.test.ts +49 -3
- package/tests/tools/slides.test.ts +441 -0
- package/tests/tools/utils.test.ts +65 -0
package/manifest.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"manifest_version": "0.3",
|
|
4
4
|
"name": "gogcli-mcp",
|
|
5
5
|
"display_name": "gogcli",
|
|
6
|
-
"version": "2.0.
|
|
6
|
+
"version": "2.0.4",
|
|
7
7
|
"description": "Google Sheets (and more) for Claude via gogcli — read, write, and manage spreadsheets",
|
|
8
8
|
"author": {
|
|
9
9
|
"name": "Chris Hall",
|
|
@@ -120,6 +120,206 @@
|
|
|
120
120
|
"name": "gog_calendar_run",
|
|
121
121
|
"description": "Run any gog calendar subcommand (escape hatch)"
|
|
122
122
|
},
|
|
123
|
+
{
|
|
124
|
+
"name": "gog_meet_create",
|
|
125
|
+
"description": "Create a Google Meet space"
|
|
126
|
+
},
|
|
127
|
+
{
|
|
128
|
+
"name": "gog_meet_get",
|
|
129
|
+
"description": "Get a Google Meet space by meeting code"
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
"name": "gog_meet_update",
|
|
133
|
+
"description": "Update a Google Meet space configuration"
|
|
134
|
+
},
|
|
135
|
+
{
|
|
136
|
+
"name": "gog_meet_end",
|
|
137
|
+
"description": "End the active conference in a Meet space"
|
|
138
|
+
},
|
|
139
|
+
{
|
|
140
|
+
"name": "gog_meet_history",
|
|
141
|
+
"description": "List past calls in a Meet space"
|
|
142
|
+
},
|
|
143
|
+
{
|
|
144
|
+
"name": "gog_meet_participants",
|
|
145
|
+
"description": "List participants from a Meet call"
|
|
146
|
+
},
|
|
147
|
+
{
|
|
148
|
+
"name": "gog_classroom_courses_list",
|
|
149
|
+
"description": "List Google Classroom courses"
|
|
150
|
+
},
|
|
151
|
+
{
|
|
152
|
+
"name": "gog_classroom_courses_get",
|
|
153
|
+
"description": "Get a single course by ID"
|
|
154
|
+
},
|
|
155
|
+
{
|
|
156
|
+
"name": "gog_classroom_courses_create",
|
|
157
|
+
"description": "Create a new course"
|
|
158
|
+
},
|
|
159
|
+
{
|
|
160
|
+
"name": "gog_classroom_courses_update",
|
|
161
|
+
"description": "Update an existing course"
|
|
162
|
+
},
|
|
163
|
+
{
|
|
164
|
+
"name": "gog_classroom_courses_delete",
|
|
165
|
+
"description": "Delete a course"
|
|
166
|
+
},
|
|
167
|
+
{
|
|
168
|
+
"name": "gog_classroom_courses_archive",
|
|
169
|
+
"description": "Archive a course"
|
|
170
|
+
},
|
|
171
|
+
{
|
|
172
|
+
"name": "gog_classroom_courses_unarchive",
|
|
173
|
+
"description": "Unarchive a course"
|
|
174
|
+
},
|
|
175
|
+
{
|
|
176
|
+
"name": "gog_classroom_students_list",
|
|
177
|
+
"description": "List students in a course"
|
|
178
|
+
},
|
|
179
|
+
{
|
|
180
|
+
"name": "gog_classroom_students_get",
|
|
181
|
+
"description": "Get a specific student"
|
|
182
|
+
},
|
|
183
|
+
{
|
|
184
|
+
"name": "gog_classroom_students_add",
|
|
185
|
+
"description": "Add a student to a course"
|
|
186
|
+
},
|
|
187
|
+
{
|
|
188
|
+
"name": "gog_classroom_students_remove",
|
|
189
|
+
"description": "Remove a student from a course"
|
|
190
|
+
},
|
|
191
|
+
{
|
|
192
|
+
"name": "gog_classroom_teachers_list",
|
|
193
|
+
"description": "List teachers in a course"
|
|
194
|
+
},
|
|
195
|
+
{
|
|
196
|
+
"name": "gog_classroom_teachers_get",
|
|
197
|
+
"description": "Get a specific teacher"
|
|
198
|
+
},
|
|
199
|
+
{
|
|
200
|
+
"name": "gog_classroom_teachers_add",
|
|
201
|
+
"description": "Add a teacher to a course"
|
|
202
|
+
},
|
|
203
|
+
{
|
|
204
|
+
"name": "gog_classroom_teachers_remove",
|
|
205
|
+
"description": "Remove a teacher from a course"
|
|
206
|
+
},
|
|
207
|
+
{
|
|
208
|
+
"name": "gog_classroom_roster",
|
|
209
|
+
"description": "List the full course roster (students and/or teachers)"
|
|
210
|
+
},
|
|
211
|
+
{
|
|
212
|
+
"name": "gog_classroom_coursework_list",
|
|
213
|
+
"description": "List coursework (assignments) for a course"
|
|
214
|
+
},
|
|
215
|
+
{
|
|
216
|
+
"name": "gog_classroom_coursework_get",
|
|
217
|
+
"description": "Get a single coursework item"
|
|
218
|
+
},
|
|
219
|
+
{
|
|
220
|
+
"name": "gog_classroom_coursework_create",
|
|
221
|
+
"description": "Create coursework (assignment/question)"
|
|
222
|
+
},
|
|
223
|
+
{
|
|
224
|
+
"name": "gog_classroom_coursework_update",
|
|
225
|
+
"description": "Update existing coursework"
|
|
226
|
+
},
|
|
227
|
+
{
|
|
228
|
+
"name": "gog_classroom_coursework_delete",
|
|
229
|
+
"description": "Delete coursework"
|
|
230
|
+
},
|
|
231
|
+
{
|
|
232
|
+
"name": "gog_classroom_submissions_list",
|
|
233
|
+
"description": "List student submissions for coursework"
|
|
234
|
+
},
|
|
235
|
+
{
|
|
236
|
+
"name": "gog_classroom_submissions_get",
|
|
237
|
+
"description": "Get a single submission"
|
|
238
|
+
},
|
|
239
|
+
{
|
|
240
|
+
"name": "gog_classroom_submissions_grade",
|
|
241
|
+
"description": "Grade a submission"
|
|
242
|
+
},
|
|
243
|
+
{
|
|
244
|
+
"name": "gog_classroom_submissions_return",
|
|
245
|
+
"description": "Return a graded submission"
|
|
246
|
+
},
|
|
247
|
+
{
|
|
248
|
+
"name": "gog_classroom_submissions_turn_in",
|
|
249
|
+
"description": "Turn in a submission (student action)"
|
|
250
|
+
},
|
|
251
|
+
{
|
|
252
|
+
"name": "gog_classroom_submissions_reclaim",
|
|
253
|
+
"description": "Reclaim a turned-in submission (student action)"
|
|
254
|
+
},
|
|
255
|
+
{
|
|
256
|
+
"name": "gog_classroom_announcements_list",
|
|
257
|
+
"description": "List announcements"
|
|
258
|
+
},
|
|
259
|
+
{
|
|
260
|
+
"name": "gog_classroom_announcements_get",
|
|
261
|
+
"description": "Get an announcement"
|
|
262
|
+
},
|
|
263
|
+
{
|
|
264
|
+
"name": "gog_classroom_announcements_create",
|
|
265
|
+
"description": "Create an announcement"
|
|
266
|
+
},
|
|
267
|
+
{
|
|
268
|
+
"name": "gog_classroom_announcements_update",
|
|
269
|
+
"description": "Update an announcement"
|
|
270
|
+
},
|
|
271
|
+
{
|
|
272
|
+
"name": "gog_classroom_announcements_delete",
|
|
273
|
+
"description": "Delete an announcement"
|
|
274
|
+
},
|
|
275
|
+
{
|
|
276
|
+
"name": "gog_classroom_topics_list",
|
|
277
|
+
"description": "List topics in a course"
|
|
278
|
+
},
|
|
279
|
+
{
|
|
280
|
+
"name": "gog_classroom_topics_get",
|
|
281
|
+
"description": "Get a topic"
|
|
282
|
+
},
|
|
283
|
+
{
|
|
284
|
+
"name": "gog_classroom_topics_create",
|
|
285
|
+
"description": "Create a topic"
|
|
286
|
+
},
|
|
287
|
+
{
|
|
288
|
+
"name": "gog_classroom_topics_update",
|
|
289
|
+
"description": "Rename a topic"
|
|
290
|
+
},
|
|
291
|
+
{
|
|
292
|
+
"name": "gog_classroom_topics_delete",
|
|
293
|
+
"description": "Delete a topic"
|
|
294
|
+
},
|
|
295
|
+
{
|
|
296
|
+
"name": "gog_classroom_invitations_list",
|
|
297
|
+
"description": "List classroom invitations"
|
|
298
|
+
},
|
|
299
|
+
{
|
|
300
|
+
"name": "gog_classroom_invitations_get",
|
|
301
|
+
"description": "Get an invitation"
|
|
302
|
+
},
|
|
303
|
+
{
|
|
304
|
+
"name": "gog_classroom_invitations_create",
|
|
305
|
+
"description": "Create an invitation"
|
|
306
|
+
},
|
|
307
|
+
{
|
|
308
|
+
"name": "gog_classroom_invitations_accept",
|
|
309
|
+
"description": "Accept an invitation"
|
|
310
|
+
},
|
|
311
|
+
{
|
|
312
|
+
"name": "gog_classroom_invitations_delete",
|
|
313
|
+
"description": "Delete (revoke) an invitation"
|
|
314
|
+
},
|
|
315
|
+
{
|
|
316
|
+
"name": "gog_classroom_profile_get",
|
|
317
|
+
"description": "Get a classroom user profile (omit userId for self)"
|
|
318
|
+
},
|
|
319
|
+
{
|
|
320
|
+
"name": "gog_classroom_run",
|
|
321
|
+
"description": "Run any gog classroom subcommand (escape hatch)"
|
|
322
|
+
},
|
|
123
323
|
{
|
|
124
324
|
"name": "gog_drive_ls",
|
|
125
325
|
"description": "List files in a Google Drive folder"
|
|
@@ -204,6 +404,26 @@
|
|
|
204
404
|
"name": "gog_contacts_run",
|
|
205
405
|
"description": "Run any gog contacts subcommand (escape hatch)"
|
|
206
406
|
},
|
|
407
|
+
{
|
|
408
|
+
"name": "gog_people_me",
|
|
409
|
+
"description": "Show your own Google People profile"
|
|
410
|
+
},
|
|
411
|
+
{
|
|
412
|
+
"name": "gog_people_get",
|
|
413
|
+
"description": "Get a People profile by resource name"
|
|
414
|
+
},
|
|
415
|
+
{
|
|
416
|
+
"name": "gog_people_search",
|
|
417
|
+
"description": "Search the Google Workspace directory"
|
|
418
|
+
},
|
|
419
|
+
{
|
|
420
|
+
"name": "gog_people_relations",
|
|
421
|
+
"description": "Get relations (manager, reports) for a user"
|
|
422
|
+
},
|
|
423
|
+
{
|
|
424
|
+
"name": "gog_people_raw",
|
|
425
|
+
"description": "Dump raw Google People API JSON for a person"
|
|
426
|
+
},
|
|
207
427
|
{
|
|
208
428
|
"name": "gog_docs_info",
|
|
209
429
|
"description": "Get Google Doc metadata (title, ID, properties)"
|
|
@@ -263,6 +483,58 @@
|
|
|
263
483
|
{
|
|
264
484
|
"name": "gog_sheets_run",
|
|
265
485
|
"description": "Run any gog sheets subcommand (escape hatch)"
|
|
486
|
+
},
|
|
487
|
+
{
|
|
488
|
+
"name": "gog_slides_export",
|
|
489
|
+
"description": "Export a Google Slides presentation to pdf or pptx"
|
|
490
|
+
},
|
|
491
|
+
{
|
|
492
|
+
"name": "gog_slides_info",
|
|
493
|
+
"description": "Get metadata for a Google Slides presentation"
|
|
494
|
+
},
|
|
495
|
+
{
|
|
496
|
+
"name": "gog_slides_create",
|
|
497
|
+
"description": "Create a new Google Slides presentation"
|
|
498
|
+
},
|
|
499
|
+
{
|
|
500
|
+
"name": "gog_slides_create_from_markdown",
|
|
501
|
+
"description": "Create a new Google Slides presentation from markdown content"
|
|
502
|
+
},
|
|
503
|
+
{
|
|
504
|
+
"name": "gog_slides_create_from_template",
|
|
505
|
+
"description": "Create a new Google Slides presentation from a template with placeholder replacements"
|
|
506
|
+
},
|
|
507
|
+
{
|
|
508
|
+
"name": "gog_slides_copy",
|
|
509
|
+
"description": "Copy a Google Slides presentation"
|
|
510
|
+
},
|
|
511
|
+
{
|
|
512
|
+
"name": "gog_slides_add_slide",
|
|
513
|
+
"description": "Add a slide to a presentation from a local image"
|
|
514
|
+
},
|
|
515
|
+
{
|
|
516
|
+
"name": "gog_slides_list_slides",
|
|
517
|
+
"description": "List slides in a presentation"
|
|
518
|
+
},
|
|
519
|
+
{
|
|
520
|
+
"name": "gog_slides_delete_slide",
|
|
521
|
+
"description": "Delete a slide from a presentation"
|
|
522
|
+
},
|
|
523
|
+
{
|
|
524
|
+
"name": "gog_slides_read_slide",
|
|
525
|
+
"description": "Read the content of a slide"
|
|
526
|
+
},
|
|
527
|
+
{
|
|
528
|
+
"name": "gog_slides_update_notes",
|
|
529
|
+
"description": "Update speaker notes on a slide"
|
|
530
|
+
},
|
|
531
|
+
{
|
|
532
|
+
"name": "gog_slides_replace_slide",
|
|
533
|
+
"description": "Replace the image content of an existing slide"
|
|
534
|
+
},
|
|
535
|
+
{
|
|
536
|
+
"name": "gog_slides_run",
|
|
537
|
+
"description": "Run any gog slides subcommand (escape hatch)"
|
|
266
538
|
}
|
|
267
539
|
],
|
|
268
540
|
"compatibility": {
|
package/package.json
CHANGED
|
@@ -1,11 +1,29 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "gogcli-mcp",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.4",
|
|
4
|
+
"mcpName": "io.github.chrischall/gogcli-mcp",
|
|
4
5
|
"description": "MCP server wrapping gogcli for Google service access",
|
|
6
|
+
"author": "Claude Code (AI) <https://www.anthropic.com/claude>",
|
|
5
7
|
"repository": {
|
|
6
8
|
"type": "git",
|
|
7
9
|
"url": "https://github.com/chrischall/gogcli-mcp"
|
|
8
10
|
},
|
|
11
|
+
"license": "MIT",
|
|
12
|
+
"keywords": [
|
|
13
|
+
"mcp",
|
|
14
|
+
"model-context-protocol",
|
|
15
|
+
"claude",
|
|
16
|
+
"ai",
|
|
17
|
+
"google",
|
|
18
|
+
"gogcli",
|
|
19
|
+
"google-sheets",
|
|
20
|
+
"google-docs",
|
|
21
|
+
"google-drive",
|
|
22
|
+
"google-calendar",
|
|
23
|
+
"gmail",
|
|
24
|
+
"google-tasks",
|
|
25
|
+
"google-contacts"
|
|
26
|
+
],
|
|
9
27
|
"type": "module",
|
|
10
28
|
"bin": {
|
|
11
29
|
"gogcli-mcp": "dist/index.js"
|
|
@@ -24,10 +42,10 @@
|
|
|
24
42
|
},
|
|
25
43
|
"dependencies": {
|
|
26
44
|
"@modelcontextprotocol/sdk": "^1.29.0",
|
|
27
|
-
"zod": "^4.3
|
|
45
|
+
"zod": "^4.4.3"
|
|
28
46
|
},
|
|
29
47
|
"devDependencies": {
|
|
30
|
-
"@types/node": "^25.
|
|
48
|
+
"@types/node": "^25.6.2",
|
|
31
49
|
"@vitest/coverage-v8": "^4.1.2",
|
|
32
50
|
"esbuild": "^0.28.0",
|
|
33
51
|
"typescript": "^6.0.2",
|
package/server.json
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
|
|
3
|
+
"name": "io.github.chrischall/gogcli-mcp",
|
|
4
|
+
"description": "Google Sheets (and more) for Claude via gogcli — read, write, and manage spreadsheets",
|
|
5
|
+
"repository": {
|
|
6
|
+
"url": "https://github.com/chrischall/gogcli-mcp",
|
|
7
|
+
"source": "github",
|
|
8
|
+
"subfolder": "packages/gogcli-mcp"
|
|
9
|
+
},
|
|
10
|
+
"version": "2.0.4",
|
|
11
|
+
"packages": [
|
|
12
|
+
{
|
|
13
|
+
"registryType": "npm",
|
|
14
|
+
"identifier": "gogcli-mcp",
|
|
15
|
+
"version": "2.0.4",
|
|
16
|
+
"transport": {
|
|
17
|
+
"type": "stdio"
|
|
18
|
+
},
|
|
19
|
+
"environmentVariables": [
|
|
20
|
+
{
|
|
21
|
+
"name": "GOG_ACCOUNT",
|
|
22
|
+
"description": "Email address of the Google account to use (matches gogcli auth)",
|
|
23
|
+
"isRequired": false,
|
|
24
|
+
"format": "string"
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"name": "GOG_PATH",
|
|
28
|
+
"description": "Override path to the gogcli binary (auto-discovered otherwise)",
|
|
29
|
+
"isRequired": false,
|
|
30
|
+
"format": "string"
|
|
31
|
+
}
|
|
32
|
+
]
|
|
33
|
+
}
|
|
34
|
+
]
|
|
35
|
+
}
|
package/src/lib.ts
CHANGED
|
@@ -4,11 +4,13 @@ export {
|
|
|
4
4
|
VERSION,
|
|
5
5
|
registerAuthTools,
|
|
6
6
|
registerCalendarTools,
|
|
7
|
+
registerClassroomTools,
|
|
7
8
|
registerContactsTools,
|
|
8
9
|
registerDocsTools,
|
|
9
10
|
registerDriveTools,
|
|
10
11
|
registerGmailTools,
|
|
11
12
|
registerSheetsTools,
|
|
13
|
+
registerSlidesTools,
|
|
12
14
|
registerTasksTools,
|
|
13
15
|
} from './server.js';
|
|
14
16
|
export { run } from './runner.js';
|
package/src/server.ts
CHANGED
|
@@ -1,15 +1,20 @@
|
|
|
1
1
|
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
2
2
|
import { registerAuthTools } from './tools/auth.js';
|
|
3
3
|
import { registerCalendarTools } from './tools/calendar.js';
|
|
4
|
+
import { registerClassroomTools } from './tools/classroom.js';
|
|
4
5
|
import { registerContactsTools } from './tools/contacts.js';
|
|
5
6
|
import { registerDocsTools } from './tools/docs.js';
|
|
6
7
|
import { registerDriveTools } from './tools/drive.js';
|
|
7
8
|
import { registerGmailTools } from './tools/gmail.js';
|
|
8
9
|
import { registerSheetsTools } from './tools/sheets.js';
|
|
10
|
+
import { registerSlidesTools } from './tools/slides.js';
|
|
9
11
|
import { registerTasksTools } from './tools/tasks.js';
|
|
10
12
|
|
|
11
|
-
// Injected at build time by esbuild --define:GOGCLI_VERSION=...
|
|
13
|
+
// Injected at build time by esbuild --define:GOGCLI_VERSION=... At test runtime
|
|
14
|
+
// the define is not applied, so the fallback branch runs. The injected branch
|
|
15
|
+
// is exercised in the built bundle, not in vitest.
|
|
12
16
|
declare const GOGCLI_VERSION: string;
|
|
17
|
+
/* v8 ignore next */
|
|
13
18
|
export const VERSION = typeof GOGCLI_VERSION !== 'undefined' ? GOGCLI_VERSION : '0.0.0';
|
|
14
19
|
|
|
15
20
|
export function createServer(options?: { name?: string; version?: string }): McpServer {
|
|
@@ -24,11 +29,13 @@ export function createBaseServer(options?: { name?: string; version?: string }):
|
|
|
24
29
|
|
|
25
30
|
registerAuthTools(server);
|
|
26
31
|
registerCalendarTools(server);
|
|
32
|
+
registerClassroomTools(server);
|
|
27
33
|
registerContactsTools(server);
|
|
28
34
|
registerDocsTools(server);
|
|
29
35
|
registerDriveTools(server);
|
|
30
36
|
registerGmailTools(server);
|
|
31
37
|
registerSheetsTools(server);
|
|
38
|
+
registerSlidesTools(server);
|
|
32
39
|
registerTasksTools(server);
|
|
33
40
|
|
|
34
41
|
return server;
|
|
@@ -37,10 +44,12 @@ export function createBaseServer(options?: { name?: string; version?: string }):
|
|
|
37
44
|
export {
|
|
38
45
|
registerAuthTools,
|
|
39
46
|
registerCalendarTools,
|
|
47
|
+
registerClassroomTools,
|
|
40
48
|
registerContactsTools,
|
|
41
49
|
registerDocsTools,
|
|
42
50
|
registerDriveTools,
|
|
43
51
|
registerGmailTools,
|
|
44
52
|
registerSheetsTools,
|
|
53
|
+
registerSlidesTools,
|
|
45
54
|
registerTasksTools,
|
|
46
55
|
};
|
package/src/tools/calendar.ts
CHANGED
|
@@ -125,4 +125,96 @@ export function registerCalendarTools(server: McpServer): void {
|
|
|
125
125
|
}, async ({ subcommand, args, account }) => {
|
|
126
126
|
return runOrDiagnose(['calendar', subcommand, ...args], { account });
|
|
127
127
|
});
|
|
128
|
+
|
|
129
|
+
// ─── Meet API tools ────────────────────────────────────────────
|
|
130
|
+
// Folded into the calendar wrapper because Meet spaces are the
|
|
131
|
+
// conferencing surface attached to calendar events.
|
|
132
|
+
|
|
133
|
+
server.registerTool('gog_meet_create', {
|
|
134
|
+
description: 'Create a Google Meet space and return its meeting code.',
|
|
135
|
+
inputSchema: {
|
|
136
|
+
access: z.enum(['open', 'trusted', 'restricted']).optional().describe('Access type (default: trusted)'),
|
|
137
|
+
open: z.boolean().optional().describe('Open the meeting in a browser after creation'),
|
|
138
|
+
account: accountParam,
|
|
139
|
+
},
|
|
140
|
+
}, async ({ access, open, account }) => {
|
|
141
|
+
const args = ['meet', 'create'];
|
|
142
|
+
if (access) args.push(`--access=${access}`);
|
|
143
|
+
if (open) args.push('--open');
|
|
144
|
+
return runOrDiagnose(args, { account });
|
|
145
|
+
});
|
|
146
|
+
|
|
147
|
+
server.registerTool('gog_meet_get', {
|
|
148
|
+
description: 'Get a Google Meet space by its meeting code.',
|
|
149
|
+
annotations: { readOnlyHint: true },
|
|
150
|
+
inputSchema: {
|
|
151
|
+
meetingCode: z.string().describe('Meeting code (e.g. abc-defg-hij)'),
|
|
152
|
+
account: accountParam,
|
|
153
|
+
},
|
|
154
|
+
}, async ({ meetingCode, account }) => {
|
|
155
|
+
return runOrDiagnose(['meet', 'get', meetingCode], { account });
|
|
156
|
+
});
|
|
157
|
+
|
|
158
|
+
server.registerTool('gog_meet_update', {
|
|
159
|
+
description: 'Update a Google Meet space configuration.',
|
|
160
|
+
annotations: { destructiveHint: true },
|
|
161
|
+
inputSchema: {
|
|
162
|
+
meetingCode: z.string().describe('Meeting code'),
|
|
163
|
+
access: z.enum(['open', 'trusted', 'restricted']).optional().describe('Access type'),
|
|
164
|
+
account: accountParam,
|
|
165
|
+
},
|
|
166
|
+
}, async ({ meetingCode, access, account }) => {
|
|
167
|
+
const args = ['meet', 'update', meetingCode];
|
|
168
|
+
if (access) args.push(`--access=${access}`);
|
|
169
|
+
return runOrDiagnose(args, { account });
|
|
170
|
+
});
|
|
171
|
+
|
|
172
|
+
server.registerTool('gog_meet_end', {
|
|
173
|
+
description: 'End the active conference in a Google Meet space.',
|
|
174
|
+
annotations: { destructiveHint: true },
|
|
175
|
+
inputSchema: {
|
|
176
|
+
meetingCode: z.string().describe('Meeting code'),
|
|
177
|
+
account: accountParam,
|
|
178
|
+
},
|
|
179
|
+
}, async ({ meetingCode, account }) => {
|
|
180
|
+
return runOrDiagnose(['meet', 'end', meetingCode], { account });
|
|
181
|
+
});
|
|
182
|
+
|
|
183
|
+
server.registerTool('gog_meet_history', {
|
|
184
|
+
description: 'List past calls (conferences) in a Google Meet space.',
|
|
185
|
+
annotations: { readOnlyHint: true },
|
|
186
|
+
inputSchema: {
|
|
187
|
+
meetingCode: z.string().describe('Meeting code'),
|
|
188
|
+
max: z.number().optional().describe('Max results (default: 20)'),
|
|
189
|
+
page: z.string().optional().describe('Page token'),
|
|
190
|
+
all: z.boolean().optional().describe('Fetch all pages'),
|
|
191
|
+
account: accountParam,
|
|
192
|
+
},
|
|
193
|
+
}, async ({ meetingCode, max, page, all, account }) => {
|
|
194
|
+
const args = ['meet', 'history', meetingCode];
|
|
195
|
+
if (max !== undefined) args.push(`--max=${max}`);
|
|
196
|
+
if (page) args.push(`--page=${page}`);
|
|
197
|
+
if (all) args.push('--all');
|
|
198
|
+
return runOrDiagnose(args, { account });
|
|
199
|
+
});
|
|
200
|
+
|
|
201
|
+
server.registerTool('gog_meet_participants', {
|
|
202
|
+
description: 'List participants from the latest (or a specific) Meet call.',
|
|
203
|
+
annotations: { readOnlyHint: true },
|
|
204
|
+
inputSchema: {
|
|
205
|
+
meetingCode: z.string().describe('Meeting code'),
|
|
206
|
+
conference: z.string().optional().describe('Specific conference ID (default: most recent)'),
|
|
207
|
+
max: z.number().optional().describe('Max results (default: 50)'),
|
|
208
|
+
page: z.string().optional().describe('Page token'),
|
|
209
|
+
all: z.boolean().optional().describe('Fetch all pages'),
|
|
210
|
+
account: accountParam,
|
|
211
|
+
},
|
|
212
|
+
}, async ({ meetingCode, conference, max, page, all, account }) => {
|
|
213
|
+
const args = ['meet', 'participants', meetingCode];
|
|
214
|
+
if (conference) args.push(`--conference=${conference}`);
|
|
215
|
+
if (max !== undefined) args.push(`--max=${max}`);
|
|
216
|
+
if (page) args.push(`--page=${page}`);
|
|
217
|
+
if (all) args.push('--all');
|
|
218
|
+
return runOrDiagnose(args, { account });
|
|
219
|
+
});
|
|
128
220
|
}
|