@@ -28,6 +28,13 @@ export interface GoogleConfig {
2828 isEmailGroup ?: boolean ;
2929 /** If true, members of this role get a Google Workspace user account */
3030 provisionUser ?: boolean ;
31+ /**
32+ * Opt-in for groups that intentionally include non-@modelcontextprotocol.io
33+ * members. Defaults to false. Must stay declared on the GroupSettings
34+ * resource: the provider resets an omitted field to false on every apply,
35+ * after which Google silently purges external members (#133 incident).
36+ */
37+ allowExternalMembers ?: boolean ;
3138}
3239
3340/**
@@ -105,7 +112,7 @@ export const ROLES: readonly Role[] = [
105112 discord : { role : 'maintainers (synced)' } ,
106113 // GWS user accounts are opt-in: maintainers add firstName/lastName/googleEmailPrefix
107114 // to their entry in users.ts via PR to get an @modelcontextprotocol .io account
108- google : { group : 'maintainers' , provisionUser : true } ,
115+ google : { group : 'maintainers' , provisionUser : true , allowExternalMembers : true } ,
109116 } ,
110117 {
111118 id : ROLE_IDS . DOCS_MAINTAINERS ,
@@ -136,7 +143,7 @@ export const ROLES: readonly Role[] = [
136143 description : 'Official registry builders and maintainers' ,
137144 github : { team : 'registry-wg' , parent : ROLE_IDS . WORKING_GROUPS } ,
138145 discord : { role : 'registry maintainers (synced)' } ,
139- google : { group : 'registry-wg' , provisionUser : true } ,
146+ google : { group : 'registry-wg' , provisionUser : true , allowExternalMembers : true } ,
140147 } ,
141148 {
142149 id : ROLE_IDS . REGISTRY_COLLABORATORS ,
@@ -394,7 +401,7 @@ export const ROLES: readonly Role[] = [
394401 {
395402 id : ROLE_IDS . ANTITRUST ,
396403 description : 'Antitrust compliance contacts' ,
397- google : { group : 'antitrust' , isEmailGroup : true } ,
404+ google : { group : 'antitrust' , isEmailGroup : true , allowExternalMembers : true } ,
398405 // Google only
399406 } ,
400407 {
@@ -406,7 +413,7 @@ export const ROLES: readonly Role[] = [
406413 {
407414 id : ROLE_IDS . CATCH_ALL ,
408415 description : 'Catch-all email group' ,
409- google : { group : 'catch-all' , isEmailGroup : true } ,
416+ google : { group : 'catch-all' , isEmailGroup : true , allowExternalMembers : true } ,
410417 // Google only
411418 } ,
412419] as const ;
0 commit comments