@aaronsb/google-workspace-mcp 4.2.0 → 4.3.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.
- package/README.md +6 -5
- package/build/accounts/auth.d.ts +18 -2
- package/build/accounts/auth.js +31 -7
- package/build/accounts/auth.js.map +1 -1
- package/build/accounts/credentials.d.ts +20 -0
- package/build/accounts/credentials.js.map +1 -1
- package/build/accounts/oauth.d.ts +51 -1
- package/build/accounts/oauth.js +69 -5
- package/build/accounts/oauth.js.map +1 -1
- package/build/accounts/registry.d.ts +2 -1
- package/build/accounts/registry.js +2 -2
- package/build/accounts/registry.js.map +1 -1
- package/build/factory/manifest/calendar.yaml +22 -22
- package/build/factory/manifest/contacts.yaml +247 -0
- package/build/factory/manifest/drive.yaml +16 -16
- package/build/factory/manifest/gmail.yaml +18 -18
- package/build/factory/manifest/meet.yaml +91 -13
- package/build/factory/manifest/sheets.yaml +29 -29
- package/build/factory/manifest/tasks.yaml +14 -14
- package/build/factory/patches.js +2 -0
- package/build/factory/patches.js.map +1 -1
- package/build/factory/safety.js +4 -0
- package/build/factory/safety.js.map +1 -1
- package/build/google/descriptor.d.ts +8 -0
- package/build/google/descriptor.js +9 -2
- package/build/google/descriptor.js.map +1 -1
- package/build/google/descriptor.json +1883 -0
- package/build/google/methods.d.ts +4 -1
- package/build/server/handler.js +16 -1
- package/build/server/handler.js.map +1 -1
- package/build/server/handlers/accounts.js +100 -6
- package/build/server/handlers/accounts.js.map +1 -1
- package/build/server/queue.d.ts +1 -1
- package/build/server/queue.js +16 -1
- package/build/server/queue.js.map +1 -1
- package/build/server/tools.js +31 -1
- package/build/server/tools.js.map +1 -1
- package/build/services/calendar/patch.js +62 -8
- package/build/services/calendar/patch.js.map +1 -1
- package/build/services/contacts/patch.d.ts +31 -0
- package/build/services/contacts/patch.js +496 -0
- package/build/services/contacts/patch.js.map +1 -0
- package/build/services/meet/patch.js +202 -0
- package/build/services/meet/patch.js.map +1 -1
- package/build/version.d.ts +1 -1
- package/build/version.js +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
tool_name: manage_contacts
|
|
2
|
+
description: "Search, read, create, update and delete Google Contacts: your saved contacts, the addresses you have corresponded with but never saved, and your organization's directory."
|
|
3
|
+
requires_email: true
|
|
4
|
+
google_service: people
|
|
5
|
+
|
|
6
|
+
# The People API asks the caller to name every field it wants back, on every call, via
|
|
7
|
+
# `personFields` or `readMask`. Omit the mask and the call is REJECTED outright — this is
|
|
8
|
+
# not a shape that degrades to a sensible default.
|
|
9
|
+
#
|
|
10
|
+
# Those masks live in `defaults` rather than `params` so they never enter the generated
|
|
11
|
+
# schema. An agent asking "who is Dana" should not first have to know that a birthday is
|
|
12
|
+
# spelled `birthdays` and lives behind a different parameter name depending on which of
|
|
13
|
+
# the seven operations it picked. The masks also differ per operation because Google
|
|
14
|
+
# restricts them per operation, which is exactly the routing this tool exists to absorb.
|
|
15
|
+
#
|
|
16
|
+
# `sources` is left out of the schema for a sharper reason: its legal values are NOT the
|
|
17
|
+
# same across operations. The contact operations take READ_SOURCE_TYPE_*, the directory
|
|
18
|
+
# operations take DIRECTORY_SOURCE_TYPE_*, and generateSchema keeps only the FIRST
|
|
19
|
+
# declaration of a param name — so a single advertised `sources` enum would be wrong for
|
|
20
|
+
# whichever half lost the race.
|
|
21
|
+
operations:
|
|
22
|
+
|
|
23
|
+
# --- Your own contacts ---
|
|
24
|
+
|
|
25
|
+
list:
|
|
26
|
+
type: list
|
|
27
|
+
description: "list your saved contacts"
|
|
28
|
+
resource: people.connections.list
|
|
29
|
+
params:
|
|
30
|
+
maxResults:
|
|
31
|
+
type: number
|
|
32
|
+
description: "Max people to return (default 25). Capped per operation: 30 for `search` and `searchOther`, 100 for everything else."
|
|
33
|
+
default: 25
|
|
34
|
+
max: 100
|
|
35
|
+
maps_to: pageSize
|
|
36
|
+
pageToken:
|
|
37
|
+
type: string
|
|
38
|
+
description: "Continue from where a previous page stopped — pass the token that response printed"
|
|
39
|
+
sortOrder:
|
|
40
|
+
type: string
|
|
41
|
+
description: "Order for `list` — by first name, by last name, or most recently changed first"
|
|
42
|
+
enum: [firstName, lastName, lastModified]
|
|
43
|
+
defaults:
|
|
44
|
+
# connections.list reads one person's connections, and the person is always the
|
|
45
|
+
# authenticated account. `people/me` is Google's alias for it, so the agent never
|
|
46
|
+
# has to know its own resource name.
|
|
47
|
+
resourceName: people/me
|
|
48
|
+
personFields: names,emailAddresses,phoneNumbers,organizations,metadata
|
|
49
|
+
sortOrder: firstName
|
|
50
|
+
|
|
51
|
+
search:
|
|
52
|
+
type: list
|
|
53
|
+
description: "search your saved contacts by name, email, nickname or phone"
|
|
54
|
+
resource: people.searchContacts
|
|
55
|
+
params:
|
|
56
|
+
query:
|
|
57
|
+
type: string
|
|
58
|
+
description: "Text to match against names, email addresses, nicknames and phone numbers. Matching is by PREFIX: `ann` finds Anna, `nna` finds nobody."
|
|
59
|
+
required: true
|
|
60
|
+
maxResults:
|
|
61
|
+
type: number
|
|
62
|
+
description: "Max people to return (default 25). Capped per operation: 30 for `search` and `searchOther`, 100 for everything else."
|
|
63
|
+
default: 25
|
|
64
|
+
max: 30
|
|
65
|
+
maps_to: pageSize
|
|
66
|
+
defaults:
|
|
67
|
+
readMask: names,emailAddresses,phoneNumbers,organizations,metadata
|
|
68
|
+
|
|
69
|
+
get:
|
|
70
|
+
type: detail
|
|
71
|
+
description: "get one person in full — addresses, birthday, notes, relations"
|
|
72
|
+
resource: people.get
|
|
73
|
+
params:
|
|
74
|
+
contactId:
|
|
75
|
+
type: string
|
|
76
|
+
description: "Person id as `list` or `search` printed it (e.g. `people/c1234567890`). A bare id without the `people/` prefix is accepted."
|
|
77
|
+
required: true
|
|
78
|
+
maps_to: resourceName
|
|
79
|
+
defaults:
|
|
80
|
+
personFields: names,nicknames,emailAddresses,phoneNumbers,addresses,organizations,birthdays,biographies,urls,relations,memberships,photos,metadata
|
|
81
|
+
|
|
82
|
+
# The Person body is built by the patch, not declared here. Every field the People API
|
|
83
|
+
# wants is a parallel array of objects — `names: [{givenName, familyName}]` — and any
|
|
84
|
+
# param this manifest declares that Google does not recognise as a query parameter goes
|
|
85
|
+
# into the request body VERBATIM. Declared flat, `name: "Ada Lovelace"` would be sent as
|
|
86
|
+
# a top-level `name` field, which Google ignores, producing a contact with no name and
|
|
87
|
+
# no error. So these are declared for the SCHEMA and converted before the call.
|
|
88
|
+
create:
|
|
89
|
+
type: action
|
|
90
|
+
description: "create a new contact"
|
|
91
|
+
resource: people.createContact
|
|
92
|
+
params:
|
|
93
|
+
name:
|
|
94
|
+
type: string
|
|
95
|
+
description: "Full name, e.g. `Ada Lovelace`. Split into given and family name on the way in; a single word becomes the given name."
|
|
96
|
+
contactEmail:
|
|
97
|
+
type: string
|
|
98
|
+
description: "The contact's email address. (`email` is the account making the call, not the person being saved.) On `update` this REPLACES every address the contact has — pass an empty string to clear them."
|
|
99
|
+
phone:
|
|
100
|
+
type: string
|
|
101
|
+
description: "Phone number, in whatever form you have it — Google normalizes it. On `update` this REPLACES every number the contact has — pass an empty string to clear them."
|
|
102
|
+
company:
|
|
103
|
+
type: string
|
|
104
|
+
description: "Organization name"
|
|
105
|
+
jobTitle:
|
|
106
|
+
type: string
|
|
107
|
+
description: "Job title within the organization"
|
|
108
|
+
notes:
|
|
109
|
+
type: string
|
|
110
|
+
description: "Free-text note stored on the contact"
|
|
111
|
+
defaults:
|
|
112
|
+
# Echoes back EVERY field this operation can write. Live, the shorter read mask
|
|
113
|
+
# confirmed a create without the note it had just stored — a confirmation that
|
|
114
|
+
# drops a field the caller supplied is indistinguishable from one that dropped it
|
|
115
|
+
# on the way in.
|
|
116
|
+
personFields: names,emailAddresses,phoneNumbers,organizations,biographies,metadata
|
|
117
|
+
|
|
118
|
+
# updatePersonFields is not sent from here — the patch derives it from which fields the
|
|
119
|
+
# caller actually supplied. A fixed list would name fields nobody touched, and naming a
|
|
120
|
+
# field in updatePersonFields with no value in the body CLEARS it. Declared statically,
|
|
121
|
+
# this operation would wipe a contact's phone number every time someone corrected a
|
|
122
|
+
# job title.
|
|
123
|
+
update:
|
|
124
|
+
type: action
|
|
125
|
+
description: "change an existing contact (only the fields you pass; pass an empty string to clear one)"
|
|
126
|
+
resource: people.updateContact
|
|
127
|
+
params:
|
|
128
|
+
contactId:
|
|
129
|
+
type: string
|
|
130
|
+
description: "Person id as `list` or `search` printed it (e.g. `people/c1234567890`). A bare id without the `people/` prefix is accepted."
|
|
131
|
+
required: true
|
|
132
|
+
maps_to: resourceName
|
|
133
|
+
name:
|
|
134
|
+
type: string
|
|
135
|
+
description: "Full name, e.g. `Ada Lovelace`. Split into given and family name on the way in; a single word becomes the given name."
|
|
136
|
+
contactEmail:
|
|
137
|
+
type: string
|
|
138
|
+
description: "The contact's email address. (`email` is the account making the call, not the person being saved.) On `update` this REPLACES every address the contact has — pass an empty string to clear them."
|
|
139
|
+
phone:
|
|
140
|
+
type: string
|
|
141
|
+
description: "Phone number, in whatever form you have it — Google normalizes it. On `update` this REPLACES every number the contact has — pass an empty string to clear them."
|
|
142
|
+
company:
|
|
143
|
+
type: string
|
|
144
|
+
description: "Organization name"
|
|
145
|
+
jobTitle:
|
|
146
|
+
type: string
|
|
147
|
+
description: "Job title within the organization"
|
|
148
|
+
notes:
|
|
149
|
+
type: string
|
|
150
|
+
description: "Free-text note stored on the contact"
|
|
151
|
+
defaults:
|
|
152
|
+
personFields: names,emailAddresses,phoneNumbers,organizations,biographies,metadata
|
|
153
|
+
|
|
154
|
+
delete:
|
|
155
|
+
type: action
|
|
156
|
+
description: "delete a contact"
|
|
157
|
+
resource: people.deleteContact
|
|
158
|
+
params:
|
|
159
|
+
contactId:
|
|
160
|
+
type: string
|
|
161
|
+
description: "Person id as `list` or `search` printed it (e.g. `people/c1234567890`). A bare id without the `people/` prefix is accepted."
|
|
162
|
+
required: true
|
|
163
|
+
maps_to: resourceName
|
|
164
|
+
|
|
165
|
+
# --- Other contacts: addresses seen in mail, never saved ---
|
|
166
|
+
|
|
167
|
+
listOther:
|
|
168
|
+
type: list
|
|
169
|
+
description: "list 'other contacts' — addresses you have corresponded with but never saved"
|
|
170
|
+
resource: otherContacts.list
|
|
171
|
+
params:
|
|
172
|
+
maxResults:
|
|
173
|
+
type: number
|
|
174
|
+
description: "Max people to return (default 25). Capped per operation: 30 for `search` and `searchOther`, 100 for everything else."
|
|
175
|
+
default: 25
|
|
176
|
+
max: 100
|
|
177
|
+
maps_to: pageSize
|
|
178
|
+
pageToken:
|
|
179
|
+
type: string
|
|
180
|
+
description: "Continue from where a previous page stopped — pass the token that response printed"
|
|
181
|
+
defaults:
|
|
182
|
+
# otherContacts accepts a narrower mask than the contact operations do; asking it
|
|
183
|
+
# for organizations is an error, not an empty field.
|
|
184
|
+
readMask: names,emailAddresses,phoneNumbers,metadata
|
|
185
|
+
|
|
186
|
+
searchOther:
|
|
187
|
+
type: list
|
|
188
|
+
description: "search 'other contacts' by name or email"
|
|
189
|
+
resource: otherContacts.search
|
|
190
|
+
params:
|
|
191
|
+
query:
|
|
192
|
+
type: string
|
|
193
|
+
description: "Text to match against names, email addresses, nicknames and phone numbers. Matching is by PREFIX: `ann` finds Anna, `nna` finds nobody."
|
|
194
|
+
required: true
|
|
195
|
+
maxResults:
|
|
196
|
+
type: number
|
|
197
|
+
description: "Max people to return (default 25). Capped per operation: 30 for `search` and `searchOther`, 100 for everything else."
|
|
198
|
+
default: 25
|
|
199
|
+
max: 30
|
|
200
|
+
maps_to: pageSize
|
|
201
|
+
defaults:
|
|
202
|
+
readMask: names,emailAddresses,phoneNumbers,metadata
|
|
203
|
+
|
|
204
|
+
# --- The organization directory (Google Workspace accounts only) ---
|
|
205
|
+
|
|
206
|
+
listDirectory:
|
|
207
|
+
type: list
|
|
208
|
+
description: "list people in your organization's directory (Workspace accounts only)"
|
|
209
|
+
resource: people.listDirectoryPeople
|
|
210
|
+
params:
|
|
211
|
+
maxResults:
|
|
212
|
+
type: number
|
|
213
|
+
description: "Max people to return (default 25). Capped per operation: 30 for `search` and `searchOther`, 100 for everything else."
|
|
214
|
+
default: 25
|
|
215
|
+
max: 100
|
|
216
|
+
maps_to: pageSize
|
|
217
|
+
pageToken:
|
|
218
|
+
type: string
|
|
219
|
+
description: "Continue from where a previous page stopped — pass the token that response printed"
|
|
220
|
+
defaults:
|
|
221
|
+
readMask: names,emailAddresses,phoneNumbers,organizations,metadata
|
|
222
|
+
# `sources` is REQUIRED here — the directory operations reject a call that does not
|
|
223
|
+
# say which directory to read. Both value sets are wanted: DOMAIN_PROFILE is the
|
|
224
|
+
# people with accounts, DOMAIN_CONTACT the shared contacts an admin published.
|
|
225
|
+
sources: DIRECTORY_SOURCE_TYPE_DOMAIN_PROFILE,DIRECTORY_SOURCE_TYPE_DOMAIN_CONTACT
|
|
226
|
+
|
|
227
|
+
searchDirectory:
|
|
228
|
+
type: list
|
|
229
|
+
description: "search your organization's directory by name or email (Workspace accounts only)"
|
|
230
|
+
resource: people.searchDirectoryPeople
|
|
231
|
+
params:
|
|
232
|
+
query:
|
|
233
|
+
type: string
|
|
234
|
+
description: "Text to match against names, email addresses, nicknames and phone numbers. Matching is by PREFIX: `ann` finds Anna, `nna` finds nobody."
|
|
235
|
+
required: true
|
|
236
|
+
maxResults:
|
|
237
|
+
type: number
|
|
238
|
+
description: "Max people to return (default 25). Capped per operation: 30 for `search` and `searchOther`, 100 for everything else."
|
|
239
|
+
default: 25
|
|
240
|
+
max: 100
|
|
241
|
+
maps_to: pageSize
|
|
242
|
+
pageToken:
|
|
243
|
+
type: string
|
|
244
|
+
description: "Continue from where a previous page stopped — pass the token that response printed"
|
|
245
|
+
defaults:
|
|
246
|
+
readMask: names,emailAddresses,phoneNumbers,organizations,metadata
|
|
247
|
+
sources: DIRECTORY_SOURCE_TYPE_DOMAIN_PROFILE,DIRECTORY_SOURCE_TYPE_DOMAIN_CONTACT
|
|
@@ -51,10 +51,10 @@ operations:
|
|
|
51
51
|
required: true
|
|
52
52
|
name:
|
|
53
53
|
type: string
|
|
54
|
-
description: "File name in Drive
|
|
54
|
+
description: "File name in Drive. On `upload`, defaults to the local file's name. On `copy`, the name for the copy — without it Drive names it 'Copy of <original>'. On `update`, the new name (a rename)."
|
|
55
55
|
parentFolderId:
|
|
56
56
|
type: string
|
|
57
|
-
description: "Destination folder ID"
|
|
57
|
+
description: "Destination folder ID. On `copy`, defaults to the source file's folder."
|
|
58
58
|
|
|
59
59
|
viewImage:
|
|
60
60
|
type: detail
|
|
@@ -63,7 +63,7 @@ operations:
|
|
|
63
63
|
params:
|
|
64
64
|
fileId:
|
|
65
65
|
type: string
|
|
66
|
-
description: "File ID
|
|
66
|
+
description: "File ID"
|
|
67
67
|
required: true
|
|
68
68
|
defaults:
|
|
69
69
|
supportsAllDrives: true
|
|
@@ -75,7 +75,7 @@ operations:
|
|
|
75
75
|
params:
|
|
76
76
|
fileId:
|
|
77
77
|
type: string
|
|
78
|
-
description: "File ID
|
|
78
|
+
description: "File ID"
|
|
79
79
|
required: true
|
|
80
80
|
outputPath:
|
|
81
81
|
type: string
|
|
@@ -91,14 +91,14 @@ operations:
|
|
|
91
91
|
params:
|
|
92
92
|
fileId:
|
|
93
93
|
type: string
|
|
94
|
-
description: "File ID
|
|
94
|
+
description: "File ID"
|
|
95
95
|
required: true
|
|
96
96
|
name:
|
|
97
97
|
type: string
|
|
98
|
-
description: "
|
|
98
|
+
description: "File name in Drive. On `upload`, defaults to the local file's name. On `copy`, the name for the copy — without it Drive names it 'Copy of <original>'. On `update`, the new name (a rename)."
|
|
99
99
|
parentFolderId:
|
|
100
100
|
type: string
|
|
101
|
-
description: "
|
|
101
|
+
description: "Destination folder ID. On `copy`, defaults to the source file's folder."
|
|
102
102
|
defaults:
|
|
103
103
|
supportsAllDrives: true
|
|
104
104
|
|
|
@@ -109,11 +109,11 @@ operations:
|
|
|
109
109
|
params:
|
|
110
110
|
fileId:
|
|
111
111
|
type: string
|
|
112
|
-
description: "File ID
|
|
112
|
+
description: "File ID"
|
|
113
113
|
required: true
|
|
114
114
|
name:
|
|
115
115
|
type: string
|
|
116
|
-
description: "
|
|
116
|
+
description: "File name in Drive. On `upload`, defaults to the local file's name. On `copy`, the name for the copy — without it Drive names it 'Copy of <original>'. On `update`, the new name (a rename)."
|
|
117
117
|
addParents:
|
|
118
118
|
type: string
|
|
119
119
|
description: "Comma-separated folder ID(s) to add as parents (move into a folder)"
|
|
@@ -130,7 +130,7 @@ operations:
|
|
|
130
130
|
params:
|
|
131
131
|
fileId:
|
|
132
132
|
type: string
|
|
133
|
-
description: "File ID
|
|
133
|
+
description: "File ID"
|
|
134
134
|
required: true
|
|
135
135
|
defaults:
|
|
136
136
|
supportsAllDrives: true
|
|
@@ -142,7 +142,7 @@ operations:
|
|
|
142
142
|
params:
|
|
143
143
|
fileId:
|
|
144
144
|
type: string
|
|
145
|
-
description: "File ID
|
|
145
|
+
description: "File ID"
|
|
146
146
|
required: true
|
|
147
147
|
mimeType:
|
|
148
148
|
type: string
|
|
@@ -150,7 +150,7 @@ operations:
|
|
|
150
150
|
required: true
|
|
151
151
|
outputPath:
|
|
152
152
|
type: string
|
|
153
|
-
description: "Local path to save
|
|
153
|
+
description: "Local path to save the file"
|
|
154
154
|
defaults:
|
|
155
155
|
supportsAllDrives: true
|
|
156
156
|
|
|
@@ -175,7 +175,7 @@ operations:
|
|
|
175
175
|
params:
|
|
176
176
|
fileId:
|
|
177
177
|
type: string
|
|
178
|
-
description: "File ID
|
|
178
|
+
description: "File ID"
|
|
179
179
|
required: true
|
|
180
180
|
shareEmail:
|
|
181
181
|
type: string
|
|
@@ -258,7 +258,7 @@ operations:
|
|
|
258
258
|
required: true
|
|
259
259
|
content:
|
|
260
260
|
type: string
|
|
261
|
-
description: "Comment text"
|
|
261
|
+
description: "Comment text. On `replyToComment`, the reply text."
|
|
262
262
|
required: true
|
|
263
263
|
quotedText:
|
|
264
264
|
type: string
|
|
@@ -299,11 +299,11 @@ operations:
|
|
|
299
299
|
required: true
|
|
300
300
|
commentId:
|
|
301
301
|
type: string
|
|
302
|
-
description: "Comment ID
|
|
302
|
+
description: "Comment ID"
|
|
303
303
|
required: true
|
|
304
304
|
content:
|
|
305
305
|
type: string
|
|
306
|
-
description: "
|
|
306
|
+
description: "Comment text. On `replyToComment`, the reply text."
|
|
307
307
|
required: true
|
|
308
308
|
defaults:
|
|
309
309
|
fields: "id, content, htmlContent, author(displayName), createdTime"
|
|
@@ -60,14 +60,14 @@ operations:
|
|
|
60
60
|
required: true
|
|
61
61
|
body:
|
|
62
62
|
type: string
|
|
63
|
-
description: "Email body text"
|
|
63
|
+
description: "Email body text. On `forward`, an optional note prepended ABOVE the forwarded message."
|
|
64
64
|
required: true
|
|
65
65
|
from:
|
|
66
66
|
type: string
|
|
67
67
|
description: "Sender email or RFC 2822 mailbox for a verified Gmail Send As alias"
|
|
68
68
|
cc:
|
|
69
69
|
type: string
|
|
70
|
-
description: "CC email(s), comma-separated"
|
|
70
|
+
description: "CC email(s), comma-separated. On `replyAll` these are ADDITIONAL — they do not replace the recipients already on the thread."
|
|
71
71
|
bcc:
|
|
72
72
|
type: string
|
|
73
73
|
description: "BCC email(s), comma-separated"
|
|
@@ -87,11 +87,11 @@ operations:
|
|
|
87
87
|
params:
|
|
88
88
|
messageId:
|
|
89
89
|
type: string
|
|
90
|
-
description: "
|
|
90
|
+
description: "Email message ID"
|
|
91
91
|
required: true
|
|
92
92
|
body:
|
|
93
93
|
type: string
|
|
94
|
-
description: "
|
|
94
|
+
description: "Email body text. On `forward`, an optional note prepended ABOVE the forwarded message."
|
|
95
95
|
required: true
|
|
96
96
|
attachments:
|
|
97
97
|
type: string
|
|
@@ -109,15 +109,15 @@ operations:
|
|
|
109
109
|
params:
|
|
110
110
|
messageId:
|
|
111
111
|
type: string
|
|
112
|
-
description: "
|
|
112
|
+
description: "Email message ID"
|
|
113
113
|
required: true
|
|
114
114
|
body:
|
|
115
115
|
type: string
|
|
116
|
-
description: "
|
|
116
|
+
description: "Email body text. On `forward`, an optional note prepended ABOVE the forwarded message."
|
|
117
117
|
required: true
|
|
118
118
|
cc:
|
|
119
119
|
type: string
|
|
120
|
-
description: "
|
|
120
|
+
description: "CC email(s), comma-separated. On `replyAll` these are ADDITIONAL — they do not replace the recipients already on the thread."
|
|
121
121
|
attachments:
|
|
122
122
|
type: string
|
|
123
123
|
description: "Workspace filenames to attach, comma-separated (files must exist in workspace via manage_workspace). Creates draft when present."
|
|
@@ -134,7 +134,7 @@ operations:
|
|
|
134
134
|
params:
|
|
135
135
|
messageId:
|
|
136
136
|
type: string
|
|
137
|
-
description: "
|
|
137
|
+
description: "Email message ID"
|
|
138
138
|
required: true
|
|
139
139
|
to:
|
|
140
140
|
type: string
|
|
@@ -142,7 +142,7 @@ operations:
|
|
|
142
142
|
required: true
|
|
143
143
|
body:
|
|
144
144
|
type: string
|
|
145
|
-
description: "
|
|
145
|
+
description: "Email body text. On `forward`, an optional note prepended ABOVE the forwarded message."
|
|
146
146
|
|
|
147
147
|
# --- Inbox management ---
|
|
148
148
|
|
|
@@ -165,7 +165,7 @@ operations:
|
|
|
165
165
|
params:
|
|
166
166
|
messageId:
|
|
167
167
|
type: string
|
|
168
|
-
description: "
|
|
168
|
+
description: "Email message ID"
|
|
169
169
|
required: true
|
|
170
170
|
maps_to: id
|
|
171
171
|
defaults:
|
|
@@ -178,7 +178,7 @@ operations:
|
|
|
178
178
|
params:
|
|
179
179
|
messageId:
|
|
180
180
|
type: string
|
|
181
|
-
description: "
|
|
181
|
+
description: "Email message ID"
|
|
182
182
|
required: true
|
|
183
183
|
maps_to: id
|
|
184
184
|
defaults:
|
|
@@ -191,11 +191,11 @@ operations:
|
|
|
191
191
|
params:
|
|
192
192
|
messageId:
|
|
193
193
|
type: string
|
|
194
|
-
description: "
|
|
194
|
+
description: "Email message ID"
|
|
195
195
|
required: true
|
|
196
196
|
filename:
|
|
197
197
|
type: string
|
|
198
|
-
description: "
|
|
198
|
+
description: "Attachment filename, exactly as it appears in the `read` response (e.g. 'invoice_template.md')"
|
|
199
199
|
required: true
|
|
200
200
|
defaults:
|
|
201
201
|
userId: me
|
|
@@ -207,11 +207,11 @@ operations:
|
|
|
207
207
|
params:
|
|
208
208
|
messageId:
|
|
209
209
|
type: string
|
|
210
|
-
description: "
|
|
210
|
+
description: "Email message ID"
|
|
211
211
|
required: true
|
|
212
212
|
filename:
|
|
213
213
|
type: string
|
|
214
|
-
description: "
|
|
214
|
+
description: "Attachment filename, exactly as it appears in the `read` response (e.g. 'invoice_template.md')"
|
|
215
215
|
required: true
|
|
216
216
|
defaults:
|
|
217
217
|
userId: me
|
|
@@ -223,7 +223,7 @@ operations:
|
|
|
223
223
|
params:
|
|
224
224
|
messageId:
|
|
225
225
|
type: string
|
|
226
|
-
description: "
|
|
226
|
+
description: "Email message ID"
|
|
227
227
|
required: true
|
|
228
228
|
maps_to: id
|
|
229
229
|
addLabelIds:
|
|
@@ -253,11 +253,11 @@ operations:
|
|
|
253
253
|
params:
|
|
254
254
|
query:
|
|
255
255
|
type: string
|
|
256
|
-
description: "Gmail search query
|
|
256
|
+
description: "Gmail search query (e.g. \"from:alice subject:meeting has:attachment\")"
|
|
257
257
|
maps_to: q
|
|
258
258
|
maxResults:
|
|
259
259
|
type: number
|
|
260
|
-
description: "Max
|
|
260
|
+
description: "Max results (default: 10, max: 50)"
|
|
261
261
|
default: 10
|
|
262
262
|
max: 50
|
|
263
263
|
defaults:
|
|
@@ -13,10 +13,10 @@ operations:
|
|
|
13
13
|
params:
|
|
14
14
|
filter:
|
|
15
15
|
type: string
|
|
16
|
-
description: "EBNF filter
|
|
16
|
+
description: "EBNF filter. On `listConferences`, e.g. 'space.meeting_code = \"abc-mnop-xyz\"' or 'start_time>=\"2026-01-01T00:00:00Z\"'. On `listParticipants`, e.g. 'latest_end_time IS NULL' for active participants."
|
|
17
17
|
maxResults:
|
|
18
18
|
type: number
|
|
19
|
-
description: "Max
|
|
19
|
+
description: "Max results per page, as default/ceiling. Differs by operation: `listConferences` 25/100, `listParticipants` 100/250, `listTranscriptEntries` 100/100. (Google's own default for transcript entries is 10; this tool raises it.)"
|
|
20
20
|
default: 25
|
|
21
21
|
max: 100
|
|
22
22
|
maps_to: pageSize
|
|
@@ -28,7 +28,7 @@ operations:
|
|
|
28
28
|
params:
|
|
29
29
|
conferenceId:
|
|
30
30
|
type: string
|
|
31
|
-
description: "Conference record ID (from listConferences)"
|
|
31
|
+
description: "Conference record ID (from `listConferences`)"
|
|
32
32
|
required: true
|
|
33
33
|
maps_to: name
|
|
34
34
|
|
|
@@ -41,15 +41,15 @@ operations:
|
|
|
41
41
|
params:
|
|
42
42
|
conferenceId:
|
|
43
43
|
type: string
|
|
44
|
-
description: "Conference record ID"
|
|
44
|
+
description: "Conference record ID (from `listConferences`)"
|
|
45
45
|
required: true
|
|
46
46
|
maps_to: parent
|
|
47
47
|
filter:
|
|
48
48
|
type: string
|
|
49
|
-
description: "
|
|
49
|
+
description: "EBNF filter. On `listConferences`, e.g. 'space.meeting_code = \"abc-mnop-xyz\"' or 'start_time>=\"2026-01-01T00:00:00Z\"'. On `listParticipants`, e.g. 'latest_end_time IS NULL' for active participants."
|
|
50
50
|
maxResults:
|
|
51
51
|
type: number
|
|
52
|
-
description: "Max
|
|
52
|
+
description: "Max results per page, as default/ceiling. Differs by operation: `listConferences` 25/100, `listParticipants` 100/250, `listTranscriptEntries` 100/100. (Google's own default for transcript entries is 10; this tool raises it.)"
|
|
53
53
|
default: 100
|
|
54
54
|
max: 250
|
|
55
55
|
maps_to: pageSize
|
|
@@ -63,7 +63,7 @@ operations:
|
|
|
63
63
|
params:
|
|
64
64
|
conferenceId:
|
|
65
65
|
type: string
|
|
66
|
-
description: "Conference record ID"
|
|
66
|
+
description: "Conference record ID (from `listConferences`)"
|
|
67
67
|
required: true
|
|
68
68
|
maps_to: parent
|
|
69
69
|
|
|
@@ -74,7 +74,7 @@ operations:
|
|
|
74
74
|
params:
|
|
75
75
|
transcriptName:
|
|
76
76
|
type: string
|
|
77
|
-
description: "Transcript resource name (from listTranscripts)"
|
|
77
|
+
description: "Transcript resource name (from `listTranscripts`, e.g. conferenceRecords/.../transcripts/...)"
|
|
78
78
|
required: true
|
|
79
79
|
maps_to: name
|
|
80
80
|
|
|
@@ -85,12 +85,12 @@ operations:
|
|
|
85
85
|
params:
|
|
86
86
|
transcriptName:
|
|
87
87
|
type: string
|
|
88
|
-
description: "Transcript resource name (e.g. conferenceRecords/.../transcripts/...)"
|
|
88
|
+
description: "Transcript resource name (from `listTranscripts`, e.g. conferenceRecords/.../transcripts/...)"
|
|
89
89
|
required: true
|
|
90
90
|
maps_to: parent
|
|
91
91
|
maxResults:
|
|
92
92
|
type: number
|
|
93
|
-
description: "Max
|
|
93
|
+
description: "Max results per page, as default/ceiling. Differs by operation: `listConferences` 25/100, `listParticipants` 100/250, `listTranscriptEntries` 100/100. (Google's own default for transcript entries is 10; this tool raises it.)"
|
|
94
94
|
default: 100
|
|
95
95
|
max: 100
|
|
96
96
|
maps_to: pageSize
|
|
@@ -104,7 +104,7 @@ operations:
|
|
|
104
104
|
params:
|
|
105
105
|
conferenceId:
|
|
106
106
|
type: string
|
|
107
|
-
description: "Conference record ID"
|
|
107
|
+
description: "Conference record ID (from `listConferences`)"
|
|
108
108
|
required: true
|
|
109
109
|
maps_to: parent
|
|
110
110
|
|
|
@@ -128,7 +128,7 @@ operations:
|
|
|
128
128
|
params:
|
|
129
129
|
conferenceId:
|
|
130
130
|
type: string
|
|
131
|
-
description: "Conference record ID (from listConferences)"
|
|
131
|
+
description: "Conference record ID (from `listConferences`)"
|
|
132
132
|
required: true
|
|
133
133
|
pageToken:
|
|
134
134
|
type: string
|
|
@@ -143,7 +143,7 @@ operations:
|
|
|
143
143
|
params:
|
|
144
144
|
conferenceId:
|
|
145
145
|
type: string
|
|
146
|
-
description: "Conference record ID"
|
|
146
|
+
description: "Conference record ID (from `listConferences`)"
|
|
147
147
|
required: true
|
|
148
148
|
maps_to: parent
|
|
149
149
|
|
|
@@ -157,3 +157,81 @@ operations:
|
|
|
157
157
|
description: "Smart note resource name (from listSmartNotes)"
|
|
158
158
|
required: true
|
|
159
159
|
maps_to: name
|
|
160
|
+
|
|
161
|
+
# --- Meeting spaces ---
|
|
162
|
+
#
|
|
163
|
+
# A space is a standalone meeting link, not attached to a calendar event. For a link on
|
|
164
|
+
# an event, use `manage_calendar` with `meet: true` — that goes through Calendar and
|
|
165
|
+
# keeps the two together.
|
|
166
|
+
#
|
|
167
|
+
# `createSpace` is the first manage_meet operation that WRITES. Everything above reads
|
|
168
|
+
# conference records, which `meetings.space.readonly` covers on its own; creating a
|
|
169
|
+
# space needs `meetings.space.created`, which a read-only account does not hold
|
|
170
|
+
# (ADR-202). Both handlers are custom: spaces.create declares no parameters at all, so
|
|
171
|
+
# everything travels in the body, and the response nests the joinable URL.
|
|
172
|
+
|
|
173
|
+
createSpace:
|
|
174
|
+
type: action
|
|
175
|
+
description: "create a standalone Google Meet link (not attached to a calendar event)"
|
|
176
|
+
resource: spaces.create
|
|
177
|
+
params:
|
|
178
|
+
accessType:
|
|
179
|
+
type: string
|
|
180
|
+
enum: ["OPEN", "TRUSTED", "RESTRICTED"]
|
|
181
|
+
description: "Who can join without knocking. OPEN: anyone with the link. TRUSTED (default): people in your organization, plus invited guests. RESTRICTED: invited guests only."
|
|
182
|
+
moderation:
|
|
183
|
+
type: boolean
|
|
184
|
+
description: "Turn on host controls — the host admits guests and manages who can present or chat."
|
|
185
|
+
|
|
186
|
+
activeConferences:
|
|
187
|
+
type: list
|
|
188
|
+
description: "list conferences happening RIGHT NOW across your meetings"
|
|
189
|
+
resource: conferenceRecords.list
|
|
190
|
+
params:
|
|
191
|
+
maxResults:
|
|
192
|
+
type: number
|
|
193
|
+
description: "Max results per page, as default/ceiling. Differs by operation: `listConferences` 25/100, `listParticipants` 100/250, `listTranscriptEntries` 100/100. (Google's own default for transcript entries is 10; this tool raises it.)"
|
|
194
|
+
default: 25
|
|
195
|
+
max: 100
|
|
196
|
+
|
|
197
|
+
getSpace:
|
|
198
|
+
type: detail
|
|
199
|
+
description: "look up a meeting space by its meeting code or resource name"
|
|
200
|
+
resource: spaces.get
|
|
201
|
+
params:
|
|
202
|
+
space:
|
|
203
|
+
type: string
|
|
204
|
+
description: "Meeting code (the abc-mnop-xyz part of a Meet link) or a full spaces/... resource name"
|
|
205
|
+
required: true
|
|
206
|
+
maps_to: name
|
|
207
|
+
|
|
208
|
+
updateSpace:
|
|
209
|
+
type: action
|
|
210
|
+
description: "change who can join a meeting space, or turn host controls on or off"
|
|
211
|
+
resource: spaces.patch
|
|
212
|
+
params:
|
|
213
|
+
space:
|
|
214
|
+
type: string
|
|
215
|
+
description: "Meeting code (the abc-mnop-xyz part of a Meet link) or a full spaces/... resource name"
|
|
216
|
+
required: true
|
|
217
|
+
maps_to: name
|
|
218
|
+
accessType:
|
|
219
|
+
type: string
|
|
220
|
+
enum: ["OPEN", "TRUSTED", "RESTRICTED"]
|
|
221
|
+
description: "Who can join without knocking. OPEN: anyone with the link. TRUSTED (default): people in your organization, plus invited guests. RESTRICTED: invited guests only."
|
|
222
|
+
moderation:
|
|
223
|
+
type: boolean
|
|
224
|
+
description: "Turn on host controls — the host admits guests and manages who can present or chat."
|
|
225
|
+
|
|
226
|
+
# Ends the meeting for EVERYONE currently in it. There is no undo and no warning to
|
|
227
|
+
# participants; the call returns an empty body whether or not anyone was in the room.
|
|
228
|
+
endActiveConference:
|
|
229
|
+
type: action
|
|
230
|
+
description: "end the call happening in a space right now, disconnecting everyone in it"
|
|
231
|
+
resource: spaces.endActiveConference
|
|
232
|
+
params:
|
|
233
|
+
space:
|
|
234
|
+
type: string
|
|
235
|
+
description: "Meeting code (the abc-mnop-xyz part of a Meet link) or a full spaces/... resource name"
|
|
236
|
+
required: true
|
|
237
|
+
maps_to: name
|