mcp-google-multi 6.0.0-alpha.2 → 6.0.0-alpha.21

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 (60) hide show
  1. package/README.md +5 -3
  2. package/dist/api-probe.d.ts +18 -0
  3. package/dist/api-probe.js +68 -0
  4. package/dist/arg-normalize.d.ts +19 -0
  5. package/dist/arg-normalize.js +90 -0
  6. package/dist/auth.js +15 -72
  7. package/dist/client.js +3 -1
  8. package/dist/discover.js +35 -14
  9. package/dist/discovery-client.d.ts +8 -1
  10. package/dist/discovery-client.js +67 -15
  11. package/dist/doctor.d.ts +12 -0
  12. package/dist/doctor.js +98 -15
  13. package/dist/http-transport.d.ts +3 -0
  14. package/dist/http-transport.js +2 -1
  15. package/dist/index.js +4 -1
  16. package/dist/oauth-consent.d.ts +25 -10
  17. package/dist/oauth-consent.js +85 -39
  18. package/dist/registry.d.ts +12 -0
  19. package/dist/registry.js +61 -3
  20. package/dist/scope-catalog.d.ts +1 -0
  21. package/dist/scope-catalog.js +17 -1
  22. package/dist/services.js +3 -1
  23. package/dist/tools/_errors.js +69 -5
  24. package/dist/tools/_local-files.d.ts +3 -0
  25. package/dist/tools/_local-files.js +34 -0
  26. package/dist/tools/account-wizard.d.ts +10 -0
  27. package/dist/tools/account-wizard.js +52 -19
  28. package/dist/tools/analytics.d.ts +18 -0
  29. package/dist/tools/analytics.js +279 -0
  30. package/dist/tools/drive.d.ts +2 -1
  31. package/dist/tools/drive.js +75 -33
  32. package/dist/tools/generated/_shared.d.ts +6 -0
  33. package/dist/tools/generated/_shared.js +11 -1
  34. package/dist/tools/generated/admin.js +160 -29
  35. package/dist/tools/generated/analytics.d.ts +2 -0
  36. package/dist/tools/generated/analytics.js +981 -0
  37. package/dist/tools/generated/chat.js +39 -12
  38. package/dist/tools/generated/classroom.js +56 -14
  39. package/dist/tools/generated/cloudidentity.js +18 -10
  40. package/dist/tools/generated/cloudsearch.js +4 -3
  41. package/dist/tools/generated/contacts.js +13 -4
  42. package/dist/tools/generated/drive.js +15 -6
  43. package/dist/tools/generated/drivelabels.js +33 -5
  44. package/dist/tools/generated/forms.js +1 -1
  45. package/dist/tools/generated/gmail.js +39 -12
  46. package/dist/tools/generated/index.js +2 -0
  47. package/dist/tools/generated/keep.js +3 -2
  48. package/dist/tools/generated/licensing.js +20 -4
  49. package/dist/tools/generated/meet.js +1 -1
  50. package/dist/tools/generated/reseller.js +8 -2
  51. package/dist/tools/generated/script.js +13 -3
  52. package/dist/tools/generated/searchconsole.js +4 -2
  53. package/dist/tools/generated/sheets.js +2 -1
  54. package/dist/tools/generated/tasks.js +7 -1
  55. package/dist/tools/generated/vault.js +18 -9
  56. package/dist/tools/generated/workspaceevents.js +3 -2
  57. package/dist/tools/gmail.js +3 -3
  58. package/dist/tools/google-api.d.ts +4 -1
  59. package/dist/tools/google-api.js +59 -15
  60. package/package.json +22 -17
@@ -111,10 +111,11 @@ export function registerChatGeneratedTools(registry) {
111
111
  method: { id: "chat.media.upload", httpMethod: "POST", path: "v1/{+parent}/attachments:upload", baseUrl: "https://chat.googleapis.com/", requiredParams: ["parent"], scopes: S_chat_v1[3] },
112
112
  params: [{ "field": "parent", "api": "parent", "location": "path" }, { "field": "fields", "api": "fields", "location": "query" }],
113
113
  hasBody: true,
114
+ bodyParams: [{ "field": "filename", "api": "filename" }],
114
115
  shape: {
115
116
  account: accountField(),
116
117
  parent: z.string().describe("Required. Resource name of the Chat space in which the attachment is uploaded. Format \"spaces/{space}\"."),
117
- body: coerceJson(z.record(z.string(), z.unknown())).describe("UploadAttachmentRequest JSON request body. Top-level fields: filename."),
118
+ filename: z.string().describe("Required. The filename of the attachment, including the file extension.").optional(),
118
119
  fields: z.string().optional().describe('Response field mask.'),
119
120
  },
120
121
  });
@@ -125,10 +126,10 @@ export function registerChatGeneratedTools(registry) {
125
126
  method: { id: "chat.spaces.completeImport", httpMethod: "POST", path: "v1/{+name}:completeImport", baseUrl: "https://chat.googleapis.com/", requiredParams: ["name"], scopes: S_chat_v1[4] },
126
127
  params: [{ "field": "name", "api": "name", "location": "path" }, { "field": "fields", "api": "fields", "location": "query" }],
127
128
  hasBody: true,
129
+ bodyParams: [],
128
130
  shape: {
129
131
  account: accountField(),
130
132
  name: z.string().describe("Required. Resource name of the import mode space. Format: `spaces/{space}`"),
131
- body: coerceJson(z.record(z.string(), z.unknown())).describe("CompleteImportSpaceRequest JSON request body."),
132
133
  fields: z.string().optional().describe('Response field mask.'),
133
134
  },
134
135
  });
@@ -374,10 +375,16 @@ export function registerChatGeneratedTools(registry) {
374
375
  method: { id: "chat.spaces.messages.search", httpMethod: "POST", path: "v1/{+parent}/messages:search", baseUrl: "https://chat.googleapis.com/", requiredParams: ["parent"], scopes: S_chat_v1[19] },
375
376
  params: [{ "field": "parent", "api": "parent", "location": "path" }, { "field": "fields", "api": "fields", "location": "query" }],
376
377
  hasBody: true,
378
+ bodyParams: [{ "field": "filter", "api": "filter" }, { "field": "markupSyntax", "api": "markupSyntax" }, { "field": "orderBy", "api": "orderBy" }, { "field": "pageSize", "api": "pageSize" }, { "field": "pageToken", "api": "pageToken" }, { "field": "view", "api": "view" }],
377
379
  shape: {
378
380
  account: accountField(),
379
381
  parent: z.string().describe("Required. The resource name of the space to search within. To search across all spaces the user has access to, set this field to `spaces/-`. Using any other value for `parent` results in an `INVALID_A"),
380
- body: coerceJson(z.record(z.string(), z.unknown())).describe("SearchMessagesRequest JSON request body. Top-level fields: filter, markupSyntax, orderBy, pageSize, pageToken, view."),
382
+ filter: z.string().describe("Required. A search query. The query can specify one or more search keywords, which are used to filter the results, You can also filter the results using the following message fields: - `create_time`: ").optional(),
383
+ markupSyntax: z.enum(["MARKUP_SYNTAX_UNSPECIFIED", "MARKUP_SYNTAX_CHAT", "MARKUP_SYNTAX_MARKDOWN"]).describe("Optional. Specifies the desired output syntax for the Chat message `formatted_text` field.").optional(),
384
+ orderBy: z.string().describe("Optional. How the results list is ordered. Supported attributes to order by are: - `create_time`: Sorts the results by the time of the message creation. Default value. - `relevance`: Sorts the results").optional(),
385
+ pageSize: z.number().describe("Optional. The maximum number of results to return. The service may return fewer than this value. If unspecified, at most 25 are returned. The maximum value is 100. If you use a value more than 100, it").optional(),
386
+ pageToken: z.string().describe("Optional. A token, received from the previous search messages call. Provide this parameter to retrieve the subsequent page. When paginating, all other parameters provided should match the call that pr").optional(),
387
+ view: z.enum(["SEARCH_MESSAGES_VIEW_UNSPECIFIED", "SEARCH_MESSAGES_VIEW_BASIC", "SEARCH_MESSAGES_VIEW_FULL"]).describe("Optional. Specifies what kind of search results view to return. The default is `SEARCH_MESSAGES_VIEW_BASIC`.").optional(),
381
388
  fields: z.string().optional().describe('Response field mask.'),
382
389
  },
383
390
  });
@@ -492,10 +499,12 @@ export function registerChatGeneratedTools(registry) {
492
499
  method: { id: "chat.users.availability.markAsActive", httpMethod: "POST", path: "v1/{+name}:markAsActive", baseUrl: "https://chat.googleapis.com/", requiredParams: ["name"], scopes: S_chat_v1[25] },
493
500
  params: [{ "field": "name", "api": "name", "location": "path" }, { "field": "fields", "api": "fields", "location": "query" }],
494
501
  hasBody: true,
502
+ bodyParams: [{ "field": "expireTime", "api": "expireTime" }, { "field": "ttl", "api": "ttl" }],
495
503
  shape: {
496
504
  account: accountField(),
497
505
  name: z.string().describe("Required. The resource name of the availability to mark as active. Format: users/{user}/availability `{user}` is the id for the Person in the People API or Admin SDK directory API. For example, `users"),
498
- body: coerceJson(z.record(z.string(), z.unknown())).describe("MarkAsActiveRequest JSON request body. Top-level fields: expireTime, ttl."),
506
+ expireTime: z.string().describe("The absolute timestamp when the ACTIVE state expires.").optional(),
507
+ ttl: z.string().describe("The duration from the current time until the ACTIVE state expires. Using a short TTL can effectively reset the user's state to be based on activity after this brief duration.").optional(),
499
508
  fields: z.string().optional().describe('Response field mask.'),
500
509
  },
501
510
  });
@@ -506,10 +515,10 @@ export function registerChatGeneratedTools(registry) {
506
515
  method: { id: "chat.users.availability.markAsAway", httpMethod: "POST", path: "v1/{+name}:markAsAway", baseUrl: "https://chat.googleapis.com/", requiredParams: ["name"], scopes: S_chat_v1[25] },
507
516
  params: [{ "field": "name", "api": "name", "location": "path" }, { "field": "fields", "api": "fields", "location": "query" }],
508
517
  hasBody: true,
518
+ bodyParams: [],
509
519
  shape: {
510
520
  account: accountField(),
511
521
  name: z.string().describe("Required. The resource name of the availability to mark as away. Format: users/{user}/availability `{user}` is the id for the Person in the People API or Admin SDK directory API. For example, `users/1"),
512
- body: coerceJson(z.record(z.string(), z.unknown())).describe("MarkAsAwayRequest JSON request body."),
513
522
  fields: z.string().optional().describe('Response field mask.'),
514
523
  },
515
524
  });
@@ -520,10 +529,12 @@ export function registerChatGeneratedTools(registry) {
520
529
  method: { id: "chat.users.availability.markAsDoNotDisturb", httpMethod: "POST", path: "v1/{+name}:markAsDoNotDisturb", baseUrl: "https://chat.googleapis.com/", requiredParams: ["name"], scopes: S_chat_v1[25] },
521
530
  params: [{ "field": "name", "api": "name", "location": "path" }, { "field": "fields", "api": "fields", "location": "query" }],
522
531
  hasBody: true,
532
+ bodyParams: [{ "field": "expireTime", "api": "expireTime" }, { "field": "ttl", "api": "ttl" }],
523
533
  shape: {
524
534
  account: accountField(),
525
535
  name: z.string().describe("Required. The resource name of the availability to mark as Do Not Disturb. Format: users/{user}/availability `{user}` is the id for the Person in the People API or Admin SDK directory API. For example"),
526
- body: coerceJson(z.record(z.string(), z.unknown())).describe("MarkAsDoNotDisturbRequest JSON request body. Top-level fields: expireTime, ttl."),
536
+ expireTime: z.string().describe("The absolute timestamp when the DND state expires.").optional(),
537
+ ttl: z.string().describe("The duration from the current time until the DND state expires.").optional(),
527
538
  fields: z.string().optional().describe('Response field mask.'),
528
539
  },
529
540
  });
@@ -549,10 +560,14 @@ export function registerChatGeneratedTools(registry) {
549
560
  method: { id: "chat.users.sections.create", httpMethod: "POST", path: "v1/{+parent}/sections", baseUrl: "https://chat.googleapis.com/", requiredParams: ["parent"], scopes: S_chat_v1[26] },
550
561
  params: [{ "field": "parent", "api": "parent", "location": "path" }, { "field": "fields", "api": "fields", "location": "query" }],
551
562
  hasBody: true,
563
+ bodyParams: [{ "field": "displayName", "api": "displayName" }, { "field": "name", "api": "name" }, { "field": "sortOrder", "api": "sortOrder" }, { "field": "type", "api": "type" }],
552
564
  shape: {
553
565
  account: accountField(),
554
566
  parent: z.string().describe("Required. The parent resource name where the section is created. Format: `users/{user}`"),
555
- body: coerceJson(z.record(z.string(), z.unknown())).describe("GoogleChatV1Section JSON request body. Top-level fields: displayName, name, sortOrder, type."),
567
+ displayName: z.string().describe("Optional. The section's display name. Only populated for sections of type `CUSTOM_SECTION`. Supports up to 80 characters. Required when creating a `CUSTOM_SECTION`.").optional(),
568
+ name: z.string().describe("Identifier. Resource name of the section. For system sections, the section ID is a constant string: - DEFAULT_DIRECT_MESSAGES: `users/{user}/sections/default-direct-messages` - DEFAULT_SPACES: `users/").optional(),
569
+ sortOrder: z.number().describe("Output only. The order of the section in relation to other sections. Sections with a lower `sort_order` value appear before sections with a higher value.").optional(),
570
+ type: z.enum(["SECTION_TYPE_UNSPECIFIED", "CUSTOM_SECTION", "DEFAULT_DIRECT_MESSAGES", "DEFAULT_SPACES", "DEFAULT_APPS"]).describe("Required. The type of the section.").optional(),
556
571
  fields: z.string().optional().describe('Response field mask.'),
557
572
  },
558
573
  });
@@ -592,10 +607,11 @@ export function registerChatGeneratedTools(registry) {
592
607
  method: { id: "chat.users.sections.items.move", httpMethod: "POST", path: "v1/{+name}:move", baseUrl: "https://chat.googleapis.com/", requiredParams: ["name"], scopes: S_chat_v1[26] },
593
608
  params: [{ "field": "name", "api": "name", "location": "path" }, { "field": "fields", "api": "fields", "location": "query" }],
594
609
  hasBody: true,
610
+ bodyParams: [{ "field": "targetSection", "api": "targetSection" }],
595
611
  shape: {
596
612
  account: accountField(),
597
613
  name: z.string().describe("Required. The resource name of the section item to move. Format: `users/{user}/sections/{section}/items/{item}`"),
598
- body: coerceJson(z.record(z.string(), z.unknown())).describe("MoveSectionItemRequest JSON request body. Top-level fields: targetSection."),
614
+ targetSection: z.string().describe("Required. The resource name of the section to move the section item to. Format: `users/{user}/sections/{section}`").optional(),
599
615
  fields: z.string().optional().describe('Response field mask.'),
600
616
  },
601
617
  });
@@ -621,11 +637,15 @@ export function registerChatGeneratedTools(registry) {
621
637
  method: { id: "chat.users.sections.patch", httpMethod: "PATCH", path: "v1/{+name}", baseUrl: "https://chat.googleapis.com/", requiredParams: ["name"], scopes: S_chat_v1[26] },
622
638
  params: [{ "field": "name", "api": "name", "location": "path" }, { "field": "updateMask", "api": "updateMask", "location": "query" }, { "field": "fields", "api": "fields", "location": "query" }],
623
639
  hasBody: true,
640
+ bodyParams: [{ "field": "displayName", "api": "displayName" }, { "field": "name_", "api": "name" }, { "field": "sortOrder", "api": "sortOrder" }, { "field": "type", "api": "type" }],
624
641
  shape: {
625
642
  account: accountField(),
626
643
  name: z.string().describe("Identifier. Resource name of the section. For system sections, the section ID is a constant string: - DEFAULT_DIRECT_MESSAGES: `users/{user}/sections/default-direct-messages` - DEFAULT_SPACES: `users/"),
627
644
  updateMask: z.string().describe("Required. The mask to specify which fields to update. Currently supported field paths: - `display_name`").optional(),
628
- body: coerceJson(z.record(z.string(), z.unknown())).describe("GoogleChatV1Section JSON request body. Top-level fields: displayName, name, sortOrder, type."),
645
+ displayName: z.string().describe("Optional. The section's display name. Only populated for sections of type `CUSTOM_SECTION`. Supports up to 80 characters. Required when creating a `CUSTOM_SECTION`.").optional(),
646
+ name_: z.string().describe("Identifier. Resource name of the section. For system sections, the section ID is a constant string: - DEFAULT_DIRECT_MESSAGES: `users/{user}/sections/default-direct-messages` - DEFAULT_SPACES: `users/").optional(),
647
+ sortOrder: z.number().describe("Output only. The order of the section in relation to other sections. Sections with a lower `sort_order` value appear before sections with a higher value.").optional(),
648
+ type: z.enum(["SECTION_TYPE_UNSPECIFIED", "CUSTOM_SECTION", "DEFAULT_DIRECT_MESSAGES", "DEFAULT_SPACES", "DEFAULT_APPS"]).describe("Required. The type of the section.").optional(),
629
649
  fields: z.string().optional().describe('Response field mask.'),
630
650
  },
631
651
  });
@@ -636,10 +656,12 @@ export function registerChatGeneratedTools(registry) {
636
656
  method: { id: "chat.users.sections.position", httpMethod: "POST", path: "v1/{+name}:position", baseUrl: "https://chat.googleapis.com/", requiredParams: ["name"], scopes: S_chat_v1[26] },
637
657
  params: [{ "field": "name", "api": "name", "location": "path" }, { "field": "fields", "api": "fields", "location": "query" }],
638
658
  hasBody: true,
659
+ bodyParams: [{ "field": "relativePosition", "api": "relativePosition" }, { "field": "sortOrder", "api": "sortOrder" }],
639
660
  shape: {
640
661
  account: accountField(),
641
662
  name: z.string().describe("Required. The resource name of the section to position. Format: `users/{user}/sections/{section}`"),
642
- body: coerceJson(z.record(z.string(), z.unknown())).describe("PositionSectionRequest JSON request body. Top-level fields: relativePosition, sortOrder."),
663
+ relativePosition: z.enum(["POSITION_UNSPECIFIED", "START", "END"]).describe("Optional. The relative position of the section in the list of sections.").optional(),
664
+ sortOrder: z.number().describe("Optional. The absolute position of the section in the list of sections. The position must be greater than 0. If the position is greater than the number of sections, the section will be appended to the").optional(),
643
665
  fields: z.string().optional().describe('Response field mask.'),
644
666
  },
645
667
  });
@@ -676,11 +698,14 @@ export function registerChatGeneratedTools(registry) {
676
698
  method: { id: "chat.users.spaces.spaceNotificationSetting.patch", httpMethod: "PATCH", path: "v1/{+name}", baseUrl: "https://chat.googleapis.com/", requiredParams: ["name"], scopes: S_chat_v1[29] },
677
699
  params: [{ "field": "name", "api": "name", "location": "path" }, { "field": "updateMask", "api": "updateMask", "location": "query" }, { "field": "fields", "api": "fields", "location": "query" }],
678
700
  hasBody: true,
701
+ bodyParams: [{ "field": "muteSetting", "api": "muteSetting" }, { "field": "name_", "api": "name" }, { "field": "notificationSetting", "api": "notificationSetting" }],
679
702
  shape: {
680
703
  account: accountField(),
681
704
  name: z.string().describe("Identifier. The resource name of the space notification setting. Format: `users/{user}/spaces/{space}/spaceNotificationSetting`."),
682
705
  updateMask: z.string().describe("Required. Supported field paths: - `notification_setting` - `mute_setting`").optional(),
683
- body: coerceJson(z.record(z.string(), z.unknown())).describe("SpaceNotificationSetting JSON request body. Top-level fields: muteSetting, name, notificationSetting."),
706
+ muteSetting: z.enum(["MUTE_SETTING_UNSPECIFIED", "UNMUTED", "MUTED"]).describe("The space notification mute setting.").optional(),
707
+ name_: z.string().describe("Identifier. The resource name of the space notification setting. Format: `users/{user}/spaces/{space}/spaceNotificationSetting`.").optional(),
708
+ notificationSetting: z.enum(["NOTIFICATION_SETTING_UNSPECIFIED", "ALL", "MAIN_CONVERSATIONS", "FOR_YOU", "OFF"]).describe("The notification setting.").optional(),
684
709
  fields: z.string().optional().describe('Response field mask.'),
685
710
  },
686
711
  });
@@ -704,11 +729,13 @@ export function registerChatGeneratedTools(registry) {
704
729
  method: { id: "chat.users.spaces.updateSpaceReadState", httpMethod: "PATCH", path: "v1/{+name}", baseUrl: "https://chat.googleapis.com/", requiredParams: ["name"], scopes: S_chat_v1[30] },
705
730
  params: [{ "field": "name", "api": "name", "location": "path" }, { "field": "updateMask", "api": "updateMask", "location": "query" }, { "field": "fields", "api": "fields", "location": "query" }],
706
731
  hasBody: true,
732
+ bodyParams: [{ "field": "lastReadTime", "api": "lastReadTime" }, { "field": "name_", "api": "name" }],
707
733
  shape: {
708
734
  account: accountField(),
709
735
  name: z.string().describe("Resource name of the space read state. Format: `users/{user}/spaces/{space}/spaceReadState`"),
710
736
  updateMask: z.string().describe("Required. The field paths to update. Currently supported field paths: - `last_read_time` When the `last_read_time` is before the latest message create time, the space appears as unread in the UI. To m").optional(),
711
- body: coerceJson(z.record(z.string(), z.unknown())).describe("SpaceReadState JSON request body. Top-level fields: lastReadTime, name."),
737
+ lastReadTime: z.string().describe("Optional. The time when the user's space read state was updated. Usually this corresponds with either the timestamp of the last read message, or a timestamp specified by the user to mark the last read").optional(),
738
+ name_: z.string().describe("Resource name of the space read state. Format: `users/{user}/spaces/{space}/spaceReadState`").optional(),
712
739
  fields: z.string().optional().describe('Response field mask.'),
713
740
  },
714
741
  });
@@ -37,10 +37,11 @@ export function registerClassroomGeneratedTools(registry) {
37
37
  method: { id: "classroom.courses.aliases.create", httpMethod: "POST", path: "v1/courses/{courseId}/aliases", baseUrl: "https://classroom.googleapis.com/", requiredParams: ["courseId"], scopes: S_classroom_v1[0] },
38
38
  params: [{ "field": "courseId", "api": "courseId", "location": "path" }, { "field": "fields", "api": "fields", "location": "query" }],
39
39
  hasBody: true,
40
+ bodyParams: [{ "field": "alias", "api": "alias" }],
40
41
  shape: {
41
42
  account: accountField(),
42
43
  courseId: z.string().describe("Identifier of the course to alias. This identifier can be either the Classroom-assigned identifier or an alias."),
43
- body: coerceJson(z.record(z.string(), z.unknown())).describe("CourseAlias JSON request body. Top-level fields: alias."),
44
+ alias: z.string().describe("Alias string. The format of the string indicates the desired alias scoping. * `d:` indicates a domain-scoped alias. Example: `d:math_101` * `p:` indicates a project-scoped alias. Example: `p:abc123` T").optional(),
44
45
  fields: z.string().optional().describe('Response field mask.'),
45
46
  },
46
47
  });
@@ -372,6 +373,7 @@ export function registerClassroomGeneratedTools(registry) {
372
373
  method: { id: "classroom.courses.courseWork.addOnAttachments.studentSubmissions.patch", httpMethod: "PATCH", path: "v1/courses/{courseId}/courseWork/{itemId}/addOnAttachments/{attachmentId}/studentSubmissions/{submissionId}", baseUrl: "https://classroom.googleapis.com/", requiredParams: ["courseId", "itemId", "attachmentId", "submissionId"], scopes: S_classroom_v1[2] },
373
374
  params: [{ "field": "attachmentId", "api": "attachmentId", "location": "path" }, { "field": "courseId", "api": "courseId", "location": "path" }, { "field": "itemId", "api": "itemId", "location": "path" }, { "field": "submissionId", "api": "submissionId", "location": "path" }, { "field": "postId", "api": "postId", "location": "query" }, { "field": "updateMask", "api": "updateMask", "location": "query" }, { "field": "fields", "api": "fields", "location": "query" }],
374
375
  hasBody: true,
376
+ bodyParams: [{ "field": "courseWorkSubmissionId", "api": "courseWorkSubmissionId" }, { "field": "id", "api": "id" }, { "field": "pointsEarned", "api": "pointsEarned" }, { "field": "postSubmissionState", "api": "postSubmissionState" }, { "field": "userId", "api": "userId" }],
375
377
  shape: {
376
378
  account: accountField(),
377
379
  attachmentId: z.string().describe("Required. Identifier of the attachment."),
@@ -380,7 +382,11 @@ export function registerClassroomGeneratedTools(registry) {
380
382
  submissionId: z.string().describe("Required. Identifier of the student's submission."),
381
383
  postId: z.string().describe("Optional. Deprecated, use `item_id` instead.").optional(),
382
384
  updateMask: z.string().describe("Required. Mask that identifies which fields on the attachment to update. The update fails if invalid fields are specified. If a field supports empty values, it can be cleared by specifying it in the u").optional(),
383
- body: coerceJson(z.record(z.string(), z.unknown())).describe("AddOnAttachmentStudentSubmission JSON request body. Top-level fields: courseWorkSubmissionId, id, pointsEarned, postSubmissionState, userId."),
385
+ courseWorkSubmissionId: z.string().describe("Output only. Identifier of the course work submission under which this attachment submission was made.").optional(),
386
+ id: z.string().describe("Output only. Classroom-assigned identifier for this student submission. This is unique among submissions for the relevant course work and add-on attachment combination.").optional(),
387
+ pointsEarned: z.number().describe("Student grade on this attachment. If unset, no grade was set.").optional(),
388
+ postSubmissionState: z.enum(["SUBMISSION_STATE_UNSPECIFIED", "NEW", "CREATED", "TURNED_IN", "RETURNED", "RECLAIMED_BY_STUDENT"]).describe("Submission state of add-on attachment's parent post (i.e. assignment).").optional(),
389
+ userId: z.string().describe("Identifier for the student that owns this submission. Requires the user to be a teacher in the course and have permission to read student submissions. See [`courseWork.studentSubmissions.get`](/worksp").optional(),
384
390
  fields: z.string().optional().describe('Response field mask.'),
385
391
  },
386
392
  });
@@ -643,12 +649,12 @@ export function registerClassroomGeneratedTools(registry) {
643
649
  method: { id: "classroom.courses.courseWork.studentSubmissions.reclaim", httpMethod: "POST", path: "v1/courses/{courseId}/courseWork/{courseWorkId}/studentSubmissions/{id}:reclaim", baseUrl: "https://classroom.googleapis.com/", requiredParams: ["courseId", "courseWorkId", "id"], scopes: S_classroom_v1[11] },
644
650
  params: [{ "field": "courseId", "api": "courseId", "location": "path" }, { "field": "courseWorkId", "api": "courseWorkId", "location": "path" }, { "field": "id", "api": "id", "location": "path" }, { "field": "fields", "api": "fields", "location": "query" }],
645
651
  hasBody: true,
652
+ bodyParams: [],
646
653
  shape: {
647
654
  account: accountField(),
648
655
  courseId: z.string().describe("Identifier of the course. This identifier can be either the Classroom-assigned identifier or an alias."),
649
656
  courseWorkId: z.string().describe("Identifier of the course work."),
650
657
  id: z.string().describe("Identifier of the student submission."),
651
- body: coerceJson(z.record(z.string(), z.unknown())).describe("ReclaimStudentSubmissionRequest JSON request body."),
652
658
  fields: z.string().optional().describe('Response field mask.'),
653
659
  },
654
660
  });
@@ -659,12 +665,12 @@ export function registerClassroomGeneratedTools(registry) {
659
665
  method: { id: "classroom.courses.courseWork.studentSubmissions.return", httpMethod: "POST", path: "v1/courses/{courseId}/courseWork/{courseWorkId}/studentSubmissions/{id}:return", baseUrl: "https://classroom.googleapis.com/", requiredParams: ["courseId", "courseWorkId", "id"], scopes: S_classroom_v1[7] },
660
666
  params: [{ "field": "courseId", "api": "courseId", "location": "path" }, { "field": "courseWorkId", "api": "courseWorkId", "location": "path" }, { "field": "id", "api": "id", "location": "path" }, { "field": "fields", "api": "fields", "location": "query" }],
661
667
  hasBody: true,
668
+ bodyParams: [],
662
669
  shape: {
663
670
  account: accountField(),
664
671
  courseId: z.string().describe("Identifier of the course. This identifier can be either the Classroom-assigned identifier or an alias."),
665
672
  courseWorkId: z.string().describe("Identifier of the course work."),
666
673
  id: z.string().describe("Identifier of the student submission."),
667
- body: coerceJson(z.record(z.string(), z.unknown())).describe("ReturnStudentSubmissionRequest JSON request body."),
668
674
  fields: z.string().optional().describe('Response field mask.'),
669
675
  },
670
676
  });
@@ -675,12 +681,12 @@ export function registerClassroomGeneratedTools(registry) {
675
681
  method: { id: "classroom.courses.courseWork.studentSubmissions.turnIn", httpMethod: "POST", path: "v1/courses/{courseId}/courseWork/{courseWorkId}/studentSubmissions/{id}:turnIn", baseUrl: "https://classroom.googleapis.com/", requiredParams: ["courseId", "courseWorkId", "id"], scopes: S_classroom_v1[11] },
676
682
  params: [{ "field": "courseId", "api": "courseId", "location": "path" }, { "field": "courseWorkId", "api": "courseWorkId", "location": "path" }, { "field": "id", "api": "id", "location": "path" }, { "field": "fields", "api": "fields", "location": "query" }],
677
683
  hasBody: true,
684
+ bodyParams: [],
678
685
  shape: {
679
686
  account: accountField(),
680
687
  courseId: z.string().describe("Identifier of the course. This identifier can be either the Classroom-assigned identifier or an alias."),
681
688
  courseWorkId: z.string().describe("Identifier of the course work."),
682
689
  id: z.string().describe("Identifier of the student submission."),
683
- body: coerceJson(z.record(z.string(), z.unknown())).describe("TurnInStudentSubmissionRequest JSON request body."),
684
690
  fields: z.string().optional().describe('Response field mask.'),
685
691
  },
686
692
  });
@@ -1071,6 +1077,7 @@ export function registerClassroomGeneratedTools(registry) {
1071
1077
  method: { id: "classroom.courses.posts.addOnAttachments.studentSubmissions.patch", httpMethod: "PATCH", path: "v1/courses/{courseId}/posts/{postId}/addOnAttachments/{attachmentId}/studentSubmissions/{submissionId}", baseUrl: "https://classroom.googleapis.com/", requiredParams: ["courseId", "postId", "attachmentId", "submissionId"], scopes: S_classroom_v1[2] },
1072
1078
  params: [{ "field": "attachmentId", "api": "attachmentId", "location": "path" }, { "field": "courseId", "api": "courseId", "location": "path" }, { "field": "postId", "api": "postId", "location": "path" }, { "field": "submissionId", "api": "submissionId", "location": "path" }, { "field": "itemId", "api": "itemId", "location": "query" }, { "field": "updateMask", "api": "updateMask", "location": "query" }, { "field": "fields", "api": "fields", "location": "query" }],
1073
1079
  hasBody: true,
1080
+ bodyParams: [{ "field": "courseWorkSubmissionId", "api": "courseWorkSubmissionId" }, { "field": "id", "api": "id" }, { "field": "pointsEarned", "api": "pointsEarned" }, { "field": "postSubmissionState", "api": "postSubmissionState" }, { "field": "userId", "api": "userId" }],
1074
1081
  shape: {
1075
1082
  account: accountField(),
1076
1083
  attachmentId: z.string().describe("Required. Identifier of the attachment."),
@@ -1079,7 +1086,11 @@ export function registerClassroomGeneratedTools(registry) {
1079
1086
  submissionId: z.string().describe("Required. Identifier of the student's submission."),
1080
1087
  itemId: z.string().describe("Identifier of the `Announcement`, `CourseWork`, or `CourseWorkMaterial` under which the attachment is attached. This field is required, but is not marked as such while we are migrating from post_id.").optional(),
1081
1088
  updateMask: z.string().describe("Required. Mask that identifies which fields on the attachment to update. The update fails if invalid fields are specified. If a field supports empty values, it can be cleared by specifying it in the u").optional(),
1082
- body: coerceJson(z.record(z.string(), z.unknown())).describe("AddOnAttachmentStudentSubmission JSON request body. Top-level fields: courseWorkSubmissionId, id, pointsEarned, postSubmissionState, userId."),
1089
+ courseWorkSubmissionId: z.string().describe("Output only. Identifier of the course work submission under which this attachment submission was made.").optional(),
1090
+ id: z.string().describe("Output only. Classroom-assigned identifier for this student submission. This is unique among submissions for the relevant course work and add-on attachment combination.").optional(),
1091
+ pointsEarned: z.number().describe("Student grade on this attachment. If unset, no grade was set.").optional(),
1092
+ postSubmissionState: z.enum(["SUBMISSION_STATE_UNSPECIFIED", "NEW", "CREATED", "TURNED_IN", "RETURNED", "RECLAIMED_BY_STUDENT"]).describe("Submission state of add-on attachment's parent post (i.e. assignment).").optional(),
1093
+ userId: z.string().describe("Identifier for the student that owns this submission. Requires the user to be a teacher in the course and have permission to read student submissions. See [`courseWork.studentSubmissions.get`](/worksp").optional(),
1083
1094
  fields: z.string().optional().describe('Response field mask.'),
1084
1095
  },
1085
1096
  });
@@ -1107,10 +1118,13 @@ export function registerClassroomGeneratedTools(registry) {
1107
1118
  method: { id: "classroom.courses.studentGroups.create", httpMethod: "POST", path: "v1/courses/{courseId}/studentGroups", baseUrl: "https://classroom.googleapis.com/", requiredParams: ["courseId"], scopes: S_classroom_v1[14] },
1108
1119
  params: [{ "field": "courseId", "api": "courseId", "location": "path" }, { "field": "fields", "api": "fields", "location": "query" }],
1109
1120
  hasBody: true,
1121
+ bodyParams: [{ "field": "courseId_", "api": "courseId" }, { "field": "id", "api": "id" }, { "field": "title", "api": "title" }],
1110
1122
  shape: {
1111
1123
  account: accountField(),
1112
1124
  courseId: z.string().describe("Required. The identifier of the course."),
1113
- body: coerceJson(z.record(z.string(), z.unknown())).describe("StudentGroup JSON request body. Top-level fields: courseId, id, title."),
1125
+ courseId_: z.string().describe("The identifier of the course.").optional(),
1126
+ id: z.string().describe("The identifier of the student group.").optional(),
1127
+ title: z.string().describe("The title of the student group.").optional(),
1114
1128
  fields: z.string().optional().describe('Response field mask.'),
1115
1129
  },
1116
1130
  });
@@ -1150,12 +1164,15 @@ export function registerClassroomGeneratedTools(registry) {
1150
1164
  method: { id: "classroom.courses.studentGroups.patch", httpMethod: "PATCH", path: "v1/courses/{courseId}/studentGroups/{id}", baseUrl: "https://classroom.googleapis.com/", requiredParams: ["courseId", "id"], scopes: S_classroom_v1[14] },
1151
1165
  params: [{ "field": "courseId", "api": "courseId", "location": "path" }, { "field": "id", "api": "id", "location": "path" }, { "field": "updateMask", "api": "updateMask", "location": "query" }, { "field": "fields", "api": "fields", "location": "query" }],
1152
1166
  hasBody: true,
1167
+ bodyParams: [{ "field": "courseId_", "api": "courseId" }, { "field": "id_", "api": "id" }, { "field": "title", "api": "title" }],
1153
1168
  shape: {
1154
1169
  account: accountField(),
1155
1170
  courseId: z.string().describe("Required. Identifier of the course."),
1156
1171
  id: z.string().describe("Required. Identifier of the student group."),
1157
1172
  updateMask: z.string().describe("Required. Mask that identifies which fields on the student group to update. This field is required to do an update. The update fails if invalid fields are specified. The following fields can be specif").optional(),
1158
- body: coerceJson(z.record(z.string(), z.unknown())).describe("StudentGroup JSON request body. Top-level fields: courseId, id, title."),
1173
+ courseId_: z.string().describe("The identifier of the course.").optional(),
1174
+ id_: z.string().describe("The identifier of the student group.").optional(),
1175
+ title: z.string().describe("The title of the student group.").optional(),
1159
1176
  fields: z.string().optional().describe('Response field mask.'),
1160
1177
  },
1161
1178
  });
@@ -1166,11 +1183,14 @@ export function registerClassroomGeneratedTools(registry) {
1166
1183
  method: { id: "classroom.courses.studentGroups.studentGroupMembers.create", httpMethod: "POST", path: "v1/courses/{courseId}/studentGroups/{studentGroupId}/studentGroupMembers", baseUrl: "https://classroom.googleapis.com/", requiredParams: ["courseId", "studentGroupId"], scopes: S_classroom_v1[14] },
1167
1184
  params: [{ "field": "courseId", "api": "courseId", "location": "path" }, { "field": "studentGroupId", "api": "studentGroupId", "location": "path" }, { "field": "fields", "api": "fields", "location": "query" }],
1168
1185
  hasBody: true,
1186
+ bodyParams: [{ "field": "courseId_", "api": "courseId" }, { "field": "studentGroupId_", "api": "studentGroupId" }, { "field": "userId", "api": "userId" }],
1169
1187
  shape: {
1170
1188
  account: accountField(),
1171
1189
  courseId: z.string().describe("Required. The identifier of the course."),
1172
1190
  studentGroupId: z.string().describe("Required. The identifier of the student group."),
1173
- body: coerceJson(z.record(z.string(), z.unknown())).describe("StudentGroupMember JSON request body. Top-level fields: courseId, studentGroupId, userId."),
1191
+ courseId_: z.string().describe("The identifier of the course.").optional(),
1192
+ studentGroupId_: z.string().describe("The identifier of the student group.").optional(),
1193
+ userId: z.string().describe("Identifier of the student.").optional(),
1174
1194
  fields: z.string().optional().describe('Response field mask.'),
1175
1195
  },
1176
1196
  });
@@ -1327,10 +1347,14 @@ export function registerClassroomGeneratedTools(registry) {
1327
1347
  method: { id: "classroom.courses.topics.create", httpMethod: "POST", path: "v1/courses/{courseId}/topics", baseUrl: "https://classroom.googleapis.com/", requiredParams: ["courseId"], scopes: S_classroom_v1[18] },
1328
1348
  params: [{ "field": "courseId", "api": "courseId", "location": "path" }, { "field": "fields", "api": "fields", "location": "query" }],
1329
1349
  hasBody: true,
1350
+ bodyParams: [{ "field": "courseId_", "api": "courseId" }, { "field": "name", "api": "name" }, { "field": "topicId", "api": "topicId" }, { "field": "updateTime", "api": "updateTime" }],
1330
1351
  shape: {
1331
1352
  account: accountField(),
1332
1353
  courseId: z.string().describe("Identifier of the course. This identifier can be either the Classroom-assigned identifier or an alias."),
1333
- body: coerceJson(z.record(z.string(), z.unknown())).describe("Topic JSON request body. Top-level fields: courseId, name, topicId, updateTime."),
1354
+ courseId_: z.string().describe("Identifier of the course. Read-only.").optional(),
1355
+ name: z.string().describe("The name of the topic, generated by the user. Leading and trailing whitespaces, if any, are trimmed. Also, multiple consecutive whitespaces are collapsed into one inside the name. The result must be a").optional(),
1356
+ topicId: z.string().describe("Unique identifier for the topic. Read-only.").optional(),
1357
+ updateTime: z.string().describe("The time the topic was last updated by the system. Read-only.").optional(),
1334
1358
  fields: z.string().optional().describe('Response field mask.'),
1335
1359
  },
1336
1360
  });
@@ -1384,12 +1408,16 @@ export function registerClassroomGeneratedTools(registry) {
1384
1408
  method: { id: "classroom.courses.topics.patch", httpMethod: "PATCH", path: "v1/courses/{courseId}/topics/{id}", baseUrl: "https://classroom.googleapis.com/", requiredParams: ["courseId", "id"], scopes: S_classroom_v1[18] },
1385
1409
  params: [{ "field": "courseId", "api": "courseId", "location": "path" }, { "field": "id", "api": "id", "location": "path" }, { "field": "updateMask", "api": "updateMask", "location": "query" }, { "field": "fields", "api": "fields", "location": "query" }],
1386
1410
  hasBody: true,
1411
+ bodyParams: [{ "field": "courseId_", "api": "courseId" }, { "field": "name", "api": "name" }, { "field": "topicId", "api": "topicId" }, { "field": "updateTime", "api": "updateTime" }],
1387
1412
  shape: {
1388
1413
  account: accountField(),
1389
1414
  courseId: z.string().describe("Identifier of the course. This identifier can be either the Classroom-assigned identifier or an alias."),
1390
1415
  id: z.string().describe("Identifier of the topic."),
1391
1416
  updateMask: z.string().describe("Mask that identifies which fields on the topic to update. This field is required to do an update. The update fails if invalid fields are specified. If a field supports empty values, it can be cleared ").optional(),
1392
- body: coerceJson(z.record(z.string(), z.unknown())).describe("Topic JSON request body. Top-level fields: courseId, name, topicId, updateTime."),
1417
+ courseId_: z.string().describe("Identifier of the course. Read-only.").optional(),
1418
+ name: z.string().describe("The name of the topic, generated by the user. Leading and trailing whitespaces, if any, are trimmed. Also, multiple consecutive whitespaces are collapsed into one inside the name. The result must be a").optional(),
1419
+ topicId: z.string().describe("Unique identifier for the topic. Read-only.").optional(),
1420
+ updateTime: z.string().describe("The time the topic was last updated by the system. Read-only.").optional(),
1393
1421
  fields: z.string().optional().describe('Response field mask.'),
1394
1422
  },
1395
1423
  });
@@ -1442,9 +1470,13 @@ export function registerClassroomGeneratedTools(registry) {
1442
1470
  method: { id: "classroom.invitations.create", httpMethod: "POST", path: "v1/invitations", baseUrl: "https://classroom.googleapis.com/", requiredParams: [], scopes: S_classroom_v1[14] },
1443
1471
  params: [{ "field": "fields", "api": "fields", "location": "query" }],
1444
1472
  hasBody: true,
1473
+ bodyParams: [{ "field": "courseId", "api": "courseId" }, { "field": "id", "api": "id" }, { "field": "role", "api": "role" }, { "field": "userId", "api": "userId" }],
1445
1474
  shape: {
1446
1475
  account: accountField(),
1447
- body: coerceJson(z.record(z.string(), z.unknown())).describe("Invitation JSON request body. Top-level fields: courseId, id, role, userId."),
1476
+ courseId: z.string().describe("Identifier of the course to invite the user to.").optional(),
1477
+ id: z.string().describe("Identifier assigned by Classroom. Read-only.").optional(),
1478
+ role: z.enum(["COURSE_ROLE_UNSPECIFIED", "STUDENT", "TEACHER", "OWNER"]).describe("Role to invite the user to have. Must not be `COURSE_ROLE_UNSPECIFIED`.").optional(),
1479
+ userId: z.string().describe("Identifier of the invited user. When specified as a parameter of a request, this identifier can be set to one of the following: * the numeric identifier for the user * the email address of the user * ").optional(),
1448
1480
  fields: z.string().optional().describe('Response field mask.'),
1449
1481
  },
1450
1482
  });
@@ -1536,10 +1568,15 @@ export function registerClassroomGeneratedTools(registry) {
1536
1568
  method: { id: "classroom.userProfiles.guardianInvitations.create", httpMethod: "POST", path: "v1/userProfiles/{studentId}/guardianInvitations", baseUrl: "https://classroom.googleapis.com/", requiredParams: ["studentId"], scopes: S_classroom_v1[21] },
1537
1569
  params: [{ "field": "studentId", "api": "studentId", "location": "path" }, { "field": "fields", "api": "fields", "location": "query" }],
1538
1570
  hasBody: true,
1571
+ bodyParams: [{ "field": "creationTime", "api": "creationTime" }, { "field": "invitationId", "api": "invitationId" }, { "field": "invitedEmailAddress", "api": "invitedEmailAddress" }, { "field": "state", "api": "state" }, { "field": "studentId_", "api": "studentId" }],
1539
1572
  shape: {
1540
1573
  account: accountField(),
1541
1574
  studentId: z.string().describe("ID of the student (in standard format)"),
1542
- body: coerceJson(z.record(z.string(), z.unknown())).describe("GuardianInvitation JSON request body. Top-level fields: creationTime, invitationId, invitedEmailAddress, state, studentId."),
1575
+ creationTime: z.string().describe("The time that this invitation was created. Read-only.").optional(),
1576
+ invitationId: z.string().describe("Unique identifier for this invitation. Read-only.").optional(),
1577
+ invitedEmailAddress: z.string().describe("Email address that the invitation was sent to. This field is only visible to domain administrators.").optional(),
1578
+ state: z.enum(["GUARDIAN_INVITATION_STATE_UNSPECIFIED", "PENDING", "COMPLETE"]).describe("The state that this invitation is in.").optional(),
1579
+ studentId_: z.string().describe("ID of the student (in standard format)").optional(),
1543
1580
  fields: z.string().optional().describe('Response field mask.'),
1544
1581
  },
1545
1582
  });
@@ -1581,12 +1618,17 @@ export function registerClassroomGeneratedTools(registry) {
1581
1618
  method: { id: "classroom.userProfiles.guardianInvitations.patch", httpMethod: "PATCH", path: "v1/userProfiles/{studentId}/guardianInvitations/{invitationId}", baseUrl: "https://classroom.googleapis.com/", requiredParams: ["studentId", "invitationId"], scopes: S_classroom_v1[21] },
1582
1619
  params: [{ "field": "invitationId", "api": "invitationId", "location": "path" }, { "field": "studentId", "api": "studentId", "location": "path" }, { "field": "updateMask", "api": "updateMask", "location": "query" }, { "field": "fields", "api": "fields", "location": "query" }],
1583
1620
  hasBody: true,
1621
+ bodyParams: [{ "field": "creationTime", "api": "creationTime" }, { "field": "invitationId_", "api": "invitationId" }, { "field": "invitedEmailAddress", "api": "invitedEmailAddress" }, { "field": "state", "api": "state" }, { "field": "studentId_", "api": "studentId" }],
1584
1622
  shape: {
1585
1623
  account: accountField(),
1586
1624
  invitationId: z.string().describe("The `id` field of the `GuardianInvitation` to be modified."),
1587
1625
  studentId: z.string().describe("The ID of the student whose guardian invitation is to be modified."),
1588
1626
  updateMask: z.string().describe("Mask that identifies which fields on the course to update. This field is required to do an update. The update fails if invalid fields are specified. The following fields are valid: * `state` When set ").optional(),
1589
- body: coerceJson(z.record(z.string(), z.unknown())).describe("GuardianInvitation JSON request body. Top-level fields: creationTime, invitationId, invitedEmailAddress, state, studentId."),
1627
+ creationTime: z.string().describe("The time that this invitation was created. Read-only.").optional(),
1628
+ invitationId_: z.string().describe("Unique identifier for this invitation. Read-only.").optional(),
1629
+ invitedEmailAddress: z.string().describe("Email address that the invitation was sent to. This field is only visible to domain administrators.").optional(),
1630
+ state: z.enum(["GUARDIAN_INVITATION_STATE_UNSPECIFIED", "PENDING", "COMPLETE"]).describe("The state that this invitation is in.").optional(),
1631
+ studentId_: z.string().describe("ID of the student (in standard format)").optional(),
1590
1632
  fields: z.string().optional().describe('Response field mask.'),
1591
1633
  },
1592
1634
  });
@@ -1,6 +1,6 @@
1
1
  // GENERATED by scripts/gen-tools.ts — do not edit. Regenerate: npm run gen:tools
2
2
  import { z } from 'zod';
3
- import { coerceJson } from '../_coerce.js';
3
+ import { coerceBoolean, coerceJson } from '../_coerce.js';
4
4
  import { accountField, registerGeneratedTool } from './_shared.js';
5
5
  export function registerCloudidentityGeneratedTools(registry) {
6
6
  // Interned method scope sets (shared across tools; see scope-observability).
@@ -22,10 +22,10 @@ export function registerCloudidentityGeneratedTools(registry) {
22
22
  method: { id: "cloudidentity.customers.userinvitations.cancel", httpMethod: "POST", path: "v1/{+name}:cancel", baseUrl: "https://cloudidentity.googleapis.com/", requiredParams: ["name"] },
23
23
  params: [{ "field": "name", "api": "name", "location": "path" }, { "field": "fields", "api": "fields", "location": "query" }],
24
24
  hasBody: true,
25
+ bodyParams: [],
25
26
  shape: {
26
27
  account: accountField(),
27
28
  name: z.string().describe("Required. `UserInvitation` name in the format `customers/{customer}/userinvitations/{user_email_address}`"),
28
- body: coerceJson(z.record(z.string(), z.unknown())).describe("CancelUserInvitationRequest JSON request body."),
29
29
  fields: z.string().optional().describe('Response field mask.'),
30
30
  },
31
31
  });
@@ -79,10 +79,10 @@ export function registerCloudidentityGeneratedTools(registry) {
79
79
  method: { id: "cloudidentity.customers.userinvitations.send", httpMethod: "POST", path: "v1/{+name}:send", baseUrl: "https://cloudidentity.googleapis.com/", requiredParams: ["name"] },
80
80
  params: [{ "field": "name", "api": "name", "location": "path" }, { "field": "fields", "api": "fields", "location": "query" }],
81
81
  hasBody: true,
82
+ bodyParams: [],
82
83
  shape: {
83
84
  account: accountField(),
84
85
  name: z.string().describe("Required. `UserInvitation` name in the format `customers/{customer}/userinvitations/{user_email_address}`"),
85
- body: coerceJson(z.record(z.string(), z.unknown())).describe("SendUserInvitationRequest JSON request body."),
86
86
  fields: z.string().optional().describe('Response field mask.'),
87
87
  },
88
88
  });
@@ -93,10 +93,11 @@ export function registerCloudidentityGeneratedTools(registry) {
93
93
  method: { id: "cloudidentity.devices.cancelWipe", httpMethod: "POST", path: "v1/{+name}:cancelWipe", baseUrl: "https://cloudidentity.googleapis.com/", requiredParams: ["name"], scopes: S_cloudidentity_v1[0] },
94
94
  params: [{ "field": "name", "api": "name", "location": "path" }, { "field": "fields", "api": "fields", "location": "query" }],
95
95
  hasBody: true,
96
+ bodyParams: [{ "field": "customer", "api": "customer" }],
96
97
  shape: {
97
98
  account: accountField(),
98
99
  name: z.string().describe("Required. [Resource name](https://cloud.google.com/apis/design/resource_names) of the Device in format: `devices/{device}`, where device is the unique ID assigned to the Device."),
99
- body: coerceJson(z.record(z.string(), z.unknown())).describe("GoogleAppsCloudidentityDevicesV1CancelWipeDeviceRequest JSON request body. Top-level fields: customer."),
100
+ customer: z.string().describe("Optional. [Resource name](https://cloud.google.com/apis/design/resource_names) of the customer. If you're using this API for your own organization, use `customers/my_customer` If you're using this API").optional(),
100
101
  fields: z.string().optional().describe('Response field mask.'),
101
102
  },
102
103
  });
@@ -135,10 +136,11 @@ export function registerCloudidentityGeneratedTools(registry) {
135
136
  method: { id: "cloudidentity.devices.deviceUsers.approve", httpMethod: "POST", path: "v1/{+name}:approve", baseUrl: "https://cloudidentity.googleapis.com/", requiredParams: ["name"], scopes: S_cloudidentity_v1[0] },
136
137
  params: [{ "field": "name", "api": "name", "location": "path" }, { "field": "fields", "api": "fields", "location": "query" }],
137
138
  hasBody: true,
139
+ bodyParams: [{ "field": "customer", "api": "customer" }],
138
140
  shape: {
139
141
  account: accountField(),
140
142
  name: z.string().describe("Required. [Resource name](https://cloud.google.com/apis/design/resource_names) of the Device in format: `devices/{device}/deviceUsers/{device_user}`, where device is the unique ID assigned to the Devi"),
141
- body: coerceJson(z.record(z.string(), z.unknown())).describe("GoogleAppsCloudidentityDevicesV1ApproveDeviceUserRequest JSON request body. Top-level fields: customer."),
143
+ customer: z.string().describe("Optional. [Resource name](https://cloud.google.com/apis/design/resource_names) of the customer. If you're using this API for your own organization, use `customers/my_customer` If you're using this API").optional(),
142
144
  fields: z.string().optional().describe('Response field mask.'),
143
145
  },
144
146
  });
@@ -149,10 +151,11 @@ export function registerCloudidentityGeneratedTools(registry) {
149
151
  method: { id: "cloudidentity.devices.deviceUsers.block", httpMethod: "POST", path: "v1/{+name}:block", baseUrl: "https://cloudidentity.googleapis.com/", requiredParams: ["name"], scopes: S_cloudidentity_v1[0] },
150
152
  params: [{ "field": "name", "api": "name", "location": "path" }, { "field": "fields", "api": "fields", "location": "query" }],
151
153
  hasBody: true,
154
+ bodyParams: [{ "field": "customer", "api": "customer" }],
152
155
  shape: {
153
156
  account: accountField(),
154
157
  name: z.string().describe("Required. [Resource name](https://cloud.google.com/apis/design/resource_names) of the Device in format: `devices/{device}/deviceUsers/{device_user}`, where device is the unique ID assigned to the Devi"),
155
- body: coerceJson(z.record(z.string(), z.unknown())).describe("GoogleAppsCloudidentityDevicesV1BlockDeviceUserRequest JSON request body. Top-level fields: customer."),
158
+ customer: z.string().describe("Optional. [Resource name](https://cloud.google.com/apis/design/resource_names) of the customer. If you're using this API for your own organization, use `customers/my_customer` If you're using this API").optional(),
156
159
  fields: z.string().optional().describe('Response field mask.'),
157
160
  },
158
161
  });
@@ -163,10 +166,11 @@ export function registerCloudidentityGeneratedTools(registry) {
163
166
  method: { id: "cloudidentity.devices.deviceUsers.cancelWipe", httpMethod: "POST", path: "v1/{+name}:cancelWipe", baseUrl: "https://cloudidentity.googleapis.com/", requiredParams: ["name"], scopes: S_cloudidentity_v1[0] },
164
167
  params: [{ "field": "name", "api": "name", "location": "path" }, { "field": "fields", "api": "fields", "location": "query" }],
165
168
  hasBody: true,
169
+ bodyParams: [{ "field": "customer", "api": "customer" }],
166
170
  shape: {
167
171
  account: accountField(),
168
172
  name: z.string().describe("Required. [Resource name](https://cloud.google.com/apis/design/resource_names) of the Device in format: `devices/{device}/deviceUsers/{device_user}`, where device is the unique ID assigned to the Devi"),
169
- body: coerceJson(z.record(z.string(), z.unknown())).describe("GoogleAppsCloudidentityDevicesV1CancelWipeDeviceUserRequest JSON request body. Top-level fields: customer."),
173
+ customer: z.string().describe("Optional. [Resource name](https://cloud.google.com/apis/design/resource_names) of the customer. If you're using this API for your own organization, use `customers/my_customer` If you're using this API").optional(),
170
174
  fields: z.string().optional().describe('Response field mask.'),
171
175
  },
172
176
  });
@@ -290,10 +294,11 @@ export function registerCloudidentityGeneratedTools(registry) {
290
294
  method: { id: "cloudidentity.devices.deviceUsers.wipe", httpMethod: "POST", path: "v1/{+name}:wipe", baseUrl: "https://cloudidentity.googleapis.com/", requiredParams: ["name"], scopes: S_cloudidentity_v1[0] },
291
295
  params: [{ "field": "name", "api": "name", "location": "path" }, { "field": "fields", "api": "fields", "location": "query" }],
292
296
  hasBody: true,
297
+ bodyParams: [{ "field": "customer", "api": "customer" }],
293
298
  shape: {
294
299
  account: accountField(),
295
300
  name: z.string().describe("Required. [Resource name](https://cloud.google.com/apis/design/resource_names) of the Device in format: `devices/{device}/deviceUsers/{device_user}`, where device is the unique ID assigned to the Devi"),
296
- body: coerceJson(z.record(z.string(), z.unknown())).describe("GoogleAppsCloudidentityDevicesV1WipeDeviceUserRequest JSON request body. Top-level fields: customer."),
301
+ customer: z.string().describe("Optional. [Resource name](https://cloud.google.com/apis/design/resource_names) of the customer. If you're using this API for your own organization, use `customers/my_customer` If you're using this API").optional(),
297
302
  fields: z.string().optional().describe('Response field mask.'),
298
303
  },
299
304
  });
@@ -336,10 +341,12 @@ export function registerCloudidentityGeneratedTools(registry) {
336
341
  method: { id: "cloudidentity.devices.wipe", httpMethod: "POST", path: "v1/{+name}:wipe", baseUrl: "https://cloudidentity.googleapis.com/", requiredParams: ["name"], scopes: S_cloudidentity_v1[0] },
337
342
  params: [{ "field": "name", "api": "name", "location": "path" }, { "field": "fields", "api": "fields", "location": "query" }],
338
343
  hasBody: true,
344
+ bodyParams: [{ "field": "customer", "api": "customer" }, { "field": "removeResetLock", "api": "removeResetLock" }],
339
345
  shape: {
340
346
  account: accountField(),
341
347
  name: z.string().describe("Required. [Resource name](https://cloud.google.com/apis/design/resource_names) of the Device in format: `devices/{device}/deviceUsers/{device_user}`, where device is the unique ID assigned to the Devi"),
342
- body: coerceJson(z.record(z.string(), z.unknown())).describe("GoogleAppsCloudidentityDevicesV1WipeDeviceRequest JSON request body. Top-level fields: customer, removeResetLock."),
348
+ customer: z.string().describe("Optional. [Resource name](https://cloud.google.com/apis/design/resource_names) of the customer. If you're using this API for your own organization, use `customers/my_customer` If you're using this API").optional(),
349
+ removeResetLock: coerceBoolean.describe("Optional. Specifies if a user is able to factory reset a device after a Device Wipe. On iOS, this is called \"Activation Lock\", while on Android, this is known as \"Factory Reset Protection\". If true, t").optional(),
343
350
  fields: z.string().optional().describe('Response field mask.'),
344
351
  },
345
352
  });
@@ -749,10 +756,11 @@ export function registerCloudidentityGeneratedTools(registry) {
749
756
  method: { id: "cloudidentity.inboundSamlSsoProfiles.idpCredentials.add", httpMethod: "POST", path: "v1/{+parent}/idpCredentials:add", baseUrl: "https://cloudidentity.googleapis.com/", requiredParams: ["parent"], scopes: S_cloudidentity_v1[5] },
750
757
  params: [{ "field": "parent", "api": "parent", "location": "path" }, { "field": "fields", "api": "fields", "location": "query" }],
751
758
  hasBody: true,
759
+ bodyParams: [{ "field": "pemData", "api": "pemData" }],
752
760
  shape: {
753
761
  account: accountField(),
754
762
  parent: z.string().describe("Required. The InboundSamlSsoProfile that owns the IdpCredential. Format: `inboundSamlSsoProfiles/{sso_profile_id}`"),
755
- body: coerceJson(z.record(z.string(), z.unknown())).describe("AddIdpCredentialRequest JSON request body. Top-level fields: pemData."),
763
+ pemData: z.string().describe("PEM encoded x509 certificate containing the public key for verifying IdP signatures.").optional(),
756
764
  fields: z.string().optional().describe('Response field mask.'),
757
765
  },
758
766
  });